Submodule qtbase 4e158f6b..8d30c21c: diff --git a/qtbase/mkspecs/common/android/qplatformdefs.h b/qtbase/mkspecs/common/android/qplatformdefs.h index f75bc4093b..2bd59410d4 100644 --- a/qtbase/mkspecs/common/android/qplatformdefs.h +++ b/qtbase/mkspecs/common/android/qplatformdefs.h @@ -144,11 +144,7 @@ #define QT_SIGNAL_ARGS int #define QT_SIGNAL_IGNORE SIG_IGN -#if defined(__GLIBC__) && (__GLIBC__ >= 2) #define QT_SOCKLEN_T socklen_t -#else -#define QT_SOCKLEN_T int -#endif #if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500) #define QT_SNPRINTF ::snprintf diff --git a/qtbase/mkspecs/linux-clang/qplatformdefs.h b/qtbase/mkspecs/linux-clang/qplatformdefs.h index a818d973f0..c1ab72fbc6 100644 --- a/qtbase/mkspecs/linux-clang/qplatformdefs.h +++ b/qtbase/mkspecs/linux-clang/qplatformdefs.h @@ -79,14 +79,6 @@ #define QT_USE_XOPEN_LFS_EXTENSIONS #include "../common/posix/qplatformdefs.h" -#undef QT_SOCKLEN_T - -#if defined(__GLIBC__) && (__GLIBC__ >= 2) -#define QT_SOCKLEN_T socklen_t -#else -#define QT_SOCKLEN_T int -#endif - #if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500) #define QT_SNPRINTF ::snprintf #define QT_VSNPRINTF ::vsnprintf diff --git a/qtbase/mkspecs/linux-g++/qplatformdefs.h b/qtbase/mkspecs/linux-g++/qplatformdefs.h index 13523f0702..4d2750d9ec 100644 --- a/qtbase/mkspecs/linux-g++/qplatformdefs.h +++ b/qtbase/mkspecs/linux-g++/qplatformdefs.h @@ -79,14 +79,6 @@ #define QT_USE_XOPEN_LFS_EXTENSIONS #include "../common/posix/qplatformdefs.h" -#undef QT_SOCKLEN_T - -#if defined(__GLIBC__) && (__GLIBC__ < 2) -#define QT_SOCKLEN_T int -#else -#define QT_SOCKLEN_T socklen_t -#endif - #if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500) #define QT_SNPRINTF ::snprintf #define QT_VSNPRINTF ::vsnprintf diff --git a/qtbase/mkspecs/linux-llvm/qplatformdefs.h b/qtbase/mkspecs/linux-llvm/qplatformdefs.h index dc750ab1ef..d3cc39b47f 100644 --- a/qtbase/mkspecs/linux-llvm/qplatformdefs.h +++ b/qtbase/mkspecs/linux-llvm/qplatformdefs.h @@ -80,14 +80,6 @@ #define QT_USE_XOPEN_LFS_EXTENSIONS #include "../common/posix/qplatformdefs.h" -#undef QT_SOCKLEN_T - -#if defined(__GLIBC__) && (__GLIBC__ >= 2) -#define QT_SOCKLEN_T socklen_t -#else -#define QT_SOCKLEN_T int -#endif - #if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500) #define QT_SNPRINTF ::snprintf #define QT_VSNPRINTF ::vsnprintf diff --git a/qtbase/mkspecs/linux-lsb-g++/qplatformdefs.h b/qtbase/mkspecs/linux-lsb-g++/qplatformdefs.h index 4c4e53da2a..83baffb3e3 100644 --- a/qtbase/mkspecs/linux-lsb-g++/qplatformdefs.h +++ b/qtbase/mkspecs/linux-lsb-g++/qplatformdefs.h @@ -85,16 +85,9 @@ #include "../common/posix/qplatformdefs.h" #undef QT_OPEN_LARGEFILE -#undef QT_SOCKLEN_T #define QT_OPEN_LARGEFILE 0 -#if defined(__GLIBC__) && (__GLIBC__ >= 2) -#define QT_SOCKLEN_T socklen_t -#else -#define QT_SOCKLEN_T int -#endif - #ifndef SIOCGIFBRDADDR # define SIOCGIFBRDADDR 0x8919 #endif diff --git a/qtbase/mkspecs/lynxos-g++/qplatformdefs.h b/qtbase/mkspecs/lynxos-g++/qplatformdefs.h index 4339ea2b23..6007af0055 100644 --- a/qtbase/mkspecs/lynxos-g++/qplatformdefs.h +++ b/qtbase/mkspecs/lynxos-g++/qplatformdefs.h @@ -72,14 +72,6 @@ #include "../common/posix/qplatformdefs.h" -#undef QT_SOCKLEN_T - -#if defined(__GLIBC__) && (__GLIBC__ >= 2) -#define QT_SOCKLEN_T socklen_t -#else -#define QT_SOCKLEN_T int -#endif - #if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500) #define QT_SNPRINTF ::snprintf #define QT_VSNPRINTF ::vsnprintf diff --git a/qtbase/src/3rdparty/angle/src/libANGLE/HandleAllocator.cpp b/qtbase/src/3rdparty/angle/src/libANGLE/HandleAllocator.cpp index c3c184258f..32af3f8f29 100644 --- a/qtbase/src/3rdparty/angle/src/libANGLE/HandleAllocator.cpp +++ b/qtbase/src/3rdparty/angle/src/libANGLE/HandleAllocator.cpp @@ -10,6 +10,7 @@ #include "libANGLE/HandleAllocator.h" #include +#include #include "common/debug.h" diff --git a/qtbase/src/corelib/global/qglobal.cpp b/qtbase/src/corelib/global/qglobal.cpp index 5ad82c259d..ecf7b1efaa 100644 --- a/qtbase/src/corelib/global/qglobal.cpp +++ b/qtbase/src/corelib/global/qglobal.cpp @@ -97,6 +97,10 @@ # include #endif +#if defined(Q_OS_MACOS) +#include +#endif + #ifdef Q_OS_UNIX #include #include @@ -2133,6 +2137,15 @@ QT_WARNING_POP static const char *osVer_helper(QOperatingSystemVersion version = QOperatingSystemVersion::current()) { #ifdef Q_OS_MACOS + if (version.majorVersion() == 13) + return "Ventura"; + if (version.majorVersion() == 12) + return "Monterey"; + // Compare against predefined constant to handle 10.16/11.0 + if (QVersionNumber(QOperatingSystemVersion::MacOSBigSur.majorVersion(), + QOperatingSystemVersion::MacOSBigSur.minorVersion(), QOperatingSystemVersion::MacOSBigSur.microVersion()).isPrefixOf( + QVersionNumber(version.majorVersion(), version.minorVersion(), version.microVersion()))) + return "Big Sur"; if (version.majorVersion() == 10) { switch (version.minorVersion()) { case 9: @@ -2147,13 +2160,15 @@ static const char *osVer_helper(QOperatingSystemVersion version = QOperatingSyst return "High Sierra"; case 14: return "Mojave"; + case 15: + return "Catalina"; } } // unknown, future version #else Q_UNUSED(version); #endif - return 0; + return nullptr; } #endif @@ -2278,7 +2293,7 @@ static const char *osVer_helper(QOperatingSystemVersion version = QOperatingSyst } #undef Q_WINVER // unknown, future version - return 0; + return nullptr; } #endif diff --git a/qtbase/src/corelib/global/qglobal.h b/qtbase/src/corelib/global/qglobal.h index 450c1e586a..ff7167d9cc 100644 --- a/qtbase/src/corelib/global/qglobal.h +++ b/qtbase/src/corelib/global/qglobal.h @@ -307,6 +307,8 @@ typedef double qreal; # define QT_DEPRECATED_CONSTRUCTOR # undef Q_DECL_ENUMERATOR_DEPRECATED # define Q_DECL_ENUMERATOR_DEPRECATED +# undef Q_DECL_ENUMERATOR_DEPRECATED_X +# define Q_DECL_ENUMERATOR_DEPRECATED_X(ignored) #endif #ifndef QT_DEPRECATED_WARNINGS_SINCE diff --git a/qtbase/src/corelib/global/qlogging.cpp b/qtbase/src/corelib/global/qlogging.cpp index 292116cc47..0f253d4a27 100644 --- a/qtbase/src/corelib/global/qlogging.cpp +++ b/qtbase/src/corelib/global/qlogging.cpp @@ -189,6 +189,17 @@ static int checked_var_value(const char *varname) return ok ? value : 1; } +static bool is_fatal_count_down(QAtomicInt &n) +{ + // it's fatal if the current value is exactly 1, + // otherwise decrement if it's non-zero + + int v = n.loadRelaxed(); + while (v != 0 && !n.testAndSetRelaxed(v, v - 1, v)) + ; + return v == 1; // we exited the loop, so either v == 0 or CAS succeeded to set n from v to v-1 +} + static bool isFatal(QtMsgType msgType) { if (msgType == QtFatalMsg) @@ -196,18 +207,12 @@ static bool isFatal(QtMsgType msgType) if (msgType == QtCriticalMsg) { static QAtomicInt fatalCriticals = checked_var_value("QT_FATAL_CRITICALS"); - - // it's fatal if the current value is exactly 1, - // otherwise decrement if it's non-zero - return fatalCriticals.loadRelaxed() && fatalCriticals.fetchAndAddRelaxed(-1) == 1; + return is_fatal_count_down(fatalCriticals); } if (msgType == QtWarningMsg || msgType == QtCriticalMsg) { static QAtomicInt fatalWarnings = checked_var_value("QT_FATAL_WARNINGS"); - - // it's fatal if the current value is exactly 1, - // otherwise decrement if it's non-zero - return fatalWarnings.loadRelaxed() && fatalWarnings.fetchAndAddRelaxed(-1) == 1; + return is_fatal_count_down(fatalWarnings); } return false; diff --git a/qtbase/src/corelib/global/qnamespace.h b/qtbase/src/corelib/global/qnamespace.h index deab11f729..486b63fa3f 100644 --- a/qtbase/src/corelib/global/qnamespace.h +++ b/qtbase/src/corelib/global/qnamespace.h @@ -1867,7 +1867,7 @@ public: QT_Q_ENUM(TimerType) QT_Q_ENUM(ScrollPhase) QT_Q_ENUM(MouseEventSource) - QT_Q_FLAG(MouseEventFlag) + QT_Q_FLAG(MouseEventFlags) QT_Q_ENUM(ChecksumType) QT_Q_ENUM(HighDpiScaleFactorRoundingPolicy) QT_Q_ENUM(TabFocusBehavior) diff --git a/qtbase/src/corelib/io/qfilesystemengine_win.cpp b/qtbase/src/corelib/io/qfilesystemengine_win.cpp index 002f720926..e6f118a5c4 100644 --- a/qtbase/src/corelib/io/qfilesystemengine_win.cpp +++ b/qtbase/src/corelib/io/qfilesystemengine_win.cpp @@ -664,14 +664,14 @@ QFileSystemEntry QFileSystemEngine::absoluteName(const QFileSystemEntry &entry) return QFileSystemEntry(ret, QFileSystemEntry::FromInternalPath()); } -#if defined(Q_CC_MINGW) && WINVER < 0x0602 // Windows 8 onwards +#if defined(Q_CC_MINGW) && WINVER < 0x0602 && _WIN32_WINNT < _WIN32_WINNT_WIN8 // Windows 8 onwards typedef struct _FILE_ID_INFO { ULONGLONG VolumeSerialNumber; FILE_ID_128 FileId; } FILE_ID_INFO, *PFILE_ID_INFO; -#endif // if defined (Q_CC_MINGW) && WINVER < 0x0602 +#endif // if defined(Q_CC_MINGW) && WINVER < 0x0602 && _WIN32_WINNT < _WIN32_WINNT_WIN8 // File ID for Windows up to version 7 and FAT32 drives static inline QByteArray fileId(HANDLE handle) diff --git a/qtbase/src/corelib/io/qfilesystemwatcher_inotify.cpp b/qtbase/src/corelib/io/qfilesystemwatcher_inotify.cpp index 94d9d06bcb..27e0b13b0b 100644 --- a/qtbase/src/corelib/io/qfilesystemwatcher_inotify.cpp +++ b/qtbase/src/corelib/io/qfilesystemwatcher_inotify.cpp @@ -366,7 +366,9 @@ void QInotifyFileSystemWatcherEngine::readFromInotify() // qDebug("QInotifyFileSystemWatcherEngine::readFromInotify"); int buffSize = 0; - ioctl(inotifyFd, FIONREAD, (char *) &buffSize); + if (ioctl(inotifyFd, FIONREAD, (char *) &buffSize) == -1 || buffSize == 0) + return; + QVarLengthArray buffer(buffSize); buffSize = read(inotifyFd, buffer.data(), buffSize); char *at = buffer.data(); diff --git a/qtbase/src/corelib/io/qfsfileengine.cpp b/qtbase/src/corelib/io/qfsfileengine.cpp index 3042eac2f0..a862ce9166 100644 --- a/qtbase/src/corelib/io/qfsfileengine.cpp +++ b/qtbase/src/corelib/io/qfsfileengine.cpp @@ -361,7 +361,7 @@ bool QFSFileEnginePrivate::openFd(QIODevice::OpenMode openMode, int fd) // Seek to the end when in Append mode. if (openMode & QFile::Append) { - int ret; + QT_OFF_T ret; do { ret = QT_LSEEK(fd, 0, SEEK_END); } while (ret == -1 && errno == EINTR); diff --git a/qtbase/src/corelib/io/qfsfileengine_unix.cpp b/qtbase/src/corelib/io/qfsfileengine_unix.cpp index 4610e9306c..65e921c15a 100644 --- a/qtbase/src/corelib/io/qfsfileengine_unix.cpp +++ b/qtbase/src/corelib/io/qfsfileengine_unix.cpp @@ -141,7 +141,7 @@ bool QFSFileEnginePrivate::nativeOpen(QIODevice::OpenMode openMode) // Seek to the end when in Append mode. if (flags & QFile::Append) { - int ret; + QT_OFF_T ret; do { ret = QT_LSEEK(fd, 0, SEEK_END); } while (ret == -1 && errno == EINTR); diff --git a/qtbase/src/corelib/itemmodels/qabstractitemmodel.cpp b/qtbase/src/corelib/itemmodels/qabstractitemmodel.cpp index 997a634e76..1c1ca7394d 100644 --- a/qtbase/src/corelib/itemmodels/qabstractitemmodel.cpp +++ b/qtbase/src/corelib/itemmodels/qabstractitemmodel.cpp @@ -52,6 +52,8 @@ #include #include +#include + #include QT_BEGIN_NAMESPACE @@ -213,7 +215,7 @@ bool QPersistentModelIndex::operator<(const QPersistentModelIndex &other) const if (d && other.d) return d->index < other.d->index; - return d < other.d; + return std::less<>{}(d, other.d); } /*! diff --git a/qtbase/src/corelib/itemmodels/qsortfilterproxymodel.cpp b/qtbase/src/corelib/itemmodels/qsortfilterproxymodel.cpp index 3d7fe43cd3..f2871a2da7 100644 --- a/qtbase/src/corelib/itemmodels/qsortfilterproxymodel.cpp +++ b/qtbase/src/corelib/itemmodels/qsortfilterproxymodel.cpp @@ -939,8 +939,9 @@ void QSortFilterProxyModelPrivate::insert_source_items( q->beginInsertColumns(proxy_parent, proxy_start, proxy_end); } - for (int i = 0; i < source_items.size(); ++i) - proxy_to_source.insert(proxy_start + i, source_items.at(i)); + // TODO: use the range QList::insert() overload once it is implemented (QTBUG-58633). + proxy_to_source.insert(proxy_start, source_items.size(), 0); + std::copy(source_items.cbegin(), source_items.cend(), proxy_to_source.begin() + proxy_start); build_source_to_proxy_mapping(proxy_to_source, source_to_proxy); @@ -3131,8 +3132,9 @@ bool QSortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex & if (d->filter_data.isEmpty()) return true; + + int column_count = d->model->columnCount(source_parent); if (d->filter_column == -1) { - int column_count = d->model->columnCount(source_parent); for (int column = 0; column < column_count; ++column) { QModelIndex source_index = d->model->index(source_row, column, source_parent); QString key = d->model->data(source_index, d->filter_role).toString(); @@ -3141,9 +3143,10 @@ bool QSortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex & } return false; } - QModelIndex source_index = d->model->index(source_row, d->filter_column, source_parent); - if (!source_index.isValid()) // the column may not exist + + if (d->filter_column >= column_count) // the column may not exist return true; + QModelIndex source_index = d->model->index(source_row, d->filter_column, source_parent); QString key = d->model->data(source_index, d->filter_role).toString(); return d->filter_data.hasMatch(key); } diff --git a/qtbase/src/corelib/kernel/qobject_p.h b/qtbase/src/corelib/kernel/qobject_p.h index 13ffb88999..325a974f30 100644 --- a/qtbase/src/corelib/kernel/qobject_p.h +++ b/qtbase/src/corelib/kernel/qobject_p.h @@ -220,7 +220,7 @@ public: s = s->previous; } } - Sender *previous; + Sender *previous = nullptr; QObject *receiver; QObject *sender; int signal; diff --git a/qtbase/src/corelib/kernel/qtranslator.cpp b/qtbase/src/corelib/kernel/qtranslator.cpp index bdcd016630..e4375e7e40 100644 --- a/qtbase/src/corelib/kernel/qtranslator.cpp +++ b/qtbase/src/corelib/kernel/qtranslator.cpp @@ -907,7 +907,7 @@ static QString getMessage(const uchar *m, const uchar *end, const char *context, goto end; case Tag_Translation: { int len = read32(m); - if (len % 1) + if (len & 1) return QString(); m += 4; if (!numerus--) { diff --git a/qtbase/src/corelib/mimetypes/mime/packages/freedesktop.org.xml b/qtbase/src/corelib/mimetypes/mime/packages/freedesktop.org.xml index d384ffb2d5..e73929c9bb 100644 --- a/qtbase/src/corelib/mimetypes/mime/packages/freedesktop.org.xml +++ b/qtbase/src/corelib/mimetypes/mime/packages/freedesktop.org.xml @@ -1,183 +1,177 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]> + - Atari 2600 - Atari 2600 - Atari 2600 - Atari 2600 - Atari 2600 - Atari 2600 - Atari 2600 - Atari 2600 - Atari 2600 - Atari 2600 - Atari 2600 - Atari 2600 - אטארי 2600 - Atari 2600 - Atari 2600 - Atari 2600 - Atari 2600 - Atari 2600 - Atari 2600 - Atari 2600 - Atari 2600 - Atari 2600 - Atari 2600 - Atari 2600 - Атари 2600 - Atari 2600 - Atari 2600 - Atari 2600 - 雅达利 2600 - Atari 2600 + Atari 2600 ROM + ROM — Atari 2600 + ROM d'Atari 2600 + Atari 2600-ROM + Atari 2600 ROM + Atari 2600 ROM + ROM de Atari 2600 + Atari 2600 ROMa + Atari 2600 ROM + ROM Atari 2600 + ROM Atari 2600 + Atari 2600 ROM + Atari 2600 ROM + Atari 2600 ROM + ROM Atari 2600 + Atari 2600 ROM + 아타리 2600 롬 + Plik ROM konsoli Atari 2600 + ROM Atari 2600 + ROM do Atari 2600 + Atari 2600 ROM + Atari 2600-rom + Atari 2600 ROM + Atari 2600 ROM + 雅达利 2600 ROM + 雅達利 2600 ROM - Atari 7800 - Atari 7800 - Atari 7800 - Atari 7800 - Atari 7800 - Atari 7800 - Atari 7800 - Atari 7800 - Atari 7800 - Atari 7800 - Atari 7800 - Atari 7800 - אטארי 7800 - Atari 7800 - Atari 7800 - Atari 7800 - Atari 7800 - Atari 7800 - Atari 7800 - Atari 7800 - Atari 7800 - Atari 7800 - Atari 7800 - Atari 7800 - Атари 7800 - Atari 7800 - Atari 7800 - Atari 7800 - 雅达利 7800 - Atari 7800 + Atari 7800 ROM + ROM — Atari 7800 + ROM d'Atari 7800 + Atari 7800-ROM + Atari 7800 ROM + Atari 7800 ROM + ROM de Atari 7800 + Atari 7800 ROMa + Atari 7800 ROM + ROM Atari 7800 + ROM Atari 7800 + Atari 7800 ROM + Atari 7800 ROM + Atari 7800 ROM + ROM Atari 7800 + Atari 7800 ROM + 아타리 7800 롬 + Plik ROM konsoli Atari 7800 + ROM Atari 7800 + ROM do Atari 7800 + Atari 7800 ROM + Atari 7800-rom + Atari 7800 ROM + Atari 7800 ROM + 雅达利 7800 ROM + 雅達利 7800 ROM - + - Atari Lynx - Atari Lynx - Atari Lynx - Atari Lynx - Atari Lynx - Atari Lynx - Atari Lynx - Atari Lynx - Atari Lynx - Atari Lynx - Atari Lynx - Atari Lynx - Atari Lynx - Atari Lynx - Atari Lynx - Atari Lynx - Atari Lynx - Atari Lynx - Atari Lynx - Atari Lynx - 雅达利 Lynx - Atari Lynx + Atari Lynx ROM + ROM — Atari Lynx + ROM d'Atari Lynx + Atari Lynx-ROM + Atari Lynx ROM + Atari Lynx ROM + ROM de Atari Lynx + Atari Lynx ROMa + Atari Lynx ROM + ROM Atari Lynx + ROM Atari Lynx + Atari Lynx ROM + Atari Lynx ROM + Atari Lynx ROM + ROM Atari Lynx + Atari Lynx ROM + 아타리 링스 롬 + Plik ROM konsoli Atari Lynx + ROM Atari Lynx + ROM do Atari Lynx + Atari Lynx ROM + Atari Lynx-rom + Atari Lynx ROM + Atari Lynx ROM + 雅达利 Lynx ROM + 雅達利 Lynx ROM - + ATK inset شكل ATK - Ustaŭka ATK - Сбор — ATK + Ustaŭka ATK + Притурка — ATK ATK inset vložka ATK ATK-indsættelse ATK-Inset Ένθετο ATK - ATK inset + ATK inset inserción ATK ATK sartzapena ATK-osio ATK innskot encart ATK + inset ATK intlis ATK conxunto ATK תוספת ATK @@ -197,7 +191,7 @@ encart ATK Wstawka ATK Suplemento ATK - Conjunto de entrada do ATK + Conjunto de entrada do ATK Inset ATK Вкладка ATK Vložka ATK @@ -208,8 +202,8 @@ ATK iç metni вкладка ATK Bộ dát ATK - ATK 嵌入对象 - ATK 內嵌 + ATK 嵌入对象 + ATK 內嵌 ATK Andrew Toolkit @@ -217,21 +211,23 @@ electronic book document + elektronieseboekdokument مستند كتاب إلكتروني documentu de llibru electrónicu - elektronnaja kniha + elektronnaja kniha Документ — електронна книга document de llibre electrònic dokument elektronické knihy elektronisk bogdokument Elektronisches Buch Έγγραφο ηλεκτρονικού βιβλίου - electronic book document + electronic book document documento de libro electrónico liburu elektronikoaren dokumentua elektroninen kirja elektroniskbóka skjal document livre électronique + document libri eletronic leabhar leictreonach documento de libro electrónico מסמך מסוג ספר אלקטרוני @@ -250,7 +246,7 @@ document libre electronic Dokument książki elektronicznej documento de livro eletrónico - Documento de livro eletrônico + Documento de livro eletrônico document carte electronică Электронная книга Dokument elektronickej knihy @@ -261,45 +257,77 @@ elektronik kitap belgesi документ електронної книги tài liệu cuốn sách điện tử - 电子书文档 - 電子書文件 + 电子书文档 + 電子書文件 - - - - + + + + + + Kindle book document + document de llibre Kindle + Kindle-bogdokument + Kindle-Buch-Dokument + Kindle book document + documento de libro de Kindle + Kindle book -asiakirja + document livre Kindle + Dokument Kindle knjige + Kindle könyvdokumentum + Dokumen buku Kindle + Documento libro Kindle + Kindle кітап құжаты + Kindle 책 문서 + Kindle knygos dokumentas + Dokument książki Kindle + documento de livro eletrónico do Kindle + Documento livro do Kindle + Электронная книга Kindle + Kindle-bokdokument + Kindle kitap belgesi + документ книги Kindle + Kindle 电子书文档 + Kindle 書文件 + + + + + Adobe Illustrator document + Adobe Illustrator-dokument مستند أدوبي المصور Documentu d'Adobe Illustrator - Dakument Adobe Illustrator + Dakument Adobe Illustrator Документ — Adobe Illustrator document d'Adobe Illustrator dokument Adobe Illustrator Adobe Illustrator-dokument Adobe-Illustrator-Dokument Έγγραφο Adobe Illustrator - Adobe Illustrator document + Adobe Illustrator document dokumento de Adobe Illustrator documento de Adobe Illustrator Adobe Illustrator dokumentua Adobe Illustrator -asiakirja Adobe Illustrator skjal document Adobe Illustrator + document Adobe Illustrator cáipéis Adobe Illustrator documento de Adobe Ilustrator מסמך Adobe Ill Adobe Illustrator dokument Adobe Illustrator-dokumentum Documento Adobe Illustrator - dokumen Adobe Illustrator + Dokumen Adobe Illustrator Documento Adobe Illustrator Adobe Illustrator ドキュメント Adobe Illustrator-ის დოკუმენტი @@ -314,7 +342,7 @@ document Adobe Illustrator Dokument Adobe Illustrator documento Adobe Illustrator - Documento do Adobe Illustrator + Documento do Adobe Illustrator Document Adobe Illustrator Документ Adobe Illustrator Dokument Adobe Illustrator @@ -325,18 +353,19 @@ Adobe Illustrator belgesi документ Adobe Illustrator Tài liệu Adobe Illustrator - Adobe Illustrator 文档 - Adobe Illustrator 文件 + Adobe Illustrator 文档 + Adobe Illustrator 文件 Macintosh BinHex-encoded file + Macintosh BinHex-geënkodeerde lêer ملف Macintosh BinHex مشفر Ficheru codificáu en BinHex de Machintosh Macintosh BinHex-kodlanmış fayl - Fajł Macintosh, BinHex-zakadavany + Fajł Macintosh, BinHex-zakadavany Файл — кодиран във формат BinHex за Macintosh fitxer amb codificació BinHex de Macintosh soubor kódovaný pomocí Macintosh BinHex @@ -344,20 +373,21 @@ Macintosh BinHex-kodet fil Macintosh-Datei (BinHex-kodiert) Αρχείο Macintosh κωδικοποίησης BinHex - Macintosh BinHex-encoded file + Macintosh BinHex-encoded file dosiero kodigita laŭ Macintosh BinHex archivo Macintosh codificado con BinHex Macintosh BinHex-ekin kodetutako fitxategia Macintosh BinHex -koodattu tiedosto Macintosh BinHex-bronglað fíla fichier codé Macintosh BinHex + file di Macintosh codificât BinHex comhad ionchódaithe le Macintosh BinHex ficheiro de Macintosh codificado con BinHex קובץ בקידוד Macintosh BinHex Macintosh BinHex-kôdirana datoteka Macintosh BinHex kódolású fájl File codificate in BinHex de Macintosh - berkas tersandi Macintosh BinHex + Berkas tersandi Macintosh BinHex File Macintosh codificato BinHex Macintosh BinHex エンコードファイル Macintosh BinHex кодталған файлы @@ -371,7 +401,7 @@ fichièr encodat Macintosh BinHex Zakodowany w BinHex plik Macintosh ficheiro codificado em BinHex de Macintosh - Arquivo do Macintosh codificado com BinHex + Arquivo do Macintosh codificado com BinHex Fișier codat Macintosh BinHex Файл (закодированный Macintosh BinHex) Súbor kódovaný pomocou Macintosh BinHex @@ -382,61 +412,40 @@ Macintosh BinHex-şifreli dosya файл закодований Macintosh BinHex Tập tin đã mã hoá BinHex của Macintosh - Macintosh BinHex 编码的文件 - Macintosh BinHex 編碼檔 + Macintosh BinHex 编码的文件 + Macintosh BinHex 編碼檔 - + - Mathematica Notebook - مذكرة رياضيات - Natatnik Mathematica - Тетрадка — Mathematica - llibreta de notes de Mathematica - sešit Mathematica - Mathematica Notebook - Mathematica-Dokument - Σημειωματάριο Mathematica - Mathematica Notebook - libreta de Mathematica - Mathematica Notebook - Mathematica-muistilehtiö - Mathematica skriviblokkur - carnet de notes Mathematica - leabhar nótaí Mathematica - notebook de Mathematica - מחברת מתמטיקה - Matematička bilježnica - Mathematica notesz - Carnet de notas Mathematica - Mathematica Notebook - Notebook Mathematica - Mathematica ノートブック - Mathematica Notebook - Mathematica 노트북 - Mathematica užrašinė - Mathematica bloknots - Mathematica notisblokk - Mathematica-notitieboek - Mathematica-notatbok - quasernet de nòtas Mathematica - Notatnik Mathematica - Bloco notas Mathematica - Caderno do Mathematica - Carnețel Mathematica - Mathematica Notebook - Zošit programu Mathematica - Datoteka dokumenta Mathematica - Notebook matematike - бележница Математике - Mathematica Notebook-dokument - Mathematica Defteri - математичний записник - Cuốn vở Mathematica - Mathematica 笔记本 - Mathematica Notebook + Mathematica Notebook file + Скицник — Mathematica + llibreta de Mathematica Notebook + Mathematica Notebook-fil + Mathematica-Notebook-Datei + Mathematica Notebook file + archivo de Mathematica Notebook + Mathematica Notebook fitxategia + Mathematica Notebook -tiedosto + fichier carnet Mathematica + Mathematica Notebook datoteka + Mathematica munkafüzetfájl + Berkas Mathematica Notebook + File Mathematica Notebook + Mathematica блокнот файлы + 매쓰매티카 기록장 파일 + Plik notatnika Mathematica + ficheiro de Mathematica Notebook do Wolfram + Arquivo Notebook do Mathematica + Файл Mathematica Notebook + Datoteka Mathematica Notebook + Mathematica-anteckningsboksfil + Mathematica Notebook dosyası + файл нотатника Mathematica + Mathematica 笔记本文件 + Mathematica 筆記本檔案 @@ -449,10 +458,11 @@ MathML document + MathML-dokument مستند MathML Documentu MathML MathML sənədi - Dakument MathML + Dakument MathML Документ — MathML document MathML dokument MathML @@ -460,20 +470,21 @@ MathML-dokument MathML-Dokument Έγγραφο MathML - MathML document + MathML document MathML-dokumento documento MathML MathML dokumentua MathML-asiakirja MathML skjal document MathML + document MathML cáipéis MathML documento de MathML מסמך MathML MathML dokument MathML-dokumentum Documento MathML - dokumen MathML + Dokumen MathML Documento MathML MathML ドキュメント MathML-ის დოკუმენტი @@ -488,7 +499,7 @@ document MathML Dokument MathML documento MathML - Documento do MathML + Documento do MathML Document MathML Документ MathML Dokument MathML @@ -499,8 +510,8 @@ MathML belgesi документ MathML Tài liệu MathML - MathML 文档 - MathML 文件 + MathML 文档 + MathML 文件 MathML Mathematical Markup Language @@ -510,20 +521,22 @@ mailbox file + mailbox-lêer ملف صندوق البريد - fajł paštovaj skryni + fajł paštovaj skryni Файл — Mailbox fitxer mailbox soubor mailbox postkassefil Mailbox-Datei Αρχείο mailbox - mailbox file + mailbox file archivo de buzón de correo mailbox fitxategia mailbox-tiedosto postkassafíla fichier boîte aux lettres + file mailbox comhad bhosca poist ficheiro de caixa de correo קובץ תיבת-דואר @@ -543,7 +556,7 @@ fichièr bóstia de letras Plik poczty (Mailbox) ficheiro de caixa de correio - Arquivo de caixa de correio + Arquivo de caixa de correio fișier căsuță poștală Файл почтового ящика Súbor mailbox @@ -551,20 +564,21 @@ File mailbox датотека поштанског сандучета brevlådefil - posta kutusu dosyası + mailbox dosyası файл поштової скриньки tập tin hộp thư - 邮箱文件 - 郵箱檔 + 邮箱文件 + 郵箱檔 - + Metalink file + Metalink-lêer ملف ميتالنك Ficheru d'enllaz meta Изтегляне — Metalink @@ -573,20 +587,21 @@ Metahenvisningsfil Metalink-Datei Αρχείο Metalink - Metalink file + Metalink file Metalink-dosiero archivo de Metalink Metaestekaren fitxategia Metalink-tiedosto Metalink fíla fichier metalink + file Metalink comhad Metalink ficheiro Metalink קובץ Metalink Datoteka meta poveznice Metalink fájl File Metalink - berkas Metalink + Berkas Metalink File Metalink Metalink ファイル Metalink файлы @@ -597,7 +612,7 @@ fichièr metalink Plik Metalink ficheiro Metalink - Arquivo Metalink + Arquivo Metalink Fișier Metalink Файл Metalink Súbor Metalink @@ -606,17 +621,18 @@ Metalink-fil Metalink dosyası файл метапосилання - Metalink 文件 - Metalink 檔案 + Metalink 文件 + Metalink 檔案 - + Metalink file + Metalink-lêer ملف ميتالنك Ficheru d'enllaz meta Изтегляне — Metalink @@ -625,20 +641,21 @@ Metahenvisningsfil Metalink-Datei Αρχείο Metalink - Metalink file + Metalink file Metalink-dosiero archivo de Metalink Metaestekaren fitxategia Metalink-tiedosto Metalink fíla fichier metalink + file Metalink comhad Metalink ficheiro Metalink קובץ Metalink Datoteka meta poveznice Metalink fájl File Metalink - berkas Metalink + Berkas Metalink File Metalink Metalink ファイル Metalink файлы @@ -649,7 +666,7 @@ fichièr metalink Plik Metalink ficheiro Metalink - Arquivo Metalink + Arquivo Metalink Fișier Metalink Файл Metalink Súbor Metalink @@ -658,33 +675,35 @@ Metalink-fil Metalink dosyası файл метапосилання - Metalink 文件 - Metalink 檔案 + Metalink 文件 + Metalink 檔案 - + unknown + onbekend مجهول desconozse - nieviadomy + nieviadomy Неизвестен тип desconegut neznámý ukendt unbekannt Άγνωστο - unknown + unknown nekonate desconocido ezezaguna tuntematon ókent inconnu + no cognossût anaithnid descoñecido לא ידוע @@ -706,7 +725,7 @@ desconegut Nieznany typ desconhecido - Desconhecido + Desconhecido necunoscut Неизвестно Neznámy @@ -717,22 +736,25 @@ bilinmeyen невідомо không rõ - 未知 - 不明 + 未知 + 不明 Partially downloaded file + Gedeeltelik afgelaaide lêer Ficheru baxáu parcialmente + Частично изтеглен файл fitxer baixat parcialment částečně stažený soubor - Delvist hentet fil + Delvist downloadet fil Teilweise heruntergeladene Datei Μερικώς ληφθέντο αρχείο - Partially downloaded file + Partially downloaded file archivo descargado parcialmente Partzialki deskargatutako fitxategia Osittain ladattu tiedosto fichier partiellement téléchargé + file no discjariât dal dut Comhad leath-íoslódáilte Ficheiro descargado parcialmente קובץ שהתקבל חלקית @@ -743,10 +765,11 @@ File parzialmente scaricato Жартылай жүктелген файл 일부 다운로드한 파일 + Dalinai atsiųstas failas fichièr parcialament telecargat Częściowo pobrany plik - Ficheiro parcialmente transferido - Arquivo baixado parcialmente + ficheiro descarregado parcialmente + Arquivo baixado parcialmente Частично загруженный файл Čiastočne stiahnutý súbor Delno prenesena datoteka @@ -754,8 +777,8 @@ Delvis hämtad fil Kısmen indirilmiş dosya частково отриманий файл - 部分下载的文件 - 已部份下載的檔案 + 部分下载的文件 + 已部份下載的檔案 @@ -763,10 +786,11 @@ ODA document + ODA-dokument مستند ODA Documentu ODA ODA sənədi - Dakument ODA + Dakument ODA Документ — ODA document ODA dokument ODA @@ -774,13 +798,14 @@ ODA-dokument ODA-Dokument Έγγραφο ODA - ODA document + ODA document ODA-dokumento documento ODA ODA dokumentua ODA-asiakirja ODA skjal document ODA + document ODA cáipéis ODA documento ODA מסמך ODA @@ -802,7 +827,7 @@ document ODA Dokument ODA documento ODA - Documento ODA + Documento ODA Document ODA Документ ODA Dokument ODA @@ -813,8 +838,8 @@ ODA belgesi документ ODA Tài liệu ODA - ODA 文档 - ODA 文件 + ODA 文档 + ODA 文件 ODA Office Document Architecture @@ -822,6 +847,7 @@ WWF document + WWF-dokument Documentu WWF Документ — WWF document WWF @@ -829,12 +855,13 @@ WWF-dokument WWF-Dokument Έγγραφο WWF - WWF document + WWF document WWF-dokumento documento WWF WWF dokumentua WWF-asiakirja document WWF + document WWF cáipéis WWF documento de WWF מסמך WWF @@ -847,12 +874,13 @@ WWF დოკუმენტი WWF құжаты WWF 문서 + WWF dokumentas WWF dokuments WWF document document WWF Dokument WWF documento WWF - Documento WWF + Documento WWF Документ WWF Dokument WWF Dokument WWF @@ -860,8 +888,8 @@ WWF-dokument WWF belgesi документ WWF - WWF - WWF 文件 + WWF + WWF 文件 @@ -869,9 +897,10 @@ PDF document + PDF-dokument مستند PDF Documentu PDF - Dakument PDF + Dakument PDF Документ — PDF document PDF dokument PDF @@ -879,13 +908,14 @@ PDF-dokument PDF-Dokument Έγγραφο PDF - PDF document + PDF document PDF-dokumento documento PDF PDF dokumentua PDF-asiakirja PDF skjal document PDF + document PDF cáipéis PDF documento PDF מסמך PDF @@ -906,7 +936,7 @@ document PDF Dokument PDF documento PDF - Documento PDF + Documento PDF Document PDF Документ PDF Dokument PDF @@ -917,13 +947,13 @@ PDF belgesi документ PDF Tài liệu PDF - PDF 文档 - PDF 文件 + PDF 文档 + PDF 文件 PDF Portable Document Format - + @@ -933,22 +963,24 @@ XSPF playlist + XSPF-speellys قائمة تشغيل XSPF Llista de reproducción XSPF - Śpis piesień XSPF + Śpis piesień XSPF Списък за изпълнение — XSPF llista de reproducció XSPF seznam k přehrání XSPF XSPF-afspilningsliste XSPF-Wiedergabeliste Λίστα αναπαραγωγής XSPF - XSPF playlist + XSPF playlist XSPF-ludlisto lista de reproducción XSPF XSPF erreprodukzio-zerrenda XSPF-soittolista XSPF avspælingarlisti liste de lecture XSPF + liste di riproduzion XSPF seinmliosta XSPF lista de reprodución XSPF רשימת נגינה XSPF @@ -968,7 +1000,7 @@ lista de lectura XSPF Lista odtwarzania XSPF lista de reprodução XSPF - Lista de reprodução XSPF + Lista de reprodução XSPF Listă XSPF Список воспроизведения XSPF Zoznam skladieb XSPF @@ -979,15 +1011,15 @@ XSPF çalma listesi список програвання XSPF Danh mục nhạc XSPF - XSPF 播放列表 - XSPF 播放清單 + XSPF 播放列表 + XSPF 播放清單 XSPF XML Shareable Playlist Format - - + + @@ -995,6 +1027,7 @@ Microsoft Windows theme pack + Microsoft Windows-temapak حزمة سمات Microsoft Works Paquete de temes de Microsoft Windows Пакет с тема — Microsoft Windows @@ -1003,12 +1036,13 @@ Microsoft Windows-temapakke Microsoft-Windows-Themenpaket Πακέτο θέματος Microsoft Windows - Microsoft Windows theme pack + Microsoft Windows theme pack paquete de tema para Microsoft Windows Microsoft Windows-en gaiaren paketea Microsoft Windows -teemapaketti Microsoft Windows tema pakki paquet de thèmes Microsoft Windows + pachet temis di Microsoft Windows paca téamaí Microsoft Windows paquete de tema de Microsoft Windows חבילת ערכות נושא של Microsoft Windows @@ -1027,7 +1061,7 @@ paquet de tèmas Microsoft Windows Pakiet motywu Microsoft Windows pacote de tema Microsoft Windows - Pacote de temas do Microsoft Windows + Pacote de temas do Microsoft Windows Pachet de teme Microsoft Windows Пакет темы Microsoft Windows Balík tém Microsoft Windows @@ -1036,24 +1070,28 @@ Microsoft Windows-temapaket Microsoft Windows tema paketi пакунок з темою Microsoft Windows - Microsoft Windows 主题包 - 微軟視窗佈景主題包 + Microsoft Windows 主题包 + 微軟視窗佈景主題包 AmazonMP3 download file + AmazonMP3-aflaailêer Ficheru de descarga AmazonMP3 + Файл за изтегляне — AmazonMP3 fitxer baixat d'AmazonMP3 soubor stahování AmazonMP3 AmazonMP3-downloadfil AmazonMP3-Herunterladedatei Αρχείο λήψης AmazonMP3 - AmazonMP3 download file + AmazonMP3 download file archivo de descarga de AmazonMP3 AmazonMP3 deskarga fitxategia + AmazonMP3-lataustiedosto fichier téléchargé AmazonMP3 + file discjariât AmazonMP3 comhad íoslódáilte AmazonMP3 Ficheiro de descarga de AmazonMP3 קובץ הורדת AmazonMP3 @@ -1069,7 +1107,7 @@ fichièr telecargat AmazonMP3 Pobrany plik AmazonMP3 ficheiro transferido AmazonMP3 - Arquivo de download AmazonMP3 + Arquivo de download AmazonMP3 Файл загрузки AmazonMP3 Stiahnutý súbor AmazonMP3 Datoteka prenosa AmazonMP3 @@ -1077,12 +1115,13 @@ AmazonMP3-hämtningsfil AmazonMP3 indirme dosyası файл завантаження AmazonMP3 - AmazonMP3 下载文件 - AmazonMP3 下載檔 + AmazonMP3 下载文件 + AmazonMP3 下載檔 GSM 06.10 audio + GSM 06.10-oudio GSM 06.10 سمعي Audiu GSM 6.10 Аудио — GSM 06.10 @@ -1091,12 +1130,13 @@ GSM 06.10-lyd GSM-06.10-Audio Ήχος GSM 06.10 - GSM 06.10 audio - sonido GSM 06.10 + GSM 06.10 audio + audio GSM 06.10 GSM 06.10 audioa GSM 06.10 -ääni GSM 06.10 ljóður audio GSM 06.10 + audio GSM 06.10 fuaim GSM 06.10 son de GSM 06.10 שמע GSM 06.10 @@ -1115,7 +1155,7 @@ àudio GSM 06.10 Plik dźwiękowy GSM 06.10 áudio GSM 06.10 - Áudio GSM 06.10 + Áudio GSM 06.10 GSM 06.10 audio Аудио GSM 06.10 Zvuk GSM 06.10 @@ -1125,85 +1165,65 @@ GSM 06.10 ses dosyası звук GSM 06.10 Âm thanh GSM 06.10 - GSM 06.10 音频 - GSM 06.10 音訊 + GSM 06.10 音频 + GSM 06.10 音訊 GSM Global System for Mobile communications - iRiver Playlist - قائمة تشغيل iRiver - Llista de reproducción iRiver - Śpis piesień iRiver + iRiver playlist Списък за изпълнение — iRiver llista de reproducció iRiver - seznam k přehrání iRiver iRiver-afspilningsliste iRiver-Wiedergabeliste - Λίστα αναπαραγωγής iRiver - iRiver Playlist - iRiver-ludlisto + iRiver playlist lista de reproducción de iRiver iRiver erreprodukzio-zerrenda iRiver-soittolista - iRiver avspælingarlisti liste de lecture iRiver - seinmliosta iRiver - lista de reprodución de iRiver - רשימת נגינה של iRiver iRiver popis izvođenja iRiver lejátszólista - Lista de selection iRiver - iRiver Playlist + daftar putar iRiver Playlist iRiver - iRiver 再生リスト iRiver ойнау тізімі - iRiver 재생 목록 - iRiver grojaraštis - iRiver repertuārs - iRiver-spilleliste - iRiver-afspeellijst - iRiver speleliste - lista de lectura iRiver + 아이리버 재생 목록 Lista odtwarzania iRiver - lista de reprodução iRiver - Lista de reprodução do iRiver - Listă iRiver + lista de reprodução do iRiver + Lista de reprodução do iRiver Список воспроизведения iRiver Zoznam skladieb iRiver Seznam predvajanja iRiver - Listë titujsh iRiver - иРивер списак нумера iRiver-spellista - iRiver Çalma Listesini - список програвання iRiver - danh mục nhạc iRiver - iRiver 播放列表 - iRiver 播放清單 + iRiver çalma listesi + список відтворення iRiver + iRiver 播放列表 + iRiver 播放清單 - + PGP/MIME-encrypted message header + Kop van PGP/MIME-geënkripteerde boodskap ترويسة رسالة PGP/MIME-مشفرة Testera de mensaxe cifrada en PGP/MIME - Zahałovak paviedamleńnia, zašyfravany ŭ PGP/MIME + Zahałovak paviedamleńnia, zašyfravany ŭ PGP/MIME Заглавна част на шифрирано съобщение — PGP/MIME capçalera de missatge amb xifrat PGP/MIME záhlaví zprávy zašifrované pomocí PGP/MIME PGP-/MIME-krypteret meddelelseshoved PGP/MIME-verschlüsselter Nachrichtenkopf Κεφαλίδα μηνύματος κρυπτογραφημένου κατά PGP/MIME - PGP/MIME-encrypted message header + PGP/MIME-encrypted message header PGP/MIME-ĉifrita ĉapo de mesaĝo cabecera de mensaje cifrado PGP/MIME - PGP/MIME enkriptatutako mezu-goiburua + PGP/MIME zifratutako mezu-goiburua PGP/MIME-salattu viestiotsikko PGP/MIME-encrypted boð tekshøvd en-tête de message codé PGP/MIME + intestazion messaç cifrât in PGP/MIME ceanntásc teachtaireachta ionchódaithe le PGP/MIME cabeceira de mensaxe cifrado PGP/MIME כותר של קובץ מוצפן מסוג PGP/MIME @@ -1224,7 +1244,7 @@ entèsta de messatge encodat PGP/MIME Nagłówek listu zaszyfrowanego PGP/MIME cabeçalho de mensagem encriptada com PGP/MIME - Cabeçalho de mensagem criptografada PGP/MIME + Cabeçalho de mensagem criptografada PGP/MIME Antet de mesaj encriptat PGP/MIME Заголовок сообщения, зашифрованный PGP/MIME Hlavičke správy zašifrovaná pomocou PGP/MIME @@ -1235,24 +1255,25 @@ PGP/MIME-şifreli ileti başlığı заголовок шифрованого PGP/MIME повідомлення Phần đầu thông điệp đã mật mã bằng PGP/MIME - PGP/MIME 加密的信件头 - PGP/MIME 加密訊息標頭 + PGP/MIME 加密的信件头 + PGP/MIME 加密訊息標頭 - + - + PGP keys + PGP-sleutels مفاتيح PGP Claves PGP PGP açarları - Klučy PGP + Klučy PGP Ключове — PGP claus PGP klíče PGP @@ -1260,13 +1281,14 @@ PGP-nøgler PGP-Schlüssel Κλειδιά PGP - PGP keys + PGP keys PGP-ŝlosiloj claves PGP PGP giltzak PGP-avainrengas PGP lyklar clés PGP + clâfs PGP eochracha PGP Chaves PGP מפתחות PGP @@ -1287,7 +1309,7 @@ claus PGP Klucze PGP chaves PGP - Chaves PGP + Chaves PGP Chei PGP Ключи PGP Kľúče PGP @@ -1298,43 +1320,46 @@ PGP anahtarları ключі PGP Khoá PGP - PGP 密钥 - PGP 鑰匙 + PGP 密钥 + PGP 金鑰 PGP Pretty Good Privacy - - - - - - + + + + + + - + + detached OpenPGP signature + losstaande OpenPGP-handtekening إمضاء OpenPGP مفصول - adłučany podpis OpenPGP - Отделен подпис — OpenPGP + adłučany podpis OpenPGP + Отделѐн подпис — OpenPGP signatura OpenPGP abstreta oddělený podpis OpenPGP frigjort OpenPGP-signatur isolierte OpenPGP-Signatur Αποκομμένη υπογραφή OpenPGP - detached OpenPGP signature + detached OpenPGP signature dekroĉa OpenPGP-subskribo firma OpenPGP separada desuzturtako OpenPGP sinadura erillinen OpenPGP-allekirjoitus skild OpenPGP undirskrift signature OpenPGP détachée + firme OpenPGP distacade síniú OpenPGP scartha sinatura de OpenPGP independente חתימת OpenPGP מנותקת @@ -1355,7 +1380,7 @@ signatura OpenPGP destacada Oddzielony podpis OpenPGP assinatura OpenPGP solta - Assinatura OpenPGP destacada + Assinatura OpenPGP destacada semnătură OpenPGP detașată Отсоединённая подпись OpenPGP Oddelený podpis OpenPGP @@ -1366,57 +1391,48 @@ müstakil OpenPGP imzası відокремлений OpenPGP підпис chữ ký OpenPGP tách rời - 分离的 OpenPGP 签名 - 分離的 OpenPGP 簽章 + 分离的 OpenPGP 签名 + 分離的 OpenPGP 簽章 - + - + - + - PKCS#7 Message or Certificate - Mensaxe o certificáu PKCS#7 - missatge o certificat PKCS#7 - zpráva nebo certifikát PKCS#7 - PKCS#7-besked eller certifikat - PKCS#7 Nachricht oder Zertifikat - Μήνυμα ή πιστοποιητικό PKCS#7 - PKCS#7 Message or Certificate - mensaje o certificado PKCS#7 - PKCS#7 mezu edo zertifikazioa - PKCS#7-viesti tai -varmenne - Message ou certificat PKCS#7 - Teachtaireacht nó Teastas PKCS#7 - Mensaxe ou certificado PKCS#7 - הודעה או אישור מסוג PKCS#7 - PKCS#7 poruka ili vjerodajnica - PKCS#7 üzenet vagy tanúsítvány - Message o certificato PKCS#7 - Sertifikat atau Pesan PKCS#7 - Messaggio o certificato PKCS#7 - PKCS#7 メッセージまたは証明書 - PKCS#7 хабарламасы не сертификаты - PKCS#7 메시지 또는 인증서 - PKCS#7 ziņojums vai sertifikāts - Messatge o certificat PKCS#7 - Wiadomość lub certyfikat PKCS#7 - Mensagem ou certificado PKCS#7 - Certificado ou Mensagem PKCS#7 - Сообщение или сертификат PKCS#7 - Správa alebo certifikát PKCS#7 - Sporočilo ali dovoljenje PKCS#7 - ПКЦС#7 порука или уверење - PKCS#7-meddelande eller -certifikat - PKCS#7 İletisi veya Sertifikası - повідомлення або сертифікат PKCS#7 - PKCS#7 消息或证书 - PKCS#7 訊息或憑證 + PKCS#7 file + Файл за PKCS#7 + fitxer PKCS#7 + PKCS#7-fil + PKCS#7-Datei + PKCS#7 file + archivo PKCS#7 + PKCS#7 fitxategia + PKCS#7-tiedosto + fichier PKCS#7 + PKCS#7 datoteka + PKCS#7 fájl + Berkas PKCS#7 + File PKCS#7 + PKCS#7 файлы + PKCS#7 파일 + PKCS#7 failas + Plik PKCS#7 + ficheiro PKCS#7 + Arquivo PKCS#7 + Файл PKCS#7 + Súbor PKCS#7 + Datoteka PKCS#7 + PKCS#7-fil + PKCS#7 dosyası + файл PKCS#7 + PKCS#7 文件 + PKCS#7 檔案 PKCS Public-Key Cryptography Standards @@ -1425,21 +1441,23 @@ detached S/MIME signature + losstaande S/MIME-handtekening إمضاء S/MIME مفصول - adłučany podpis S/MIME - Отделен подпис — S/MIME + adłučany podpis S/MIME + Отделѐн подпис — S/MIME signatura S/MIME abstreta oddělený podpis S/MIME frigjort S/MIME-signatur isolierte S/MIME-Signatur Αποκομμένη υπογραφή S/MIME - detached S/MIME signature + detached S/MIME signature dekroĉa S/MIME-subskribo firma S/MIME separada desuzturtako S/MIME sinadura erillinen S/MIME-allekirjoitus skild S/MIME undirskrift signature S/MIME détachée + firme S/MIME distacade síniú S/MIME scartha sinatura S/MIME independente חתימת S/MIME מנותקת @@ -1460,7 +1478,7 @@ signatura S/MIME destacada Oddzielony podpis S/MIME assinatura S/MIME solta - Assinatura S/MIME destacada + Assinatura S/MIME destacada semnătură S/MIME detașată Отсоединённая подпись S/MIME Oddelený podpis S/MIME @@ -1471,8 +1489,8 @@ müstakil S/MIME imzası відокремлений S/MIME підпис chữ ký S/MIME tách rời - 分离的 S/MIME 签名 - 分離的 S/MIME 簽章 + 分离的 S/MIME 签名 + 分離的 S/MIME 簽章 S/MIME Secure/Multipurpose Internet Mail Extensions @@ -1481,19 +1499,21 @@ PKCS#8 private key + PKCS#8- private sleutel رزمة الشهادة PKCS#8 - Ключ, частен — PKCS#8 + Ключ — PKCS#8, частен clau privada PKCS#8 soukromý klíč PKCS#8 PKCS#8-privat nøgle - PKCS#8 Geheimer Schlüssel + PKCS#8 privater Schlüssel Ιδιωτικό κλειδί PKCS#8 - PKCS#8 private key + PKCS#8 private key clave privada PCKS#8 PKCS#8 gako pribatua PKCS#8 yksityinen avain PKCS#8 privatur lykil clé privée PKCS#8 + clâf privade PKCS#8 eochair phríobháideach PKCS#8 Chave privada PKCS#8 מפתח פרטי של PKCS#8 @@ -1511,7 +1531,7 @@ clau privada PKCS#8 Klucz prywatny PKCS#8 chave privada PKCS#8 - Chave privada PKCS#8 + Chave privada PKCS#8 Cheie privată PKCS#8 Личный ключ PKCS#8 Súkromný kľúč PKCS#8 @@ -1520,34 +1540,66 @@ Privat PKCS#8-nyckel PKCS#8 özel anahtarı закритий ключ PKCS#8 - PKCS#8 私钥 - PKCS#8 私人金鑰 + PKCS#8 私钥 + PKCS#8 私人金鑰 PKCS Public-Key Cryptography Standards PKCS#8 private key (encrypted) + PKCS#8- private sleutel (geënkripteer) + Ключ — PKCS#8, частен, шифриран + clau privada PKCS#8 (xifrada) + soukromý klíč PKCS#8 (zašifrovaný) + PKCS#8-privat nøgle (krypteret) + PKCS#8 privater Schlüssel (verschlüsselt) + PKCS#8 private key (encrypted) + clave privada PKCS#8 (cifrada) + PKCS#8 gako pribatua (zifratua) + PKCS#8 yksityinen avain (salattu) + clé privée PKCS#8 (chiffrée) + clâf privade PKCS#8 (cifrade) + eochair phríobháideach PKCS#8 (criptithe) + PKCS#8 privatni ključ (šifriran) + PKCS#8 személyes kulcs (titkosított) + Kunci privat PKCS#8 (terenkripsi) + Chiave privata PKCS#8 (cifrata) + PKCS#8 жеке кілті (шифрленген) + PKCS#8 개인 키(암호화됨) + Klucz prywatny PKCS#8 (zaszyfrowany) + chave privada PKCS#8 (encriptada) + Chave privada PKCS#8 (criptografada) + Личный ключ PKCS#8 (зашифрованный) + Súkromný kľúč PKCS#8 (šifrovaný) + Zasebni ključ PKCS#8 (širfirano) + Privat PKCS#8-nyckel (krypterad) + PKCS#8 özel anahtar (şifrelenmiş) + закритий ключ PKCS#8 (зашифрований) + PKCS#8 私钥(已加密) + PKCS#8 私人金鑰 (加密) PKCS Public-Key Cryptography Standards PKCS#10 certification request + PKCS#10-sertifiseringsversoek طلب شهادة PKCS#10 - Zapyt sertyfikacyi PKCS#10 + Zapyt sertyfikacyi PKCS#10 Заявка за сертификат — PKCS#10 sol·licitud de certificació PKCS#10 žádost o certifikát PKCS#10 PKCS#10-certifikatanmodning PKCS#10-Zertifikatanfrage Αίτηση πιστοποίησης PKCS#10 - PKCS#10 certification request + PKCS#10 certification request petición de certificados PKCS#10 PKCS#10 ziurtagirien eskaera PKCS#10-varmennepyyntö PKCS#10 váttanarumbøn requête de certification PKCS#10 + richieste certificazion PKCS#10 iarratas dheimhniúchán PKCS#10 Solicitude de certificado PKCS#10 בקשה מוסמכת PLCS#10 @@ -1567,7 +1619,7 @@ requèsta de certificacion PKCS#10 Żądanie certyfikatu PKCS#10 pedido de certificação PKCS#10 - Pedido de certificação PKCS#12 + Pedido de certificação PKCS#12 Cerere de certificat PKCS#10 Запрос сертификации PKCS#10 Požiadavka na certifikát PKCS#10 @@ -1578,8 +1630,8 @@ PKCS#10 sertifika isteği комплект сертифікатів PKCS#10 Yêu cầu chứng nhận PKCS#10 - PKCS#10 认证请求 - PKCS#10 憑證請求 + PKCS#10 认证请求 + PKCS#10 憑證請求 PKCS Public-Key Cryptography Standards @@ -1587,6 +1639,7 @@ X.509 certificate + X.509-sertifikaat شهادة X.509 Certificáu X.509 Сертификат — X.509 @@ -1595,12 +1648,13 @@ X.509-certifikat X.509-Zertifikat Πιστοποιητικό X.509 - X.509 certificate + X.509 certificate certificado X.509 X.509 ziurtagiria X.509-varmenne X.509 prógv certificat X.509 + certificât X.509 teastas X.509 Certificado X.509 אישור X.509 @@ -1618,7 +1672,7 @@ certificat X.509 Certyfikat X.509 certificado X.509 - Certificado X.509 + Certificado X.509 Certificat X.509 Сертификат X.509 Certifikát X.509 @@ -1627,58 +1681,41 @@ X.509-certifikat X.509 sertifikası сертифікат X.509 - X.509 证书 - X.509 憑證 + X.509 证书 + X.509 憑證 - Certificate revocation list - قائمة إبطال الشهادات - Llistáu de revocación de certificaos + certificate revocation list Списък с отхвърлени сертификати llista de revocació de certificats - seznam odvolaných certifikátů - Certifikattilbagekaldelsesliste - Liste widerrufener Zertifikate - Λίστα ανάκλησης πιστοποιητικού - Certificate revocation list + certifikat tilbagetrækkelsesliste + Zertifikatsperrliste + certificate revocation list lista de revocación de certificados - Ziurtagiri-errebokatzeen zerrenda + ziurtagiri-errebokatzeen zerrenda Varmenteiden sulkulista - Prógv afturtøkulisti liste de révocation de certificat - Liosta teastas cúlghairmthe - lista de certificados de revogación - רשימת אישורים מבוטלים Popis opozvanih vjerodajnica - Tanúsítvány-visszavonási lista - Lista de revocation de certificatos - Daftar pencabutan sertificat (CRL) + tanúsítvány visszavonási lista + daftar pencabutan sertifikat Elenco certificati di revoca - 証明書失効リスト - Сертификатты қайта шақыру тізімі + сертификатты қайта шақыру тізімі 인증서 철회 목록 - Panaikintų liudijimų sąrašas - Sertifikātu atsaukšanu saraksts - Certificaat revocation lijst - lista de revocacion de certificat Lista unieważnień certyfikatów lista de revogação de certificados - Lista de revogação de certificado - Listă de revocare a certificatelor - Список аннулирования сертификатов - Zoznam zrušených certifikátov - Datoteka seznama preklica potrdil - списак повлачења уверења - Spärrlista för certifikat - Sertifika iptal listesi + Lista de revogação de certificados + список аннулирования сертификатов + certifikatåterkallningslista + sertifika iptal listesi список відкликання сертифікатів - 证书吊销列表 - 憑證撤銷清單 + 证书吊销列表 + 憑證撤銷清單 PkiPath certification path + PkiPath-sertifiseringspad مسار شهادة PkiPath Camín de certificación PkiPath Сертификационна верига — PkiPath @@ -1687,12 +1724,13 @@ PkiPath-certifikationssti PkiPath-Zertifikatspfad Διαδρομή πιστοποιητικού PkiPath - PkiPath certification path + PkiPath certification path ruta de certificación PkiPath PkiPath ziurtagirien bide-izena PkiPath-varmennepolku PkiPath váttanleið chemin de certification PkiPath + percors di certificazion PkiPath conair dheimhniúcháin PkiPath Ruta de certificación PkiPath נתיב מאושר של PkiPath @@ -1710,7 +1748,7 @@ camin de certificacion PkiPath Ścieżka certyfikacji PkiPath caminho de certificação PkiPath - Pedido de certificação PkiPath + Pedido de certificação PkiPath Cale certificare PkiPath Путь сертификации PkiPath Cesta k certifikátu PkiPath @@ -1720,88 +1758,67 @@ PkiPath sertifika yolu шлях сертифікації PkiPath Đường dẫn cấp chứng nhận PkiPath - PkiPath 证书目录 - PkiPath 憑證路徑 + PkiPath 证书目录 + PkiPath 憑證路徑 - PS document - مستند PS - Documentu PS - Dakument PS - Документ — PS - document PS - dokument PS - PS-dokument - PS-Dokument - Έγγραφο PS - PS document - PS-dokumento - documento PS - PS dokumentua - PS-asiakirja - PS skjal - document PS - cáipéis PS - documento PS - מסמך PS - PS dokument - PS dokumentum - Documento PS - Dokumen PS - Documento PS - PS ドキュメント - PS құжаты - PS 문서 - PS dokumentas - PS dokuments - PS-dokument - PS-document - PS-dokument - document PS - Dokument PS - documento PS - Documento PS - Document PS - Документ PS - Dokument PS - Dokument PS - Dokument PS - ПС документ - PS-dokument - PS belgesi - документ PS - Tài liệu PS - PS 文档 - Ps 文件 - PS - PostScript + PostScript document + Документ — PostScrip + document PostScript + PostScript-dokument + PostScript-Dokument + PostScript document + documento PostScript + PostScript dokumentua + PostScript-asiakirja + document PostScript + PostScript dokument + PostScript dokumentum + Dokumen PostScript + Documento PostScript + PostScript құжаты + 포스트스크립트 문서 + PostScript dokumentas + Dokument PostScript + documento PostScript + Documento PostScript + Документ PostScript + Dokument PostScript + Dokument PostScript + Postscript-dokument + PostScript belgesi + документ PostScript + PostScript 文档 + PostScript 文件 - - + + Plucker document + Plucker-dokument مستند Plucker Documentu Plucker - Dakument Plucker + Dakument Plucker Документ — Plucker document Plucker dokument Plucker Pluckerdokument Plucker-Dokument Έγγραφο Plucker - Plucker document + Plucker document Plucker-dokumento documento de Plucker Plucker dokumentua Plucker-asiakirja Plucker skjal document Plucker + document Plucker cáipéis Plucker documento de Plucker מסמך של Plucker @@ -1821,7 +1838,7 @@ document Plucker Dokument Plucker documento Plucker - Documento do Plucker + Documento do Plucker Document Plucker Документ Plucker Dokument Plucker @@ -1832,54 +1849,61 @@ Plucker belgesi документ Plucker Tài liệu Plucker - Plucker 文档 - Plucker 文件 + Plucker 文档 + Plucker 文件 - + RAML document + RAML-dokument Documentu RAML + Документ — RAML document RAML dokument RAML RAML-dokument RAML-Dokument - RAML document + RAML document documento RAML RAML dokumentua RAML-asiakirja document RAML + document RAML cáipéis RAML מסמך RAML RAML dokument RAML dokumentum - dokumen RAML + Dokumen RAML Documento RAML RAML құжаты RAML 문서 + RAML dokumentas Document RAML Dokument RAML - Documento RAML + documento RAML + Documento RAML Документ RAML Dokument RAML + Dokument RAML РАМЛ документ RAML-dokument RAML belgesi документ RAML - RAML 文档 - RAML 文件 + RAML 文档 + RAML 文件 RAML RESTful API Modeling Language - + RELAX NG XML schema + RELAX NG XML-skema مخطط RELAX NG XML Схема за XML — RELAX NG esquema XML en RELAX NG @@ -1887,11 +1911,12 @@ RELAX NG XML-skema RELAX NG XML-Schema Σχήμα RELAX NG XML - RELAX NG XML schema + RELAX NG XML schema esquema XML RELAX NG RELAX NG XML eskema RELAX NG XML-skeema schéma XML RELAX NG + scheme XML RELAX NG scéimre XML RELAX NG Esquema XML RELAX NG סכנת RELAX NG XML @@ -1909,7 +1934,7 @@ esquèma XML RELAX NG Schemat XML RELAX NG Esquema RELAX NG XML - Esquema XML de RELAX NG + Esquema XML de RELAX NG Schemă RELAX NG XML XML-схема RELAX NG XML schéma RELAX NG @@ -1918,8 +1943,8 @@ RELAX NG XML-schema RELAX NG XML şeması XML-схема RELAX NG - RELAX NG XML 模式 - RELAX NG XML schema + RELAX NG XML 模式 + RELAX NG XML 綱要 RELAX NG REgular LAnguage for XML Next Generation @@ -1929,22 +1954,24 @@ RTF document + RTF-dokument مستند RTF Documentu RTF - Dakument RTF + Dakument RTF Документ — RTF document RTF dokument RTF RTF-dokument RTF-Dokument Έγγραφο RTF - RTF document + RTF document RTF-dokumento documento RTF RTF dokumentua RTF-asiakirja RTF skjal document RTF + document RTF cáipéis RTF documento RTF מסמך RTF @@ -1964,7 +1991,7 @@ document RTF Dokument RTF documento RTF - Documento RTF + Documento RTF Document RTF Документ RTF Dokument RTF @@ -1975,33 +2002,35 @@ RTF belgesi документ RTF Tài liệu RTF - RTF 文档 - RTF 文件 + RTF 文档 + RTF 文件 RTF Rich Text Format - + Sieve mail filter script + Sieve-posfiltreerskrip سكربت مرشح بريد Sieve - Skrypt filtravańnia pošty Sieve + Skrypt filtravańnia pošty Sieve Скрипт-филтър за пресяване на поща script de filtre de correu Sieve skript poštovního filtru Sieve Sieve e-post-filterprogram Sieve-E-Mail-Filterskript Δέσμη ενεργειών φιλτραρίσματος αλληλογραφίας Sieve - Sieve mail filter script + Sieve mail filter script secuencia de órdenes de filtro en Sieve Sieve posta-iragazki script-a Sieve-postinsuodatuskomentotiedosto script de filtrage de courriel Sieve + script filtri pueste Sieve script scagaire r-phost Sieve Script de filtro de correo Sieve תסריט סינון דואר של Sieve @@ -2021,7 +2050,7 @@ escript de filtratge de corrièr electronic Sieve Skrypt filtra poczty Sieve Script de filtragem de correio Sieve - Script de filtro de mensagens do Sieve + Script de filtro de mensagens do Sieve Script filtrare email Sieve Сценарий почтового фильтра Sieve Skript poštového filtra Sieve @@ -2029,33 +2058,35 @@ Script filtrim poste Sieve Сјев скрипта пропусника поште Sieve-epostfilterskript - Sieve posta filtre betiği + Sieve posta süzgeç betiği скрипт поштового фільтру Sieve Văn lệnh lọc thư Sieve - Sieve 邮件过滤脚本 - Sieve 郵件過濾指令稿 + Sieve 邮件过滤脚本 + Sieve 郵件篩選指令稿 SMIL document + SMIL-dokument مستند SMIL Documentu SMIL - Dakument SMIL + Dakument SMIL Документ — SMIL document SMIL dokument SMIL SMIL-dokument SMIL-Dokument Έγγραφο SMIL - SMIL document + SMIL document SMIL-dokumento documento SMIL SMIL dokumentua SMIL-asiakirja SMIL skjal document SMIL + document SMIL cáipéis SMIL documento SMIL מסמך SMIL @@ -2075,7 +2106,7 @@ document SMIL Dokument SMIL documento SMIL - Documento SMIL + Documento SMIL Document SMIL Документ SMIL Dokument SMIL @@ -2086,8 +2117,8 @@ SMIL belgesi документ SMIL Tài liệu SMIL - SMIL 文档 - SMIL 文件 + SMIL 文档 + SMIL 文件 SMIL Synchronized Multimedia Integration Language @@ -2098,7 +2129,7 @@ - + @@ -2106,6 +2137,7 @@ WPL playlist + WPL-speellys قائمة تشغيل WPL Списък за изпълнение — WPL llista de reproducció WPL @@ -2113,13 +2145,14 @@ WPL-afspilningsliste WPL-Wiedergabeliste Λίστα αναπαραγωγής WPL - WPL playlist + WPL playlist WPL-ludlisto lista de reproducción WPL WPL erreprodukzio-zerrenda WPL-soittolista WPL avspælingarlisti liste de lecture WPL + liste di riproduzion WPL seinmliosta WPL lista de reprodución WPL רשימת נגינה WPL @@ -2137,7 +2170,7 @@ lista de lectura WPL Lista odtwarzania WPL lista de reprodução WPL - Lista de reprodução do WPL + Lista de reprodução do WPL Listă redare WPL Список воспроизведения WPL Zoznam skladieb WPL @@ -2147,33 +2180,35 @@ WPL çalma listesi список відтворення WPL Danh mục nhạc WPL - WPL 播放列表 - WPL 播放清單 + WPL 播放列表 + WPL 播放清單 WPL Windows Media Player Playlist - + SQLite2 database + SQLite2-databasis قاعدة بيانات SQLite2 - Baza źviestak SQLite2 + Baza źviestak SQLite2 База от данни — SQLite2 base de dades SQLite2 databáze SQLite2 SQLite2-database SQLite2-Datenbank Βάση δεδομένων SQLite2 - SQLite2 database + SQLite2 database SQLite2-datumbazo base de datos SQLite2 SQLite2 datu-basea SQLite2-tietokanta SQLite2 dátustovnur base de données SQLite2 + base di dâts SQLite2 bunachar sonraí SQLite2 base de datos SQLite2 מסד נתונים מסוג SQLite2 @@ -2193,7 +2228,7 @@ banca de donadas SQLite2 Baza danych SQLite2 base de dados SQLite2 - Banco de dados SQLite2 + Banco de dados SQLite2 Bază de date SQLite2 База данных SQLite2 Databáza SQLite2 @@ -2201,33 +2236,35 @@ Bazë me të dhëna SQLite2 СКуЛајт2 база података SQLite2-databas - SQLite2 veritabanı + SQLite2 veri tabanı База даних SQLite2 Cơ sở dữ liệu SQLite2 - SQLite2 数据库 - SQLite2 資料庫 + SQLite2 数据库 + SQLite2 資料庫 - + SQLite3 database + SQLite3-databasis قاعدة بيانات SQLite3 - Baza źviestak SQLite3 + Baza źviestak SQLite3 База от данни — SQLite3 base de dades SQLite3 databáze SQLite3 SQLite3-database SQLite3-Datenbank Βάση δεδομένων SQLite3 - SQLite3 database + SQLite3 database SQLite3-datumbazo base de datos SQLite3 SQLite3 datu-basea SQLite3-tietokanta SQLite3 dátustovnur base de données SQLite3 + base di dâts SQLite3 bunachar sonraí SQLite3 base de datos SQLite3 מסד נתונים מסוג SQLite3 @@ -2247,7 +2284,7 @@ banca de donadas SQLite3 Baza danych SQLite3 base de dados SQLite3 - Banco de dados SQLite3 + Banco de dados SQLite3 Bază de date SQLite3 База данных SQLite3 Databáza SQLite3 @@ -2255,33 +2292,57 @@ Bazë me të dhëna SQLite3 СКуЛајт3 база података SQLite3-databas - SQLite3 veritabanı + SQLite3 veri tabanı база даних SQLite3 Cơ sở dữ liệu SQLite3 - SQLite3 数据库 - SQLite3 資料庫 + SQLite3 数据库 + SQLite3 資料庫 - + + + Apple System Profiler + System Profiler d'Apple + Apple System Profiler + Apple-Systeminformationen + Apple System Profiler + perfil del sistema de Apple + Applen järjestelmän profiloija + Apple profiler sustava + Profiler di sistema Apple + Profiler komputera Apple + Perfilador do sistema Apple + Apple Systeminformation + засіб профілювання системи Apple + Apple 系统概述 + + + + + + + GEDCOM family history + GEDCOM-familiegeskiedenis تاريخ عائلة GEDCOM - Siamiejnaja historyja GEDCOM + Siamiejnaja historyja GEDCOM Родословно дърво — GEDCOM antecedents familiars GEDCOM rodokmen GEDCOM GEDCOM-familiehistorie GEDCOM-Stammbaum Οικογενειακό ιστορικό GEDCOM - GEDCOM family history + GEDCOM family history historial familiar de GEDCOM GEDCOM famili historia GEDCOM-sukuhistoria GEDCOM familjusøga généalogie GEDCOM + gjenealogjie GEDCOM stair theaghlach GEDCOM historial de familia GEDCOM היסטוריה משפחתית של GEDCOM @@ -2302,7 +2363,7 @@ genealogia GEDCOM Plik historii rodziny GEDCOM história familiar GEDCOM - Histórico familiar do GEDCOM + Histórico familiar do GEDCOM Tablou genealogic GEDCOM История семьи GEDCOM Rodokmeň GEDCOM @@ -2313,13 +2374,13 @@ GEDCOM aile geçmişi історія родини GEDCOM Lịch sử gia đình GEDCOM - GEDCOM 家谱 - GEDCOM 家族史 + GEDCOM 家谱 + GEDCOM 族譜 GEDCOM GEnealogical Data COMmunication - + @@ -2327,22 +2388,24 @@ Flash video + Flash-video Flash مرئي Videu en Flash - Videa Flash + Videa Flash Видео — Flash vídeo de Flash video Flash Flashvideo Flash-Video Βίντεο Flash - Flash video + Flash video Flash-video vídeo Flash Flash bideoa Flash-video Flash video vidéo Flash + video Flash físeán Flash vídeo Flash וידאו של פלאש @@ -2363,7 +2426,7 @@ vidèo Flash Plik wideo Flash vídeo Flash - Vídeo Flash + Vídeo Flash Video Flash Видео Flash Video Flash @@ -2374,11 +2437,11 @@ Flash video відеокліп Flash Ảnh động Flash - Flash 视频 - Flash 視訊 + Flash 视频 + Flash 視訊 - + @@ -2387,6 +2450,7 @@ JavaFX video + JavaFX-video Videu en JavaFX Видео — JavaFX vídeo de JavaFX @@ -2394,13 +2458,14 @@ JavaFX-video JavaFX-Video Βίντεο JavaFX - JavaFX video + JavaFX video JavaFX-video vídeo JavaFX JavaFX bideoa JavaFX-video JavaFX video vidéo JavaFX + video JavaFX físeán JavaFX vídeo JavaFX וידאו JavaFX @@ -2412,12 +2477,13 @@ JavaFX 動画 JavaFX аудиосы JavaFX 동영상 + JavaFX vaizdo įrašas JavaFX video JavaFX video vidèo JavaFX Plik wideo JavaFX vídeo JavaFX - Vídeo JavaFX + Vídeo JavaFX Video JavaFX Видео JavaFX Video JavaFX @@ -2426,32 +2492,36 @@ JavaFX-video JavaFX video відеокліп JavaFX - JavaFX 视频 - JavaFX 視訊 + JavaFX 视频 + JavaFX 視訊 - + - + SGF record + SGF-rekord تسجيلة SGF - Zapisanaja hulnia SGF + Zapisanaja hulnia SGF Запис — SGF registre SGF nahrávka SGF SGF-optagelse SGF-Aufzeichnung Εγγραφή SGF - SGF record + SGF record grabación SGF SGF erregistroa SGF-nauhoitus SGF met partie SGF + regjistrazion SGF taifead SGF Grabación SGF הקלטת SGF @@ -2471,7 +2541,7 @@ partida SGF Zapis gry SGF gravação SGF - Gravação SGF + Gravação SGF Înregistrare SGF Запись SGF Záznam SGF @@ -2482,35 +2552,37 @@ SGF kaydı запис SGF Mục ghi SGF - SGF 记录 - SGF 紀錄 + SGF 记录 + SGF 紀錄 SGF Smart Game Format - - + + XLIFF translation file + XLIFF-vertaallêer ملف ترجمة XLIFF Ficheru de traducciones XLIFF - Fajł pierakładu XLIFF + Fajł pierakładu XLIFF Превод — XLIFF fitxer de traducció XLIFF soubor překladu XLIFF XLIFF-oversættelsesfil XLIFF-Übersetzung Αρχείο μετάφρασης XLIFF - XLIFF translation file + XLIFF translation file archivo de traducción XLIFF XLIFF itzulpen-fitxategia XLIFF-käännöstiedosto XLIFF týðingarfíla fichier de traduction XLIFF + file di traduzion XLIFF comhad aistriúcháin XLIFF ficheiro de tradución XLIFF קובץ תרגום CLIFF @@ -2530,7 +2602,7 @@ fichièr de traduccion XLIFF Plik tłumaczenia XLIFF ficheiro de tradução XLIFF - Arquivo de tradução XLIFF + Arquivo de tradução XLIFF Fișier de traducere XLIFF Файл перевода XLIFF Súbor prekladu XLIFF @@ -2541,8 +2613,8 @@ XLIFF çeviri dosyası файл перекладу XLIFF Tập tin dịch XLIFF - XLIFF 翻译文件 - XLIFF 翻譯檔 + XLIFF 翻译文件 + XLIFF 翻譯檔 XLIFF XML Localization Interchange File Format @@ -2550,13 +2622,14 @@ - + - + YAML document + YAML-dokument مستند YAML Documentu YAML Документ — YAML @@ -2565,13 +2638,14 @@ YAML-dokument YAML-Dokument Έγγραφο YAML - YAML document + YAML document YAML-dokumento documento YAML YAML dokumentua YAML-asiakirja YAML skjal document YAML + document YAML cáipéis YAML documento YAML מסמך YAML @@ -2589,7 +2663,7 @@ document YAML Dokument YAML documento YAML - Documento YAML + Documento YAML Document YAML Документ YAML Dokument YAML @@ -2598,14 +2672,14 @@ YAML-dokument YAML belgesi документ YAML - YAML 文档 - YAML 文件 + YAML 文档 + YAML 文件 YAML YAML Ain't Markup Language - + @@ -2614,10 +2688,11 @@ Corel Draw drawing + Corel Draw-tekening تصميم Corel Draw Dibuxu de Corel Draw Corel Draw çəkimi - Rysunak Corel Draw + Rysunak Corel Draw Чертеж — Corel Draw dibuix de Corel Draw kresba Corel Draw @@ -2625,13 +2700,14 @@ Corel Draw-tegning Corel-Draw-Zeichnung Σχέδιο Corel Draw - Corel Draw drawing + Corel Draw drawing grafikaĵo de Corel Draw dibujo de Corel Draw Corel Draw-eko marrazkia Corel Draw -piirros Corel Draw tekning dessin Corel Draw + dissen Corel Draw líníocht Corel Draw debuxo de Corel Draw ציור של Corel Draw @@ -2643,7 +2719,7 @@ Corel Draw ドロー Corel Draw-ის ნახაზი Corel Draw суреті - 코렐 드로우 드로잉 + Corel Draw 드로잉 Corel Draw piešinys Corel Draw zīmējums Lukisan Corel Draw @@ -2653,7 +2729,7 @@ dessenh Corel Draw Rysunek Corel Draw desenho Corel Drawdesenho Corel Draw - Desenho do Corel Draw + Desenho do Corel Draw Desen Corel Draw Рисунок Corel Draw Kresba Corel Draw @@ -2664,11 +2740,11 @@ Corel Draw çizimi малюнок Corel Draw Bản vẽ Corel Draw - Corel Draw 绘图 - Corel Draw 繪圖 + Corel Draw 绘图 + Corel Draw 繪圖 - + @@ -2681,22 +2757,24 @@ HPGL file + HPGL-lêer ملف HPGL Ficheru HPGL - Fajł HPGL + Fajł HPGL Файл — HPGL fitxer HPGL soubor HPGL HPGL-fil HPGL-Datei Αρχείο HPGL - HPGL file + HPGL file HPGL-dosiero archivo HPGL HPGL fitxategia HPGL-tiedosto HPGL fíla fichier HPGL + file HPGL comhad HPGL ficheiro HPGL קובץ HGPL @@ -2716,7 +2794,7 @@ fichièr HPGL Plik HPGL ficheiro HPGL - Arquivo HPGL + Arquivo HPGL Fișier HPGL Файл HPGL Súbor HPGL @@ -2727,8 +2805,8 @@ HPGL dosyası файл HPGL Tập tin HPGL - HPGL 文件 - HPGL 檔案 + HPGL 文件 + HPGL 檔案 HPGL HP Graphics Language @@ -2736,22 +2814,24 @@ PCL file + PCL-lêer ملف PCL FIcheru PCL - Fajł PCL + Fajł PCL Файл — PCL fitxer PCL soubor PCL PCL-fil PCL-Datei Αρχείο PCL - PCL file + PCL file PCL-dosiero archivo PCL PCL fitxategia PCL-tiedosto PCL fíla fichier PCL + file PCL comhad PCL ficheiro PCL קובץ PCL @@ -2771,7 +2851,7 @@ fichièr PCL Plik PCL ficheiro PCL - Arquivo PCL + Arquivo PCL Fișier PCL Файл PCL Súbor PCL @@ -2782,8 +2862,8 @@ PCL dosyası файл PCL Tập tin PCL - PCL 文件 - PCL 檔 + PCL 文件 + PCL 檔 PCL HP Printer Control Language @@ -2791,10 +2871,11 @@ Lotus 1-2-3 spreadsheet + Lotus 1-2-3 sigblad جدول Lotus 1-2-3 Fueya de cálculu de Lotus 1-2-3 Lotus 1-2-3 hesab cədvəli - Raźlikovy arkuš Lotus 1-2-3 + Raźlikovy arkuš Lotus 1-2-3 Таблица — Lotus 1-2-3 full de càlcul de Lotus 1-2-3 sešit Lotus 1-2-3 @@ -2802,13 +2883,14 @@ Lotus 1-2-3-regneark Lotus-1-2-3-Tabelle Λογιστικό φύλλο Lotus 1-2-3 - Lotus 1-2-3 spreadsheet + Lotus 1-2-3 spreadsheet Kalkultabelo de Lotus 1-2-3 hoja de cálculo de Lotus 1-2-3 Lotus 1-2-3 kalkulu-orria Lotus 1-2-3 -taulukko Lotus 1-2-3 rokniark feuille de calcul Lotus 1-2-3 + sfuei di calcul Lotus 1-2-3 scarbhileog Lotus 1-2-3 folla de cálculo de Lotus 1-2-3 גיליון נתונים של Lotus 1-2-3 @@ -2829,7 +2911,7 @@ fuèlh de calcul Lotus 1-2-3 Arkusz Lotus 1-2-3 folha de cálculo Lotus 1-2-3 - Planilha do Lotus 1-2-3 + Planilha do Lotus 1-2-3 Foaie de calcul Lotus 1-2-3 Электронная таблица Lotus 1-2-3 Zošit Lotus 1-2-3 @@ -2837,14 +2919,14 @@ Fletë llogaritjesh Lotus 1-2-3 Лотусова 1-2-3 табела Lotus 1-2-3-kalkylblad - Lotus 1-2-3 hesap tablosu + Lotus 1-2-3 hesap çizelgesi ел. таблиця Lotus 1-2-3 Bảng tính Lotus 1-2-3 - Lotus 1-2-3 电子表格 - Lotus 1-2-3 試算表 + Lotus 1-2-3 电子表格 + Lotus 1-2-3 試算表 - + @@ -2858,67 +2940,59 @@ - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Лотусов Писац Про - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro - Lotus Word Pro + Lotus Word Pro document + Документ — Lotus Word Pro + document de Lotus Word Pro + Lotus Word Pro-dokument + Lotus-Word-Pro-Dokument + Lotus Word Pro document + documento de Lotus Word Pro + Lotus Word Pro dokumentua + Lotus Word Pro -asiakirja + document Lotus Word Pro + Lotus Word Pro dokument + Lotus Word Pro dokumentum + Dokumen Lotus Word Pro + Documento Lotus Word Pro + Lotus Word Pro құжаты + 로투스 워드 프로 문서 + Dokument Lotus Word Pro + documento Lotus Word Pro + Documento do Lotus Word Pro + Документ Lotus Word Pro + Dokument Lotus Word Pro + Dokument Lotus Word Pro + Lotus Word Pro-dokument + Lotus Word Pro belgesi + документ Lotus Word Pro + Lotus Word Pro 文档 + Lotus Word Pro 文件 - + JET database + JET-databasis قاعدة بيانات JET Base de datos JETº - Baza źviestak JET + Baza źviestak JET База от данни — JET base de dades JET databáze JET JET-database JET-Datenbank Βάση δεδομένων JET - JET database + JET database JET-datumbazo base de datos JET JET datu-basea JET-tietokanta JET dátustovnur base de données JET + base di dâts JET bunachar sonraí JET base de datos JET מסד נתונים מסוג JET @@ -2938,7 +3012,7 @@ banca de donadas JET Baza Danych JET base de dados JET - Banco de dados JET + Banco de dados JET Bază de date JET База данных JET Databáza JET @@ -2946,19 +3020,18 @@ Bazë me të dhëna JET ЈЕТ база података JET-databas - JET veritabanı + JET veri tabanı База даних JET Cơ sở dữ liệu JET - JET 数据库 - JET 資料庫 + JET 数据库 + JET 資料庫 JET Joint Engine Technology - + - @@ -2968,6 +3041,7 @@ Microsoft Cabinet archive + Microsoft Cabinet-argief أرشيف Microsoft Cabinet Архив — Microsoft Cabinet arxiu de Microsoft Cabinet @@ -2975,12 +3049,13 @@ Microsoft Cabinet-arkiv Microsoft-Cabinet-Archiv Συμπιεσμένο αρχείο Microsoft Cabinet - Microsoft Cabinet archive + Microsoft Cabinet archive archivador Cabinet de Microsoft Microsoft Cabinet artxiboa Microsoft Cabinet -arkisto Microsoft Cabinet skjalasavn archive Cab Microsoft + archivi Cabinet Microsoft cartlann Microsoft Cabinet arquivo de Microsoft Cabinet ארכיון CAB (מיקרוסופט) @@ -2992,14 +3067,14 @@ Microsoft Cabinet アーカイブ Microsoft-ის Cabinet არქივი Microsoft Cabinet архиві - Microsoft Cabinte 압축 파일 + Microsoft Cabinet 압축 파일 Microsoft Cabinet archyvas Microsoft kabineta arhīvs Microsoft Cabinet-archief archiu Cab Microsoft Archiwum Microsoft Cabinet arquivo Microsoft Cabinet - Pacote Cabinet da Microsoft + Pacote Cabinet da Microsoft Arhivă Microsoft Cabinet Архив Microsoft Cabinet Archív Microsoft Cabinet @@ -3009,32 +3084,34 @@ Microsoft Cabinet arşivi архів Cabinet Microsoft Kho lưu Cabinet Microsoft - Microsoft Cabinet 归档文件 - 微軟 Cabinet 封存檔 + Microsoft Cabinet 归档文件 + 微軟 Cabinet 封存檔 - + Excel spreadsheet + Excel-sigblad جدول Excel - Raźlikovy akruš Excel + Raźlikovy akruš Excel Таблица — Excel full de càlcul d'Excel sešit Excel Excelregneark Excel-Tabelle Λογιστικό φύλλο Excel - Excel spreadsheet + Excel spreadsheet Excel-kalkultabelo hoja de cálculo de Excel Excel kalkulu-orria Excel-taulukko Excel rokniark feuille de calcul Excel + sfuei di calcul Excel scarbhileog Excel folla de cálculo de Excel גליון נתונים של Excel @@ -3055,7 +3132,7 @@ fuèlh de calcul Excel Arkusz Excel folha de cálculo Excel - Planilha do Excel + Planilha do Excel Foaie de calcul Excel Электронная таблица Excel Zošit Excel @@ -3063,14 +3140,14 @@ Fletë llogaritje Excel Екселова табела Excel-kalkylblad - Excel çalışma sayfası + Excel hesap çizelgesi ел. таблиця Excel Bảng tính Excel - Excel 电子表格 - Excel 試算表 + Excel 电子表格 + Excel 試算表 - + @@ -3086,17 +3163,19 @@ Excel add-in + Excel-byvoeging Приставка — Excel complement d'Excel doplněk aplikace Excel Excel-tilføjelse Excel Add-in Πρόσθετο Excel - Excel add-in + Excel add-in complemento de Excel Excel gehigarria Excel-lisäosa complément Excel + zonte Excel breiseán Excel complemento de Excel תוסף של Excel @@ -3114,7 +3193,7 @@ complement Excel Dodatek Excel Extensão Excel - Suplemento do Excel + Suplemento do Excel Дополнение Excel Doplnok aplikácie Excel Vstavek Excel @@ -3122,25 +3201,27 @@ Excel-tillägg Excel eklentisi додаток Excel - Excel 外接程序 - Excel 增益集 + Excel 外接程序 + Excel 增益集 Excel 2007 binary spreadsheet + Excel 2007 binêre sigblad Таблица — Excel 2007, двоична full de càlcul binari d'Excel 2007 binární formát sešitu Excel 2007 Binært Excel 2007-regneark Excel-2007-Tabelle (binär) Δυαδικό λογιστικό φύλλο Excel 2007 - Excel 2007 binary spreadsheet + Excel 2007 binary spreadsheet hoja de cálculo binaria de Excel 2007 Excel 2007 kalkulu-orri binarioa Excel 2007:n binaarinen taulukko feuille de calcul binaire Excel 2007 + sfuei di calcul binari Excel 2007 scarbhileog dhénártha Excel 2007 ficheiro binario de folla de cálculo Excel 2007 גיליון נתונים בינרי של Excel 2007 @@ -3158,37 +3239,39 @@ fuèlh de calcul binaire Excel 2007 Binarny arkusz Excel 2007 folha de cálculo binária Excel 2007 - Planilha binária do Excel 2007 + Planilha binária do Excel 2007 Двоичная электронная таблица Excel 2007 Binárny zošit Excel 2007 Binarna preglednica Excel 2007 Ексел 2007 бинарна табела Binärt Excel 2007-kalkylblad - Excel 2007 ikilik çalışma sayfası + Excel 2007 ikilik hesap çizelgesi бінарна електронна таблиця Excel 2007 - Excel 2007 二进制电子表格 - Excel 2007 二進位試算表 + Excel 2007 二进制电子表格 + Excel 2007 二進位試算表 Excel spreadsheet + Excel-sigblad جدول Excel - Raźlikovy akruš Excel + Raźlikovy akruš Excel Таблица — Excel full de càlcul d'Excel sešit Excel Excelregneark Excel-Tabelle Λογιστικό φύλλο Excel - Excel spreadsheet + Excel spreadsheet Excel-kalkultabelo hoja de cálculo de Excel Excel kalkulu-orria Excel-taulukko Excel rokniark feuille de calcul Excel + sfuei di calcul Excel scarbhileog Excel folla de cálculo de Excel גליון נתונים של Excel @@ -3209,7 +3292,7 @@ fuèlh de calcul Excel Arkusz Excel folha de cálculo Excel - Planilha do Excel + Planilha do Excel Foaie de calcul Excel Электронная таблица Excel Zošit Excel @@ -3217,27 +3300,30 @@ Fletë llogaritje Excel Екселова табела Excel-kalkylblad - Excel çalışma sayfası + Excel hesap çizelgesi ел. таблиця Excel Bảng tính Excel - Excel 电子表格 - Excel 試算表 + Excel 电子表格 + Excel 試算表 Excel spreadsheet template + Excel-sigbladsjabloon + Шаблон за таблица — Excel plantilla de full de càlcul d'Excel šablona tabulky Excel Excel-regnearksskabelon Excel-Tabellenvorlage Πρότυπο λογιστικού φύλλου Excel - Excel spreadsheet template - plantilla de libro de Excel + Excel spreadsheet template + plantilla de hoja de cálculo de Excel Excel kalkulu-orri txantiloia Excel-taulukkomalli modèle de feuille de calcul Excel + model sfuei di calcul Excel teimpléad scarbhileoige Excel תבנית גיליון נתונים של Excel Predložak Excel proračunske tablice @@ -3249,37 +3335,40 @@ Excel 스프레드시트 서식 Modèl de fuèlh de calcul Excel Szablon arkusza Excel - modelo de folha de cálculo Excel - Modelo de planilha do Excel + predefinição da folha de cálculo Excel + Modelo de planilha do Excel Шаблон таблицы Excel Šablóna tabuľky aplikácie Excel + Predloga preglednice Excel Екселов шаблон табеле Excel-kalkylarksmall - Excel hesap tablosu şablonu + Excel hesap çizelgesi şablonu шаблон електронної таблиці Excel - Excel 电子表格模板 - Excel 試算表範本 + Excel 电子表格模板 + Excel 試算表範本 PowerPoint presentation + PowerPoint-voorlegging عرض تقديمي PowerPoint - Prezentacyja PowerPoint + Prezentacyja PowerPoint Презентация — PowerPoint presentació de PowerPoint prezentace PowerPoint PowerPoint-præsentation PowerPoint-Präsentation Παρουσίαση PowerPoint - PowerPoint presentation + PowerPoint presentation PowerPoint-prezentaĵo presentación de PowerPoint PowerPoint aurkezpena PowerPoint-esitys PowerPoint framløga présentation PowerPoint + presentazion PowerPoint láithreoireacht PowerPoint presentación de PowerPoint מצגת PowerPoint @@ -3299,7 +3388,7 @@ presentacion PowerPoint Prezentacja PowerPoint apresentação PowerPoint - Apresentação do PowerPoint + Apresentação do PowerPoint Prezentare PowerPoint Презентация PowerPoint Prezentácia PowerPoint @@ -3310,8 +3399,8 @@ PowerPoint sunumu презентація PowerPoint Trình diễn PowerPoint - PowerPoint 演示文稿 - PowerPoint 簡報 + PowerPoint 演示文稿 + PowerPoint 簡報 @@ -3323,17 +3412,19 @@ PowerPoint add-in + PowerPoint-byvoeging Приставка — PowerPoint complement de PowerPoint doplněk PowerPoint PowerPoint-tilføjelse PowerPoint Add-in Πρόσθετο PowerPoint - PowerPoint add-in + PowerPoint add-in complemento de PowerPoint PowerPoint gehigarria PowerPoint-lisäosa complément PowerPoint + zonte PowerPoint breiseán PowerPoint complemento de PowerPoint תוסף של PowerPoint @@ -3351,7 +3442,7 @@ complement PowerPoint Dodatek PowerPoint extensão PowerPoint - Suplemento do PowerPoint + Suplemento do PowerPoint Дополнение PowerPoint Doplnok aplikácie PowerPoint Vstavek PowerPoint @@ -3359,28 +3450,30 @@ PowerPoint-tillägg PowerPoint eklentisi додаток PowerPoint - PowerPoint 外接程序 - PowerPoint 增益集 + PowerPoint 外接程序 + PowerPoint 增益集 PowerPoint presentation + PowerPoint-voorlegging عرض تقديمي PowerPoint - Prezentacyja PowerPoint + Prezentacyja PowerPoint Презентация — PowerPoint presentació de PowerPoint prezentace PowerPoint PowerPoint-præsentation PowerPoint-Präsentation Παρουσίαση PowerPoint - PowerPoint presentation + PowerPoint presentation PowerPoint-prezentaĵo presentación de PowerPoint PowerPoint aurkezpena PowerPoint-esitys PowerPoint framløga présentation PowerPoint + presentazion PowerPoint láithreoireacht PowerPoint presentación de PowerPoint מצגת PowerPoint @@ -3400,7 +3493,7 @@ presentacion PowerPoint Prezentacja PowerPoint apresentação PowerPoint - Apresentação do PowerPoint + Apresentação do PowerPoint Prezentare PowerPoint Презентация PowerPoint Prezentácia PowerPoint @@ -3411,25 +3504,28 @@ PowerPoint sunumu презентація PowerPoint Trình diễn PowerPoint - PowerPoint 演示文稿 - PowerPoint 簡報 + PowerPoint 演示文稿 + PowerPoint 簡報 PowerPoint slide + PowerPoint-skyfie Diapositiva de PowerPoint + Кадър — PowerPoint dispositiva de PowerPoint promítání PowerPoint PowerPoint-dias PowerPoint-Folie Διαφάνεια PowerPoint - PowerPoint slide + PowerPoint slide diapositiva de PowerPoint PowerPoint diapositiba PowerPoint-dia diapositive PowerPoint + diapositive PowerPoint sleamhnán PowerPoint שקופית של PowerPoint PowerPoint prezentacija @@ -3438,40 +3534,43 @@ Salindia PowerPoint Diapositiva PowerPoint PowerPoint слайды - 파워포인트 슬라이드 + PowerPoint 슬라이드 Diapositiva PowerPoint Slajd PowerPoint diapositivo PowerPoint - Slide do PowerPoint + Slide do PowerPoint Слайд PowerPoint Snímka aplikácie PowerPoint + Prosojnica PowerPoint Пауер поинт слајд PowerPoint-bildspel PowerPoint sunusu слайд PowerPoint - PowerPoint 幻灯片 - PowerPoint 投影片 + PowerPoint 幻灯片 + PowerPoint 投影片 PowerPoint presentation + PowerPoint-voorlegging عرض تقديمي PowerPoint - Prezentacyja PowerPoint + Prezentacyja PowerPoint Презентация — PowerPoint presentació de PowerPoint prezentace PowerPoint PowerPoint-præsentation PowerPoint-Präsentation Παρουσίαση PowerPoint - PowerPoint presentation + PowerPoint presentation PowerPoint-prezentaĵo presentación de PowerPoint PowerPoint aurkezpena PowerPoint-esitys PowerPoint framløga présentation PowerPoint + presentazion PowerPoint láithreoireacht PowerPoint presentación de PowerPoint מצגת PowerPoint @@ -3491,7 +3590,7 @@ presentacion PowerPoint Prezentacja PowerPoint apresentação PowerPoint - Apresentação do PowerPoint + Apresentação do PowerPoint Prezentare PowerPoint Презентация PowerPoint Prezentácia PowerPoint @@ -3502,25 +3601,28 @@ PowerPoint sunumu презентація PowerPoint Trình diễn PowerPoint - PowerPoint 演示文稿 - PowerPoint 簡報 + PowerPoint 演示文稿 + PowerPoint 簡報 PowerPoint presentation template + PowerPoint-voorleggingsjabloon Plantía de presentaciones de PowerPoint + Шаблон за презентация — PowerPoint plantilla de presentació de PowerPoint šablona prezentace PowerPoint PowerPoint-præsentationsskabelon PowerPoint-Präsentationsvorlage Πρότυπο παρουσίασης PowerPoint - PowerPoint presentation template + PowerPoint presentation template plantilla de presentación de PowerPoint PowerPoint aurkezpen txantiloia PowerPoint-esitysmalli modèle de présentation PowerPoint + model di presentazion PowerPoint teimpléad láithreoireachta PowerPoint תבנית מצגת PowerPoint Predložak PowerPoint prezentacije @@ -3529,255 +3631,230 @@ Templat presentasi PowerPoint Modello presentazione PowerPoint PowerPoint презентация үлгісі - PowerPoint 프리젠테이션 서식 + PowerPoint 프레젠테이션 서식 Modèl de presentacion PowerPoint Szablon prezentacji PowerPoint - modelo de apresentação PowerPoint - Modelo de apresentação do PowerPoint + predefinição de apresentação PowerPoint + Modelo de apresentação do PowerPoint Шаблон презентации PowerPoint Šablóna prezentácie aplikácie PowerPoint + Predloga predstavitve PowerPoint Шаблон презентације Пауер поинта PowerPoint-presentationsmall PowerPoint sunum şablonu шаблон презентації PowerPoint - PowerPoint 演示文稿模板 - PowerPoint 簡報範本 + PowerPoint 演示文稿模板 + PowerPoint 簡報範本 - Office Open XML Visio Drawing + Office Open XML Visio drawing + Чертеж — Office Open XML Visio dibuix en Office Open XML de Visio - kresba Office Open XML Visio Office Open XML Visio-tegning Office-Open-XML-Visio-Zeichnung - Σχέδιο Office Open XML Visio - Office Open XML Visio Drawing - dibujo en OOXML de Visio + Office Open XML Visio drawing + dibujo Office Open XML de Visio Office Open XML Visio marrazkia Office Open XML Visio -piirros dessin Visio Office Open XML - Líníocht Office Open XML Visio - ציור Visio ב־Open XML מבית Office Office Open XML Visio crtež Office Open XML Visio rajz - Designo Office Open XML Visio - Gambar Visio Office Open XML + Gambar Office Open XML Visio Disegno Visio Office Open XML Office Open XML Visio суреті 오피스 오픈 XML 비지오 드로잉 Rysunek Office Open XML Visio - desenho Office Open XML Visio - Desenho do Visio em Office Open XML + desenho Visio do Open Office XML + Desenho do Office Open XML Visio Рисунок Visio формата Office Open XML - Kresba aplikácie Visio Office Open XML - Офисов отворени ИксМЛ Визио цртеж - Office Open XML Visio-teckning - Office Open XML Visio Çizimi - схема VIisio у форматі Office Open XML - Office Open XML Visio 绘图 - Office Open XML Visio 繪圖 + Kresba aplikácie Office Open XML Visio + Risba Office Open XML Visio + Office Open XML Visio-ritning + Office Open XML Visio çizimi + малюнок Visio Office Open у XML + Office Open XML Visio 绘图 + Office Open XML Visio 繪圖 - Office Open XML Visio Template + Office Open XML Visio template + Шаблон за чертеж — Office Open XML Visio plantilla en Office Open XML de Visio - šablona Office Open XML Visio Office Open XML Visio-skabelon Office-Open-XML-Visio-Vorlage - Πρότυπο Office Open XML Visio - Office Open XML Visio Template - plantilla en OOXML de Visio + Office Open XML Visio template + plantilla Office Open XML de Visio Office Open XML Visio txantiloia Office Open XML Visio -malli modèle Visio Office Open XML - Teimpléad Office Open XML Visio - תבנית Visio ב־Open XML מבית Office - Predložak Office Open XML Visio + Office Open XML Visio predložak Office Open XML Visio sablon - Patrono Office Open XML Visio - Templat Visio Office Open XML + Templat Office Open XML Visio Modello Visio Office Open XML Office Open XML Visio үлгісі - 오피스 오픈 XML 비지오 서식 + 오피스 오픈 XML 비지오 양식 Szablon Office Open XML Visio - modelo Office Open XML Visio - Modelo do Visio em Office Open XML + predefinição Visio do Open Office XML + Modelo Office Open XML Visio Шаблон Visio формата Office Open XML - Šablóna aplikácie Visio Office Open XML - Офисов отворени ИксМЛ Визио шаблон + Šablóna aplikácie Office Open XML Visio + Predloga Office Open XML Visio Office Open XML Visio-mall - Office Open XML Visio Şablonu - шаблон Visio у форматі Office Open XML - Office Open XML Visio 模板 - Office Open XML Visio 範本 + Office Open XML Visio şablonu + шаблон Visio Office Open у XML + Office Open XML Visio 模板 + Office Open XML Visio 範本 - Office Open XML Visio Stencil + Office Open XML Visio stencil + Образци — Office Open XML Visio patró en Office Open XML de Visio - objekty Office Open XML Visio Office Open XML Visio-stencil Office-Open-XML-Visio-Schablone - Office Open XML Visio Stencil - esténcil en OOXML de Visio + Office Open XML Visio stencil + galería de símbolos Office Open XML de Visio Office Open XML Visio txantiloia - Office Open XML Visio -kaavio + Office Open XML Visio -malli stencil Visio Office Open XML - Stionsal Office Open XML Visio - דגם ל־Visio ב־Open XML מבית Office Office Open XML Visio šablona Office Open XML Visio stencil - Stencil Office Open XML Visio - Stensil Visio Office Open XML + Stensil Office Open XML Visio Stencil Visio Office Open XML - Office Open XML пішімінің Visio трафареті + Office Open XML Visio трафареті 오피스 오픈 XML 비지오 스텐실 Wzór Office Open XML Visio - Stencil Office Open XML Visio - Estêncil do Visio em Office Open XML + estêncil Visio do Open Office XML + Estêncil do Office Open XML Visio Трафарет Visio формата Office Open XML - Objekt aplikácie Visio Office Open XML - Офисов отворени ИксМЛ Визио шаблон Office Open XML Visio-stencil - Office Open XML Visio Kalıbı - трафарет Visio у форматі Office Open XML - Office Open XML Visio 模具 - Office Open XML Visio 圖形樣本 + Office Open XML Visio kalıbı + трафарет Visio Office Open у XML + Office Open XML Visio 模具 - Office Open XML Visio Drawing + Office Open XML Visio drawing + Чертеж — Office Open XML Visio dibuix en Office Open XML de Visio - kresba Office Open XML Visio Office Open XML Visio-tegning Office-Open-XML-Visio-Zeichnung - Σχέδιο Office Open XML Visio - Office Open XML Visio Drawing - dibujo en OOXML de Visio + Office Open XML Visio drawing + dibujo Office Open XML de Visio Office Open XML Visio marrazkia Office Open XML Visio -piirros dessin Visio Office Open XML - Líníocht Office Open XML Visio - ציור Visio ב־Open XML מבית Office Office Open XML Visio crtež Office Open XML Visio rajz - Designo Office Open XML Visio - Gambar Visio Office Open XML + Gambar Office Open XML Visio Disegno Visio Office Open XML Office Open XML Visio суреті 오피스 오픈 XML 비지오 드로잉 Rysunek Office Open XML Visio - desenho Office Open XML Visio - Desenho do Visio em Office Open XML + desenho Visio do Open Office XML + Desenho do Office Open XML Visio Рисунок Visio формата Office Open XML - Kresba aplikácie Visio Office Open XML - Офисов отворени ИксМЛ Визио цртеж - Office Open XML Visio-teckning - Office Open XML Visio Çizimi - схема VIisio у форматі Office Open XML - Office Open XML Visio 绘图 - Office Open XML Visio 繪圖 + Kresba aplikácie Office Open XML Visio + Risba Office Open XML Visio + Office Open XML Visio-ritning + Office Open XML Visio çizimi + малюнок Visio Office Open у XML + Office Open XML Visio 绘图 + Office Open XML Visio 繪圖 - Office Open XML Visio Template + Office Open XML Visio template + Шаблон за чертеж — Office Open XML Visio plantilla en Office Open XML de Visio - šablona Office Open XML Visio Office Open XML Visio-skabelon Office-Open-XML-Visio-Vorlage - Πρότυπο Office Open XML Visio - Office Open XML Visio Template - plantilla en OOXML de Visio + Office Open XML Visio template + plantilla Office Open XML de Visio Office Open XML Visio txantiloia Office Open XML Visio -malli modèle Visio Office Open XML - Teimpléad Office Open XML Visio - תבנית Visio ב־Open XML מבית Office - Predložak Office Open XML Visio + Office Open XML Visio predložak Office Open XML Visio sablon - Patrono Office Open XML Visio - Templat Visio Office Open XML + Templat Office Open XML Visio Modello Visio Office Open XML Office Open XML Visio үлгісі - 오피스 오픈 XML 비지오 서식 + 오피스 오픈 XML 비지오 양식 Szablon Office Open XML Visio - modelo Office Open XML Visio - Modelo do Visio em Office Open XML + predefinição Visio do Open Office XML + Modelo Office Open XML Visio Шаблон Visio формата Office Open XML - Šablóna aplikácie Visio Office Open XML - Офисов отворени ИксМЛ Визио шаблон + Šablóna aplikácie Office Open XML Visio + Predloga Office Open XML Visio Office Open XML Visio-mall - Office Open XML Visio Şablonu - шаблон Visio у форматі Office Open XML - Office Open XML Visio 模板 - Office Open XML Visio 範本 + Office Open XML Visio şablonu + шаблон Visio Office Open у XML + Office Open XML Visio 模板 + Office Open XML Visio 範本 - Office Open XML Visio Stencil + Office Open XML Visio stencil + Образци — Office Open XML Visio patró en Office Open XML de Visio - objekty Office Open XML Visio Office Open XML Visio-stencil Office-Open-XML-Visio-Schablone - Office Open XML Visio Stencil - esténcil en OOXML de Visio + Office Open XML Visio stencil + galería de símbolos Office Open XML de Visio Office Open XML Visio txantiloia - Office Open XML Visio -kaavio + Office Open XML Visio -malli stencil Visio Office Open XML - Stionsal Office Open XML Visio - דגם ל־Visio ב־Open XML מבית Office Office Open XML Visio šablona Office Open XML Visio stencil - Stencil Office Open XML Visio - Stensil Visio Office Open XML + Stensil Office Open XML Visio Stencil Visio Office Open XML - Office Open XML пішімінің Visio трафареті + Office Open XML Visio трафареті 오피스 오픈 XML 비지오 스텐실 Wzór Office Open XML Visio - Stencil Office Open XML Visio - Estêncil do Visio em Office Open XML + estêncil Visio do Open Office XML + Estêncil do Office Open XML Visio Трафарет Visio формата Office Open XML - Objekt aplikácie Visio Office Open XML - Офисов отворени ИксМЛ Визио шаблон Office Open XML Visio-stencil - Office Open XML Visio Kalıbı - трафарет Visio у форматі Office Open XML - Office Open XML Visio 模具 - Office Open XML Visio 圖形樣本 + Office Open XML Visio kalıbı + трафарет Visio Office Open у XML + Office Open XML Visio 模具 Word document + Word-dokument مستند Word Documentu de Word - Dakument Word + Dakument Word Документ — Word document Word dokument Word Worddokument Word-Dokument Έγγραφο Word - Word document + Word document Word-dokumento documento de Word Word dokumentua Word-asiakirja Word skjal document Word + document Word cáipéis Word documento de Word מסמך Word @@ -3797,7 +3874,7 @@ document Word Dokument Word documento Word - Documento do Word + Documento do Word Document Word Документ Word Dokument Word @@ -3808,25 +3885,28 @@ Word belgesi документ Word Tài liệu Word - Word 文档 - Word 文件 + Word 文档 + Word 文件 Word document template + Word-dokumentsjabloon Plantía de documentu de Word + Шаблон за документ — Word plantilla de document Word šablona dokumentu Word Word-dokumentskabelon Word-Dokumentvorlage Πρότυπο έγγραφο Word - Word document template + Word document template plantilla de documento de Word Word dokumentuaren txantiloia Word-asiakirjamalli modèle de document Word + model di document Word teimpléad Word תבנית מסמך Word Predložak Word dokumenta @@ -3839,37 +3919,48 @@ modèl de document Word Szablon dokumentu Word modelo de documento Word - Modelo de documento do Word + Modelo de documento do Word Шаблон документа Word Šablóna dokumentu aplikácie Word + Predloga dokumenta Word Шаблон Ворд документа Word-dokumentmall Word belgesi şablonu шаблон документа Word - Word 文档模板 - Word 文件範本 + Word 文档模板 + Word 文件範本 + OpenXPS document + OpenXPS + Open XML Paper Specification + + + + + XPS document + XPS-dokument مستند XPS Documentu XPS - Dakument XPS + Dakument XPS Документ — XPS document XPS dokument XPS XPS-dokument XPS-Dokument Έγγραφο XPS - XPS document + XPS document XPS-dokumento documento XPS XPS dokumentua XPS-asiakirja XPS skjal document XPS + document XPS cáipéis XPS documento XPS מסמך XPS @@ -3889,7 +3980,7 @@ document XPS Dokument XPS documento XPS - Documento XPS + Documento XPS Document XPS Документ XPS Dokument XPS @@ -3900,34 +3991,34 @@ XPS belgesi документ XPS Tài liệu XPS - XPS 文档 - XPS 文件 + XPS 文档 + XPS 文件 XPS - Open XML Paper Specification + XML Paper Specification - - Microsoft Works document + Microsoft Works-dokument مستند Microsoft Works Documentu de Microsoft Works - Dakument Microsoft Works + Dakument Microsoft Works Документ — Microsoft Works document de Microsoft Works dokument Microsoft Works Microsoft Works-dokument Microsoft-Works-Dokument Έγγραφο Microsoft Works - Microsoft Works document + Microsoft Works document documento de Microsoft Works Microsoft Works dokumentua Microsoft Works -asiakirja Microsoft Works skjal document Microsoft Works + document Microsoft Works cáipéis Microsoft Works documento de Microsoft Works מסמך Microsoft Works @@ -3948,7 +4039,7 @@ document Microsoft Works Dokument Microsoft Works documento Microsoft Works - Documento do Microsoft Works + Documento do Microsoft Works Document Microsoft Works Документ Microsoft Works Dokument Microsoft Works @@ -3959,8 +4050,8 @@ Microsoft Works belgesi документ Microsoft Works Tài liệu Microsoft Works - Microsoft Works 文档 - 微軟 Works 文件 + Microsoft Works 文档 + 微軟 Works 文件 @@ -3971,6 +4062,7 @@ Microsoft Visio document + Microsoft Visio-dokument Documentu de Microsoft Visio Документ — Microsoft Visio document de Microsoft Visio @@ -3978,11 +4070,12 @@ Microsoft Visio-dokument Microsoft-Visio-Dokument Έγγραφο Microsoft Visio - Microsoft Visio document + Microsoft Visio document documento de Microsoft Visio Microsoft Visio dokumentua Microsoft Visio -asiakirja document Microsoft Visio + document Microsoft Visio cáipéis Microsoft Visio Documento de Microsoft Visio מסמך @@ -4000,7 +4093,7 @@ document Microsoft Visio Dokument Microsoft Visio documento Microsoft Visio - Documento do Microsoft Visio + Documento do Microsoft Visio Документ Microsoft Visio Dokument Microsoft Visio Dokument Microsoft Visio @@ -4008,8 +4101,8 @@ Microsoft Visio-dokument Microsoft Visio belgesi документ Microsoft Visio - Microsoft Visio 文档 - Microsoft Visio文件 + Microsoft Visio 文档 + 微軟 Visio 文件 @@ -4019,22 +4112,24 @@ Word document + Word-dokument مستند Word Documentu de Word - Dakument Word + Dakument Word Документ — Word document Word dokument Word Worddokument Word-Dokument Έγγραφο Word - Word document + Word document Word-dokumento documento de Word Word dokumentua Word-asiakirja Word skjal document Word + document Word cáipéis Word documento de Word מסמך Word @@ -4054,7 +4149,7 @@ document Word Dokument Word documento Word - Documento do Word + Documento do Word Document Word Документ Word Dokument Word @@ -4065,20 +4160,20 @@ Word belgesi документ Word Tài liệu Word - Word 文档 - Word 文件 + Word 文档 + Word 文件 - - - - - - - - - + + + + + + + + + @@ -4087,22 +4182,24 @@ Word template + Word-sjabloon قالب Word Plantía de Word - Šablon Word + Šablon Word Шаблон за документи — Word plantilla de Word šablona Word Wordskabelon Word-Vorlage Πρότυπο έγγραφο Word - Word template + Word template Word-ŝablono plantilla de Word Word txantiloia Word-malli Word formur modèle Word + model Word teimpléad Word Plantilla de Word תבנית Word @@ -4122,7 +4219,7 @@ modèl Word Szablon Word modelo Word - Modelo do Word + Modelo do Word Șablon Word Шаблон Word Šablóna Word @@ -4133,25 +4230,28 @@ Word şablonu шаблон Word Mẫu Word - Word 模板 - Word 範本 + Word 模板 + Word 範本 GML document + GML-dokument Documentu GML + Документ — GML document GML dokument GML GML-dokument GML-Dokument Έγγραφο GML - GML document + GML document documento GML GML dokumentua GML-asiakirja document GML + document GML cáipéis GML Documento GML מסמך GML @@ -4163,11 +4263,12 @@ GML ドキュメント GML құжаты GML 문서 + GML dokumentas GML dokuments document GML Dokument GML documento GML - Documento GML + Documento GML Документ GML Dokument GML Dokument GML @@ -4175,8 +4276,8 @@ GML-dokument GML belgesi документ GML - GML 文档 - GML 文件 + GML 文档 + GML 文件 GML Geography Markup Language @@ -4185,20 +4286,22 @@ GNUnet search file + GNUnet-soeklêer ملف بحث GNUnet - fajł pošuku GNUnet + fajł pošuku GNUnet Указател за търсене — GNUnet fitxer de cerca GNUnet vyhledávací soubor GNUnet GNunet-søgefil GNUnet-Suchdatei Αρχείο αναζήτησης GNUnet - GNUnet search file + GNUnet search file archivo de búsqueda GNUnet GNUnet bilaketako fitxategia GNUnet-hakutiedosto GNUnet leitifíla fichier de recherche GNUnet + file di ricercje GNUnet comhad cuardaigh GNUnet ficheiro de busca de GNUnet קובץ חיפוש של GNUnet @@ -4219,7 +4322,7 @@ fichièr de recèrca GNUnet Plik wyszukiwania GNUnet ficheiro de procura GNUnet - Arquivo de pesquisa do GNUnet + Arquivo de pesquisa do GNUnet Fișier căutare GNUnet Файл поиска GNUnet Vyhľadávací súbor GNUnet @@ -4230,30 +4333,32 @@ GNUnet arama dosyası файл пошуку GNUnet Tập tin tìm kiếm GNUnet - GNUnet 搜索文件 - GNUnet 搜尋檔案 + GNUnet 搜索文件 + GNUnet 搜尋檔案 - + TNEF message + TNEF-boodskap رسالة TNEF Mensaxe TNEF - List TNEF + List TNEF Съобщение — TNEF missatge TNEF zpráva TNEF TNEF-meddelelse TNEF-Nachricht Μήνυμα TNEF - TNEF message + TNEF message mensaje TNEF TNEF mezua TNEF-viesti TNEF boð message TNEF + messaç TNEF teachtaireacht TNEF mensaxe TNEF הודעת TNEF @@ -4273,7 +4378,7 @@ messatge TNEF Wiadomość TNEF mensagem TNEF - Mensagem TNEF + Mensagem TNEF Mesaj TNEF Сообщение TNEF Správa TNEF @@ -4284,12 +4389,12 @@ TNEF iletisi повідомлення TNEF Thông điệp TNEF - TNEF 信件 - TNEF 訊息 + TNEF 信件 + TNEF 訊息 TNEF Transport Neutral Encapsulation Format - + @@ -4298,9 +4403,10 @@ StarCalc spreadsheet + StarCalc-sigblad جدول StarCalc StarCalc hesab cədvəli - Raźlikovy arkuš StarCalc + Raźlikovy arkuš StarCalc Таблица — StarCalc full de càlcul de StarCalc sešit StarCalc @@ -4308,13 +4414,14 @@ StarCalc-regneark StarCalc-Tabelle Λογιστικό φύλλο StarCalc - StarCalc spreadsheet + StarCalc spreadsheet StarCalc-kalkultabelo hoja de cálculo de StarCalc StarCalc kalkulu-orria StarCalc-taulukko StarCalc rokniark feuille de calcul StarCalc + sfuei di calcul StarCalc scarbhileog StarCalc folla de cálculo de StarCalc גליון נתונים של StarCalc @@ -4335,7 +4442,7 @@ fuèlh de calcul StarCalc Arkusz StarCalc folha de cálculo do StarCalc - Planilha do StarCalc + Planilha do StarCalc Foaie de calcul StarCalc Электронная таблица StarCalc Zošit StarCalc @@ -4343,19 +4450,20 @@ Fletë llogaritjesh StarCalc Стар калк табела StarCalc-kalkylblad - StarCalc çalışma sayfası + StarCalc hesap çizelgesi ел. таблиця StarCalc Bảng tính StarCalc - StarCalc 电子表格 - StarCalc 試算表 + StarCalc 电子表格 + StarCalc 試算表 StarChart chart + StarChart-grafiek مخطط StarChart StarChart cədvəli - Dyjahrama StarChart + Dyjahrama StarChart Диаграма — StarChart diagrama de StarChart graf StarChart @@ -4363,13 +4471,14 @@ StarChart-diagram StarChart-Diagramm Γράφημα StarChart - StarChart chart + StarChart chart StarChart-diagramo gráfico de StarChart StarChart diagrama StarChart-kaavio StarChart strikumynd graphique StarChart + grafic StarChart cairt StarChart gráfica de StarChart טבלה של StarChart @@ -4390,7 +4499,7 @@ grafic StarChart Wykres StarChart gráfico do StarChart - Gráfico do StarChart + Gráfico do StarChart Diagramă StarChart Диаграмма StarChart Graf StarChart @@ -4398,19 +4507,20 @@ Grafik StarChart График Стар Графика StarChart-diagram - StarChart çizgelgesi + StarChart çizgesi діаграма StarChart Đồ thị StarChart - StarCalc 图表 - StarChart 圖表 + StarCalc 图表 + StarChart 圖表 StarDraw drawing + StarDraw-tekening تصميم StarDraw StarDraw çəkimi - Rysunak StarDraw + Rysunak StarDraw Чертеж — StarDraw dibuix de StarDraw kresba StarDraw @@ -4418,13 +4528,14 @@ StarDraw-tegning StarDraw-Zeichnung Σχέδιο StarDraw - StarDraw drawing + StarDraw drawing StarDraw-grafikaĵo dibujo de StarDraw StarDraw marrazkia StarDraw-piirros StarDraw tekning dessin StarDraw + dissen StarDraw líníocht StarDraw debuxo de StarDraw ציור של StarDrawing @@ -4445,7 +4556,7 @@ dessenh StarDraw Rysunek StarDraw desenho do StarDraw - Desenho do StarDraw + Desenho do StarDraw Desen StarDraw Рисунок StarDraw Kresba StarDraw @@ -4456,16 +4567,17 @@ StarDraw çizimi малюнок StarDraw Bản vẽ StarDraw - StarDraw 绘图 - StarDraw 繪圖 + StarDraw 绘图 + StarDraw 繪圖 StarImpress presentation + StarImpress-voorlegging عرض تقديمي StarImpress StarImpress təqdimatı - Prezentacyja StarImpress + Prezentacyja StarImpress Презентация — StarImpress presentació de StarImpress prezentace StarImpress @@ -4473,13 +4585,14 @@ StarImpress-præsentation StarImpress-Präsentation Παρουσίαση StarImpress - StarImpress presentation + StarImpress presentation StarImpress-prezentaĵo presentación de StarImpress StarImpress aurkezpena StarImpress-esitys StarImpress framløga présentation StarImpress + presentazion StarImpress láithreoireacht StarImpress presentación de StarImpress מצגת של StarImpress @@ -4500,7 +4613,7 @@ presentacion StarImpress Prezentacja StarImpress apresentação do StarImpress - Apresentação do StarImpress + Apresentação do StarImpress Prezentare StarImpress Презентация StarImpress Prezentácia StarImpress @@ -4511,29 +4624,31 @@ StarImpress sunumu презентація StarImpress Trình diễn StarImpress - StarImpress 演示文稿 - StarImpress 簡報檔 + StarImpress 演示文稿 + StarImpress 簡報 StarMail email + StarMail-e-pos بريد StarMail الإلكتروني - Email StarMail + Email StarMail Електронно писмо — StarMail correu electrònic de StarMail e-mail StarMail StarMail-e-brev StarMail-E-Mail Ηλ. μήνυμα StarMail - StarMail email + StarMail email StarMail-retpoŝto correo electrónico de StarMail StarMail helb.el. StarMail-sähköposti StarMail t-postur courriel StarMail + e-mail StarMail ríomhphost StarMail Correo electrónico de StarMail דוא״ל של StarMail @@ -4554,7 +4669,7 @@ corrièr electronic StarMail E-Mail StarMail email do StarMail - E-mail do StarMail + E-mail do StarMail Email StarEmail Электронное письмо StarMail E-mail StarMail @@ -4565,27 +4680,29 @@ StarMail epostası поштове повідомлення StarMail Thư điện tử StarMail - StarMail 电子邮件 - StarMail 郵件 + StarMail 电子邮件 + StarMail 郵件 StarMath formula + StarMath-formule صيغة StarMath - Formuła StarMath + Formuła StarMath Формула — StarMath fórmula de StarMath vzorec StarMath StarMath-formel StarMath-Formel Μαθηματικός τύπος StarMath - StarMath formula + StarMath formula StarMath-formulo fórmula de StarMath StarMath formula StarMath-kaava StarMath frymil formule StarMath + formule StarMath foirmle StarMath fórmula de StarMath נוסחה של StarMath @@ -4606,7 +4723,7 @@ formula StarMath Formuła StarMath fórmula do StarMath - Fórmula do StarMath + Fórmula do StarMath Formulă StarMath Формула StarMath Vzorec StarMath @@ -4617,17 +4734,18 @@ StarMath formülü формула StarMath Công thức StarMath - StarMath 公式 - StarMath 公式 + StarMath 公式 + StarMath 公式 StarWriter document + StarWriter-dokument مستند StarWriter Documentu de StarWriter StarWriter sənədi - Dakument StarWriter + Dakument StarWriter Документ — StarWriter document StarWriter dokument StarWriter @@ -4635,13 +4753,14 @@ StarWriter-dokument StarWriter-Dokument Έγγραφο StarWriter - StarWriter document + StarWriter document StarWriter-dokumento documento de StarWriter StarWriter dokumentua StarWriter-asiakirja StarWriter skjal document StarWriter + document StarWriter cáipéis StarWriter documento de StarWriter מסמך של StarWriter @@ -4662,7 +4781,7 @@ document StarWriter Dokument StarWriter documento do StarWriter - Documento do StarWriter + Documento do StarWriter Document StarWriter Документ StarWriter Dokument StarWriter @@ -4673,33 +4792,35 @@ StarWriter belgesi документ StarWriter Tài liệu StarWriter - StarWriter 文档 - StarWriter 文件 + StarWriter 文档 + StarWriter 文件 - + OpenOffice Calc spreadsheet + OpenOffice Calc-sigblad جدول Calc المكتب المفتوح - Raźlikovy arkuš OpenOffice Calc + Raźlikovy arkuš OpenOffice Calc Таблица — OpenOffice Calc full de càlcul d'OpenOffice Calc sešit OpenOffice Calc OpenOffice Calc-regneark OpenOffice-Calc-Tabelle Λογιστικό φύλλο OpenOffice Calc - OpenOffice Calc spreadsheet - hoja de cálculo de OpenOffice Calc + OpenOffice Calc spreadsheet + hoja de cálculo de LibreOffice Calc OpenOffice.org Calc kalkulu-orria OpenOffice Calc -taulukko OpenOffice Calc rokniark feuille de calcul OpenOffice Calc + sfuei di calcul OpenOffice Calc scarbhileog OpenOffice Calc folla de cálculo de OpenOffice Calc גליון נתונים של OpenOffice Calc @@ -4718,9 +4839,9 @@ OpenOffice.org Calc-rekenblad OpenOffice Calc-rekneark fuèlh de calcul OpenOffice Calc - Arkusz kalkulacyjny OpenOffice.org Calc + Arkusz OpenOffice.org Calc folha de cálculo OpenOffice Calc - Planilha do OpenOffice Calc + Planilha do OpenOffice Calc Foaie de calcul OpenOffice Calc Электронная таблица OpenOffice Calc Zošit OpenOffice Calc @@ -4728,17 +4849,17 @@ Fletë llogaritjesh OpenOffice Calc Табела Опен Офис Рачуна OpenOffice Calc-kalkylblad - OpenOffice Calc çalışma sayfası + OpenOffice Calc hesap çizelgesi ел. таблиця OpenOffice Calc Bảng tính Calc của OpenOffice.org - OpenOffice Calc 电子表格 - OpenOffice Calc 試算表 + OpenOffice Calc 电子表格 + OpenOffice Calc 試算表 - - - + + + @@ -4746,20 +4867,22 @@ OpenOffice Calc template + OpenOffice Calc-sjabloon قالب Calc المكتب المفتوح - Šablon OpenOffice Calc + Šablon OpenOffice Calc Шаблон за таблици — OpenOffice Calc plantilla d'OpenOffice Calc šablona OpenOffice Calc OpenOffice Calc-skabelon OpenOffice-Calc-Vorlage Πρότυπο OpenOffice Calc - OpenOffice Calc template - plantilla de OpenOffice Calc + OpenOffice Calc template + plantilla de LibreOffice Calc OpenOffice Calc txantiloia OpenOffice Calc -malli OpenOffice Calc formur modèle OpenOffice Calc + model OpenOffice Calc teimpléad OpenOffice Calc modelo de OpenOffice Calc תבנית של OpenOffice Calc @@ -4780,7 +4903,7 @@ modèl OpenOffice Calc Szablon arkusza OpenOffice.org Calc modelo OpenOffice Calc - Modelo do OpenOffice Calc + Modelo do OpenOffice Calc Șablon OpenOffice Calc Шаблон OpenOffice Calc Šablóna OpenOffice Calc @@ -4791,14 +4914,14 @@ OpenOffice Calc şablonu шаблон ел.таблиці OpenOffice Calc Mẫu bảng tính Calc của OpenOffice.org - OpenOffice Calc 模板 - OpenOffice Calc 範本 + OpenOffice Calc 模板 + OpenOffice Calc 範本 - - - + + + @@ -4806,20 +4929,22 @@ OpenOffice Draw drawing + OpenOffice Draw-tekening تصميم Draw المكتب المفتوح - Rysunak OpenOffice Draw + Rysunak OpenOffice Draw Чертеж — OpenOffice Draw dibuix d'OpenOffice Draw kresba OpenOffice Draw OpenOffice Draw-tegning OpenOffice-Draw-Zeichnung Σχέδιο OpenOffice Draw - OpenOffice Draw drawing - dibujo de OpenOffice Draw + OpenOffice Draw drawing + dibujo de LibreOffice Draw OpenOffice.org Draw marrazkia OpenOffice Draw -piirros OpenOffice Draw tekning dessin OpenOffice Draw + dissen OpenOffice Draw líníocht OpenOffice Draw debuxo de OpenOffice Draw ציור של OpenOffice Draw @@ -4840,7 +4965,7 @@ dessenh OpenOffice Draw Rysunek OpenOffice.org Draw desenho OpenOffice Draw - Desenho do OpenOffice Draw + Desenho do OpenOffice Draw Desen OpenOffice Draw Рисунок OpenOffice Draw Kresba OpenOffice Draw @@ -4851,14 +4976,14 @@ OpenOffice Draw çizimi малюнок OpenOffice Draw Bản vẽ Draw của OpenOffice.org - OpenOffice Draw 绘图 - OpenOffice Draw 繪圖 + OpenOffice Draw 绘图 + OpenOffice Draw 繪圖 - - - + + + @@ -4866,20 +4991,22 @@ OpenOffice Draw template + OpenOffice Draw-sjabloon قالب Draw المكتب المفتوح - Šablon OpenOffice Draw + Šablon OpenOffice Draw Шаблон за чертежи — OpenOffice Draw plantilla d'OpenOffice Draw šablona OpenOffice Draw OpenOffice Draw-skabelon OpenOffice-Draw-Vorlage Πρότυπο OpenOffice Draw - OpenOffice Draw template - plantilla de OpenOffice Draw + OpenOffice Draw template + plantilla de LibreOffice Draw OpenOffice Draw txantiloia OpenOffice Draw -malli OpenOffice Draw formur modèle OpenOffice Draw + model OpenOffice Draw  teimpléad OpenOffice Draw modelo de OpenOffice Draw תבנית של OpenOffice Draw @@ -4900,7 +5027,7 @@ modèl OpenOffice Draw Szablon rysunku OpenOffice.org Draw modelo OpenOffice Draw - Modelo do OpenOffice Draw + Modelo do OpenOffice Draw Șablon OpenOffice Draw Шаблон OpenOffice Draw Šablóna OpenOffice Draw @@ -4911,14 +5038,14 @@ OpenOffice Draw şablonu шаблон малюнку OpenOffice Draw Mẫu bản vẽ Draw của OpenOffice.org - OpenOffice Draw 模板 - OpenOffice Draw 範本 + OpenOffice Draw 模板 + OpenOffice Draw 範本 - - - + + + @@ -4926,9 +5053,10 @@ OpenOffice Impress presentation + OpenOffice Impress-voorlegging عرض تقديمي Impress المكتب المفتوح OpenOffice Impress sənədi - Prezentacyja OpenOffice Impress + Prezentacyja OpenOffice Impress Презентация — OpenOffice Impress presentació d'OpenOffice Impress prezentace OpenOffice Impress @@ -4936,12 +5064,13 @@ OpenOffice Impress-præsentation OpenOffice-Impress-Vorlage Παρουσίαση OpenOffice Impress - OpenOffice Impress presentation - presentación de OpenOffice Impress + OpenOffice Impress presentation + presentación de LibreOffice Impress OpenOffice.org Impress aurkezpena OpenOffice Impress -esitys OpenOffice Impress framløga présentation OpenOffice Impress + presentazion OpenOffice Impress láithreoireacht OpenOffice Impress presentación de de OpenOffice Impress מצגת של OpenOffice Impress @@ -4962,7 +5091,7 @@ presentacion OpenOffice Impress Prezentacja OpenOffice.org Impress apresentação OpenOffice Impress - Apresentação do OpenOffice Impress + Apresentação do OpenOffice Impress Prezentare OpenOffice Impress Презентация OpenOffice Impress Prezentácia OpenOffice Impress @@ -4973,14 +5102,14 @@ OpenOffice Impress sunumu презентація OpenOffice Impress Trình diễn Impress của OpenOffice.org - OpenOffice Impress 演示文稿 - OpenOffice Impress 簡報 + OpenOffice Impress 演示文稿 + OpenOffice Impress 簡報 - - - + + + @@ -4988,20 +5117,22 @@ OpenOffice Impress template + OpenOffice Impress-sjabloon قالب Impress المكتب المفتوح - Šablon OpenOffice Impress + Šablon OpenOffice Impress Шаблон за презентации — OpenOffice Impress plantilla d'OpenOffice Impress šablona OpenOffice Impress OpenOffice Impress-skabelon OpenOffice-Impress-Vorlage Πρότυπο OpenOffice Impress - OpenOffice Impress template - plantilla de OpenOffice Impress + OpenOffice Impress template + plantilla de LibreOffice Impress OpenOffice Impress txantiloia OpenOffice Impress -malli OpenOffice Impress formur modèle OpenOffice Impress + model OpenOffice Impress teimpléad OpenOffice Impress modelo de OpenOffice Impress תבנית של OpenOffice Impress @@ -5022,7 +5153,7 @@ modèl OpenOffice Impress Szablon prezentacji OpenOffice.org Impress modelo OpenOffice Impress - Modelo do OpenOffice Impress + Modelo do OpenOffice Impress Șablon OpenOffice Impress Шаблон OpenOffice Impress Šablóna OpenOffice Impress @@ -5033,14 +5164,14 @@ OpenOffice Impress şablonu шаблон презентації OpenOffice Impress Mẫu trình diễn Impress của OpenOffice.org - OpenOffice Impress 模板 - OpenOffice Impress 範本 + OpenOffice Impress 模板 + OpenOffice Impress 範本 - - - + + + @@ -5048,20 +5179,22 @@ OpenOffice Math formula + OpenOffice Math-formule صيغة Math المكتب المفتوح - Formuła OpenOffice Math + Formuła OpenOffice Math Формула — OpenOffice Math fórmula d'OpenOffice Math vzorec OpenOffice Math OpenOffice Math-formel OpenOffice-Math-Formel Μαθηματικός τύπος OpenOffice Math - OpenOffice Math formula - fórmula de OpenOffice Math + OpenOffice Math formula + fórmula de LibreOffice Math OpenOffice.org Math formula OpenOffice Math -kaava OpenOffice Math frymil formule OpenOffice Math + formule OpenOffice Math foirmle OpenOffice Math fórmula de OpenOffice Math נוסחה של OpenOffice Math @@ -5082,7 +5215,7 @@ formula OpenOffice Math Formuła OpenOffice.org Math fórmula OpenOffice Math - Fórmula do OpenOffice Math + Fórmula do OpenOffice Math Formulă OpenOffice Math Формула OpenOffice Math Vzorec OpenOffice Math @@ -5093,14 +5226,14 @@ OpenOffice Math formülü формула OpenOffice Math Công thức Math của OpenOffice.org - OpenOffice Math 公式 - OpenOffice Math 公式 + OpenOffice Math 公式 + OpenOffice Math 公式 - - - + + + @@ -5108,10 +5241,11 @@ OpenOffice Writer document + OpenOffice Writer-dokument مستند Writer المكتب المفتوح Documentu d'OpenOffice Writer OpenOffice Writer sənədi - Dakument OpenOffice Writer + Dakument OpenOffice Writer Документ — OpenOffice Writer document d'OpenOffice Writer dokument OpenOffice Writer @@ -5119,12 +5253,13 @@ OpenOffice Writer-dokument OpenOffice-Writer-Dokument Έγγραφο OpenOffice Writer - OpenOffice Writer document - documento de OpenOffice Writer + OpenOffice Writer document + documento de LibreOffice Writer OpenOffice.org Writer dokumentua OpenOffice Writer -asiakirja OpenOffice Writer skjal document OpenOffice Writer + document OpenOffice Writer cáipéis OpenOffice Writer documento de OpenOffice Writer מסמך של OpenOffice Writer @@ -5145,7 +5280,7 @@ document OpenOffice Writer Dokument OpenOffice.org Writer documento OpenOffice Writer - Documento do OpenOffice Writer + Documento do OpenOffice Writer Document OpenOffice Writer Документ OpenOffice Writer Dokument OpenOffice Writer @@ -5156,14 +5291,14 @@ OpenOffice Writer belgesi документ OpenOffice Writer Tài liệu Writer của OpenOffice.org - OpenOffice Writer 文档 - OpenOffice Writer 文件 + OpenOffice Writer 文档 + OpenOffice Writer 文件 - - - + + + @@ -5171,23 +5306,25 @@ OpenOffice Writer global document + OpenOffice Writer globale dokument مستند المكتب المفتوح Writer العالمي Documentu global d'OpenOffice Writer OpenOffice Writer qlobal sənədi - Hlabalny dakument OpenOffice Writer - Документ - глобален — OpenOffice Writer + Hlabalny dakument OpenOffice Writer + Глобален документ — OpenOffice Writer document global d'OpenOffice Writer globální dokument OpenOffice Writer Dogfen eang OpenOffice (Writer) OpenOffice Writer-globalt dokument OpenOffice-Writer-Globaldokument Καθολικό έγγραφο OpenOffice Writer - OpenOffice Writer global document - documento global de OpenOffice Writer + OpenOffice Writer global document + documento global de LibreOffice Writer OpenOffice.org Writer dokumentu globala OpenOffice Writer - yleinen asiakirja OpenOffice Writer heiltøkt skjal document global OpenOffice Writer + document globâl OpenOffice Writer cáipéis chomhchoiteann OpenOffice Writer documento global de OpenOffice Writer מסמך גלובלי של OpenOffice Writer @@ -5208,7 +5345,7 @@ document global OpenOffice Writer Globalny dokument OpenOffice.org Writer documento global OpenOffice Writer - Documento global do OpenOffice Writer + Documento global do OpenOffice Writer Document global OpenOffice Writer Основной документ OpenOffice Writer Globálny dokument OpenOffice Writer @@ -5219,14 +5356,14 @@ OpenOffice Writer global belgesi загальний документ OpenOffice Writer Tài liệu toàn cục Writer của OpenOffice.org - OpenOffice Writer 全局文档 - OpenOffice Writer 主控文件 + OpenOffice Writer 全局文档 + OpenOffice Writer 主控文件 - - - + + + @@ -5234,9 +5371,10 @@ OpenOffice Writer template + OpenOffice Writer-sjabloon قالب Writer المكتب المفتوح OpenOffice Writer şablonu - Šablon OpenOffice Writer + Šablon OpenOffice Writer Шаблон за документи — OpenOffice Writer plantilla d'OpenOffice Writer šablona OpenOffice Writer @@ -5244,12 +5382,13 @@ OpenOffice Writer-skabelon OpenOffice-Writer-Vorlage Πρότυπο OpenOffice Writer - OpenOffice Writer template - plantilla de OpenOffice Writer + OpenOffice Writer template + plantilla de LibreOffice Writer OpenOffice Writer txantiloia OpenOffice Writer -malli OpenOffice Writer formur modèle OpenOffice Writer + model OpenOffice Writer teimpléad OpenOffice Writer modelo de OpenOffice Writer תסנית של OpenOffice Writer @@ -5271,7 +5410,7 @@ modèl OpenOffice Writer Szablon dokumentu OpenOffice.org Writer modelo OpenOffice Writer - Modelo do OpenOffice Writer + Modelo do OpenOffice Writer Șablon OpenOffice Writer Шаблон OpenOffice Writer Šablóna OpenOffice Writer @@ -5282,14 +5421,14 @@ OpenOffice Writer şablonu шаблон документа OpenOffice Writer Mẫu tài liệu Writer của OpenOffice.org - OpenOffice Writer 模板 - OpenOffice Writer 範本 + OpenOffice Writer 模板 + OpenOffice Writer 範本 - - - + + + @@ -5297,22 +5436,24 @@ ODT document + ODT-dokument مستند ODT Documentu ODT - Dakument ODT + Dakument ODT Документ — ODT document ODT dokument ODT ODT-dokument ODT-Dokument Έγγραφο ODT - ODT document + ODT document ODT-dokumento documento ODT ODT dokumentua ODT-asiakirja ODT skjal document ODT + document ODT cáipéis ODT documento ODT מסמך ODT @@ -5333,7 +5474,7 @@ document ODT Dokument ODT documento ODT - Documento ODT + Documento ODT Document ODT Документ ODT Dokument ODT @@ -5344,16 +5485,16 @@ ODT belgesi документ ODT Tài liệu ODT - ODT 文档 - ODT 文件 + ODT 文档 + ODT 文件 ODT OpenDocument Text - - - + + + @@ -5361,6 +5502,7 @@ ODT document (Flat XML) + ODT-dokument (plat XML) مستند ODT (Flat XML) Documentu ODT (XML planu) Документ — ODT (само XML) @@ -5369,12 +5511,13 @@ ODT-dokument (flad XML) ODT-Dokument (Unkomprimiertes XML) Έγγραφο ODT (Flat XML) - ODT document (Flat XML) + ODT document (Flat XML) documento ODT (XML plano) ODT dokumentua (XML soila) ODT-asiakirja (Flat XML) ODT skjal (Flat XML) document ODT (XML plat) + document ODT (XML sempliç) cáipéis ODT (XML cothrom) documento ODT (XML plano) מסמך ODT‏ (Flat XML) @@ -5393,7 +5536,7 @@ document ODT (XML plat) Dokument ODT (prosty XML) documento ODT (XML plano) - Documento ODT (Flat XML) + Documento ODT (Flat XML) Document ODT (XML simplu) Документ ODT (простой XML) Dokument ODT (čisté XML) @@ -5402,8 +5545,8 @@ ODT-dokument (platt XML) ODT belgesi (Düz XML) документ ODT (Flat XML) - ODT 文档(Flat XML) - ODT 文件 (Flat XML) + ODT 文档(Flat XML) + ODT 文件 (Flat XML) FODT OpenDocument Text (Flat XML) @@ -5412,21 +5555,23 @@ ODT template + ODT-sjabloon قالب ODT - Šablon ODT + Šablon ODT Шаблон за документи — ODT plantilla ODT šablona ODT ODT-skabelon ODT-Vorlage Πρότυπο ODT - ODT template + ODT template ODT-ŝablono plantilla ODT ODT txantiloia ODT-malli ODT formur modèle ODT + model ODT teimpléad ODT modelo ODT תבנית ODT @@ -5447,7 +5592,7 @@ modèl ODT Szablon ODT modelo ODT - Modelo ODT + Modelo ODT Șablon ODT Шаблон ODT Šablóna ODT @@ -5458,16 +5603,16 @@ ODT şablonu шаблон ODT Mẫu ODT - ODT 模板 - ODT 範本 + ODT 模板 + ODT 範本 ODT OpenDocument Text - - - + + + @@ -5475,21 +5620,23 @@ OTH template + OTH-sjabloon قالب OTH - Šablon OTH + Šablon OTH Шаблон за страници — OTH plantilla OTH šablona OTH OTH-skabelon OTH-Vorlage Πρότυπο OTH - OTH template + OTH template OTH-ŝablono plantilla OTH OTH txantiloia OTH-malli OTH formur modèle OTH + model OTH teimpléad OTH modelo OTH תבנית OTH @@ -5510,7 +5657,7 @@ modèl OTH Szablon OTH modelo OTH - Modelo OTH + Modelo OTH Șablon OTH Шаблон OTH Šablóna OTH @@ -5521,16 +5668,16 @@ OTH şablonu шаблон OTH Mẫu ODH - OTH 模板 - OTH 範本 + OTH 模板 + OTH 範本 OTH OpenDocument HTML - - - + + + @@ -5538,22 +5685,24 @@ ODM document + ODM-dokument مستند ODM Documentu ODM - Dakument ODM + Dakument ODM Документ — ODM document ODM dokument ODM ODM-dokument ODM-Dokument Έγγραφο ODM - ODM document + ODM document ODM-dokumento documento ODM ODM dokumentua ODM-asiakirja ODM skjal document ODM + document ODM cáipéis ODM documento ODM מסמך ODM @@ -5574,7 +5723,7 @@ document ODM Dokument ODM documento ODM - Documento ODM + Documento ODM Document ODM Документ ODM Dokument ODM @@ -5585,16 +5734,16 @@ ODM belgesi документ ODM Tài liệu ODM - ODM 文档 - ODM 文件 + ODM 文档 + ODM 文件 ODM OpenDocument Master - - - + + + @@ -5602,21 +5751,23 @@ ODG drawing + ODG-tekening تصميم ODG - Rysunak ODG + Rysunak ODG Чертеж — ODG dibuix ODG kresba ODG ODG-tegning ODG-Zeichnung Σχέδιο ODG - ODG drawing + ODG drawing ODG-desegnaĵo dibujo ODG ODG marrazkia ODG-piirros ODG tekning dessin ODG + dissen ODG líníocht ODG debuxo ODG ציור ODG @@ -5637,7 +5788,7 @@ dessenh ODG Rysunek ODG desenho ODG - Desenho ODG + Desenho ODG Desen ODG Рисунок ODG Kresba ODG @@ -5648,16 +5799,16 @@ ODG çizimi малюнок ODG Bản vẽ ODG - ODG 绘图 - ODG 繪圖 + ODG 绘图 + ODG 繪圖 ODG OpenDocument Drawing - - - + + + @@ -5665,6 +5816,7 @@ ODG drawing (Flat XML) + ODG-tekening (plat XML) رسمة ODG (Flat XML) Чертеж — ODG (само XML) dibuix ODG (XML pla) @@ -5672,12 +5824,13 @@ ODG-tegning (flad XML) ODG-Zeichnung (Unkomprimiertes XML) Σχέδιο ODG (Flat XML) - ODG drawing (Flat XML) + ODG drawing (Flat XML) dibujo ODG (XML plano) ODG marrazkia (XML soila) ODG-piirros (Flat XML) ODG tekning (Flat XML) dessin ODG (XML plat) + dissen ODG (XML sempliç) líníocht ODG (XML cothrom) debuxo ODB (XML plano) ציור ODG (Flat XML( @@ -5696,7 +5849,7 @@ dessenh ODG (XML plat) Rysunek ODG (prosty XML) desenho ODG (XML plano) - Desenho ODG (Flat XML) + Desenho ODG (Flat XML) Desen ODG (XML simplu) Рисунок ODG (простой XML) Kresba ODG (čisté XML) @@ -5704,9 +5857,9 @@ ОДГ цртеж (Обичан ИксМЛ) ODG-teckning (platt XML) ODG çizimi (Düz XML) - малюнок ODG (Flat XML) - ODG 绘图(Flat XML) - ODG 繪圖 (Flat XML) + малюнок ODG (простий XML) + ODG 绘图(Flat XML) + ODG 繪圖 (Flat XML) FODG OpenDocument Drawing (Flat XML) @@ -5715,21 +5868,23 @@ ODG template + ODG-sjabloon قالب ODG - Šablon ODG + Šablon ODG Шаблон за чертежи — ODG plantilla ODG šablona ODG ODG-skabelon ODG-Vorlage Πρότυπο ODG - ODG template + ODG template ODG-ŝablono plantilla ODG ODG txantiloia ODG-malli ODG formur modèle ODG + model ODG teimpléad ODG modelo ODG תבנית ODG @@ -5750,7 +5905,7 @@ modèl ODG Szablon ODG modelo ODG - Modelo ODG + Modelo ODG Șablon ODG Шаблон ODG Šablóna ODG @@ -5761,16 +5916,16 @@ ODG şablonu шаблон ODG Mẫu ODG - ODG 模板 - ODG 範本 + ODG 模板 + ODG 範本 ODG OpenDocument Drawing - - - + + + @@ -5778,21 +5933,23 @@ ODP presentation + ODP-voorlegging عرض تقديمي ODP - Prezentacyja ODP + Prezentacyja ODP Презентация — ODP presentació ODP prezentace ODP ODP-præsentation ODP-Präsentation Παρουσίαση ODP - ODP presentation + ODP presentation ODP-prezentaĵo presentación ODP ODP aurkezpena ODP-esitys ODP framløga présentation ODP + presentazion ODP láithreoireacht ODP presentación ODP מצגת ODP @@ -5813,7 +5970,7 @@ presentacion ODP Prezentacja ODP apresentação ODP - Apresentação ODP + Apresentação ODP Prezentare ODP Презентация ODP Prezentácia ODP @@ -5824,16 +5981,16 @@ ODP sunumu презентація ODP Trình diễn ODM - ODP 演示文稿 - ODP 簡報 + ODP 演示文稿 + ODP 簡報 ODP OpenDocument Presentation - - - + + + @@ -5841,6 +5998,7 @@ ODP presentation (Flat XML) + ODP-voorlegging (plat XML) عرض ODP (Flat XML) Презентация — ODP (само XML) presentació ODP (XML pla) @@ -5848,12 +6006,13 @@ ODP-præsentation (flad XML) ODP-Präsentation (Unkomprimiertes XML) Παρουσίαση ODP (Flat XML) - ODP presentation (Flat XML) + ODP presentation (Flat XML) presentación ODP (XML plano) ODP aurkezpena (XML soila) ODP-esitys (Flat XML) ODP framløga (Flat XML) présentation ODP (XML plat) + presentazion ODP (XML sempliç) láithreoireacht ODP (XML cothrom) presentación ODP (XML plano) מצגת ODP‏ (Flat XML) @@ -5872,7 +6031,7 @@ presentacion ODP (XML plat) Prezentacja ODP (prosty XML) apresentação ODP (XML plano) - Apresentação ODP (Flat XML) + Apresentação ODP (Flat XML) Prezentare ODP (XML simplu) Презентация ODP (простой XML) Prezentácia ODP (čisté XML) @@ -5881,8 +6040,8 @@ ODP-presentation (platt XML) ODP sunumu (Düz XML) презентація ODP (Flat XML) - ODP 演示文稿(Flat XML) - ODP 範本 (Flat XML) + ODP 演示文稿(Flat XML) + ODP 範本 (Flat XML) FODP OpenDocument Presentation (Flat XML) @@ -5891,21 +6050,23 @@ ODP template + ODP-sjabloon قالب ODP - Šablon ODP + Šablon ODP Шаблон за презентации — ODP plantilla ODP šablona ODP ODP-skabelon ODP-Vorlage Πρότυπο ODP - ODP template + ODP template ODP-ŝablono plantilla ODP ODP txantiloia ODP-malli ODP formur modèle ODP + model ODP teimpléad ODP modelo ODP תבנית ODP @@ -5926,7 +6087,7 @@ modèl ODP Szablon ODP modelo ODP - Modelo ODP + Modelo ODP Șablon ODP Шаблон ODP Šablóna ODP @@ -5937,16 +6098,16 @@ ODP şablonu шаблон ODP Mẫu ODP - ODP 模板 - ODP 範本 + ODP 模板 + ODP 範本 ODP OpenDocument Presentation - - - + + + @@ -5954,21 +6115,23 @@ ODS spreadsheet + ODS-sigblad جدول ODS - Raźlikovy arkuš ODS + Raźlikovy arkuš ODS Таблица — ODS full de càlcul ODS sešit ODS ODS-regneark ODS-Tabelle Λογιστικό φύλλο ODS - ODS spreadsheet + ODS spreadsheet ODS-kalkultabelo hoja de cálculo ODS ODS kalkulu-orria ODS-taulukko ODS rokniark feuille de calcul ODS + sfuei di calcul ODS scarbhileog ODS folla de cálculo ODS גליון נתונים ODS @@ -5989,7 +6152,7 @@ fuèlh de calcul ODS Arkusz ODS folha de cálculo ODS - Planilha ODS + Planilha ODS Foaie de calcul ODS Электронная таблица ODS Zošit ODS @@ -5997,19 +6160,19 @@ Fletë llogaritjesh ODS ОДС табела ODS-kalkylblad - ODS çalışma sayfası + ODS hesap çizelgesi ел. таблиця ODS Bảng tính ODS - ODS 电子表格 - ODS 試算表 + ODS 电子表格 + ODS 試算表 ODS OpenDocument Spreadsheet - - - + + + @@ -6017,6 +6180,7 @@ ODS spreadsheet (Flat XML) + ODS-sigblad (plat XML) جدول ODS (Flat XML) Таблица — ODS (само XML) full de càlcul ODS (XML pla) @@ -6024,12 +6188,13 @@ ODS-regneark (flad XML) ODS-Tabelle (Unkomprimiertes XML) Λογιστικό φύλλο ODS (Flat XML) - ODS spreadsheet (Flat XML) + ODS spreadsheet (Flat XML) hoja de cálculo ODS (XML plano) ODS kalkulu-orria (XML soila) ODS-laskentataulukko (Flat XML) ODS rokniark (Flat XML) feuille de calcul ODS (XML plat) + sfuei di calcul ODS (XML sempliç) scarbhileog ODS (XML cothrom) folla de cálculo ODS (XML plano) גליון נתונים ODS‏ (XML פשוט) @@ -6048,17 +6213,17 @@ fuèlh de calcul ODS (XML plat) Arkusz ODS (prosty XML) folha de cálculo ODS (XML plano) - Planilha ODS (Flat XML) + Planilha ODS (Flat XML) Foaie de calcul ODS (XML simplu) Электронная таблица ODS (простой XML) Zošit ODS (čisté XML) Preglednica ODS (nepovezan XML) ОДС табела (обични ИксМЛ) ODS-kalkylblad (platt XML) - ODS sunumu (Düz XML) + ODS hesap çizelgesi (Düz XML) ел. таблиця ODS (Flat XML) - ODS 电子表格 (Flat XML) - ODS 試算表 (Flat XML) + ODS 电子表格 (Flat XML) + ODS 試算表 (Flat XML) FODS OpenDocument Spreadsheet (Flat XML) @@ -6067,21 +6232,23 @@ ODS template + ODS-sjabloon قالب ODS - Šablon ODS + Šablon ODS Шаблон за таблици — ODS plantilla ODS šablona ODS ODS-skabelon ODS-Vorlage Πρότυπο ODS - ODS template + ODS template ODS-ŝablono plantilla ODS ODS txantiloia ODS-malli ODS formur modèle ODS + model ODS teimpléad ODS modelo ODS תבנית ODS @@ -6102,7 +6269,7 @@ modèl ODS Szablon ODS modelo ODS - Modelo ODS + Modelo ODS Șablon ODS Шаблон ODS Šablóna ODS @@ -6113,16 +6280,16 @@ ODS şablonu шаблон ODS Mẫu ODS - ODS 模板 - ODS 範本 + ODS 模板 + ODS 範本 ODS OpenDocument Spreadsheet - - - + + + @@ -6130,21 +6297,23 @@ ODC chart + ODC-grafiek مخطط ODC - Dyjahrama ODC + Dyjahrama ODC Диаграма — ODC diagrama ODC graf ODC ODC-diagram ODC-Diagramm Διάγραμμα ODC - ODC chart + ODC chart ODC-diagramo gráfico ODC ODC diagrama ODC-kaavio ODC strikumynd graphique ODC + grafic ODC cairt ODC gráfica ODC תו ODC @@ -6164,7 +6333,7 @@ grafic ODC Wykres ODC gráfico ODC - Gráfico ODC + Gráfico ODC Diagramă ODC Диаграмма ODC Graf ODC @@ -6172,19 +6341,19 @@ Grafik ODC ОДЦ график ODC-diagram - ODC çizelgesi + ODC çizgesi діаграма ODC Sơ đồ ODC - ODC 图表 - ODC 圖表 + ODC 图表 + ODC 圖表 ODC OpenDocument Chart - - - + + + @@ -6192,6 +6361,7 @@ ODC template + ODC-sjabloon قالب ODC Шаблон за диаграми — ODC plantilla ODC @@ -6199,13 +6369,14 @@ ODC-skabelon ODC-Vorlage Πρότυπο ODC - ODC template + ODC template ODC-ŝablono plantilla ODC ODC txantiloia ODC-malli ODC formur modèle ODC + model ODC teimpléad ODC modelo ODC תבנית ODC @@ -6224,7 +6395,7 @@ modèl ODC Szablon ODC modelo ODC - Modelo ODC + Modelo ODC Șablon ODC Шаблон ODC Šablóna ODC @@ -6234,16 +6405,16 @@ ODC şablonu шаблон ODC Mẫu ODC - ODC 模板 - ODC 範本 + ODC 模板 + ODC 範本 ODC OpenDocument Chart - - - + + + @@ -6251,21 +6422,23 @@ ODF formula + ODF-formule صيغة ODF - Formuła ODF + Formuła ODF Формула — ODF fórmula ODF vzorec ODF ODF-formel ODF-Formel Μαθηματικός τύπος ODF - ODF formula + ODF formula ODF-formulo fórmula ODF ODF formula ODF-kaava ODF frymil formule ODF + formule ODF foirmle ODF Fórula ODF נוסחת ODF @@ -6286,7 +6459,7 @@ formula ODF Formuła ODF fórmula ODF - Fórmula ODF + Fórmula ODF Formulă ODF Формула ODF Vzorec ODF @@ -6297,16 +6470,16 @@ ODF formülü формула ODF Công thức ODF - ODF 公式 - ODF 公式 + ODF 公式 + ODF 公式 ODF OpenDocument Formula - - - + + + @@ -6314,6 +6487,7 @@ ODF template + ODF-sjabloon قالب ODF Шаблон за формули — ODF plantilla ODF @@ -6321,13 +6495,14 @@ ODF-skabelon ODF-Vorlage Πρότυπο ODF - ODF template + ODF template ODF-ŝablono plantilla ODF ODF txantiloia ODF-malli ODF formur modèle ODF + model ODF teimpléad ODF modelo ODF תבנית ODF @@ -6346,7 +6521,7 @@ modèl ODF Szablon ODF modelo ODF - Modelo ODF + Modelo ODF Șablon ODF Шаблон ODF Šablóna ODF @@ -6356,16 +6531,16 @@ ODF şablonu шаблон ODF Mẫu ODF - ODF 模板 - ODF 範本 + ODF 模板 + ODF 範本 ODF OpenDocument Formula - - - + + + @@ -6373,21 +6548,23 @@ ODB database + ODB-databasis قاعدة بيانات ODB - Baza źviestak ODB + Baza źviestak ODB База от данни — ODB base de dades ODB databáze ODB ODB-database ODB-Datenbank Βάση δεδομένων ODB - ODB database + ODB database ODB-datumbazo base de datos ODB ODB datu-basea ODB-tietokanta ODB dátustovnur base de données ODB + base di dâts ODB bunachar sonraí ODB base de datos ODB מסד נתונים ODB @@ -6408,7 +6585,7 @@ banca de donadas ODB Baza danych ODB base de dados ODB - Banco de dados ODB + Banco de dados ODB Bază de date ODB База данных ODB Databáza ODB @@ -6416,19 +6593,19 @@ Bazë me të dhëna ODB ОДБ база података ODB-databas - ODB veritabanı + ODB veri tabanı база даних ODB Cơ sở dữ liệu ODB - ODB 数据库 - ODB 資料庫 + ODB 数据库 + ODB 資料庫 ODB OpenDocument Database - - - + + + @@ -6437,22 +6614,24 @@ ODI image + ODI-beeld صورة ODI Imaxe ODI - Vyjava ODI + Vyjava ODI Изображение — ODI imatge ODI obrázek ODI ODI-billede ODI-Bild Εικόνα ODI - ODI image + ODI image ODI-bildo imagen ODI ODI irudia ODI-kuva ODI mynd image ODI + imagjin ODI íomhá ODI imaxe ODI תמונת ODI @@ -6473,7 +6652,7 @@ imatge ODI Obraz ODI imagem ODI - Imagem ODI + Imagem ODI Imagine ODI Изображение ODI Obrázok ODI @@ -6484,16 +6663,16 @@ ODI görüntüsü зображення ODI Ảnh ODI - ODI 图像 - ODI 影像 + ODI 图像 + ODI 影像 ODI OpenDocument Image - - - + + + @@ -6501,21 +6680,23 @@ OpenOffice.org extension + OpenOffice.org-uitbreiding امتداد OpenOffice.org Estensión d'OpenOffice.org - Pašyreńnie OpenOffice.org - Разширение — OpenOffice + Pašyreńnie OpenOffice.org + Приставка — OpenOffice extensió d'OpenOffice.org rozšíření OpenOffice.org OpenOffice.org-udvidelse OpenOffice.org-Erweiterung Επέκταση OpenOffice.org - OpenOffice.org extension + OpenOffice.org extension extensión de LibreOffice OpenOffice.org luzapena OpenOffice.org-laajennus OpenOffice.org víðkan extension OpenOffice.org + estension OpenOffice.org eisínteacht OpenOffice.org Extensión de OpenOffice.org הרחבה של OpenOffice.org @@ -6535,7 +6716,7 @@ extension OpenOffice.org Rozszerzenie OpenOffice.org extensão OpenOffice.org - Extensão do OpenOffice + Extensão do OpenOffice Extensie OpenOffice.org Расширение OpenOffice.org Rozšírenie OpenOffice.org @@ -6546,14 +6727,15 @@ OpenOffice.org eklentisi розширення OpenOffice.org Phần mở rộng của OpenOffice.org - OpenOffice.org 扩展 - OpenOffice.org 擴充套件 + OpenOffice.org 扩展 + OpenOffice.org 擴充套件 Android package + Android-pakket Paquete d'Android Пакет — Android paquet d'Android @@ -6561,12 +6743,13 @@ Android-pakke Android-Paket Πακέτο Android - Android package + Android package Android-pakaĵo paquete de Android Android paketea Android-paketti paquet Android + pachet Android pacáiste Android paquete de Android חבילת אנדרויד @@ -6579,12 +6762,13 @@ Android-ის პაკეტი Android дестесі Android 패키지 + Android paketas Android pakotne Android pakket paquet Android Pakiet Androida pacote Android - Pacote do Android + Pacote do Android Пакет Android Balík Android Paket Android @@ -6592,29 +6776,31 @@ Android-paket Android paketi пакунок Android - Android 应用包 - Android 軟體包 + Android 应用包 + Android 軟體包 SIS package + SIS-pakket حزمة SIS Paquete SIS - Pakunak SIS + Pakunak SIS Пакет — SIS paquet SIS balíček SIS SIS-pakke SIS-Paket Πακέτο SIS - SIS package + SIS package SIS-pakaĵo paquete SIS SIS paketea SIS-paketti SIS pakki paquet SIS + pachet SIS pacáiste SIS paquete SIS חבילת SIS @@ -6634,7 +6820,7 @@ paquet SIS Pakiet SIS pacote SIS - Pacote SIS + Pacote SIS Pachet SIS Пакет SIS Balíček SIS @@ -6645,34 +6831,36 @@ SIS paketi пакунок SIS Gói SIS - SIS 软件包 - SIS 軟體包 + SIS 软件包 + SIS 軟體包 SIS Symbian Installation File - + SISX package + SISX-pakket حزمة SISX Paquete SISX - Pakunak SISX + Pakunak SISX Пакет — SISX paquet SISX balíček SISX SISX-pakke SISX-Paket Πακέτο SISX - SISX package + SISX package SISX-pakaĵo paquete SISX SISX paketea SISX-paketti SISX pakki paquet SISX + pachet SISX pacáiste SISX paquete SISX חבילת SISX @@ -6692,7 +6880,7 @@ paquet SISX Pakiet SISX pacote SISX - Pacote SISX + Pacote SISX Pachet SISX Пакет SISX Balíček SISX @@ -6703,59 +6891,44 @@ SISX paketi пакунок SISX Gói SISX - SISX 软件包 - SISX 軟體包 + SISX 软件包 + SISX 軟體包 SIS Symbian Installation File - + - Network Packet Capture - Прихванати пакети по мрежата + network packet capture + Прихванати мрежови пакети captura de paquets de xarxa - Network Packet Capture - Netværkspakkeoptegnelse - Netzwerk-Paketmitschnitt - Σύλληψη πακέτων δικτύου - Network Packet Capture - captura de paquete de red - Sareko pakete kaptura - Verkkopakettien kaappaus + Netværkspakkeoptagelse + Netzwerkpaketmitschnitt + network packet capture + captura de paquetes de red + sareko pakete kaptura + verkkopakettien kaappaus capture de paquet réseau - Gabháltas Paicéid Líonra - Captura de Network Packet - לכידה של מנות נתונים ברשת Mrežno hvatanje paketa - Hálózati csomagelfogás - Captura de pacchettos de rete - Tangkapan Paket Jaringan + hálózaticsomag-rögzítés + tangkapan paket jaringan Cattura pacchetti rete - ネットワークパケットキャプチャー - ქსელური პაკეტის ანაბეჭდი ұсталған желілік пакеттер 네트워크 패킷 캡처 - Network Packet Capture - Network Packet Capture - captura de paquet ret Przechwycenie pakietu sieciowego - captura Network Packet - Pacote de captura de rede - Захваченные сетевые пакеты - Zachytené sieťové pakety - Zajem omrežnih paketov - Снимање мрежног пакета - Fångst av nätverkspaket - Ağ Paket Yakalaması - перехоплені дані мережевих пакетів - 网络包抓取 - 網路封包捕捉 - - - + captura dos pacotes de rede + Captura de pacotes de rede + захваченные сетевые пакеты + nätverkspaketsspårning + ağ paket yakalaması + перехоплення мережевого пакета + 网络数据包抓取 + + + @@ -6765,10 +6938,11 @@ WordPerfect document + WordPerfect-dokument مستند WordPerfect Documentu de WordPerfect WordPerfect sənədi - Dakument WordPerfect + Dakument WordPerfect Документ — WordPerfect document WordPerfect dokument WordPerfect @@ -6776,13 +6950,14 @@ WordPerfect-dokument WordPerfect-Dokument Έγγραφο WordPerfect - WordPerfect document + WordPerfect document WordPerfect-dokumento documento de WordPerfect WordPerfect dokumentua WordPerfect-asiakirja WordPerfect skjal document WordPerfect + document WordPerfect cáipéis WordPerfect documento de WordPerfect מסמך WordPerfect @@ -6803,7 +6978,7 @@ document WordPerfect Dokument WordPerfect documento WordPerfect - Documento do WordPerfect + Documento do WordPerfect Document WordPerfect Документ WordPerfect Dokument WordPerfect @@ -6814,14 +6989,14 @@ WordPerfect belgesi документ WordPerfect Tài liệu WordPerfect - WordPerfect 文档 - WordPerfect 文件 + WordPerfect 文档 + WordPerfect 文件 - - + + @@ -6831,126 +7006,125 @@ - YouTube Media Archive + YouTube media archive + Медиен архив — YouTube + arxiu de mitjans de YouTube + YouTube-mediearkiv + YouTube-Medienarchiv + YouTube media archive + archivador multimedia de YouTube + YouTube media fitxategia + YouTube-media-arkisto + archive média YouTube + YouTube medijska arhiva + YouTube médiaarchívum + Arsip media YouTube + Archivio multimediale YouTube + YouTube медиа архиві + 유튜브 미디어 저장 파일 + Archiwum multimediów YouTube + arquivo multimédia do YouTube + Arquivo de mídia do Youtube + Медиа-архив YouTube + Archív médií YouTube + YouTube-mediaarkiv + YouTube ortam arşivi + мультимедійний архів YouTube + YouTube 媒体存档 - SPSS Portable Data File - ملف بيانات SPSS متنقلة + SPSS portable data file Данни — SPSS, преносими fitxer de dades portables SPSS - soubor přenositelných dat SPSS - Portabel SPSS-datafil + SPSS portable data-fil SPSS portable Datendatei - Φορητό αρχείο δεδομένων SPSS - SPSS Portable Data File - archivo de datos portátil de SPSS - SPSS datuen fitxategi eramangarria - SPSS flytifør dátufíla + SPSS portable data file + archivo de datos portátiles de SPSS + SPSS datu fitxategi eramangarria + Siirrettävä SPSS-tiedosto fichier portable de données SPSS - comhad iniompartha sonraí SPSS - ficheiro de datos portábel SPSS - קובץ מידע נייד SPSS SPSS prenosiva podatkovna datoteka SPSS hordozható adatfájl - File portabile de datos SPSS - Berkas Data Portabel SPSS + Berkas data portabel SPSS File dati SPSS Portable - SPSS ポータブルデータファイル - SPSS тасымалы ақпарат файлы - SPSS 이동식 데이터 파일 - SPSS perkeliamų duomenų failas - SPSS pārvietojamu datu datne - SPSS Portable Databestand - fichièr portable de donadas SPSS + SPSS тасымалы деректер файлы + SPSS 휴대 데이터 파일 Plik przenośnych danych SPSS ficheiro de dados portátil SPSS - Arquivo de Dados Portáteis SPSS - Fișier portabil de date SPSS + Arquivo de dados portáteis SPSS Файл переносимых данных SPSS - Súbor prenosných dát SPSS - Prenosna podatkovna datoteka SPSS - СПСС датотека преносних података - Portabel SPSS-datafil - SPSS Taşınabilir Veri Dosyası - файл даних SPSS Portable - SPSS 便携式数据文件 - SPSS 可攜式資料檔 + Súbor prenosných údajov SPSS + SPSS portabel datafil + SPSS taşınabilir veri dosyası + портативний файл даних SPSS + SPSS 便携式数据文件 + SPSS 可攜資料檔 + SPSS + Statistical Package for the Social Sciences - + - SPSS Data File - ملف بيانات SPSS + SPSS data file Данни — SPSS fitxer de dades SPSS - datový soubor SPSS - SPSS-datafil + SPSS data-fil SPSS-Datendatei - Αρχείο δεδομένων SPSS - SPSS Data File - archivo de datos SPSS - SPSS datuen fitxategia + SPSS data file + archivo de datos de SPSS + SPSS datu fitxategia SPSS-datatiedosto - SPSS dátufíla fichier de données SPSS - comhad sonraí SPSS - ficheiro de datos SPSS - קובץ מידע SPSS SPSS podatkovna datoteka SPSS adatfájl - File de datos SPSS - Berkas Data SPSS + Berkas data SPSS File dati SPSS - SPSS データファイル - SPSS ақпарат файлы + SPSS деректер файлы SPSS 데이터 파일 - SPSS duomenų failas - SPSS datu datne - SPSS Databstand - fichièr de donadas SPSS Plik danych SPSS ficheiro de dados SPSS - Arquivo de dados SPSS - Fișier date SPSS + Arquivo de dados SPSS Файл данных SPSS - Dátový súbor SPSS - Podatkovna datoteka SPSS - СПСС датотека података + Súbor údajov SPSS SPSS-datafil - SPSS Veri Dosyası + SPSS veri dosyası файл даних SPSS - SPSS 数据文件 - SPSS 資料檔 + SPSS 数据文件 + SPSS 資料檔 + SPSS + Statistical Package for the Social Sciences - - + + XBEL bookmarks + XBEL-boekmerke علامات XBEL - Zakładki XBEL + Zakładki XBEL Отметки — XBEL llista d'adreces d'interès XBEL záložky XBEL XBEL-bogmærker XBEL-Lesezeichen Σελιδοδείκτες XBEL - XBEL bookmarks + XBEL bookmarks XBEL-legosignoj marcadores XBEL XBEL laster-markak XBEL-kirjanmerkit XBEL bókamerki marque-pages XBEL + segnelibris XBEL leabharmharcanna XBEL Marcadores XBEL סימניית XBEL @@ -6971,7 +7145,7 @@ marcapaginas XBEL Zakładki XBEL marcadores XBEL - Marcadores do XBEL + Marcadores do XBEL Semne de carte XBEL Закладки XBEL Záložky XBEL @@ -6982,35 +7156,37 @@ XBEL yer imleri закладки XBEL Liên kết đã lưu XBEL - XBEL 书签 - XBEL 格式書籤 + XBEL 书签 + XBEL 格式書籤 XBEL XML Bookmark Exchange Language - + 7-zip archive + 7-zip-argief أرشيف 7-zip Archivu 7-zip - Archiŭ 7-zip + Archiŭ 7-zip Архив — 7-zip arxiu 7-zip archiv 7-zip 7-zip-arkiv 7zip-Archiv Συμπιεσμένο αρχείο 7-zip - 7-zip archive + 7-zip archive 7z-arkivo archivador 7-zip 7-zip artxiboa 7-zip-arkisto 7-zip skjalasavn archive 7-zip + archivi 7-zip cartlann 7-zip arquivo 7-zip ארכיון 7-zip @@ -7031,7 +7207,7 @@ archiu 7-zip Archiwum 7-zip arquivo 7-zip - Pacote 7-Zip + Pacote 7-Zip Arhivă 7-zip Архив 7-zip Archív 7-zip @@ -7042,32 +7218,34 @@ 7-Zip arşivi архів 7-zip Kho nén 7-zip - 7-zip 归档文件 - 7-zip 封存檔 + 7-zip 归档文件 + 7-zip 封存檔 - + AbiWord document + AbiWord-dokument مستند آبي وورد Documentu d'AbiWord - Dakument AbiWord + Dakument AbiWord Документ — AbiWord document AbiWord dokument AbiWord AbiWord-dokument AbiWord-Dokument Έγγραφο AbiWord - AbiWord document + AbiWord document AbiWord-dokumento documento de Abiword AbiWord dokumentua AbiWord-asiakirja AbiWord skjal document AbiWord + document AbiWord cáipéis AbiWord documento de AbiWord מסמך AbiWord @@ -7089,7 +7267,7 @@ document AbiWord Dokument AbiWord documento AbiWord - Documento do AbiWord + Documento do AbiWord Document AbiWord Документ AbiWord Dokument AbiWord @@ -7100,13 +7278,13 @@ AbiWord belgesi документ AbiWord Tài liệu AbiWord - AbiWord 文档 - AbiWord 文件 + AbiWord 文档 + AbiWord 文件 - - + + @@ -7117,18 +7295,19 @@ CD image cuesheet صفيحة صورة الـCD جديلة - Infarmacyjny arkuš vyjavy CD - Описание на изображение на CD + Infarmacyjny arkuš vyjavy CD + Съдържание на CD «cuesheet» d'imatge de CD rozvržení stop obrazu CD Cd-aftrykscuesheet CD-Abbild-Cuesheet Φύλλο cue εικόνας CD - CD image cuesheet + CD image cuesheet hoja CUE de imagen de CD CD irudiaren CUE orria CD-vedos cuesheet index de pistes de CD + sfuei-brivade CUE de imagjin CD bileog chiúála íomhá CD cue sheet dunha imaxe de CD גליון נתונים לתמונת דיסק @@ -7147,8 +7326,8 @@ CD-bilete-indeksfil indèx de pistas de CD Obraz cuesheet płyty CD - índice de CD de imagem - Índice de Imagem de CD + índice de imagem do CD + Índice de Imagem de CD Imagine CD cuesheet Таблица содержания образа CD Rozvrhnutie stôp obrazu CD @@ -7156,21 +7335,22 @@ Cuesheet imazhi CD Кју лист ЦД одраза Indexblad för cd-avbild - CD görüntüsü belgesi + CD görüntüsü çizelgesi таблиця CUE образу CD Tờ tín hiệu báo ảnh CD - CD 映像标记文件 - CD 映像指示表 + CD 映像标记文件 + CD 映像指示表 Lotus AmiPro document + Lotus AmiPro-dokument مستند Lotus AmiPro Documentu de Lotus AmiPro Lotus AmiPro sənədi - Dakument Lotus AmiPro + Dakument Lotus AmiPro Документ — Lotus AmiPro document de Lotus AmiPro dokument Lotus AmiPro @@ -7178,13 +7358,14 @@ Lotus AmiPro-dokument Lotus-AmiPro-Dokument Έγγραφο Lotus AmiPro - Lotus AmiPro document + Lotus AmiPro document dokumento de Lotus AmiPro documento de Lotus AmiPro Lotus AmiPro dokumentua Lotus AmiPro -asiakirja Lotus AmiPro skjal document Lotus AmiPro + document Lotus AmiPro cáipéis Lotus AmiPro documento de Lotus AmiPro מסמך של Lotus AmiPro @@ -7205,7 +7386,7 @@ document Lotus AmiPro Dokument Lotus AmiPro documento Lotus AmiPro - Documento do Lotus AmiPro + Documento do Lotus AmiPro Document Lotus AmiPro Документ Lotus AmiPro Dokument Lotus AmiPro @@ -7216,13 +7397,14 @@ Lotus AmiPro belgesi документ Lotus AmiPro Tài liệu Lotus AmiPro - Lotus AmiPro 文档 - Lotus AmiPro 文件 + Lotus AmiPro 文档 + Lotus AmiPro 文件 AportisDoc document + AportisDoc-dokument مستند AportisDoc Documentu d'AportisDoc Документ — AportisDoc @@ -7231,13 +7413,14 @@ AportisDoc-dokument AportisDoc-Dokument Έγγραφο AportisDoc - AportisDoc document + AportisDoc document AportisDoc-dokumento documento de AportisDoc AportisDoc dokumentua AportisDoc-asiakirja AportisDoc skjal document AportisDoc + document AportisDoc cáipéis AportisDoc documento de AportiDoc מסמך AportisDoc @@ -7256,7 +7439,7 @@ document AportisDoc Dokument AportisDoc documento AportisDoc - Documento do AportisDoc + Documento do AportisDoc Document AportisDoc Документ AportisDoc Dokument AportisDoc @@ -7266,34 +7449,36 @@ AportisDoc belgesi документ AportisDoc Tài liệu AportisDoc - AportisDoc 文档 - AportisDoc 文件 + AportisDoc 文档 + AportisDoc 文件 - - + + Applix Spreadsheets spreadsheet + Applix Spreadsheets-sigblad جداول بيانات Applix - Raźlikovy arkuš Applix Spreadsheets + Raźlikovy arkuš Applix Spreadsheets Таблица — Applix Spreadsheets full de càlcul d'Applix Spreadsheets sešit Applix Spreadsheets Applix Spreadsheets-regneark Applix-Spreadsheets-Tabelle Λογιστικό φύλλο Applix Spreadsheets - Applix Spreadsheets spreadsheet + Applix Spreadsheets spreadsheet sterntabelo de Applix Spreadsheets hoja de cálculo de Applix Spreadsheets Applix Spreadsheets kalkulu-orria Applix Spreadsheets -taulukko Applix Spreadsheets rokniark feuille de calcul Applix + sfuei di calcul Applix Spreadsheets scarbhileog Applix Spreadsheets folla de cálculo de Applix גליון נתונים של Applix Spreadsheets @@ -7315,7 +7500,7 @@ fuèlh de calcul Applix Arkusz Applix Spreadsheets folha de cálculo Applix Spreadsheets - Planilha do Applix Spreadsheets + Planilha do Applix Spreadsheets Foaie de calcul Applix Электронная таблица Applix Spreadsheets Zošit Applix Spreadsheets @@ -7323,26 +7508,27 @@ Fletë llogaritjesh Applix Spreadsheets документ Апликсове Табеле Applix Spreadsheets-kalkylblad - Applix Spreadsheets çalışma sayfası + Applix Spreadsheets hesap çizelgesi ел. таблиця Applix Spreadsheets Bảng tính Applix Spreadsheets - Applix Spreadsheets 电子表格 - Applix Spreadsheets 試算表 + Applix Spreadsheets 电子表格 + Applix Spreadsheets 試算表 - - - + + + Applix Words document + Applix Words-dokument مستند كلمات Applix Documentu d'Applix Words Applix Words sənədi - Dakument Applix Words + Dakument Applix Words Документ — Applix Words document d'Applix Words dokument Applix Words @@ -7350,13 +7536,14 @@ Applix Words-dokument Applix-Words-Dokument Έγγραφο Applix Words - Applix Words document + Applix Words document dokumento de Applix Words documento de Applix Words Applix Words dokumentua Applix Words -asiakirja Applix Words skjal document Applix Words + document Applix Words cáipéis Applix Words documento de Applix Words מסמך של Applix Words @@ -7378,7 +7565,7 @@ document Applix Words Dokument Applix Words documento Applix Words - Documento do Applix Words + Documento do Applix Words Document Applix Words Документ Applix Words Dokument Applix Words @@ -7389,33 +7576,35 @@ Applix Words belgesi документ Applix Words Tài liệu Applix Words - Applix Words 文档 - Applix Words 文件 + Applix Words 文档 + Applix Words 文件 - - + + ARC archive + ARC-argief أرشيف ARC - Archiŭ ARC + Archiŭ ARC Архив — ARC arxiu ARC archiv ARC ARC-arkiv ARC-Archiv Συμπιεσμένο αρχείο ARC - ARC archive + ARC archive ARC-arkivo archivador ARC ARC artxiboa ARC-arkisto ARC skjalasavn archive ARC + archivi ARC cartlann ARC arquivo ARC ארכיון ARC @@ -7436,7 +7625,7 @@ archiu ARC Archiwum ARC arquivo ARC - Pacote ARC + Pacote ARC Arhivă ARC Архив ARC Archív ARC @@ -7447,35 +7636,37 @@ ARC arşivi архів ARC Kho nén ARC - ARC 归档文件 - ARC 封存檔 + ARC 归档文件 + ARC 封存檔 - - - - - - + + + + + + AR archive + AR-argief أرشيف AR - Archiŭ AR + Archiŭ AR Архив — AR arxiu AR archiv AR AR-arkiv AR-Archiv Συμπιεσμένο αρχείο AR - AR archive + AR archive AR-arkivo archivador AR AR artxiboa AR-arkisto AR skjalasavn archive AR + archivi AR cartlann AR arquivo AR ארכיון AR @@ -7497,7 +7688,7 @@ archiu AR Archiwum AR arquivo AR - Pacote AR + Pacote AR Arhivă AR Архив AR Archív AR @@ -7508,21 +7699,22 @@ AR arşivi архів AR Kho nén AR - AR 归档文件 - AR 封存檔 + AR 归档文件 + AR 封存檔 - - + + ARJ archive + ARJ-argief أرشيف ARJ ARJ arxivi - Archiŭ ARJ + Archiŭ ARJ Архив — ARJ arxiu ARJ archiv ARJ @@ -7530,13 +7722,14 @@ ARJ-arkiv ARJ-Archiv Συμπιεσμένο αρχείο ARJ - ARJ archive + ARJ archive ARJ-arkivo archivador ARJ ARJ artxiboa ARJ-arkisto ARJ skjalasavn archive ARJ + archivi ARJ cartlann ARJ arquivo ARJ ארכיון ARJ @@ -7558,7 +7751,7 @@ archiu ARJ Archiwum ARJ arquivo ARJ - Pacote ARJ + Pacote ARJ Arhivă ARJ Архив ARJ Archív ARJ @@ -7569,34 +7762,36 @@ ARJ arşivi архів ARJ Kho nén ARJ - ARJ 归档文件 - ARJ 封存檔 + ARJ 归档文件 + ARJ 封存檔 ARJ Archived by Robert Jung - + ASP page + ASP-bladsy صفحة ASP Páxina ASP - Staronka ASP + Staronka ASP Страница — ASP pàgina ASP stránka ASP ASP-side ASP-Seite Σελίδα ASP - ASP page + ASP page ASP-paĝo página ASP ASP orria ASP-sivu ASP síða page ASP + pagjine ASP leathanach ASP páxina ASP עמוד ASP @@ -7617,7 +7812,7 @@ pagina ASP Strona ASP página ASP - Página ASP + Página ASP Pagină ASP Страница ASP Stránka ASP @@ -7628,8 +7823,8 @@ ASP sayfası сторінка ASP Trang ASP - ASP 页面 - ASP 頁面 + ASP 页面 + ASP 頁面 ASP Active Server Page @@ -7638,10 +7833,11 @@ AWK script + AWK-skrip سكربت AWK Script AWK AWK skripti - Skrypt AWK + Skrypt AWK Скрипт — AWK script AWK skript AWK @@ -7649,13 +7845,14 @@ AWK-program AWK-Skript Δέσμη ενεργειών AWK - AWK script + AWK script AWK-skripto secuencia de órdenes en AWK AWK script-a AWK-komentotiedosto AWK boðrøð script AWK + script AWK script AWK script de AWK תסריט AWK @@ -7677,7 +7874,7 @@ escript AWK Skrypt AWK script AWK - Script AWK + Script AWK Script AWK Сценарий AWK Skript AWK @@ -7688,31 +7885,32 @@ AWK betiği скрипт AWK Văn lệnh AWK - AWK 脚本 - AWK 指令稿 + AWK 脚本 + AWK 指令稿 - - - - - - - - - - + + + + + + + + + + BCPIO document + BCPIO-dokument مستند BCPIO Documentu BCPIO BCPIO sənədi - Dakument BCPIO + Dakument BCPIO Документ — BCPIO document BCPIO dokument BCPIO @@ -7720,13 +7918,14 @@ BCPIO-dokument BCPIO-Dokument Έγγραφο BCPIO - BCPIO document + BCPIO document BCPIO-dokumento documento BCPIO BCPIO dokumentua BCPIO-asiakirja BCPIO skjal document BCPIO + document BCPIO cáipéis BCPIO documento BCPIO מסמך של BCPO @@ -7748,7 +7947,7 @@ document BCPIO Dokument BCPIO documento BCPIO - Documento BCPIO + Documento BCPIO Document BCPIO Документ BCPIO Dokument BCPIO @@ -7759,8 +7958,8 @@ BCPIO belgesi документ BCPIO Tài liệu BCPIO - BCPIO 文档 - BCPIO 文件 + BCPIO 文档 + BCPIO 文件 BCPIO Binary CPIO @@ -7768,9 +7967,10 @@ BitTorrent seed file + BitTorrent-saadlêer ملف باذر البت تورنت BitTorrent seed faylı - Fajł krynicy BitTorrent + Fajł krynicy BitTorrent Файл-източник — BitTorrent fitxer de llavor BitTorrent soubor BitTorrent @@ -7778,13 +7978,14 @@ BitTorrent-frøfil BitTorrent-Seed-Datei Αρχείο BitTorrent seed - BitTorrent seed file + BitTorrent seed file BitTorrent-semdosiero archivo semilla de BitTorrent BitTorrent hazi-fitxategia BitTorrent-siementiedosto BitTorrent seed fíla fichier graine BitTorrent + file semence di BitTorrent comhad síl BitTorrent ficheiro de orixe BitTorrent קובץ זריעה של BitTorrent @@ -7805,7 +8006,7 @@ fichièr grana BitTorrent Plik ziarna BitTorrent ficheiro de semente BitTorrent - Arquivo semente BitTorrent + Arquivo semente BitTorrent Fișier sursă-completă BitTorrent Файл источника BitTorrent Súbor BitTorrent @@ -7816,31 +8017,33 @@ BitTorrent tohum dosyası файл поширення BitTorrent Tải tập hạt BitTorrent - BitTorrent 种子文件 - BitTorrent 種子檔 + BitTorrent 种子文件 + BitTorrent 種子檔 - + Blender scene + Blender-toneel مشهد بلندر Escena de Blender - Scena Blender + Scena Blender Сцена — Blender escena de Blender scéna Blender Blenderscene Blender-Szene Σκηνή Blender - Blender scene + Blender scene Blender-sceno escena de Blender Blender-eko fitxategia Blender-näkymä Blender leikmynd scène Blender + sene Blender radharc Blender escena de Blender סצנת Blender @@ -7862,7 +8065,7 @@ scèna Blender Scena programu Blender cenário Blender - Cena do Blender + Cena do Blender Scenă Blender Сцена Blender Scéna Blender @@ -7873,38 +8076,40 @@ Blender sahnesi сцена Blender Cảnh Blender - Blender 场景 - Blender 場景 + Blender 场景 + Blender 場景 - + TeX DVI document (bzip-compressed) + TeX DVI-dokument (bzip-saamgepers) مستند TeX DVI (مضغوط-bzip) Documentu Tex DVI (comprimíu en bzip) - Dakument TeX DVI (bzip-skampresavany) + Dakument TeX DVI (bzip-skampresavany) Документ — TeX DVI, компресиран с bzip document de TeX DVI (amb compressió bzip) dokument TeX DVI (komprimovaný pomocí bzip) TeX DVI-dokument (bzip-komprimeret) TeX-DVI-Dokument (bzip-komprimiert) Αρχείο TeX DVI (συμπιεσμένο με bzip) - TeX DVI document (bzip-compressed) + TeX DVI document (bzip-compressed) documento DVI de TeX (comprimido con bzip) TeX DVI dokumentua (bzip-ekin konprimitua) TeX DVI -asiakirja (bzip-pakattu) TeX DVI skjal (bzip-stappað) document DVI TeX (compressé bzip) + document DVI TeX (comprimût cun bzip) cáipéis DVI TeX (comhbhrúite le bzip) documento DVI de TeX (comprimido con bzip) מסמך מסוג TeX DVI (מכווץ ע״י bzip) TeX DVI dokument (bzip sažeto) - TeX DVI dokumentum (bzip-pel tömörítve) + TeX DVI dokumentum (bzip tömörítésű) Documento TeX DVI (comprimite con bzip) Dokumen TeX DVI (terkompresi bzip) Documento TeX DVI (compresso con bzip) @@ -7919,7 +8124,7 @@ document DVI TeX (compressat bzip) Dokument TeX DVI (kompresja bzip) documento TeX DVI (compressão bzip) - Documento DVI TeX (compactado com bzip) + Documento DVI TeX (compactado com bzip) Document TeX DVI (comprimat bzip) Документ TeX DVI (сжатый bzip) Dokument TeX DVI (komprimovaný pomocou bzip) @@ -7930,30 +8135,32 @@ TeX DVI belgesi (bzip ile sıkıştırılmış) документ TeX DVI (стиснений bzip) Tài liệu DVI TeX (đã nén bzip) - TeX DVI 文档(gzip 压缩) - TeX DVI 文件 (bzip 格式壓縮) + TeX DVI 文档(gzip 压缩) + TeX DVI 文件 (bzip 壓縮) Bzip archive + Bzip-argief أرشيف Bzip Archivu Bzip - Archiŭ bzip + Archiŭ bzip Архив — bzip arxiu bzip archiv bzip Bzip-arkiv Bzip-Archiv Συμπιεσμένο αρχείο Bzip - Bzip archive + Bzip archive Bzip-arkivo archivador Bzip Bzip artxiboa Bzip-arkisto Bzip skjalasavn archive bzip + archivi Bzip cartlann Bzip arquivo Bzip ארכיון Bzip @@ -7974,10 +8181,10 @@ archiu bzip Archiwum bzip arquivo Bzip - Pacote Bzip + Pacote Bzip Arhivă Bzip Архив BZIP - Archív bzip + Archív Bzip Datoteka arhiva Bzip Arkiv bzip Бзип архива @@ -7985,38 +8192,41 @@ Bzip arşivi архів bzip Kho nén bzip - Bzip 归档文件 - Bzip 封存檔 + Bzip 归档文件 + Bzip 封存檔 - + + Tar archive (bzip-compressed) + Tar-argief (bzip-saamgepers) أرشيف Tar (مضغوط-bzip) Archivu Tar (comprimíu en bzip) - Archiŭ tar (bzip-skampresavany) + Archiŭ tar (bzip-skampresavany) Архив — tar, компресиран с bzip arxiu tar (amb compressió bzip) archiv Tar (komprimovaný pomocí bzip) Tar-arkiv (bzip-komprimeret) Tar-Archiv (bzip-komprimiert) Αρχείο Tar (συμπιεσμένο με bzip) - Tar archive (bzip-compressed) + Tar archive (bzip-compressed) archivador Tar (comprimido con bzip) Tar artxiboa (bzip-ekin konprimitua) Tar-arkisto (bzip-pakattu) Tar skjalasavn (bzip-stappað) archive tar (compressée bzip) + archivi Tar (comprimût cun bzip) cartlann Tar (comhbhrúite le bzip) arquivo Tar (comprimido con bzip) ארכיון Tar (מכווץ ע״י bzip) Tar arhiva (bzip sažeto) - Tar archívum (bzip-pel tömörítve) + Tar archívum (bzip tömörítésű) Archivo Tar (comprimite con bzip) Arsip Tar (terkompresi bzip) Archivio tar (compresso con bzip) @@ -8031,10 +8241,10 @@ archiu tar (compressat bzip) Archiwum tar (kompresja bzip) arquivo Tar (compressão bzip) - Pacote Tar (compactado com bzip) + Pacote Tar (compactado com bzip) Arhivă Tar (comprimată bzip) Архив TAR (сжатый bzip) - Archív tar (komprimovaný pomocou bzip) + Archív Tar (komprimovaný pomocou bzip) Datoteka arhiva Tar (stisnjen z bzip) Arkiv tar (i kompresuar me bzip) Тар архива (запакована бзипом) @@ -8042,8 +8252,8 @@ Tar arşivi (bzip ile sıkıştırılmış) архів tar (стиснений bzip) Kho nén tar (đã nén bzip) - Tar 归档文件(bzip 压缩) - Tar 封存檔 (bzip 格式壓縮) + Tar 归档文件(bzip 压缩) + Tar 封存檔 (bzip 壓縮) @@ -8054,26 +8264,28 @@ PDF document (bzip-compressed) + PDF-dokument (bzip-saamgepers) مستند PDF (مضغوط-bzip) Documentu PDF (comprimíu en bzip) - Dakument PDF (bzip-skampresavany) + Dakument PDF (bzip-skampresavany) Документ — PDF, компресиран с bzip document PDF (amb compressió bzip) dokument PDF (komprimovaný pomocí bzip) PDF-dokument (bzip-komprimeret) PDF-Dokument (bzip-komprimiert) Έγγραφο PDF (συμπιεσμένο με bzip) - PDF document (bzip-compressed) + PDF document (bzip-compressed) documento PDF (comprimido con bzip) PostScript dokumentua (bzip-ekin konprimitua) PDF-asiakirja (bzip-pakattu) PDF skjal (bzip-stappað) document PDF (compressé bzip) + document PDF (comprimût cun bzip) cáipéis PDF (comhbhrúite le bzip) documento PDF (comprimido en bzip) מסמך PDF (מכווץ ע״י bzip) PDF dokument (bzip sažet) - PDF dokumentum (bzip-tömörítésű) + PDF dokumentum (bzip tömörítésű) Documento PDF (comprimite con bzip) Dokumen PDF (terkompresi bzip) Documento PDF (compresso con bzip) @@ -8088,7 +8300,7 @@ document PDF (compressat bzip) Dokument PDF (kompresja bzip) documento PDF (compressão bzip) - Documento PDF (compactado com bzip) + Documento PDF (compactado com bzip) Document PDF (comprimat bzip) Документ PDF (сжатый bzip) Dokument PDF (komprimovaný pomocou bzip) @@ -8099,34 +8311,36 @@ PDF belgesi (bzip ile sıkıştırılmış) документ PDF (стиснений bzip) Tài liệu PDF (đã nén bzip) - PDF 文档(bzip 压缩) - PDF 文件 (bzip 格式壓縮) + PDF 文档(bzip 压缩) + PDF 文件 (bzip 壓縮) PostScript document (bzip-compressed) + PostScript-dokument (bzip-saamgepers) مستند PostScript (مضغوط-bzip) Documentu PostScript (comprimíu en bzip) - Dakument PostScript (bzip-skampresavany) + Dakument PostScript (bzip-skampresavany) Документ — PostScript, компресиран с bzip document PostScript (amb compressió bzip) dokument PostScript (komprimovaný pomocí bzip) PostScript-dokument (bzip-komprimeret) PostScript-Dokument (bzip-komprimiert) Έγγραφο PostScript (συμπιεσμένο με bzip) - PostScript document (bzip-compressed) + PostScript document (bzip-compressed) documento PostScript (comprimido con bzip) PostScript dokumentua (bzip-ekin konprimitua) PostScript-asiakirja (bzip-pakattu) PostScript skjal (bzip-stappað) document PostScript (compressé bzip) + document PostScript (comprimût cun bzip) cáipéis PostScript (comhbhrúite le bzip) documento PostScript (comprimido con bzip) מסמך PostDcript (מכווץ ע״י bzip) PostScript dokument (bzip sažet) - PostScript dokumentum (bzip-tömörítésű) + PostScript dokumentum (bzip tömörítésű) Documento PostScript (comprimite con bzip) Dokumen PostScript (terkompresi bzip) Documento PostScript (compresso con bzip) @@ -8139,9 +8353,9 @@ PostScript-document (ingepakt met bzip) PostScript-dokument (pakka med bzip) document PostEscript (compressat bzip) - Dokument Postscript (kompresja bzip) + Dokument PostScript (kompresja bzip) documento PostScript (compressão bzip) - Documento PostScript (compactado com bzip) + Documento PostScript (compactado com bzip) Document PostScript (comprimat bzip) Документ PostScript (сжатый bzip) Dokument PostScript (komprimovaný pomocou bzip) @@ -8152,28 +8366,30 @@ PostScript belgesi (bzip ile sıkıştırılmış) документ PostScript (стиснене bzip) Tài liệu PostScript (đã nén bzip) - PostScript 文档(bzip 压缩) - PostScript 文件 (bzip 格式壓縮) + PostScript 文档(bzip 压缩) + PostScript 文件 (bzip 壓縮) comic book archive + strokiesprent-argief أرشيف comic book - archiŭ komiksaŭ + archiŭ komiksaŭ Архив — комикси arxiu comic book archiv knihy komiksů comic book-arkiv Comic-Book-Archiv Συμπιεσμένο αρχείο κόμικ - comic book archive + comic book archive archivador de libro de cómic komiki artxiboa sarjakuva-arkisto teknisøgubóka skjalasavn archive Comic Book + archivi di fumets cartlann chartúin ficheiro de libro de banda deseñada ארכיון ספר קומי @@ -8193,7 +8409,7 @@ archiu Comic Book Archiwum komiksu arquivo de banda desenhada - Pacote de histórias em quadrinhos + Pacote de histórias em quadrinhos arhivă benzi desenate Архив комиксов Archív knihy komiksov @@ -8204,8 +8420,8 @@ çizgi roman arşivi архів коміксів Kho nén sách tranh chuyện vui - 漫画书归档文件 - 漫畫書封存檔 + 漫画书归档文件 + 漫畫書封存檔 @@ -8213,20 +8429,22 @@ comic book archive + strokiesprent-argief أرشيف comic book - archiŭ komiksaŭ + archiŭ komiksaŭ Архив — комикси arxiu comic book archiv knihy komiksů comic book-arkiv Comic-Book-Archiv Συμπιεσμένο αρχείο κόμικ - comic book archive + comic book archive archivador de libro de cómic komiki artxiboa sarjakuva-arkisto teknisøgubóka skjalasavn archive Comic Book + archivi di fumets cartlann chartúin ficheiro de libro de banda deseñada ארכיון ספר קומי @@ -8246,7 +8464,7 @@ archiu Comic Book Archiwum komiksu arquivo de banda desenhada - Pacote de histórias em quadrinhos + Pacote de histórias em quadrinhos arhivă benzi desenate Архив комиксов Archív knihy komiksov @@ -8257,28 +8475,30 @@ çizgi roman arşivi архів коміксів Kho nén sách tranh chuyện vui - 漫画书归档文件 - 漫畫書封存檔 + 漫画书归档文件 + 漫畫書封存檔 comic book archive + strokiesprent-argief أرشيف comic book - archiŭ komiksaŭ + archiŭ komiksaŭ Архив — комикси arxiu comic book archiv knihy komiksů comic book-arkiv Comic-Book-Archiv Συμπιεσμένο αρχείο κόμικ - comic book archive + comic book archive archivador de libro de cómic komiki artxiboa sarjakuva-arkisto teknisøgubóka skjalasavn archive Comic Book + archivi di fumets cartlann chartúin ficheiro de libro de banda deseñada ארכיון ספר קומי @@ -8298,7 +8518,7 @@ archiu Comic Book Archiwum komiksu arquivo de banda desenhada - Pacote de histórias em quadrinhos + Pacote de histórias em quadrinhos arhivă benzi desenate Архив комиксов Archív knihy komiksov @@ -8309,28 +8529,30 @@ çizgi roman arşivi архів коміксів Kho nén sách tranh chuyện vui - 漫画书归档文件 - 漫畫書封存檔 + 漫画书归档文件 + 漫畫書封存檔 comic book archive + strokiesprent-argief أرشيف comic book - archiŭ komiksaŭ + archiŭ komiksaŭ Архив — комикси arxiu comic book archiv knihy komiksů comic book-arkiv Comic-Book-Archiv Συμπιεσμένο αρχείο κόμικ - comic book archive + comic book archive archivador de libro de cómic komiki artxiboa sarjakuva-arkisto teknisøgubóka skjalasavn archive Comic Book + archivi di fumets cartlann chartúin ficheiro de libro de banda deseñada ארכיון ספר קומי @@ -8350,7 +8572,7 @@ archiu Comic Book Archiwum komiksu arquivo de banda desenhada - Pacote de histórias em quadrinhos + Pacote de histórias em quadrinhos arhivă benzi desenate Архив комиксов Archív knihy komiksov @@ -8361,8 +8583,8 @@ çizgi roman arşivi архів коміксів Kho nén sách tranh chuyện vui - 漫画书归档文件 - 漫畫書封存檔 + 漫画书归档文件 + 漫畫書封存檔 @@ -8370,6 +8592,7 @@ Lrzip archive + Lrzip-argief أرشيف Lrzip Архив — lrzip arxiu lrzip @@ -8377,13 +8600,14 @@ Lrzip-arkiv Lrzip-Archiv Συμπιεσμένο αρχείο Lrzip - Lrzip archive + Lrzip archive Lrzip-arkivo archivador Lrzip Lrzip artxiboa Lrzip-arkisto Lrzip skjalasavn archive lrzip + archivi Lrzip cartlann Lrzip arquivo Lrzip ארכיון Lrzip @@ -8401,7 +8625,7 @@ archiu lrzip Archiwum lrzip arquivo Lrzip - Pacote Lrzip + Pacote Lrzip Arhivă Lrzip Архив LRZIP Archív Lrzip @@ -8410,16 +8634,17 @@ Lrzip-arkiv Lrzip arşivi архів lrzip - Lrzip 归档文件 - Lrzip 封存檔 + Lrzip 归档文件 + Lrzip 封存檔 - + Tar archive (lrzip-compressed) + Tar-argief (lrzip-saamgepers) أرشيف Tar (مضغوط-lrzip) Архив — tar, компресиран с lrzip arxiu tar (amb compressió lrzip) @@ -8427,17 +8652,18 @@ Tar-arkiv (lrzip-komprimeret) Tar-Archiv (lrzip-komprimiert) Αρχείο Tar (συμπιεσμένο με lrzip) - Tar archive (lrzip-compressed) + Tar archive (lrzip-compressed) archivador Tar (comprimido con lrzip) Tar artxiboa (lrzip-ekin konprimitua) Tar-arkisto (lrzip-pakattu) Tar skjalasavn (lrzip-stappað) archive tar (compressée lrzip) + archivi Tar (comprimût cun lrzip) cartlann Tar (comhbhrúite le lrzip) arquivo Tar (comprimido con lrzip) ארכיון Tar (מכווץ ע״י lrzip) Tar arhiva (lrzip sažeta) - Tar archívum (lrzip-pel tömörítve) + Tar archívum (lrzip tömörítésű) Archivo Tar (comprimite con lrzip) Arsip Tar (terkompresi lrzip) Archivio tar (compresso con lrzip) @@ -8450,17 +8676,17 @@ archiu tar (compressat lrzip) Archiwum tar (kompresja lrzip) arquivo Tar (compressão Lrzip) - Pacote Tar (compactado com lrzip) + Pacote Tar (compactado com lrzip) Arhivă Tar (comprimată lrzip) Архив TAR (сжатый lrzip) - Archív tar (komprimovaný pomocou lrzip) + Archív Tar (komprimovaný pomocou lrzip) Datoteka arhiva Tar (stisnjen z lrzip) Тар архива (запакована лрзипом) Tar-arkiv (lrzip-komprimerat) Tar arşivi (lrzip ile sıkıştırılmış) архів tar (стиснений lrzip) - Tar 归档文件(lrzip 压缩) - Tar 封存檔 (lrzip 格式壓縮) + Tar 归档文件(lrzip 压缩) + Tar 封存檔 (lrzip 格式壓縮) @@ -8468,6 +8694,7 @@ Apple disk image + Apple-skyfbeeldlêer Imaxe de discu d'Apple Диск — Apple imatge de disc d'Apple @@ -8475,11 +8702,12 @@ Apple-diskaftryk Apple-Datenträgerabbild Εικόνα δίσκου Apple - Apple disk image + Apple disk image imagen de disco de Apple Apple disko irudia Apple-levytiedosto image disque Apple + imagjin disc Apple íomhá diosca Apple imaxe de disco de Appl תמונת כונן Apple @@ -8497,7 +8725,7 @@ imatge disc Apple Obraz dysku Apple imagem de disco Apple - Imagem de disco Apple + Imagem de disco Apple Образ диска Apple Mac OS X Obraz disku Apple Odtis diska Apple @@ -8505,23 +8733,26 @@ Apple-diskavbild Apple disk görüntüsü образ диска Apple - Apple 磁盘映像 - Apple 磁碟映像檔 + Apple 磁盘映像 + Apple 磁碟映像檔 Raw disk image + Rou skyfbeeldlêer Imaxe de discu en bruto + Диск — raw imatge de disc RAW surový obraz disku - Rå diskaftryk + Raw-diskaftryk Rohes Datenträgerabbild Ανεπεξέργαστη εικόνα δίσκου - Raw disk image + Raw disk image imagen de disco en bruto Disko gordinaren irudia Raaka levytiedosto image disque Raw + imagjin disc grese Amhíomha diosca Imaxe de disco en bruto דמות גולמית של כונן @@ -8535,21 +8766,50 @@ imatge disc Raw Surowy obraz dysku imagem de disco Raw - Imagem bruta de disco + Imagem bruta de disco Необработанный образ диска Obraz disku Surovi odtis diska сиров одраз диска Rå diskavbild - İşlem görmemiş disk imajı + Ham disk görüntüsü простий образ диска - 原始磁盘映像 - 原生磁碟映像檔 + 原始磁盘映像 + 原始磁碟映像檔 Floppy disk image + Disket-skyfbeeldlêer + Диск — флопи + imatge de disquet + obraz diskety + Floppy-diskaftryk + Diskettenabbild + Floppy disk image + imagen de disquete + Diskete disko irudia + Disketin levykuva + image disquette + imagjin disc floppy + íomhá diosca fhlapaigh + Slika diskete + Flopi lemezkép + Image disk floppy + Immagine disco floppy + Иілгіш диск бейнесі + 플로피 디스크 이미지 + Obraz dyskietki + imagem da disquete + Imagem de disco flexível + Образ гибкого диска + Obraz pružného disku + Diskettavbild + Disket görüntüsü + образ дискети + 软盘映像 + Floppy 軟碟映像檔 @@ -8557,22 +8817,25 @@ Raw disk image (XZ-compressed) + Rou skyfbeeldlêer (XZ-saamgepers) Imaxe de discu en bruto (comprimida en XZ) + Диск — raw, компресиран с xz imatge de disc RAW (amb compressió XZ) surový obraz disku (komprimovaný pomocí XZ) - Rå diskaftryk (XZ-komprimeret) + Raw-diskaftryk (XZ-komprimeret) Rohes Datenträgerabbild (XZ-komprimiert) Ανεπεξέργαστη εικόνα δίσκου (συμπιεσμένη XZ) - Raw disk image (XZ-compressed) + Raw disk image (XZ-compressed) imagen de disco en bruto (comprimida con XZ) Disko gordinaren irudia (XZ-rekin konprimitua) Raaka levytiedosto (XZ-pakattu) image disque Raw (compression XZ) + imagjin disc grese (comprimude cun XZ) Amhíomhá (comhbhrúite le XZ) Imaxe de disco en bruto (comprimida en XZ) דמות גולמית של כונן (בדחיסת XZ) Osnovna slika diska (XZ sažeta) - Nyers lemezkép (XZ-vel tömörítve) + Nyers lemezkép (XZ tömörítésű) Imagine de disco crude (comprimite con XZ) Image disk mentah (terkompresi XZ) Immagine disco raw (compressa XZ) @@ -8581,38 +8844,40 @@ imatge disc Raw (compression XZ) Surowy obraz dysku (kompresja XZ) imagem de disco Raw (compressão XZ) - Imagem bruta de disco (compactada com XZ) + Imagem bruta de disco (compactada com XZ) Необработанный образ диска (сжатый xz) Obraz disku (komprimovaný pomocou XZ) Surovi odtis diska (stisnjeno z XZ) сиров одраз диска (запакована ИксЗ-ом) Rå diskavbild (XZ-komprimerad) - İşlem görmemiş disk imajı (XZ ile sıkıştırılmış) + Ham disk görüntüsü (XZ ile sıkıştırılmış) простий образ диска (стиснений XZ) - 原始磁盘映像(XZ 压缩) - 原生磁碟映像 (XZ 格式壓縮) + 原始磁盘映像(XZ 压缩) + 原始磁碟映像檔 (XZ 壓縮) raw CD image + rou CD-beeldlêer صورة CD خامة imaxe de CD en bruto - suvoraja vyjava CD - Изображение — raw CD + suvoraja vyjava CD + Диск — raw CD imatge de CD en cru surový obraz CD - rå cd-aftryk + raw cd-aftryk CD-Roh-Abbild Εικόνα περιεχομένου ψηφιακού δίσκου - raw CD image + raw CD image kruda lumdiskbildo imagen de CD en bruto CD gordinaren irudia raaka CD-vedos rá CD mynd image CD brute + imagjin CD grese amhíomhá dhlúthdhiosca imaxe de CD en bruto תמונת דיסק גולמית @@ -8633,7 +8898,7 @@ imatge CD brut Surowy obraz CD imagem em bruto de CD - Imagem bruta de CD + Imagem bruta de CD imagine de CD brută Необработанный образ компакт-диска Surový obraz CD @@ -8641,48 +8906,64 @@ Imazh raw CD сиров одраз ЦД-а rå cd-avbild - Ham CD görüntüsü + ham CD görüntüsü образ raw CD ảnh đĩa CD thô - 原始 CD 映像 - 原生 CD 映像檔 + 原始 CD 映像 + 原生 CD 映像檔 - - + + + + Compressed CD image + imatge de CD amb compressió + Pakattu CD-levykuva + Immagine CD compressa + Skompresowany obraz płyty CD + стиснений образ CD + + + + + AppImage application bundle + AppImage-toepassingsbundel + Програмен пакет — AppImage paquet d'aplicació AppImage balíček AppImage s aplikací - Applmage-programsamling + AppImage-programsamling AppImage-Anwendungspaket - AppImage application bundle + AppImage application bundle paquete de aplicación AppImage AppImage aplikazio bilduma AppImage-sovelluspaketti lot applicatif AppImage + côl di aplicazions AppImage burla feidhmchláir AppImage חבילת יישומי AppImage AppImage paket aplikacije AppImage alkalmazáscsomag - bundel aplikasi AppImage + Bundel aplikasi AppImage Bundle applicazione AppImage AppImage қолданбалар дестесі AppImage 프로그램 번들 Pakiet programu AppImage - Pacote de aplicativo AppImage + pacote de aplicação AppImage + Pacote de aplicativo AppImage Пакет приложения AppImage Balík aplikácií AppImage скуп програма Ап-слике AppImage-programbunt AppImage uygulama paketi пакунок із програмами AppImage - AppImage 应用组合包 - AppImage 應用程式套組 + AppImage 应用组合包 + AppImage 應用程式套組 - + @@ -8697,20 +8978,22 @@ CD Table Of Contents + CD-inhoudsopgawe جدول محتويات الـ CD - Źmieściva CD + Źmieściva CD Съдържание на CD taula de continguts de CD obsah CD - Cd-indholdsfotegnelse + Cd-indholdsfortegnelse CD-Inhaltsverzeichnis Πίνακας περιεχομένων CD - CD Table Of Contents + CD Table Of Contents índice de contenido de CD CDaren edukien aurkibidea CD-sisällysluettelo CD innihaldsyvurlit table des matières de CD + tabele dai contignûts di CD clár ábhar dlúthdhiosca táboa de contidos de CD תוכן עניינים של דיסק @@ -8730,7 +9013,7 @@ ensenhador de CD Plik zawartości płyty CD Tabela de conteúdos de CD - Sumário de CD + Sumário de CD Tabel conținut CD Таблица содержания CD Obsah CD @@ -8741,37 +9024,64 @@ CD İçindekiler Tablosu зміст CD Mục Lục của đĩa CD - CD 索引 - CD 內容目錄 + CD 索引 + CD 內容目錄 - - - - - - + + + + + + + + GD-ROM image cuesheet + «cuesheet» d'imatge de GD-ROM + GD-ROM levykuvan taulukko + Cuesheet immagine GD-ROM + Obraz cuesheet płyty GD-ROM + таблиця CUE образу GD-ROM + + + + + + + Padus DiscJuggler CD image + imatge de CD de Padus DiscJuggler + Padus DiscJuggler CD-levykuva + Immagine CD DiscJuggler Padus + Obraz płyty CD programu Padus DiscJuggler + Imagem de CD do Padus DiscJuggler + образ CD Padus DiscJuggler + + PGN chess game notation + PGN-skaakspelnotasie تدوينة لعبة الشطرنج PGN - Zaciem ab šachmatnaj partyi PGN + Zaciem ab šachmatnaj partyi PGN Игра шах — PGN notació de joc d'escacs PGN šachová notace PGN PGN-skakspilsnotation PGN-Schachspielnotation Σημειογραφία παιχνιδιού σκακιού PGN - PGN chess game notation + PGN chess game notation notación para juegos de ajedrez PGN PGN xake jokoaren notazioa PGN-šakkipelinotaatio PGN talv teknskipan notation de jeu d'échecs PGN + notazion par zûc di scacs PGN nodaireacht chluiche ficheall PGN Notación de xogo de xadrez PGN סימון משחק שח PGN @@ -8791,7 +9101,7 @@ notacion de jòc d'escacs PGN Plik PGN notacji gry w szachy notação de jogo de xadrez PGN - Notação de jogo de xadrez PGN + Notação de jogo de xadrez PGN Notație joc șah PGN Шахматная партия PGN Šachová notácia PGN @@ -8802,36 +9112,38 @@ PGN satranç oyun gösterimi запис гри у шахи PGN Cách ghi lượt chơi cờ PGN - PGN 象棋游戏注记 - PGN 國際象棋棋譜 + PGN 象棋游戏注记 + PGN 國際象棋棋譜 PGN Portable Game Notation - + CHM document + CHM-dokument مستند CHM Documentu CHM - Dakument CHM + Dakument CHM Документ — CHM document CHM dokument CHM CHM-dokument CHM-Dokument Έγγραφο CHM - CHM document + CHM document CHM-dokumento documento CHM CHM dokumentua CHM-asiakirja CHM skjal document CHM + document CHM cáipéis CHM documento CHM מסמך CHM @@ -8852,7 +9164,7 @@ document CHM Dokument CHM documento CHM - Documento CHM + Documento CHM Document CHM Документ CHM Dokument CHM @@ -8863,8 +9175,8 @@ CHM belgesi документ CHM Tài liệu CHM - CHM 文档 - CHM 文件 + CHM 文档 + CHM 文件 CHM Compiled Help Modules @@ -8873,23 +9185,25 @@ Java byte code + Java binêre kode رمز بايت الـJava Java bayt kodu - Bajtavy kod Java + Bajtavy kod Java Байт код за Java - Bytecode de Java + bytecode de Java bajtový kód Java Côd beit Java - Javabytekode + Java-bytekode Java-Bytecode Συμβολοκώδικας Java - Java byte code + Java byte code Java-bajtkodo bytecode de Java Java byte-kodea Java-tavukoodi Java býtkota code Java binaire + bytecode di Java beartchód Java byte code de Java קוד Java byte @@ -8910,7 +9224,7 @@ còde Java binari Kod bajtowy Java byte-code Java - Código compilado Java + Código compilado Java Bytecode Java Байт-код Java Bajtový kód Java @@ -8921,31 +9235,33 @@ Java derlenmiş kodu Байт-код Java Mã byte Java - Java 字节码 - Java 位元組碼 + Java 字节码 + Java 位元組碼 UNIX-compressed file + UNIX-saamgepersde lêer ملف يونكس-مضغوط - Skampresavany UNIX-fajł + Skampresavany UNIX-fajł Файл — компресиран за UNIX fitxer amb compressió UNIX soubor komprimovaný v Unixu UNIX-komprimeret fil UNIX-komprimierte Datei Συμπιεσμένο αρχείο UNIX - UNIX-compressed file + UNIX-compressed file UNIX-kunpremita dosiero archivo comprimido de Unix UNIX-en konprimitutako fitxategia UNIX-pakattu tiedosto UNIX-stappað fíla fichier compressé UNIX + file comprimût di UNIX comhad UNIX-comhbhrúite ficheiro comprimido de UNIX קובץ בכיווץ UNIX UNIX sažeta datoteka - Tömörített UNIX-fájl + UNIX tömörítésű fájl File comprimite de UNIX Berkas terkompresi UNIX File compresso-UNIX @@ -8961,7 +9277,7 @@ fichièr compressat UNIX Skompresowany plik systemu UNIX ficheiro comprimido UNIX - Arquivo compactado do UNIX + Arquivo compactado do UNIX Fișier comprimat UNIX Файл (UNIX-сжатый) Súbor komprimovaný v Unixe @@ -8972,35 +9288,37 @@ UNIX-sıkıştırılmış dosyası стиснений файл UNIX Tập tin đã nén UNIX - UNIX 压缩文件 - UNIX 格式壓縮檔 + UNIX 压缩文件 + UNIX 壓縮檔 - + Tar archive (gzip-compressed) + Tar-argief (gzip-saamgepers) أرشيف Tar (مضغوط-gzip) - Archiŭ tar (gzip-skampresavany) + Archiŭ tar (gzip-skampresavany) Архив — tar, компресиран с gzip arxiu tar (amb compressió gzip) archiv tar (komprimovaný pomocí gzip) Tar-arkiv (gzip-komprimeret) Tar-Archiv (gzip-komprimiert) Αρχείο Tar (συμπιεσμένο με gzip) - Tar archive (gzip-compressed) + Tar archive (gzip-compressed) archivador Tar (comprimido con gzip) Tar artxiboa (gzip-ekin konprimitua) Tar-arkisto (gzip-pakattu) Tar skjalasavn (gzip-stappað) archive tar (compressée gzip) + archivi Tar (comprimût cun gzip) cartlann Tar (comhbhrúite le gzip) arquivo Tar (comprimido con gzip) ארכיון Tar (מכווץ ע״י gzip) Tar arhiva (gzip sažeta) - Tar archívum (gzip-pel tömörítve) + Tar archívum (gzip tömörítésű) Archivo Tar (comprimite con gzip) Arsip Tar (terkompresi gzip) Archivio tar (compresso con gzip) @@ -9015,10 +9333,10 @@ archiu tar (compressat gzip) Archiwum tar (kompresja gzip) arquivo Tar (compressão gzip) - Pacote Tar (compactado com gzip) + Pacote Tar (compactado com gzip) Arhivă Tar (comprimată gzip) Архив TAR (сжатый gzip) - Archív tar (komprimovaný pomocou gzip) + Archív Tar (komprimovaný pomocou gzip) Datoteka arhiva Tar (stisnjen z gzip) Arkiv tar (i kompresuar me gzip) Тар архива (запакована гзипом) @@ -9026,8 +9344,8 @@ Tar arşivi (gzip ile sıkıştırılmış) архів tar (стиснений gzip) Kho nén tar (đã nén gzip) - Tar 归档文件(gzip 压缩) - Tar 封存檔 (gzip 格式壓縮) + Tar 归档文件(gzip 压缩) + Tar 封存檔 (gzip 壓縮) @@ -9035,21 +9353,23 @@ program crash data + programomvaldata معلومات انهيار البرنامج - źviestki złamanaj prahramy + źviestki złamanaj prahramy Данни от забиване на програма dades de fallada de programa data o pádu programu programnedbrudsdata Daten zu Programmabsturz δεδομένα από την κατάρρευση προγράμματος - program crash data + program crash data datumo pri kraŝo de programo datos de cuelgue de programa programaren kraskaduraren datuak ohjelman kaatumistiedot forrits sordáta données de plantage de programme + dâts di colàs di program sonraí tuairte ríomhchláir datos de colgue do programa מידע מקריסת תכנית @@ -9070,7 +9390,7 @@ donadas de plantage de programa Dane awarii programu dados de rebentamento de aplicação - Dados de travamento de programa + Dados de travamento de programa date eroare program Данные аварийного завершения программы Údaje o páde programu @@ -9081,31 +9401,32 @@ program çökme verisi аварійні дані про програму dữ liệu sụp đổ chương trình - 程序崩溃数据 - 程式當掉資料 + 程序崩溃数据 + 程式當掉資料 - - - - + + + + - - - + + + - - + + CPIO archive + CPIO-argief أرشيف CPIO Archivu CPIO CPIO arxivi - Archiŭ CPIO + Archiŭ CPIO Архив — CPIO arxiu CPIO archiv CPIO @@ -9113,13 +9434,14 @@ CPIO-arkiv CPIO-Archiv Συμπιεσμένο αρχείο CPIO - CPIO archive + CPIO archive CPIO-arkivo archivador CPIO CPIO artxiboa CPIO-arkisto CPIO skjalasavn archive CPIO + archivi CPIO cartlann CPIO arquivo CPIO ארכיון CPIO @@ -9141,7 +9463,7 @@ archiu CPIO Archiwum CPIO arquivo CPIO - Pacote CPIO + Pacote CPIO Arhivă CPIO Архив CPIO Archív CPIO @@ -9152,22 +9474,23 @@ CPIO arşivi архів CPIO Kho nén CPIO - CPIO 归档文件 - CPIO 封存檔 + CPIO 归档文件 + CPIO 封存檔 - - - - + + + + CPIO archive (gzip-compressed) + CPIO-argief (gzip-saamgepers) أرشيف CPIO (مضغوط-gzip) CPIO arxivi (gzip ilə sıxışdırılmış) - Archiŭ CPIO (gzip-skampresavany) + Archiŭ CPIO (gzip-skampresavany) Архив — CPIO, компресиран с gzip arxiu CPIO (amb compressió gzip) archiv CPIO (komprimovaný pomocí gzip) @@ -9175,18 +9498,19 @@ CPIO-arkiv (gzip-komprimeret) CPIO-Archiv (gzip-komprimiert) Αρχείο CPIO (συμπιεσμένο με gzip) - CPIO archive (gzip-compressed) + CPIO archive (gzip-compressed) CPIO-arkivo (kunpremita per gzip) archivador CPIO (comprimido con gzip) CPIO artxiboa (gzip-ekin konprimitua) CPIO-arkisto (gzip-pakattu) CPIO skjalasavn (gzip-stappað) archive CPIO (compressé gzip) + archivi CPIO (comprimût cun gzip) cartlann CPIO (comhbhrúite le gzip) arquivo CPIO (comprimido con gzip) ארכיון CPIO (מכווץ ע״י gzip) CPIO arhiva (gzip sažeta) - CPIO-archívum (gzip-pel tömörítve) + CPIO archívum (gzip tömörítésű) Archivo CPIO (comprimite con gzip) Arsip CPIO (terkompresi gzip) Archivio CPIO (compresso con gzip) @@ -9203,7 +9527,7 @@ archiu CPIO (compressat gzip) Archiwum CPIO (kompresja gzip) arquivo CPIO (compressão gzip) - Pacote CPIO (compactado com gzip) + Pacote CPIO (compactado com gzip) Arhivă CPIO (compresie gzip) Архив CPIO (сжатый gzip) Archív CPIO (komprimovaný pomocou gzip) @@ -9214,17 +9538,18 @@ CPIO arşivi (gzip ile sıkıştırılmış) архів CPIO (стиснений gzip) Kho nén CPIO (đã nén gzip) - CPIO 归档文件(gzip 压缩) - CPIO 封存檔 (gzip 格式壓縮) + CPIO 归档文件(gzip 压缩) + CPIO 封存檔 (gzip 壓縮) C shell script + C shell-skrip سكربت شِل سي C qabıq skripti - Skrypt abałonki C + Skrypt abałonki C Скрипт — обвивка C script C shell skript shellu C @@ -9232,13 +9557,14 @@ C-skalprogram C-Shell-Skript Δέσμη ενεργειών κελύφους C - C shell script + C shell script skripto de C-ŝelo secuencia de órdenes de consola en C C shell script-a Csh-komentotiedosto C skel boðrøð script C shell + script di shell in C script bhlaoisce C script de C shell תסריט מעטפת C @@ -9259,7 +9585,7 @@ escript C shell Skrypt powłoki C script de terminal C - Script de shell C + Script de shell C Script C shell Сценарий C shell Skript shellu C @@ -9270,37 +9596,39 @@ C kabuk betiği скрипт оболонки C Văn lệnh trình bao C - C shell 脚本 - C shell 指令稿 + C shell 脚本 + C shell 指令稿 - - - - + + + + Xbase document + Xbase-dokument مستند Xbase Documentu Xbase - Dakument Xbase + Dakument Xbase Документ — Xbase document Xbase dokument Xbase Xbasedokument Xbase-Dokument Έγγραφο Xbase - Xbase document + Xbase document Xbase-dokumento documento Xbase Xbase dokumentua Xbase-asiakirja Xbase skjal document Xbase + document Xbase cáipéis Xbase documento Xbase מסמך Xbase @@ -9320,7 +9648,7 @@ document Xbase Dokument Xbase documento Xbase - Documento do Xbase + Documento do Xbase Document Xbase Документ Xbase Dokument Xbase @@ -9331,8 +9659,8 @@ Xbase belgesi документ Xbase Tài liệu Xbase - Xbase 文档 - Xbase 文件 + Xbase 文档 + Xbase 文件 @@ -9341,20 +9669,22 @@ ECMAScript program + ECMAScript-program برنامج ECMAScript - Prahrama ECMAScript + Prahrama ECMAScript Програма — ECMAScript programa ECMAScript program v jazyce ECMAScript - ECMA-program + ECMAScript-program ECMAScript-Programm Πρόγραμμα ECMAScript - ECMAScript program + ECMAScript program programa en ECMAScript ECMAScript programa ECMAScript-ohjelma ECMAScript forrit programme ECMAScript + program ECMAScript ríomhchlár ECMAScript programa en ECMAScript תכנית EMCAScript @@ -9375,7 +9705,7 @@ programa ECMAEscript Pogram ECMAScript programa ECMAScript - Programa ECMAScript + Programa ECMAScript Program ECMAScript Программа ECMAScript Program ECMAScript @@ -9386,105 +9716,131 @@ ECMAScript programı програма мовою ECMAScript Chương trình ECMAScript - ECMAScript 程序 - ECMAScript 程式 + ECMAScript 程序 + ECMAScript 程式 - + + + MAME compressed hard disk image + imatge de disc dur MAME amb compressió + MAME-pakatun kiintolevyn levykuva + Immagine disco MAME compressa + Skompresowany obraz dysku twardego MAME + стиснений образ жорсткого диска MAME + + + + + + - + Sega CD disc image + Mega CD-skyfbeeldlêer Imaxe de discu de Sega CD + Диск — Mega-CD (Sega) imatge de disc de Sega CD obraz disku CD pro Sega Sega CD-diskaftryk Sega-CD-Datenträgerabbild - Sega CD disc image + Sega CD disc image imagen de disco CD de Sega Sega CD disko irudia Sega CD -levykuva image disque Sega CD + imagjin disc CD Sega íomhá dlúthdhiosca Sega דמות כונן Sega CD Sega CD slika diska Sega CD-lemezkép - image cakram CD Sega + Image cakram CD Sega Immagine disco Sega Mega CD Sega CD диск бейнесі 세가 CD 디스크 이미지 Obraz płyty konsoli Mega-CD - Imagem de disco Sega CD + imagem de disco Mega-CD + Imagem de disco Sega CD Образ диска CD Sega Obraz disku CD Sega одраз диска Сега ЦД-а Mega-CD-skivavbild - Sega CD disk kalıbı + Sega CD disk görüntüsü образ диска Sega CD - Sega CD 光盘映像 - Sega CD 光碟映像檔 + Sega CD 光盘映像 + Sega CD 光碟映像檔 - + - - + + - - + + - - + Sega Pico ROM ROM de Sega Pico + ROM — Sega Pico ROM de Sega Pico ROM pro Sega Pico + Sega Pico-ROM Sega Pico ROM - Sega Pico ROM + Sega Pico ROM ROM de Sega Pico Sega Pico ROM Sega Pico ROM ROM Sega Pico + ROM Sega Pico ROM Sega Pico Sega Pico ROM Sega Pico ROM ROM Sega Pico ROM Sega Pico Sega Pico ROM - 세카 피코 롬 + 세가 피코 롬 Plik ROM konsoli Sega Pico - ROM de Sega Pico + ROM Sega Pico + ROM de Sega Pico Sega Pico ROM ROM pre Sega Pico Сега Пико РОМ Sega Pico-rom Sega Pico ROM ППП Sega Pico - Sega Pico ROM - Sega Pico ROM + Sega Pico ROM + Sega Pico ROM - + + Sega Saturn disc image + Sega Saturn-skyfbeeldlêer Imaxe de discu de Sega Saturn + Диск — Sega Saturn imatge de disc de Sega Saturn obraz disku pro Sega Saturn Sega Saturn-diskaftryk Sega-Saturn-Datenträgerabbild Εικόνα δίσκου Sega Saturn - Sega Saturn disc image + Sega Saturn disc image imagen de disco de Sega Saturn Sega Saturn disko irudia Sega Saturn -levykuva image disque Sega Saturn + imagjin disc Sega Saturn íomhá diosca Sega Saturn דמות כונן Sega Saturn Sega Saturn slika diska @@ -9497,76 +9853,73 @@ imatge disc Sega Saturn Obraz płyty konsoli Sega Saturn imagem de disco Sega Saturn - Imagem de disco do Sega Saturn + Imagem de disco do Sega Saturn Образ диска Sega Saturn Obraz disku Sega Saturn одраз диска Сега Сатурна Sega Saturn-skivavbild - Sega Saturn disk kalıbı + Sega Saturn disk görüntüsü образ диска Sega Saturn - Sega Saturn 光盘映像 - Sega Saturn 光碟映像檔 + Sega Saturn 光盘映像 + Sega Saturn 光碟映像檔 - - + + - - - Dreamcast GD-ROM - GD-ROM de Dreamcast - GD-ROM de Dreamcast - GD-ROM pro Dreamcast - Dreamcast GD-ROM - Dreamcast GD-ROM - Dreamcast GD-ROM - Dreamcast GD-ROM - GD-ROM de Dreamcast - Dreamcast GD-ROM - GD-ROM Dreamcast - GD-ROM Dreamcast - Dreamcast GD-ROM - Dreamcast GD-ROM - Dreamcast GD-ROM - GD-ROM Dreamcast - GD-ROM Dreamcast - GD-ROM Dreamcast - Dreamcast GD-ROM - 드림캐스트 GD-ROM - GD-ROM Dreamcast - Plik GD-ROM konsoli Dreamcast - GD-ROM Dreamcast - GD-ROM de Dreamcast - Dreamcast GD-ROM - Dreamcast GD-ROM - Дримкаст ГД-РОМ - Dreamcast-gd-rom - Dreamcast GD-ROM - GD-ROM Dreamcast - Dreamcast CD-ROM - Dreamcast GD-ROM + + Dreamcast disc image + Диск — Dreamcast + imatge de disc de Dreamcast + Dreamcast-diskaftryk + Dreamcast-Datenträgerabbild + Dreamcast disc image + imagen de disco de Dreamcast + Dreamcast disko irudia + Dreamcast-levykuva + image disque Dreamcast + Dreamcast slika disa + Dreamcast lemezkép + Image cakram Dreamcast + Immagine disco Dreamcast + Dreamcast диск бейнесі + 드림캐스트 디스크 이미지 + Obraz płyty konsoli Dreamcast + imagem de disco Dreamcast + Imagem de disco do Dreamcast + Образ диска Dreamcast + Obraz disku Dreamcast + Dreamcast-skivavbild + Dreamcast disk görüntüsü + образ диска Dreamcast + Dreamcast 光盘映像 + Dreamcast 光碟映像檔 - + + + + Nintendo DS ROM Nintendo DS ROM ROM de Nintendo DS - Nintendo DS ROM + Nintendo DS ROM ROM — Nintendo DS ROM de Nintendo DS ROM pro Nintendo DS - Nintendo DS-rom + Nintendo DS-ROM Nintendo DS ROM Nintendo DS ROM - Nintendo DS ROM + Nintendo DS ROM ROM de Nintendo DS Nintendo DS-ko ROMa Nintendo DS-ROM Nintendo DS ROM ROM Nintendo DS + ROM Nintendo DS ROM Nintendo DS ROM de Nintendo DS ROM של Nintendo @@ -9586,7 +9939,7 @@ ROM Nintendo DS Plik ROM konsoli Nintendo DS ROM Nintendo DS - ROM de Nintendo DS + ROM de Nintendo DS ROM Nintendo DS Nintendo DS ROM ROM pre Nintendo DS @@ -9597,24 +9950,54 @@ Nintendo DS ROM ППП Nintendo ROM DS Nintendo - 任天堂 DS ROM - 任天堂 DS ROM + 任天堂 DS ROM + 任天堂 DS ROM + + Nintendo 3DS ROM + ROM de Nintendo 3DS + Nintendo 3DS ROM + ROM Nintendo 3DS + Plik ROM konsoli Nintendo 3DS + ROM do Nintendo 3DS + ППП Nintendo 3DS + + + + + + + + + Nintendo 3DS Executable + executable de Nintendo 3DS + Nintendo 3DS suoritettava + Eseguibile Nintendo 3DS + Plik wykonywalny konsoli Nintendo 3DS + виконуваний файл Nintendo 3DS + + + + + + PC Engine ROM ROM de PC Engine + ROM — PC Engine ROM de PC Engine ROM pro PC Engine - PC Engine ROM + PC Engine-ROM PC Engine ROM PC Engine ROM - PC Engine ROM + PC Engine ROM ROM de PC Engine PC Engine ROM PC Engine ROM ROM PC Engine + ROM PC Engine ROM PC Engine ROM de máquina de PC ROM של PC Engine @@ -9628,7 +10011,7 @@ ROM PC Engine Plik ROM konsoli PC Engine ROM PC Engine - ROM de PC Engine + ROM de PC Engine PC Engine ROM PC Engine ROM Pomnilnik PC Engine ROM @@ -9636,24 +10019,27 @@ PC Engine-rom PC Engine ROM ROM для рушія на ПК - PC Engine ROM - PC Engine ROM + PC Engine ROM + PC Engine ROM Wii disc image + Wii-skyfbeeldlêer Imaxe de discu de Wii + Диск — Wii imatge de disc de Wii obraz disku pro Wii Wii-diskaftryk Wii-Datenträgerabbild Εικόνα δίσκου Wii - Wii disc image + Wii disc image imagen de disco de Wii Wii disko irudia Wii-levykuva image disque Wii + imagjin disc Wii íomhá diosca Wii Imaxe de disco de Wii דמות כונן Wii @@ -9667,7 +10053,7 @@ imatge disc Wii Obraz płyty konsoli Wii imagem de disco Wii - Imagem de disco Wii + Imagem de disco Wii Образ диска Wii Obraz disku Wii Odtis diska Wii @@ -9675,29 +10061,33 @@ Wii-skivavbild Wii disk görüntüsü образ диска Wii - Wii 光盘映像 - Wii 光碟映像檔 + Wii 光盘映像 + Wii 光碟映像檔 - - - + + + WiiWare bundle + WiiWare-bundel + Програмен пакет — WiiWare paquet de WiiWare balíček pro WiiWare WiiWare-samling WiiWare-Paket - WiiWare bundle + WiiWare bundle conjunto de WiiWare WiiWare bilduma + WiiWare-lisäpaketti lot WiiWare + côl WiiWare burla WiiWare מאגד WiiWare WiiWare paket @@ -9706,39 +10096,42 @@ Bundel WiiWare Bundle WiiWare WiiWare дестесі - 위-웨어 번들 + WiiWare 번들 lòt WiiWare Pakiet WiiWare pacote WiiWare - Pacote WiiWare + Pacote WiiWare Пакет WiiWare Balík WiiWare ВииВер комплет WiiWare-paket WiiWare paketi пакет WiiWare - WiiWare 捆绑包 - WiiWare 綁包 + WiiWare 捆绑包 + WiiWare 綁包 - - - + + + GameCube disc image + GameCube-skyfbeeldlêer + Диск — GameCube imatge de disc de GameCube obraz disku pro GameCube GameCube-diskaftryk GameCube-Datenträgerabbild Εικόνα δίσκου GameCube - GameCube disc image + GameCube disc image imagen de disco de GameCube GameCube disko irudia GameCube-levykuva image disque GameCube + imagjin disc GameCube íomhá diosca GameCube Imae de disco de GameCube דמות כונן GameCube @@ -9752,7 +10145,7 @@ imatge disc GameCube Obraz płyty konsoli GameCube imagem de disco GameCube - Imagem de disco GameCube + Imagem de disco GameCube Образ диска GameCube Obraz disku GameCube Odtis diska GameCube @@ -9760,144 +10153,169 @@ GameCube-skivavbild GameCube disk görüntüsü образ диска GameCube - GameCube 光盘映像 - GameCube 光碟映像檔 + GameCube 光盘映像 + GameCube 光碟映像檔 - + Thomson Mémo7 cartridge + Касета — Thomson Mémo7 cartutx Thomson Mémo7 Kazeta Thomson Mémo7 + Thomson Mémo7-kassette Thomson-Mémo7-Steckmodul - Thomson Mémo7 cartridge + Thomson Mémo7 cartridge cartucho Mémo7 de Thomson + Thomson Mémo7 kartutxoa + Thomson Mémo7 -patruuna cartouche Thomson Mémo7 + cartucje Mémo7 Thomson cartús Thomson Mémo7 Thomson Mémo7 uložak Thomson Mémo7 kazetta - cartridge Thomson Mémo7 + Cartridge Thomson Mémo7 Cartuccia Thomson Mémo7 Thomson Mémo7 картриджі - 톰슨 메모7 카트릿지 + 톰슨 Mémo7 카트리지 Kartridż Thomson Mémo7 - Cartucho Thomson Mémo7 + cartucho Thomson Mémo7 + Cartucho Thomson Mémo7 Картридж Thomson Mémo7 Kazeta Thomson Mémo7 Томсон Мемо7 кертриџ Thomson Mémo7-spelkassett Thomson Mémo7 kartuşu картридж Thomson Mémo7 - Thomson Mémo7 卡带 - Thomson Mémo7 卡匣 + Thomson Mémo7 卡带 + Thomson Mémo7 卡匣 Thomson cassette + Касета — Thomson cinta de casset Thomson Kazeta Thomson + Thomson-kassette Thomson-Kassette - Thomson cassette + Thomson cassette casete de Thomson + Thomson kasetea + Thomson-kasetti cassette Thomson + cassete Thomson caiséad Thomson Thomson kaseta Thomson kazetta - kaset Thomson + Kaset Thomson Cassetta Thomson Thomson кассетасы - 톰슨 카셋트 + 톰슨 카세트 Kaseta Thomson - Cassete Thomson + cassete Thomson + Cassete Thomson Кассета Thomson Kazeta Thomson Томсон касете Thomson-kassett Thomson kaset касета Thomson - Thomson 磁带 - Thomson 卡匣 + Thomson 磁带 + Thomson 卡匣 HFE floppy disk image + Диск — флопи, HFE imatge de disquet HFE Obraz diskety HFE + HFE-floppydiskaftryk HFE-Diskettenabbild - HFE floppy disk image + HFE floppy disk image imagen de disquete HFE + HFE diskete disko irudia + HFE disketti-levykuva image disquette HFE + imagjin disc floppy HFE íomhá diosca fhlapaigh HFE HFE slika diskete HFE flopi lemezkép - image disk floppy HFE + Image disk floppy HFE Immagine disco floppy HFE HFE иілгіш диск бейнесі HFE 플로피 디스크 이미지 Obraz dyskietki HFE - Imagem de disco flexível HFE + imagem de disquete HFE + Imagem de disco flexível HFE Образ гибкого диска HFE Obraz pružného disku HFE ХФЕ слика флопи диска HFE-diskavbild - HFE disket kalıbı + HFE disket görüntüsü образ дискети HFE - HFE 软盘映像 - HFE 軟碟映像檔 + HFE 软盘映像 + HFE 軟碟映像檔 HFE HxC Floppy Emulator - + SAP Thomson floppy disk image + Диск — флопи, SAP Thomson imatge de disquet SAP Thomson Obraz diskety SAP Thomson + SAP Thomson-floppydiskaftryk SAP-Thomson-Diskettenabbild - SAP Thomson floppy disk image + SAP Thomson floppy disk image imagen de disquete SAP de Thomson + SAP Thomson diskete disko irudia + SAP Thomson disketti-levykuva image disquette SAP Thomson + imagjin disc floppy SAP Thomson íomhá diosca fhlapaigh SAP Thomson SAP Thomson slika diskete SAP Thomson flopi lemezkép - image disk floppy SAP Thomson + Image disk floppy SAP Thomson Immagine disco floppy Thomson SAP SAP Thomson иілгіш диск бейнесі SAP 톰슨 플로피 디스크 이미지 Obraz dyskietki SAP Thomson - Imagem de disco flexível SAP Thomson + imagem de disquete SAP Thomson + Imagem de disco flexível SAP Thomson Образ гибкого диска SAP Thomson Obraz pružného disku SAP Thomson САП Томсон слика флопи диска SAP Thomson-diskavbild - SAP Thomson disket kalıbı + SAP Thomson disket görüntüsü образ дискети Thomson SAP - SAP Thomson 软盘映像 - SAP Thomson 軟碟映像檔 + SAP Thomson 软盘映像 + SAP Thomson 軟碟映像檔 SAP Système d'Archivage Pukall - + Debian package + Debian-pakket حزمة ديبيان Debian paketi - Pakunak Debian + Pakunak Debian Пакет — Debian paquet Debian balíček Debianu @@ -9905,13 +10323,14 @@ Debianpakke Debian-Paket Πακέτο Debian - Debian package + Debian package Debian-pakaĵo paquete de Debian Debian paketea Debian-paketti Debian pakki paquet Debian + pachet Debian pacáiste Debian paquete de Debian חבילת דביאן @@ -9933,7 +10352,7 @@ paquet Debian Pakiet Debiana pacote Debian - Pacote Debian + Pacote Debian Pachet Debian Пакет Debian Balíček Debianu @@ -9944,90 +10363,78 @@ Debian paketi пакунок Debian Gói Debian - Debian 软件包 - Debian 軟體包 + Debian 软件包 + Debian 軟體包 - - + + - Qt Designer file - ملف Qt Designer - Fajł Qt Designer - Файл — Qt Designer - fitxer de Qt Designer - soubor Qt Designer - Qt Designer-fil - Qt-Designer-Datei - Αρχείο Qt Designer - Qt Designer file - dosiero de Qt Designer - archivo de Qt Designer - Qt Designer Fitxategia - Qt Designer -tiedosto - Qt Designer fíla - fichier Qt Designer - comhad Qt Designer - ficheiro de Qt Designer - קובץ של Qt Designer - Qt Designer datoteka - Qt Designer-fájl - File Qt Designer - Berkas Qt Designer - File Qt Designer - Qt Designer ファイル - Qt Designer файлы - Qt 디자이너 파일 - Qt Designer failas - Qt Designer datne - Fail Qt Designer - Qt Designer-fil - Qt Designer-bestand - Qt Designer-fil - fichièr Qt Designer - Plik Qt Designer - ficheiro do Qt Designer - Arquivo do Qt Designer - Fișier Qt Designer - Файл Qt Designer - Súbor Qt Designer - Datoteka Qt Designer - File Qt Designer - датотека Кут дизајнера - Qt Designer-fil - Qt Tasarımcı dosyası - файл програми Qt-дизайнер - Tập tin thiết kế Qt Designer - Qt Designer 文件 - Qt Designer 檔案 + Qt Designer interface document + Документ — интерфейс, Qt Designer + document d'interfície Qt Designer + Qt Designer-brugerflade-dokument + Qt-Designer-Oberflächendokument + Qt Designer interface document + documento de interfaz de Qt Designer + Qt Designer interfaze dokumentua + Qt Designer -käyttöliittymän asiakirja + document d'interface Qt Designer + Qt Designer dokument sučelja + Qt Designer felületleíró dokumentum + Dokumen antarmuka Qt Designer + Documento interfaccia Qt Designer + Qt Designer интерфейс құжаты + Qt 디자이너 인터페이스 문서 + Dokument interfejsu Qt Designer + documento de interface Qt Designer + Documento de interface do Qt Designer + Документ интерфейса Qt Designer + Qt Designer-gränssnittsdokument + Qt Designer arayüz belgesi + документ інтерфейсу Qt Designer + Qt Designer 界面文档 + Qt Designer 介面文件 - - + + + + Kaitai Struct definition file + fitxer de definicions Kaitai Struct + Kaitai Struct määritystiedosto + File definizione Kaitai Struct + Plik definicji Kaitai Struct + файл визначень Kaitai Struct + + + Qt Markup Language file - Файл — Qt Markup + Qt Markup Language-lêer + Интерфейс — Qt Markup fitxer de llenguatge de marcadors Qt soubor Qt Markup Language Qt Markup Language-fil Qt-Auszeichnungssprachendatei Αρχείο Qt Markup Language - Qt Markup Language file + Qt Markup Language file archivo de lenguaje de marcado Qt Qt Markup lengoai fitxategia QML-tiedosto fichier Qt Markup Language + file Qt Markup Language comhad teanga mharcála Qt ficheiro de linguaxe de marcado Qt קובץ שפת סימון של Qt @@ -10044,7 +10451,7 @@ fichièr Qt Markup Language Plik języka znaczników Qt ficheiro de linguagem Qt Markup - Arquivo de Qt Markup Language + Arquivo de Qt Markup Language Файл Qt Markup Language Súbor značkovacieho jazyka Qt Datoteka označevalnega jezika Qt @@ -10052,15 +10459,15 @@ Qt-märkspråksfil Qt İşaretleme Dili dosyası файл мови розмітки Qt - Qt Markup Language 文件 - Qt 標記語言檔 + Qt Markup Language 文件 + Qt 標記語言檔 - - - + + + - - + + @@ -10070,24 +10477,25 @@ desktop configuration file ملف تضبيط سطح المكتب - kanfihuracyjny fajł asiarodździa - Файл с информация за работния плот + kanfihuracyjny fajł asiarodździa + Информация за работния плот fitxer de configuració d'escriptori soubor nastavení pracovní plochy skrivebordskonfigurationsfil Desktop-Konfigurationsdatei Αρχείο ρυθμίσεων επιφάνειας εργασίας - desktop configuration file + desktop configuration file dosiero de agordoj de labortablo archivo de configuración del escritorio Mahaigainaren konfigurazio-fitxategia työpöydän asetustiedosto skriviborðssamansetingarfíla fichier de configuration desktop + file di configurazion scritori comhad cumraíochta deisce ficheiro de configuración de escritorio קובץ הגדרות שולחן עבודה - Datoteka prečaca radne površine + datoteka podešavanja radne površine asztalbeállító fájl File de configuration de scriptorio berkas konfigurasi destop @@ -10104,7 +10512,7 @@ fichièr de configuracion desktop Plik konfiguracji środowiska ficheiro de configuração de área de trabalho - Arquivo de configuração desktop + Arquivo de configuração desktop fișier de configurare al desktopului Файл настроек рабочего стола Súbor nastavení pracovnej plochy @@ -10112,19 +10520,19 @@ File konfigurimi desktop датотека подешавања радне површи skrivbordskonfigurationsfil - masa üstü yapılandırma dosyası + masaüstü yapılandırma dosyası файл конфігурації стільниці tập tin cấu hình môi trường - 桌面配置文件 - 桌面組態檔 + 桌面配置文件 + 桌面組態檔 - - - - - + + + + + @@ -10132,6 +10540,7 @@ FictionBook document + FictionBook-dokument مستند FictionBook Documentu de FictionBook Документ — FictionBook @@ -10140,13 +10549,14 @@ FictionBook-dokument FictionBook-Dokument Έγγραφο FictionBook - FictionBook document + FictionBook document FictionBook-dokumento documento FictionBook FictionBook dokumentua FictionBook-asiakirja FictionBook skjal document FictionBook + document FictionBook cáipéis FictionBook documento de FictionBook מסמך FictionBook @@ -10165,7 +10575,7 @@ document FictionBook Dokument FictionBook documento FictionBook - Documento FictionBook + Documento FictionBook Document FictionBook Документ FictionBook Dokument FictionBook @@ -10175,29 +10585,32 @@ FictionBook belgesi документ FictionBook Tài liệu FictionBook - FictionBook 文档 - FictionBook 文件 + FictionBook 文档 + FictionBook 文件 - + Compressed FictionBook document + Saamgepersde FictionBook-dokument Documentu comprimíu de FictionBook + Документ — FictionBook, компресиран document FictionBook amb compressió komprimovaný dokument FictionBook Komprimeret FictionBook-dokument Komprimiertes FictionBook-Dokument Συμπιεσμένο έγγραφο FictionBook - Compressed FictionBook document + Compressed FictionBook document documento comprimido de FictionBook Konprimitutako FictionBook dokumentua Pakattu FictionBook-asiakirja document FictionBook compressé + document FictionBook comprimût cáipéis chomhbhrúite FictionBook Documento de FictionBook comprimida מסמך FictionBook מכווץ @@ -10211,30 +10624,31 @@ document FictionBook compressat Skompresowany dokument FictionBook documento comprimido FictionBook - Documento FictionBook comprimido + Documento FictionBook comprimido Сжатый документ FictionBook Komprimovaný dokument FictionBook Stisnjeni dokument FictionBook запаковани документ Фикшон Књиге Komprimerat FictionBook-dokument - Sıkıştırılmış KurguKitap belgesi + Sıkıştırılmış FictionBook belgesi стиснений документ FictionBook - 压缩的 FictionBook 文档 - 壓縮版 FictionBook 文件 + 压缩的 FictionBook 文档 + 壓縮版 FictionBook 文件 - - - + + + Dia diagram + Dia-diagram خطاطة Dia Dia diaqramı - Dyjahrama Dia + Dyjahrama Dia Диаграма — Dia diagrama de Dia diagram Dia @@ -10242,13 +10656,14 @@ Dia-diagram Dia-Diagramm Διάγραμμα Dia - Dia diagram + Dia diagram Dia-diagramo diagrama de Dia Dia diagrama Dia-kaavio Dia ritmynd diagramme Dia + diagram Dia léaráid Dia diagrama de Dia גרף של Dia @@ -10270,7 +10685,7 @@ diagrama Dia Diagram Dia diagrama Dia - Diagrama do Dia + Diagrama do Dia Diagramă Dia Диаграмма Dia Diagram Dia @@ -10281,18 +10696,19 @@ Dia çizimi діаграма Dia Biểu đồ Dia - Dia 图表 - Dia 圖表 + Dia 图表 + Dia 圖表 - + Dia shape + Dia-vorm شكل Dia Фигура — Dia forma de Dia @@ -10300,12 +10716,13 @@ Dia-figur Dia-Form Σχήμα Dia - Dia shape + Dia shape forma de Dia Dia-ren forma Dia-muoto Dia skapur forme Dia + sagome Dia cruth Dia forma de Dia צורה של Dia @@ -10323,7 +10740,7 @@ forma Dia Kształt Dia forma Dia - Formato Dia + Formato Dia Figură Dia Фигура Dia Tvar Dia @@ -10332,34 +10749,36 @@ Dia-figur Dia şekli форма Dia - Dia 形状 - Dia 形狀 + Dia 形状 + Dia 形狀 - + TeX DVI document + TeX DVI-dokument مستند TeX DVI Documentu Tex DVI - Dakument TeX DVI + Dakument TeX DVI Документ — TeX DVI document DVI de TeX dokument TeX DVI TeX DVI-dokument TeX-DVI-Dokument Έγγραφο TeX DVI - TeX DVI document + TeX DVI document DVI-dokumento de TeX documento TeX DVI TeX DVI dokumentua TeX DVI -asiakirja TeX DVI skjal document TeX DVI + document DVI TeX cáipéis DVI TeX documento TeX DVI מסמך מסוג TeX DVI @@ -10380,7 +10799,7 @@ document TeX DVI Dokument TeX DVI documento TeX DVI - Documento DVI TeX + Documento DVI TeX Document Tex DVI Документ TeX DVI Dokument TeX DVI @@ -10391,21 +10810,22 @@ TeX DVI belgesi документ TeX DVI Tài liệu DVI Tex - TeX DVI 文档 - TeX DVI 文件 + TeX DVI 文档 + TeX DVI 文件 DVI Device independent file format - + Enlightenment theme + Enlightenment-tema سمة Enlightenment Enlightenment örtüyü - Matyŭ Enlightenment + Matyŭ Enlightenment Тема — Enlightenment tema d'Enlightenment motiv Enlightenment @@ -10413,13 +10833,14 @@ Enlightenmenttema Enlightenment-Thema Θέμα Enlightenment - Enlightenment theme + Enlightenment theme etoso de Enlightenment tema de Enlightenment Enlightenment gaia Enlightenment-teema Enlightenment tema thème Enlightenment + teme di Enlightenment téama Enlightenment tema de Enlightenment ערכת נושא של Enlightenment @@ -10441,7 +10862,7 @@ tèma Enlightenment Motyw Enlightenment tema Enlightenment - Tema do Enlightenment + Tema do Enlightenment Temă Enlightenment Тема Enlightenment Motív Enlightenment @@ -10452,27 +10873,28 @@ Enlightenment teması тема Enlightenment Sắc thái Enlightenment - Enlightenment 主题 - Enlightenment 佈景主題 + Enlightenment 主题 + Enlightenment 佈景主題 Egon Animator animation تحريكة محرك Egon - Animacyja Egon Animator + Animacyja Egon Animator Анимация — Egon Animator animació d'Egon Animator animace Egon Animator Egon Animator-animation Egon-Animator-Animation Κινούμενο σχέδιο Egon Animator - Egon Animator animation + Egon Animator animation animacio de Egon Animator animación de Egon Animator Egon Animator-eko animazioa Egon Animator -animaatio Egon Animator teknimyndagerð animation Egon Animator + animazion Egon Animator beochan Egon Animator animación de Egon Animator אנימצייה של Egon Animator @@ -10494,7 +10916,7 @@ animacion Egon Animator Animacja Egon Animator animação Egon Animator - Animação do Egon Animator + Animação do Egon Animator Animație Egon Animator Анимация Egon Animator Animácia Egon Animator @@ -10505,28 +10927,30 @@ Egon Animator canlandırması анімація Egon Animator Hoạt ảnh Egon Animator - Egon Animator 动画 - Egon Animator 動畫 + Egon Animator 动画 + Egon Animator 動畫 executable + uitvoerbaar تنفيذي - vykonvalny fajł + vykonvalny fajł Изпълним файл executable spustitelný soubor kørbar Programm Εκτελέσιμο - executable + executable plenumebla ejecutable exekutagarria suoritettava ohjelma inningarfør exécutable + eseguibil comhad inrite executábel קובץ הרצה @@ -10547,7 +10971,7 @@ executable Program executável - Executável + Executável executabil Исполняемый Spustiteľný súbor @@ -10558,43 +10982,41 @@ çalıştırılabilir виконуваний файл thực hiện được - 可执行文件 - 可執行檔 + 可执行文件 + 可執行檔 - - - - + + - - - - + + - - - - - + + + + + FLTK Fluid file + FLTK Fluit-lêer ملف FLTK Fluid - Fajł FLTK Fluid + Fajł FLTK Fluid Интерфейс — FLTK Fluid fitxer FLTK Fluid soubor FLTK Fluid FLTK Fluid-fil FLTK-Fluid-Datei Αρχείο FLTK Fluid - FLTK Fluid file + FLTK Fluid file archivo FLTK Fluid FLTK Fluid fitxategia FLTK Fluid -tiedosto FLTK Fluid fíla fichier Fluid FLTK + file FLTK Fluid comhad FLTK Fluid ficheiro FLTK Fluid קובץ FLTK Fluid @@ -10615,7 +11037,7 @@ fichièr Fluid FLTK Plik Fluid FLTK ficheiro FLTK Fluid - Arquivo Fluid do FLTK + Arquivo Fluid do FLTK Fișier FLTK Fluid Файл FLTK Fluid Súbor FLTK Fluid @@ -10626,34 +11048,37 @@ FLTK Fluid dosyası файл FLTK Fluid Tập tin Fluid FLTK - FLTK 流体文档 - FLTK Fluid 檔 + FLTK 流体文档 + FLTK Fluid 檔 FLTK Fast Light Toolkit - + WOFF font + WOFF-skriftipe Fonte WOFF + Шрифт — WOFF lletra WOFF font WOFF WOFF-skrifttype WOFF-Schrift Γραμματοσειρά WOFF - WOFF font + WOFF font tipo de letra WOFF WOFF letra-tipoa WOFF-fontti police WOFF + caratar WOFF cló WOFF Tipo de letra WOFF גופן WOFF - WOFF slovo + WOFF font WOFF-betűkészlet Typo de litteras WOFF Fonta WOFF @@ -10661,11 +11086,12 @@ WOFF フォント WOFF қарібі WOFF 글꼴 + WOFF šriftas WOFF fonts poliça WOFF Czcionka WOFF letra WOFF - Fonte WOFF + Fonte WOFF Шрифт WOFF Písmo WOFF Pisava WOFF @@ -10673,83 +11099,100 @@ WOFF-typsnitt WOFF yazı tipi шрифт WOFF - WOFF 字体 - WOFF 字型 + WOFF 字体 + WOFF 字型 WOFF Web Open Font Format - + - + WOFF2 font + WOFF2-skriftipe Fonte WOFF2 + Шрифт — WOFF2 lletra WOFF2 font WOFF2 + WOFF2-skrifttype WOFF2-Schrift - WOFF2 font + WOFF2 font tipo de letra WOFF2 + WOFF2 letra-tipoa WOFF2-fontti - WOFF2 slovo + police WOFF2 + caratar WOFF2 + cló WOFF2 + WOFF2 font WOFF2 betűkészlet Fonta WOFF2 Carattere WOFF2 WOFF2 қарібі WOFF2 글꼴 + WOFF2 šriftas Czcionka WOFF2 - Fonte WOFF2 + letra WOFF2 + Fonte WOFF2 Шрифт WOFF2 Písmo WOFF2 + Pisava WOFF2 WOFF2-typsnitt + WOFF2 yazı tipi шрифт WOFF2 - WOFF2 字体 - WOFF2 字型 + WOFF2 字体 + WOFF2 字型 WOFF2 Web Open Font Format 2.0 - + PostScript type-1 font + PostScript tipe 1-skriftipe + Шрифт — PostScript type-1 lletra type-1 de PostScript font PostScript type-1 + PostScript type-1-skrifttype PostScript-Typ-1-Schrift - PostScript type-1 font + PostScript type-1 font tipo de letra PostScript Type-1 PostScript type-1 letra-tipoa + PostScript type-1 -fontti police PostScript Type 1 + caratar PostScript type-1 cló PostScript type-1 - PostScript type-1 slovo + PostScript type-1 font PostScript type-1 betűkészlet - fonta PostScript type-1 + Fonta PostScript type-1 Carattere PostScript type-1 PostScript type-1 қарібі PostScript Type-1 글꼴 Czcionka PostScript Type-1 - Fonte PostScript tipo-1 + letra PostScript Tipo 1 + Fonte PostScript tipo-1 Шрифт PostScript Type-1 Písmo PostScript typu 1 слова Постскрипта врсте-1 PostScript type-1-typsnitt PostScript tip-1 yazı tipi шрифт type-1 PostScript - PostScript type-1 字体 - PostScript type-1 字型 + PostScript type-1 字体 + PostScript type-1 字型 - - - - - - + + + + + + @@ -10757,9 +11200,10 @@ Adobe font metrics + Adobe skriftipe-afmetings مقاييس خط أدوبي Adobe yazı növü metrikləri - Metryka šryftu Adobe + Metryka šryftu Adobe Шрифтова метрика — Adobe mètrica de lletra d'Adobe metrika fontu Adobe @@ -10767,16 +11211,17 @@ Adobe skrifttypefil Adobe-Schriftmetriken Μετρικά γραμματοσειράς Adobe - Adobe font metrics + Adobe font metrics metrikoj de Adobe-tiparo métricas tipográficas de Adobe Adobe letra-tipoen neurriak Adobe-fonttimitat métriques de police Adobe + metrichis caratar Adobe meadarachtaí cló Adobe métricas de fonte de Adobe מדדי גופן של Adobe - Adobe mjere slova + Metrika Adobe fonta Adobe-betűmetrika Metricas de typo de litteras Adobe Metrik fonta Adobe @@ -10793,7 +11238,7 @@ metricas de poliça Adobe Metryka czcionki Adobe métrica de letras Adobe - Métricas de fonte Adobe + Métricas de fonte Adobe Dimensiuni font Adobe Метрика шрифта Adobe Metrika písma Adobe @@ -10801,19 +11246,20 @@ Metrik lloj gërmash Adobe метрика Адобе слова Adobe-typsnittsmetrik - Adobe yazıtipi ölçüleri + Adobe yazı tipi ölçüleri метрики шрифту Adobe Cách đo phông chữ Adobe - Adobe 字体规格 - Adobe 字型描述檔 + Adobe 字体规格 + Adobe 字型描述檔 BDF font + BDF-skriftipe خط BDF BDF yazı növü - Šryft BDF + Šryft BDF Шрифт — BDF lletra BDF font BDF @@ -10821,17 +11267,18 @@ BDF-skrifttype BDF-Schrift Γραμματοσειρά BDF - BDF font + BDF font BDF-tiparo tipo de letra BDF BDF letra-tipoa BDF-fontti BDF stavasnið police BDF + caratar BDF cló BDF tipo de fonte BDF גופן BDF - BDF slovo + BDF font BDF-betűkészlet Typo de litteras BDF Fonta BDF @@ -10848,7 +11295,7 @@ poliça BDF Czcionka BDF letra BDF - Fonte BDF + Fonte BDF Font BDF Шрифт BDF Písmo BDF @@ -10856,22 +11303,23 @@ Lloj gërme BDF БДФ слова BDF-typsnitt - BDF fontu + BDF yazı tipi шрифт BDF Phông chữ BDF - BDF 字体 - BDF 字型 + BDF 字体 + BDF 字型 - + DOS font + DOS-skriftipe خط DOS DOS yazı növü - Šryft DOS + Šryft DOS Шрифт — DOS lletra DOS font pro DOS @@ -10879,17 +11327,18 @@ DOS-skrifttype DOS-Schrift Γραμματοσειρά DOS - DOS font + DOS font DOS-tiparo tipo de letra de DOS DOS letra-tipoa DOS-fontti DOS stavasnið police DOS + caratar DOS cló DOS tipo de fonte de DOS גופן DOS - DOS slovo + DOS font DOS-betűkészlet Typo de litteras DOS Fonta DOS @@ -10906,7 +11355,7 @@ poliça DOS Czcionka DOS letra DOS - Fonte do DOS + Fonte do DOS Font DOS Шрифт DOS Písmo pre DOS @@ -10914,23 +11363,24 @@ Gërmë DOS ДОС слова DOS-typsnitt - DOS fontu + DOS yazı tipi шрифт DOS Phông chữ DOS - DOS 字体 - DOS 字型 + DOS 字体 + DOS 字型 - - - + + + Adobe FrameMaker font + Adobe FrameMaker-skriftipe خط أدوبي الصانع للإطارات Adobe FrameMaker yazı növü - Šryft Adobe FrameMaker + Šryft Adobe FrameMaker Шрифт — Adobe FrameMaker lletra d'Adobe FrameMaker font Adobe FrameMaker @@ -10938,17 +11388,18 @@ Adobe FrameMaker-skrifttype Adobe-FrameMaker-Schrift Γραμματοσειρά Adobe FrameMaker - Adobe FrameMaker font + Adobe FrameMaker font Tiparo de Adobe FrameMaker tipo de letra de Adobe FrameMaker Adobe FrameMaker-en letra-tipoa Adobe FrameMaker -fontti Adobe FrameMaker stavasnið police Adobe FrameMaker + caratar Adobe FrameMaker cló Adobe FrameMaker tipo de fonte de Adobe FrameMaker גופן של Adobe FrameMaker - Adobe FrameMaker slovo + Adobe FrameMaker font Adobe FrameMaker-betűkészlet Typo de litteras pro Adobe FrameMaker Fonta Adobe FrameMaker @@ -10965,7 +11416,7 @@ poliça Adobe FrameMaker Czcionka Adobe FrameMaker letra Adobe FrameMaker - Fonte do Adobe FrameMaker + Fonte do Adobe FrameMaker Font Adobe FrameMaker Шрифт Adobe FrameMaker Písmo Adobe FrameMaker @@ -10976,18 +11427,19 @@ Adobe FrameMaker yazı tipi шрифт Adobe FrameMaker Phông chữ Adobe FrameMaker - Adobe FrameMaker 字体 - Adobe FrameMaker 字型 + Adobe FrameMaker 字体 + Adobe FrameMaker 字型 - + LIBGRX font + LIBGRX-skriftipe خط LIBGRX LIBGRX yazı növü - Šryft LIBGRX + Šryft LIBGRX Шрифт — LIBGRX lletra LIBGRX font LIBGRX @@ -10995,17 +11447,18 @@ LIBGRX-skrifttype LIBGRX-Schrift Γραμματοσειρά LIBGRX - LIBGRX font + LIBGRX font LIBGRX-tiparo tipo de letra LIBGRX LIBGRX letra-tipoa LIBGRX-fontti LIBGRX stavasnið police LIBGRX + caratar LIBGRX cló LIBGRX tipo de fonte en LIBGRX גופן LIBGRX - LIBGRX slovo + LIBGRX font LIBGRX-betűkészlet Typo de litteras LIBGRX Fonta LIBGRX @@ -11022,7 +11475,7 @@ poliça LIBGRX Czcionka LIBGRX letra LIBGRX - Fonte LIBGRX + Fonte LIBGRX Font LIBGRX Шрифт LIBGRX Písmo LIBGRX @@ -11030,21 +11483,22 @@ Lloj gërme LIBGRX ЛИБГРИкс слова LIBGRX-typsnitt - LIBGRX fontu + LIBGRX yazı tipi шрифт LIBGRX Phông chữ LIBGRX - LIBGRX 字体 - LIBGRX 字型 + LIBGRX 字体 + LIBGRX 字型 - + Linux PSF console font + Linux PSF-konsoleskriftipe خط كونسول PSF لينكس Linux PSF konsol yazı növü - Kansolny šryft PSF dla Linuksa + Kansolny šryft PSF dla Linuksa Шрифт — PSF, за конзолата на Линукс lletra de consola PSF de Linux font PSF pro konzolu Linuxu @@ -11052,17 +11506,18 @@ Linux PSF-konsolskrifttype Linux-PSF-Konsolenschrift Γραμματοσειρά κονσόλας PSF Linux - Linux PSF console font + Linux PSF console font PSF-tiparo de Linux-konzolo tipo de letra de consola Linux PSF Linux PSF kontsolako letra-tipoa Linux PSF -konsolifontti Linux PSF stýristøðs stavasnið police console Linux PSF + caratar console Linux PSF cló consóil Linux PSF tipo de fonte de consola Linux PSF גופן לקונסול מסוג Linux PSF - Linux PSF konzolno slovo + Linux PSF font konzole Linux PSF konzolos betűkészlet Typo de litteras console Linux PSF Fonta konsol Linux PSF @@ -11079,7 +11534,7 @@ poliça consòla Linux PSF Czcionka konsoli PSF Linux letra de consola Linux PSF - Fonte de console Linux PSF + Fonte de console Linux PSF Font consolă Linux PSF Консольный шрифт Linux PSF Písmo PSF pre konzolu Linuxu @@ -11087,38 +11542,40 @@ Lloj gërme për konsolë Linux PSF слова Линуксове ПСФ конзоле Linux PSF-konsoltypsnitt - Linux PSF konsol fontu + Linux PSF konsol yazı tipi консольний шрифт Linux PSF Phông chữ bàn giao tiếp PSF Linux - Linux PSF 控制台字体 - Linux PSF console 字型 + Linux PSF 控制台字体 + Linux PSF console 字型 - + Linux PSF console font (gzip-compressed) + Linux PSF-konsoleskriftipe (gzip-saamgepers) خط كونسول PSF لينكس (مضغوط-gzip) - Kansolny šryft PSF dla Linuksa (gzip-skampresavany) + Kansolny šryft PSF dla Linuksa (gzip-skampresavany) Шрифт — Linux PSF, компресиран с gzip lletra de consola PSF de Linux (amb compressió gzip) font PSF pro konzolu Linuxu (komprimace gzip) Linux PSF-konsolskrifttype (gzip-komprimeret) Linux-PSF-Konsolenschrift (gzip-komprimiert) Γραμματοσειρά κονσόλας PSF Linux (συμπιεσμένη με gzip) - Linux PSF console font (gzip-compressed) + Linux PSF console font (gzip-compressed) tipo de letra de consola Linux PSF (comprimido con gzip) Linux PSF kontsolako letra-tipoa (gzip-ekin konprimitua) Linux PSF -konsolifontti (gzip-pakattu) Linux PSF stýristøðs stavasnið (gzip-stappað) police console Linux PSF (compressée gzip) + caratar console Linux PSF (comprimût cun gzip) cló consóil Linux PSF (comhbhrúite le gzip) tipo de fonte de consola Linux PSF (comprimida con gzip) גופן למסוף מסוג Linux PSF (מכווץ ע״י gzip) - Linux PSF konzolno slovo (gzip sažeto) - Linux PSF konzolos betűkészlet (gzip-tömörítésű) + Linux PSF font konzolne (gzip komprimirano) + Linux PSF konzolos betűkészlet (gzip tömörítésű) Typo de litteras console Linux PSF (comprimite con gzip) Fonta konsol Linux PSF (terkompresi gzip) Carattere console Linux PSF (compresso con gzip) @@ -11133,7 +11590,7 @@ poliça consòla Linux PSF (compressat gzip) Czcionka konsoli PSF Linux (kompresja gzip) letra de consola Linux PSF (compressão gzip) - Fonte de console Linux PSF (compactada com gzip) + Fonte de console Linux PSF (compactada com gzip) Font consolă Linux PSF (compresie gzip) Консольный шрифт Linux PSF (сжатый gzip) Písmo PSF pre konzolu Linuxu (komprimované pomocou gzip) @@ -11141,20 +11598,21 @@ Lloj gërme për konsolë Linux PSF (komresuar me gzip) слова Линуксове ПСФ конзоле (запакована гзип-ом) Linux PSF-konsoltypsnitt (gzip-komprimerat) - Linux PSF konsol fontu (gzip ile sıkıştırılmış) + Linux PSF konsol yazı tipi (gzip ile sıkıştırılmış) консольний шрифт Linux PSF (стиснений gzip) Phông chữ bàn giao tiếp PSF Linux (đã nén gzip) - Linux PSF 控制台字体(gzip 压缩) - Linux PSF console 字型 (gzip 格式壓縮) + Linux PSF 控制台字体(gzip 压缩) + Linux PSF console 字型 (gzip 壓縮) PCF font + PCF-skriftipe خط PCF PCF yazı növü - Šryft PCF + Šryft PCF Шрифт — PCF lletra PCF font PCF @@ -11162,17 +11620,18 @@ PCF-skrifttype PCF-Schrift Γραμματοσειρά PCF - PCF font + PCF font PCF-tiparo tipo de letra PCF PCF letra-tipoa PCF-fontti PCF stavasnið police PCF + caratar PCF cló PCF tipo de letra PCF גופן PCF - PCF slovo + PCF font PCF-betűkészlet Typo de litteras PCF Fonta PCF @@ -11189,7 +11648,7 @@ poliça PCF Czcionka PCF letra PCF - Fonte PCF + Fonte PCF Font PCF Шрифт PCF Písmo PCF @@ -11197,14 +11656,14 @@ Gërma PCF ПЦФ слова PCF-typsnitt - PCF fontu + PCF yazı tipi шрифт PCF Phông chữ PCF - PCF 字体 - PCF 字型 + PCF 字体 + PCF 字型 - + @@ -11212,9 +11671,10 @@ OpenType font + OpenType-skriftipe خط OpenType OpenType yazı növü - Šryft OpenType + Šryft OpenType Шрифт — OpenType lletra OpenType font OpenType @@ -11222,17 +11682,18 @@ OpenType-skrifttype OpenType-Schrift Γραμματοσειρά OpenType - OpenType font + OpenType font OpenType-tiparo tipo de letra OpenType OpenType letra-tipoa OpenType-fontti OpenType stavasnið police OpenType + caratar OpenType cló OpenType tipo de fonte OpenType גופן של OpenType - OpenType slovo + OpenType font OpenType-betűkészlet Typo de litteras OpenType Fonta OpenType @@ -11249,7 +11710,7 @@ poliça OpenType Czcionka OpenType letra OpenType - Fonte OpenType + Fonte OpenType Font OpenType Шрифт OpenType Písmo OpenType @@ -11257,24 +11718,25 @@ Gërma OpenType слова Отворене Врсте OpenType-typsnitt - OpenType fontu + OpenType yazı tipi шрифт OpenType Phông chữ OpenType - OpenType 字体 - OpenType 字型 + OpenType 字体 + OpenType 字型 - + Speedo font + Speedo-skriftipe خط Speedo Speedo yazı növü - Šryft Speedo + Šryft Speedo Шрифт — Speedo lletra Speedo font Speedo @@ -11282,17 +11744,18 @@ Speedoskrifttype Speedo-Schrift Γραμματοσειρά Speedo - Speedo font + Speedo font Speedo-tiparo tipo de letra de Speedo Speedo letra-tipoa Speedo-fontti Speedo stavasnið police Speedo + caratar Speedo cló Speedo tipo de letra Speedo גופן של Speedo - Speedo slovo + Speedo font Speedo-betűkészlet Typo de litteras Speedo Fonta Speedo @@ -11309,7 +11772,7 @@ poliça Speedo Czcionka Speedo letra Speedo - Fonte Speedo + Fonte Speedo Font Speedo Шрифт Speedo Písmo Speedo @@ -11317,22 +11780,23 @@ Gërma Speedo Спидо слова Speedo-typsnitt - Speedo fontu + Speedo yazı tipi шрифт Speedo Phông chữ Speedo - Speedo 字体 - Speedo 字型 + Speedo 字体 + Speedo 字型 - + SunOS News font + SunOS News-skriftipe خط SunOS News SunOS News yazı növü - Šryft SunOS News + Šryft SunOS News Шрифт — SunOS News lletra News de SunOS font SunOS News @@ -11340,17 +11804,18 @@ SunOS News-skrifttype SunOS-News-Schrift Γραμματοσειρά SunOS News - SunOS News font + SunOS News font tiparo de SunOS News tipo de letra para NeWS de SunOS SunOs News letra-tipoa SunOS News -fontti SunOS News stavasnið police SunOS News + caratar SunOS News cló SunOS News tipo de letra SunOS News גופן של SunOS News - SunOS News slovo + SunOS News font SunOS News-betűkészlet Typo de litteras SunOS News Fonta SunOS News @@ -11367,7 +11832,7 @@ poliça SunOS News Czcionka SunOS News letra SunOS News - Fonte SunOS News + Fonte SunOS News Font SunOS News Шрифт SunOS News Písmo SunOS News @@ -11378,20 +11843,21 @@ SunOS News yazı tipi шрифт SunOS News Phông chữ SunOS News - SunOS News 字体 - SunOS News 字型 + SunOS News 字体 + SunOS News 字型 - - - + + + TeX font + TeX-skriftipe خط TeX TeX yazı növü - Šryft TeX + Šryft TeX Шрифт — TeX lletra TeX font TeX @@ -11399,17 +11865,18 @@ TeX-skrifttype TeX-Schrift Γραμματοσειρά TeX - TeX font + TeX font TeX-tiparo tipo de letra de TeX TeX letra-tipoa TeX-fontti TeX stavasnið police TeX + caratar TeX cló TeX tipo de letra de TeX גופן TeX - TeX slovo + TeX font TeX-betűkészlet Typo de litteras TeX Fonta TeX @@ -11426,7 +11893,7 @@ poliça TeX Czcionka TeX letra TeX - Fonte TeX + Fonte TeX Font TeX Шрифт TeX Písmo TeX @@ -11434,23 +11901,24 @@ Gërma TeX ТеКс слова TeX-typsnitt - TeX fontu + TeX yazı tipi шрифт TeX Phông chữ TeX - TeX 字体 - TeX 字型 + TeX 字体 + TeX 字型 - - - + + + TeX font metrics + TeX-skriftipeafmetings مقاييس خط TeX TeX yazı növü metrikləri - Metryka šryftu TeX + Metryka šryftu TeX Шрифтова метрика — TeX mètrica de lletra de TeX metrika fontu TeX @@ -11458,16 +11926,17 @@ TeX-skrifttypeinformation TeX-Schriftmetriken Μετρικά γραμματοσειράς TeX - TeX font metrics + TeX font metrics metrikoj de TeX-tiparo métricas tipográficas de TeX TeX letra-tipoen neurriak TeX-fonttimitat métriques de police TeX + metrichis caratar TeX meadarachtaí cló TeX Métricas de tipo de letra de TeX ממדי גופן של TeX - TeX mjere slova + Metrika TeX fonta TeX-betűmetrika Metricas de typo de litteras TeX Fonta metrik TeX @@ -11484,7 +11953,7 @@ metricas de poliça TeX Metryki czcionki TeX métricas de letra TeX - Métrica de fonte TeX + Métrica de fonte TeX Dimensiuni font TeX Метрика шрифта TeX Metrika písma TeX @@ -11495,35 +11964,37 @@ TeX yazı tipi ölçüleri метрики шрифту TeX Cách đo phông chữ TeX - TeX 字体规格 - TeX 字型描述檔 + TeX 字体规格 + TeX 字型描述檔 - - + + TrueType font + TrueType-skriftipe خط TrueType - Šryft TrueType + Šryft TrueType Шрифт — TrueType lletra TrueType font TrueType TrueType-skrifttype TrueType-Schrift Γραμματοσειρά TrueType - TrueType font + TrueType font TrueType-tiparo tipo de letra TrueType TrueType letra-tipoa TrueType-fontti TrueType stavasnið police Truetype + caratar TrueType cló TrueType tipo de letra TrueType גופן מסוג TrueType - TrueType slovo + TrueType font TrueType-betűkészlet Typo de litteras TrueType Fonta TrueType @@ -11540,7 +12011,7 @@ poliça Truetype Czcionka TrueType letra TrueType - Fonte TrueType + Fonte TrueType Font TrueType Шрифт TrueType Písmo TrueType @@ -11548,65 +12019,77 @@ Lloj gërme TrueType Трутајп слова Truetype-typsnitt - TrueType fontu + TrueType yazı tipi шрифт TrueType Phông chữ TrueType - TrueType 字体 - TrueType 字型 + TrueType 字体 + TrueType 字型 - - - + + + Font collection + Skriftipeversameling + Шрифтова колекция ccol·lecció de lletres kolekce fontů + Skrifttypesamling Schriftsammlung - Font collection + Font collection colección tipográfica + Letra-tipo bilduma Fonttikokoelma - Kolekcija slova + Collection de polices + colezion di caratars + bailiúchán clónna + Zbirka fontova Betűkészlet-gyűjtemény Koleksi fonta Raccolta di caratteri Қаріптер жинағы 글꼴 모음 Kolekcja czcionek - coleção de fontes + coleção de letras + coleção de fontes Коллекция шрифтов Zbierka písiem + Zbirka pisav Typsnittssamling + Yazı tipi derlemi збірка шрифтів - 字体集 - 字型集 + 字体集 + 字型集 TrueType XML font + TrueType XML-skriftipe خط TrueType XML - Šryft TrueType XML + Šryft TrueType XML Шрифт — TrueType XML lletra XML de TrueType font TrueType XML TrueType XML-skrifttype TrueType-XML-Schrift Γραμματοσειρά XML TrueType - TrueType XML font + TrueType XML font tipo de letra TrueType XML TrueType XML letra-tipoa TrueType-XML-fontti TrueType XML stavasnið police Truetype XML + caratar TrueType XML cló XML TrueType tipo de letra TrueType XML גופן XML מסוג TrueType - TrueType XML slovo + TrueType XML font TrueType XML betűkészlet Typo de litteras TrueType XML Fonta TrueType XML @@ -11622,7 +12105,7 @@ poliça Truetype XML Czcionka TrueType XML letra TrueType XML - Fonte TrueType XML + Fonte TrueType XML Font XML TrueType Шрифт TrueType XML Písmo TrueType XML @@ -11630,23 +12113,24 @@ Lloj gërme TrueType XML Трутајп ИксМЛ слова Truetype XML-typsnitt - TrueType XML fontu + TrueType XML yazı tipi шрифт TrueType XML Phông chữ XML TrueType - TrueType XML 字体 - TrueType XML 字型 + TrueType XML 字体 + TrueType XML 字型 - + V font + V-skriftipe خط V V yazı növü - Šryft V + Šryft V Шрифт — V lletra V font V @@ -11654,17 +12138,18 @@ V-skrifttype V-Schrift Γραμματοσειρά V - V font + V font V-tiparo tipo de letra V V letra-tipoa V-fontti V stavasnið police V + caratar V cló V tipo de letra V גופן של V - V slovo + V font V-betűkészlet Typo de litteras V Fonta V @@ -11681,7 +12166,7 @@ poliça V Czcionka V letra V - Fonte V + Fonte V Font V Шрифт V font Písmo V @@ -11689,34 +12174,36 @@ Gërmë V В слова V-typsnitt - V fontu + V yazı tipi V-шрифт Phông chữ V - V 字体 - V 字型 + V 字体 + V 字型 - + Adobe FrameMaker document + Adobe FrameMaker-dokument مستند أدوبي الصانع للإطارات Documentu d'Adobe FrameMaker - Dakument Adobe FrameMaker + Dakument Adobe FrameMaker Документ — Adobe FrameMaker document d'Adobe FrameMaker dokument Adobe FrameMaker Adobe FrameMaker-dokument Adobe-FrameMaker-Dokument Έγγραφο Adobe FrameMaker - Adobe FrameMaker document + Adobe FrameMaker document Dokumento de Adobe FrameMaker documento de Adobe FrameMaker Adobe FrameMaker-en dokumentua Adobe FrameMaker -asiakirja Adobe FrameMaker skjal document Adobe FrameMaker + document Adobe FrameMaker cáipéis Adobe FrameMaker documento de Adobe FrameMaker מסמך Adobe FrameMaker @@ -11737,7 +12224,7 @@ document Adobe FrameMaker Dokument Adobe FrameMaker documento Adobe FrameMaker - Documento do Adobe FrameMaker + Documento do Adobe FrameMaker Document Adobe FrameMaker Документ Adobe FrameMaker Dokument Adobe FrameMaker @@ -11748,17 +12235,17 @@ Adobe FrameMaker belgesi документ Adobe FrameMaker Tài liệu Adobe FrameMaker - Adobe FrameMaker 文档 - Adobe FrameMaker 文件 + Adobe FrameMaker 文档 + Adobe FrameMaker 文件 - - - - - - - + + + + + + + @@ -11766,20 +12253,21 @@ Game Boy ROM Game Boy ROM - Game Boy ROM + Game Boy ROM ROM — Game Boy ROM de Game Boy ROM pro Game Boy - Game Boy-rom + Game Boy-ROM Game Boy ROM Game Boy ROM - Game Boy ROM + Game Boy ROM NLM de Game Boy ROM de Game Boy Game Boy-eko ROMa Game Boy -ROM Game Boy ROM ROM Game Boy + ROM Game Boy ROM Game Boy ROM de Game Boy ROM של Game Boy @@ -11801,7 +12289,7 @@ ROM Game Boy Plik ROM konsoli Game Boy ROM Game Boy - ROM de Game Boy + ROM de Game Boy ROM Game Boy Game Boy ROM ROM pre Game Boy @@ -11812,12 +12300,12 @@ Game Boy ROM ППП Game Boy ROM Game Boy - Game Boy ROM - Game Boy ROM + Game Boy ROM + Game Boy ROM - - + + @@ -11825,15 +12313,17 @@ Game Boy Color ROM + ROM — Game Boy Color ROM de Game Boy Color ROM pro Game Boy Color - Game Boy Color ROM + Game Boy Color-ROM Game Boy Color ROM - Game Boy Colour ROM + Game Boy Colour ROM ROM de Game Boy Color Game Boy Color ROM Game Boy Color -ROM ROM Game Boy Color + ROM Game Boy Color ROM Game Boy Color ROM של Game Boy Color Game Boy Color ROM @@ -11843,19 +12333,19 @@ Game Boy Color ROM 게임보이 컬러 롬 Plik ROM konsoli Game Boy Color - ROM de Game Boy Color + ROM de Game Boy Color Game Boy Color ROM ROM pre Game Boy Color Гејм Бој РОМ боје Game Boy Color-rom Game Boy Color ROM ППП Game Boy Color - Game Boy Color ROM - Game Boy Color ROM + Game Boy Color ROM + Game Boy Color ROM - - + + @@ -11864,19 +12354,20 @@ Game Boy Advance ROM Game Boy Advance ROM - Game Boy Advance ROM + Game Boy Advance ROM ROM — Game Boy Advance ROM de Game Boy Advance ROM pro Game Boy Advance - Game Boy Advance-rom + Game Boy Advance-ROM Game Boy Advance ROM Game Boy Advance ROM - Game Boy Advance ROM + Game Boy Advance ROM ROM de Game Boy Advance Game Boy Advance-ko ROMa Game Boy Advance -ROM Game Boy Advance ROM ROM Game Boy Advance + ROM Game Boy Advance ROM Game Boy Advance ROM de Game Boy Advance ROM של Game Boy Advance @@ -11897,7 +12388,7 @@ ROM Game Boy Advance Plik ROM konsoli Game Boy Advance ROM Game Boy Advance - ROM de Game Boy Advance + ROM de Game Boy Advance ROM Game Boy Advance Game Boy Advance ROM ROM pre Game Boy Advance @@ -11908,19 +12399,26 @@ Game Boy Gelişmiş ROM розширений ППП Game Boy ROM Game Boy Advance - Game Boy Advance ROM - Game Boy Advance ROM + Game Boy Advance ROM + Game Boy Advance ROM Virtual Boy ROM + ROM — Virtual Boy ROM de Virtual Boy ROM pro Virtual Boy + Virtual Boy-ROM Virtual Boy ROM - Virtual Boy ROM + Virtual Boy ROM ROM de Virtual Boy + Virtual Boy ROM + Virtual Boy ROM + ROM Virtual Boy + ROM Virtual Boy + ROM Virtual Boy Virtual Boy ROM Virtual Boy ROM ROM Virtual Boy @@ -11928,33 +12426,36 @@ Virtual Boy ROM 버추얼보이 롬 Plik ROM konsoli Virtual Boy - ROM de Virtual Boy + ROM de Virtual Boy Virtual Boy ROM ROM pre Virtual Boy Virtual Boy-rom + Virtual Boy ROM ROM Virtual Boy - Virtual Boy ROM - Virtual Boy ROM + Virtual Boy ROM + Virtual Boy ROM GDBM database + GDBM-databasis قاعدة بيانات GDBM - Baza źviestak GDBM + Baza źviestak GDBM База от данни — GDBM base de dades GDBM databáze GDBM GDBM-database GDBM-Datenbank Βάση δεδομένων GDBM - GDBM database + GDBM database GDBM-datumbazo base de datos GDBM GDBM datu-basea GDBM-tietokanta GDBM dátustovnur base de données GDBM + base di dâts GDBM bunachar sonraí GDBM base de datos GDBM מסד נתונים GDBM @@ -11975,7 +12476,7 @@ banca de donadas GDBM Baza danych GDBM base de dados GDMB - Banco de dados GDBM + Banco de dados GDBM Bază de date GDBM База данных GDBM Databáza GDBM @@ -11983,37 +12484,39 @@ Bazë me të dhëna GDBM ГДБМ база података GDBM-databas - GDBM veritabanı + GDBM veri tabanı база даних GDBM Cơ sở dữ liệu GDBM - GDBM 数据库 - GDBM 資料庫 + GDBM 数据库 + GDBM 資料庫 GDBM GNU Database Manager - - - + + + - + Genesis ROM Genesis ROM - Genesis ROM + Genesis ROM ROM — Genesis ROM de Genesis ROM pro Genesis - Genesis-rom + Genesis-ROM Genesis ROM Genesis ROM - Genesis ROM + Genesis ROM Genesis-NLM ROM de Genesis (Mega Drive) Genesis-eko ROMa Genesis-ROM Genesis ROM ROM Mega Drive/Genesis + ROM Sega Mega Drive ROM Genesis ROM xenérica ROM מסוג Genesis @@ -12034,7 +12537,7 @@ ROM Mega Drive/Genesis Plik ROM konsoli Mega Drive ROM Mega Drive - ROM de Genesis (Mega Drive) + ROM de Genesis (Mega Drive) ROM Genesis Genesis ROM ROM pre Megadrive @@ -12045,30 +12548,35 @@ Genesis ROM ППП Genesis ROM Genesis - Genesis ROM - Genesis ROM + Genesis ROM + Genesis ROM - - - - + + + + + + - + Genesis 32X ROM + ROM — Genesis 32X ROM de Genesis 32X ROM pro Genesis 32X - Genesis 32X ROM + Genesis 32X-ROM Genesis 32X ROM - Genesis 32X ROM + Genesis 32X ROM ROM de Genesis 32X Genesis 32X ROM Genesis 32X -ROM ROM Genesis 32X + ROM Sega Mega Drive 32X ROM Genesis 32X ROM מסוג Genesis 32X Genesis 32X ROM @@ -12078,39 +12586,41 @@ Genesis 32X ROM 제네시스 32X 롬 Plik ROM konsoli Mega Drive 32X - ROM de Genesis 32X + ROM de Genesis 32X Genesis 32X ROM ROM pre Genesis 32X Џенезис 32X РОМ Mega Drive 32X-rom Genesis 32X ROM ППП Genesis 32X - Genesis 32X ROM - Genesis 32X ROM + Genesis 32X ROM + Genesis 32X ROM - + translated messages (machine-readable) + vertaalde boodskappe (masjienleesbaar) رسائل مترجمة (مقروءة آليا) - pierakładzienyja paviedamleńni (dla čytańnia kamputaram) + pierakładzienyja paviedamleńni (dla čytańnia kamputaram) Преведени съобщения — машинен формат missatges traduïts (llegible per màquina) přeložené zprávy (strojově čitelné) oversatte meddelelser (maskinlæsbare) Übersetzte Meldungen (maschinenlesbar) Μεταφρασμένα μηνύματα (για μηχανική ανάγνωση) - translated messages (machine-readable) + translated messages (machine-readable) tradukitaj mesaĝoj (maŝinlegebla) mensajes traducidos (legibles por máquinas) itzulitako mezuak (ordenagailuek irakurtzeko) käännetyt viestit (koneluettava) týdd boð (maskin-lesifør) messages traduits (lisibles par machine) + messaçs tradots (leibii de machine) teachtaireachtaí aistrithe (inléite ag meaisín) mensaxes traducidos (lexíbeis por máquinas) הודעות מתורגמות (מובן ע״י מכונה) @@ -12132,7 +12642,7 @@ messatges tradusits (legibles per maquina) Przetłumaczone komunikaty (czytelne dla komputera) mensagens traduzidas (leitura pelo computador) - Mensagens traduzidas (legível pelo computador) + Mensagens traduzidas (legível pelo computador) mesaje traduse (citite de calculator) Переводы сообщений (откомпилированые) Preložené správy (strojovo čitateľné) @@ -12143,64 +12653,53 @@ çevrilmiş iletiler (makine tarafından okunabilir) перекладені повідомлення (у машинній формі) thông điệp đã dịch (máy đọc được) - 已翻译消息(机读) - 翻譯訊息 (程式讀取格式) + 已翻译消息(机读) + 翻譯訊息 (程式讀取格式) - - + + - GTK+ Builder - constructor de GTK+ - GTK+ Builder - GTK+ Builder - GTK+ Builder - Δομητής GTK+ - GTK+ Builder - GTK+ Builder - GTK+ Builder - GTK+ Builder - GTK+ Builder - Tógálaí GTK+ - Construtor de GTK+ - בנייה של GTK+‎ - GTK+ Builder - GTK+ Builder - GTK+ Builder - GTK+ Builder - GTK+ Builder - GTK+ Builder - GTK+ Builder - GTK+ 빌더 - GTK+ būvētājs - GTK+ Builder - GTK+ Builder - Construtor GTK+ - GTK+ Builder - GTK+ Builder - GTK+ Builder - GTK+ Builder - ГТК+ Градитељ - GTK+ Builder - GTK+ İnşa Edici - GTK+ Builder - GTK+ Builder - GTK+ Builder + GTK+ Builder interface document + Интерфейс — GTK+ Builder + document d'interfície GTK+ Builder + GTK+ Builder-brugerflade-dokument + GTK+-Builder-Oberflächendokument + GTK+ Builder interface document + documento de interfaz de GTK Builder + GTK+ Builder interfaze dokumentua + GTK+ Builder -käyttöliittymän asiakirja + document d'interface GTK+ Builder + GTK+ Graditelj dokument sučelja + GTK+ Builder felületleíró dokumentum + Dokumen antarmuka GTK+ Builder + Documento interfaccia GTK+ Builder + GTK+ Builder интерфейс құжаты + GTK+ 빌더 인터페이스 문서 + Dokument interfejsu GTK Builder + Documento de interface do GTK+ Builder + Документ интерфейса GTK+ Builder + GTK+-Builder-gränssnittsdokument + GTK+ Builder arayüz belgesi + документ інтерфейсу GTK+ Builder + GTK+ Builder 界面文档 + GTK+ Builder 介面文件 - + Glade project + Glade-projek مشروع Glade Glade layihəsi - Prajekt Glade + Prajekt Glade Проект — Glade projecte de Glade projekt Glade @@ -12208,13 +12707,14 @@ Gladeprojekt Glade-Projekt Έργο Glade - Glade project + Glade project Glade-projekto proyecto de Glade Glade proiektua Glade-projekti Glade verkætlan projet Glade + progjet Glade tionscadal Glade proxecto de Glade מיזם Glade @@ -12235,7 +12735,7 @@ projècte Glade Projekt Glade projecto Glade - Projeto do Glade + Projeto do Glade Proiect Glade Проект Glade Projekt Glade @@ -12244,19 +12744,20 @@ Глејдов пројекат Glade-projekt Glade projesi - проект Glade + проєкт Glade Dự án Glade - Glade 工程 - Glade 專案 + Glade 工程 + Glade 專案 - + GnuCash financial data + GnuCash finansiële data معلومات GnuCash المالية Финансови данни — GnuCash dades financeres de GnuCash @@ -12264,12 +12765,13 @@ Finansielle data til GnuCash GnuCash-Finanzdaten Οικονομικά στοιχεία GnuCash - GnuCash financial data + GnuCash financial data datos financieros de GnuCash GnuCash finantzako datuak GnuCash-taloustiedot GnuCash fíggjarligar dátur données financières GnuCash + dâts finanziaris GnuCash sonraí airgeadúla GnuCash datos financeiros de GNUCash מידע כלכלי של GnuCash @@ -12287,7 +12789,7 @@ donadas financières GnuCash Dane finansowe GnuCash dados financeiros GnuCash - Dados financeiros do GnuCash + Dados financeiros do GnuCash Date financiare GnuCash Финансовые данные GnuCash Finančné údaje GnuCash @@ -12297,8 +12799,8 @@ GnuCash mali verisi фінансові дані GnuCash Dữ liệu tài chính GnuCash - GnuCash 财务数据 - GnuCash 財務資料 + GnuCash 财务数据 + GnuCash 財務資料 @@ -12306,21 +12808,23 @@ Gnumeric spreadsheet + Gnumeric-sigblad جدول Gnumeric - Raźlikovy arkuš Gnumeric + Raźlikovy arkuš Gnumeric Таблица — Gnumeric full de càlcul de Gnumeric sešit Gnumeric Gnumeric-regneark Gnumeric-Tabelle Λογιστικό φύλλο Gnumeric - Gnumeric spreadsheet + Gnumeric spreadsheet Gnumeric-kalkultabelo hoja de cálculo de Gnumeric Gnumeric kalkulu-orria Gnumeric-taulukko Gnumeric rokniark feuille de calcul Gnumeric + sfuei di calcul Gnumeric scarbhileog Gnumeric folla de cálculo de Gnumeric גליון עבודה Gnumeric @@ -12341,7 +12845,7 @@ fuèlh de calcul Gnumeric Arkusz Gnumeric folha de cálculo Gnumeric - Planilha do Gnumeric + Planilha do Gnumeric Foaie de calcul Gnumeric Электронная таблица Gnumeric Zošit Gnumeric @@ -12349,36 +12853,38 @@ Fletë llogaritjesh Gnumeric табела Гномовог бројевника Gnumeric-kalkylblad - Gnumeric çalışma sayfası + Gnumeric hesap çizelgesi ел. таблиця Gnumeric Bảng tính Gnumeric. - Gnumeric 电子表格 - Gnumeric 試算表 + Gnumeric 电子表格 + Gnumeric 試算表 - - + + Gnuplot document + Gnuplot-dokument مستند Gnuplot Documentu de Gnuplot - Dakument Gnuplot + Dakument Gnuplot Документ — Gnuplot document gnuplot dokument Gnuplot - Gnuplotdokument + Gnuplot-dokument Gnuplot-Dokument Έγγραφο Gnuplot - Gnuplot document + Gnuplot document Gnuplot-dokumento documento de Gnuplot Gnuplot dokumentua Gnuplot-asiakirja Gnuplot skjal document Gnuplot + document Gnuplot cáipéis Gnuplot documento de Gnuplot מסמך Gnuplot @@ -12398,7 +12904,7 @@ document Gnuplot Dokument Gnuplot documento Gnuplot - Documento do Gnuplot + Documento do Gnuplot Document Gnuplot Документ Gnuplot Dokument Gnuplot @@ -12409,8 +12915,8 @@ Gnuplot belgesi документ Gnuplot Tài liệu Gnuplot - Gnuplot 文档 - Gnuplot 文件 + Gnuplot 文档 + Gnuplot 文件 @@ -12420,20 +12926,21 @@ Graphite scientific graph مبيان الجرافيت العلمي - Navukovy hrafik Graphite + Navukovy hrafik Graphite Графика — Graphite gràfic científic Graphite vědecký graf Graphite Graphite videnskabelig graf Wissenschaftlicher Graphite-Graph Επιστημονικό γράφημα Graphite - Graphite scientific graph + Graphite scientific graph scienca grafikaĵo de Graphite gráfico científico de Graphite Graphite - grafiko zientifikoak Graphite- tieteellinen graafi Grapite vísindarlig ritmynd graphe Graphite scientific + grafic sientific Graphite graf eolaíochta Graphite gráfica científica de Graphite תרשים מדעי של Graphite @@ -12454,7 +12961,7 @@ graphe Graphite scientific Wykres naukowy Graphite gráfico científico Graphite - Gráfico científico do Graphite + Gráfico científico do Graphite Grafic științific Graphite Научная диаграмма Graphite Vedecký graf Graphite @@ -12465,28 +12972,29 @@ Graphite bilimsel grafiği наукова графіка Graphite Biểu đồ khoa học Graphite - Graphite 科学图形 - Graphite 科學圖表 + Graphite 科学图形 + Graphite 科學圖表 GTKtalog catalog كتالوج GTKtalog - Kataloh GTKtalog + Kataloh GTKtalog Каталог — Gtktalog catàleg de GTKtalog katalog GTKtalog GTKtalog-katalog GTKtalog-Katalog Κατάλογος GTKtalog - GTKtalog catalogue + GTKtalog catalogue katalogo de GTKtalog catálogo de GTKtalog Gtktalog katalogoa GTKtalog-luettelo GTKtalog skrá catalogue Gtktalog + catalic GTKtalog catalóg GTKtalog catálogo de GTKtalog קטלוג GTKtalog @@ -12508,7 +13016,7 @@ catalòg Gtktalog Katalog programu GTKtalog catálogo GTKtalog - Catálogo GTKtalog + Catálogo GTKtalog Catalog GTKalog Каталог GTKtalog Katalóg GTKtalog @@ -12516,38 +13024,40 @@ Katallog GTKtalog каталог ГТКталога GTKtalog-katalog - Gtktalog kataloğu + GTKtalog kataloğu каталог GTKtalog Phân loại GTKtalog - GTKtalog 目录 - GTKtalog 光碟目錄 + GTKtalog 目录 + GTKtalog 光碟目錄 - + TeX DVI document (gzip-compressed) + TeX DVI-dokument (gzip-saamgepers) مستند TeX DVI (مضغوط-gzip) Documentu Tex DVI (comprimíu en gzip) - Dakument TeX DVI (gzip-skampresavany) + Dakument TeX DVI (gzip-skampresavany) Документ — TeX DVI, компресиран с gzip document DVI de TeX (amb compressió gzip) dokument TeX DVI (komprimovaný pomocí gzip) TeX DVI-dokument (gzip-komprimeret) TeX-DVI-Dokument (gzip-komprimiert) Έγγραφο TeX DVI (συμπιεσμένο με gzip) - TeX DVI document (gzip-compressed) + TeX DVI document (gzip-compressed) documento DVI de TeX (comprimido con gzip) TeX DVI dokumentua (gzip-ekin konprimitua) TeX DVI -asiakirja (gzip-pakattu) TeX DVI skjal (gzip-stappað) document DVI TeX (compressé gzip) + document DVI TeX (comprimût cun gzip) cáipéis DVI TeX (comhbhrúite le gzip) documento DVI de TeX (comprimido con gzip) מסמך מסוג TeX DVI (מכווץ ע״י gzip) TeX DVI dokument (gzip sažet) - TeX DVI dokumentum (gzip-pel tömörítve) + TeX DVI dokumentum (gzip tömörítésű) Documento TeX DVI (comprimite con gzip) Dokumen TeX DVI (terkompresi gzip) Documento Tex DVI (compresso con gzip) @@ -12562,7 +13072,7 @@ document DVI TeX (compressat gzip) Dokument TeX DVI (kompresja gzip) documento TeX DVI (compressão gzip) - Documento DVI TeX (compactado com gzip) + Documento DVI TeX (compactado com gzip) Document TeX DVI (comprimat gzip) Документ TeX DVI (сжатый gzip) Dokument TeX DVI (komprimovaný pomocou gzip) @@ -12573,29 +13083,31 @@ TeX DVI belgesi (gzip ile sıkıştırılmış) документ TeX DVI (стиснений gzip) Tài liệu DVI TeX (đã nén gzip) - TeX DVI 文档(gzip 压缩) - TeX DVI 文件 (gzip 格式壓縮) + TeX DVI 文档(gzip 压缩) + TeX DVI 文件 (gzip 壓縮) Gzip archive + Gzip-argief أرشيف Gzip - Archiŭ gzip + Archiŭ gzip Архив — gzip arxiu gzip archiv gzip Gzip-arkiv Gzip-Archiv Συμπιεσμένο αρχείο Gzip - Gzip archive + Gzip archive Gzip-arkivo archivador Gzip Gzip artxiboa Gzip-arkisto Gzip skjalasavn archive gzip + archivi Gzip cartlann Gzip arquivo Gzip ארכיון Gzip @@ -12615,10 +13127,10 @@ archiu gzip Archiwum gzip arquivo Gzip - Pacote Gzip + Pacote Gzip Arhivă Gzip Архив GZIP - Archív gzip + Archív Gzip Datoteka arhiva Gzip Arkiv gzip Гзип архива @@ -12626,37 +13138,39 @@ Gzip arşivi архів gzip Kho nén gzip - Gzip 归档文件 - Gzip 封存檔 + Gzip 归档文件 + Gzip 封存檔 - + PDF document (gzip-compressed) + PDF-dokument (gzip-saamgepers) مستند PDF (مضغوط-gzip) Documentu PDF (comprimíu en gzip) - Dakument PDF (gzip-skampresavany) + Dakument PDF (gzip-skampresavany) Документ — PDF, компресиран с gzip document PDF (amb compressió gzip) dokument PDF (komprimovaný pomocí gzip) PDF-dokument (gzip-komprimeret) PDF-Dokument (gzip-komprimiert) Έγγραφο PDF (συμπιεσμένο με gzip) - PDF document (gzip-compressed) + PDF document (gzip-compressed) documento PDF (comprimido con gzip) PDF dokumentua (gzip-ekin konprimitua) PDF-asiakirja (gzip-pakattu) PDF skjal (gzip-stappað) document PDF (compressé gzip) + document PDF (comprimût cun gzip) cáipéis PDF (comhbhrúite le gzip) documento PDF (comprimido en gzip) מסמך PDF (מכווץ ע״י gzip) PDF dokument (gzip sažet) - PDF dokumentum (gzip-tömörítésű) + PDF dokumentum (gzip tömörítésű) Documento PDF (comprimite con gzip) Dokumen PDF (terkompresi gzip) Documento PDF (compresso con gzip) @@ -12671,7 +13185,7 @@ document PDF (compressat gzip) Dokument PDF (kompresja gzip) documento PDF (compressão gzip) - Documento PDF (compactado com gzip) + Documento PDF (compactado com gzip) Document PDF (comprimat gzip) Документ PDF (сжатый gzip) Dokument PDF (komprimovaný pomocou gzip) @@ -12682,35 +13196,37 @@ PDF belgesi (gzip ile sıkıştırılmış) документ PDF (стиснений gzip) Tài liệu PDF (đã nén gzip) - PDF 文档(gzip 压缩) - PDF 文件 (gzip 格式壓縮) + PDF 文档(gzip 压缩) + PDF 文件 (gzip 壓縮) PostScript document (gzip-compressed) + PostScript-dokument (gzip-saamgepers) مستند PostScript (مضغوط-gzip) Documentu PostScript (comprimíu en gzip) - Dakument PostScript (gzip-skampresavany) + Dakument PostScript (gzip-skampresavany) Документ — PostScript, компресиран с gzip document PostScript (amb compressió gzip) dokument PostScript (komprimovaný pomocí gzip) PostScript-dokument (gzip-komprimeret) PostScript-Dokument (gzip-komprimiert) Έγγραφο PostScript (συμπιεσμένο με gzip) - PostScript document (gzip-compressed) + PostScript document (gzip-compressed) PostScript-dokumento (kunpremita per gzip) documento PostScript (comprimido con gzip) PostScript dokumentua (gzip-konprimitua) PostScript-asiakirja (gzip-pakattu) PostScript skjal (gzip-stappað) document PostScript (compressé gzip) + document PostScript (comprimût cun gzip) cáipéis PostScript (comhbhrúite le gzip) documento PostScript (comprimido con gzip) מסמך PostScript (מכוות ע״י gzip) PostScript dokument (gzip sažet) - PostScript-dokumentum (gzip-pel tömörítve) + PostScript-dokumentum (gzip tömörítésű) Documento PostScript (comprimite con gzip) Dokumen PostScript (terkompresi gzip) Documento PostScript (compresso con gzip) @@ -12724,9 +13240,9 @@ PostScript-document (ingepakt met gzip) PostScript-dokument (pakka med gzip) document PostEscript (compressat gzip) - Dokument Postscript (kompresja gzip) + Dokument PostScript (kompresja gzip) documento PostScript (compressão gzip) - Documento PostScript (compactado com gzip) + Documento PostScript (compactado com gzip) Document PostScript (comprimat gzip) Документ PostScript (сжатый gzip) Dokument PostScript (komprimovaný pomocou gzip) @@ -12737,18 +13253,19 @@ PostScript belgesi (gzip ile sıkıştırılmış) документ PostScript (стиснене gzip) Tài liệu PostScript (đã nén gzip) - PostScript 文档(gzip 压缩) - PostScript 文件 (gzip 格式壓縮) + PostScript 文档(gzip 压缩) + PostScript 文件 (gzip 壓縮) HDF document + HDF-dokument مستند HDF Documentu HDF HDF sənədi - Dakument HDF + Dakument HDF Документ — HDF document HDF dokument HDF @@ -12756,13 +13273,14 @@ HDF-dokument HDF-Dokument Έγγραφο HDF - HDF document + HDF document HDF-dokumento documento HDF HDF dokumentua HDF-asiakirja HDF skjal document HDF + document HDF cáipéis HDF documento HDF מסמך HDF @@ -12783,7 +13301,7 @@ document HDF Dokument HDF documento HDF - Documento HDF + Documento HDF Document HDF Документ HDF Dokument HDF @@ -12794,14 +13312,14 @@ HDF belgesi документ HDF Tài liệu HDF - HDF 文档 - HDF 文件 + HDF 文档 + HDF 文件 HDF Hierarchical Data Format - - + + @@ -12811,16 +13329,19 @@ IFF file + IFF-lêer + Пакет — IFF fitxer IFF soubor IFF IFF-fil IFF-Datei Αρχείο IFF - IFF file + IFF file archivo IFF IFF fitxtegia IFF-tiedosto fichier IFF + file IFF comhad IFF Ficheiro IFF קובץ IFF @@ -12836,7 +13357,7 @@ fichièr IFF Plik IFF ficheiro IFF - Arquivo IFF + Arquivo IFF Файл IFF Súbor IFF Datoteka IFF @@ -12844,31 +13365,32 @@ IFF-fil IFF dosyası файл IFF - IFF 文件 - IFF 檔案 + IFF 文件 + IFF 檔案 IFF Interchange File Format - + iPod firmware برنامج عتاد الـiPod - Firmware iPod - Фърмуер за iPod + Firmware iPod + Фърмуер — iPod microprogramari d'iPod firmware iPod iPod-styreprogram iPod-Firmware Υλικολογισμικό iPod - iPod firmware + iPod firmware iPod-mikroprogramaro firmware de iPod iPod firmwarea iPod-laiteohjelmisto iPod fastbúnaður firmware iPod + firmware iPod dochtearraí iPod firmware de iPod קושחת ipod @@ -12889,7 +13411,7 @@ firmware iPod Oprogramowanie wewnętrzne iPod firmware iPod - Firmware do iPod + Firmware do iPod Firmware iPod Микропрограмма iPod Firmware iPod @@ -12897,32 +13419,34 @@ Firmware iPod ајПод-ов уграђени fast iPod-program - iPod üretici yazılımı + iPod donanım yazılımı мікропрограма iPod phần vững iPod - iPod 固件 - iPod 韌體 + iPod 固件 + iPod 韌體 - + Java archive + Java-argief أرشيف Java - Archiŭ Java + Archiŭ Java Архив — Java arxiu de Java archiv Java - Javaarkiv + Java-arkiv Java-Archiv Συμπιεσμένο αρχείο Java - Java archive + Java archive Java-arkivo archivador Java Java artxiboa Java-arkisto Java skjalasavn archive Java + archivi Java cartlann Java arquivo Java ארכיון Java @@ -12943,7 +13467,7 @@ archiu Java Archiwum Java arquivo Java - Pacote Java + Pacote Java Arhivă Java Архив Java Archív Java @@ -12954,8 +13478,8 @@ Java arşivi архів Java Kho nén Java - Java 归档文件 - Java 封存檔 + Java 归档文件 + Java 封存檔 @@ -12964,21 +13488,23 @@ Java class + Java-klas صنف java - Klasa Java - Клас на Java + Klasa Java + Клас — Java classe de Java třída Java - Javaklasse + Java-klasse Java-Klasse Κλάση Java - Java class + Java class Java-klaso clase de Java Java-ko klasea Java-luokka Java flokkur classe Java + classe Java aicme Java clase de Java מחלקת Java @@ -12999,7 +13525,7 @@ classa Java Klasa Java classe Java - Classe Java + Classe Java Clasă Java Класс Java Trieda Java @@ -13010,10 +13536,10 @@ Java sınıfı клас Java Hạng Java - Java 类 - Java class + Java 类 + Java class - + @@ -13022,23 +13548,90 @@ + + Groovy source code + Изходен код — Groovy + codi font en Groovy + Groovy-kildekode + Groovy-Quelltext + Groovy source code + código fuente en Groovy + Groovy iturburu-kodea + Groovy-lähdekoodi + code source Groovy + Groovy izvorni kôd + Groovy forráskód + Kode sumber Groovy + Codice sorgente Groovy + Groovy бастапқы коды + 그루비 소스 코드 + Kod źródłowy Groovy + Código-fonte Groovy + Исходный код Groovy + Groovy-källkod + Groovy kaynak kodu + вихідний код мовою Groovy + Groovy 源代码 + Groovy 原始碼 + + + + + + + + + Gradle scripts + Gradle-skrippe + Скрипт — Gradle + scripts Gradle + skript Gradle + Gradle-programmer + Gradle-Skripte + Gradle scripts + secuencias de órdenes de Gradle + Gradle script-ak + Gradle scriptit + scripts Gradle + script Gradle + scripteanna Gradle + Gradle skripta + Gradle-parancsfájl + Skrip Gradle + Script Gradle + Gradle сценарийлері + Gradle 스크립트 + Skrypty Gradle + Scripts Gradle + Скрипты Gradle + Skripty Gradle + Gradle-skript + Gradle betikleri + скрипти Gradle + Gradle 脚本 + Gradle 指令稿 + + + JNLP file + JNLP-lêer ملف JNLP - Fajł JNLP - Файл — JNLP + Fajł JNLP + Стартер — JNLP fitxer JNLP soubor JNLP JNPL-fil JNLP-Datei Αρχείο JNLP - JNLP file + JNLP file JNLP-dosiero archivo JNPL JNLP fitxategia JNLP-tiedosto JNLP fíla fichier JNLP + file JNLP comhad JNLP ficheiro JNLP קובץ JNLP @@ -13058,7 +13651,7 @@ fichièr JNLP Plik JNLP ficheiro JNLP - Arquivo JNLP + Arquivo JNLP Fișier JNLP Файл JNLP Súbor JNLP @@ -13069,15 +13662,15 @@ JNLP dosyası файл JNLP Tập tin JNLP - JNLP 文件 - JNLP 檔案 + JNLP 文件 + JNLP 檔案 JNLP Java Network Launching Protocol - + @@ -13086,15 +13679,16 @@ Ключодържател — Java magatzem de claus de Java úložiště klíčů Java - Javanøglelager + Java-nøglelager Java-Schlüsselbund Χώρος αποθήκευσης κλειδιών Java - Java keystore + Java keystore almacén de claves de Java Java-ren gako-biltegia Java-avainvarasto Java lyklagoymsla stockage de clés Java + archivi di clâfs Java eochairstór Java almacén de chaves de Java אחסון מפתחות של Java @@ -13112,19 +13706,19 @@ emmagazinatge de claus Java Baza kluczy Java armazém de chaves Java - Keystore de Java + Keystore de Java Stocare chei Java Хранилище ключей Java Úložisko kľúčov Java Datoteka tipkovne razporeditve Java смештај кључа Јаве Java-nyckellager - Java deposu + Java anahtar deposu сховище ключів Java - Java 密钥库 - Java 金鑰儲存 + Java 密钥库 + Java 金鑰儲存 - + @@ -13139,12 +13733,13 @@ Java JCE-nøglelager Java JCE-Schlüsselbund Αποθήκη κλειδιών Java JCE - Java JCE keystore + Java JCE keystore almacén de claves JCE de Java Java JCE-ren gako-biltegia Java JCE -avainvarasto Java JCE lyklagoymsla stockage de clés Java JCE + archivi di clâfs JCE Java eochairstór Java JCE almacén de chves JCE de Java אחסון מפתחות של Java JCE @@ -13162,40 +13757,41 @@ emmagazinatge de claus Java JCE Baza kluczy Java JCE armazém de chaves JavaJCE - Keystore JCE do Java + Keystore JCE do Java Stocare chei Java JCE Хранилище ключей Java JCE Úložisko kľúčov Java JCE Datoteka tipkovne razporeditve Java JCE смештај ЈЦЕ кључа Јаве Java JCE-nyckellager - Java JCE deposu + Java JCE anahtar deposu сховище ключів JCE Java - Java JCE 密钥库 - Java JCE 金鑰儲存 + Java JCE 密钥库 + Java JCE 金鑰儲存 JCE Java Cryptography Extension - + Pack200 Java archive أرشيف Pack200 Java - Archiŭ Pack200 Java + Archiŭ Pack200 Java Архив — Java Pack200 arxiu de Java en Pack200 archiv Java Pack200 Pack200 Java-arkiv Pack200-Java-Archiv Συμπιεσμένο αρχείο Java Pack200 - Pack200 Java archive + Pack200 Java archive archivador Pack200 Java Pack2000 Java artxiboa Pack200-Java-arkisto Pack200 Java skjalasavn archive Java Pack200 + archivi Java Pack200 cartlann Java Pack200 arquivo Pack200 Java ארכיון מסוג Pack200 Java @@ -13215,7 +13811,7 @@ archiu Java Pack200 Archiwum Java Pack200 arquivo Java Pack200 - Pacote Java Pack200 + Pacote Java Pack200 Arhivă Java Pack2000 Архив Java Pack200 Archív Java Pack200 @@ -13226,31 +13822,33 @@ Pack200 Java arşivi архів Java Pack200 Kho nén Java Pack200 - Pack200 Java 归档文件 - Pack200 Java 封存檔 + Pack200 Java 归档文件 + Pack200 Java 封存檔 - + JavaScript program + JavaScript-program برنامج جافاسكربت - Prahrama JavaScript + Prahrama JavaScript Програма на JavaScript programa JavaScript program v JavaScriptu JavaScript-program JavaScript-Programm Πρόγραμμα JavaScript - JavaScript program + JavaScript program JavaScript-programo programa en JavaScript JavaScript programa JavaScript-ohjelma JavaScript forrit programme JavaScript + program JavaScript ríomhchlár JavaScript programa JavaScript תכנית JavaScript @@ -13271,7 +13869,7 @@ programa JavaEscript Pogram JavaScript programa JavaScript - Programa JavaScript + Programa JavaScript Program JavaScript Программа JavaScript Program jazyka JavaScript @@ -13282,23 +13880,23 @@ JavaScript programı програма мовою JavaScript Chương trình JavaScript - JavaScript 程序 - JavaScript 程式 + JavaScript 程序 + JavaScript 程式 - - - - - - - - - - + + + + + + + + + + @@ -13306,17 +13904,20 @@ JSON document + JSON-dokument Documentu JSON + Документ — JSON document JSON dokument JSON JSON-dokument JSON-Dokument Έγγραφο JSON - JSON document + JSON document documento JSON JSON dokumentua JSON-asiakirja document JSON + document JSON cáipéis JSON Documento JSON מסמך JSON @@ -13330,7 +13931,7 @@ document JSON Dokument JSON documento JSON - Documento JSON + Documento JSON Документ JSON Dokument JSON Dokument JSON @@ -13338,8 +13939,8 @@ JSON-dokument JSON belgesi документ JSON - JSON 文档 - JSON 文件 + JSON 文档 + JSON 文件 JSON JavaScript Object Notation @@ -13348,17 +13949,20 @@ JRD document + JRD-dokument Documentu JRD + Документ — JRD document JRD dokument JRD JRD-dokument JRD-Dokument Έγγραφο JRD - JRD document + JRD document documento JRD JRD dokumentua JRD-asiakirja document JRD + document JRD cáipéis JRD מסמך JRD JRD dokument @@ -13371,15 +13975,16 @@ document JRD Dokument JRD doxumento JRD - Documento JRD + Documento JRD Документ JRD Dokument JRD + Dokument JRD ЈРД документ JRD-dokument JRD belgesi документ JRD - JRD 文档 - JRD 文件 + JRD 文档 + JRD 文件 JRD JSON Resource Descriptor @@ -13388,14 +13993,17 @@ JSON patch + Кръпка — JSON pedaç de JSON cesta JSON JSON-rettelse JSON-Patch - JSON patch + JSON patch parche en JSON JSON adabakia + JSON-paikkatiedosto correctif JSON + blec JSON paiste JSON טלאי JSON JSON zakrpa @@ -13408,15 +14016,15 @@ correctiu JSON Łata JSON patch JSON - Patch JSON + Patch JSON Патч JSON Záplata JSON ЈСОН закрпа JSON patch JSON yaması латка JSON - JSON 补丁 - JSON 修補檔 + JSON 补丁 + JSON 修補檔 JSON JavaScript Object Notation @@ -13426,16 +14034,18 @@ JSON-LD document Documentu JSON-LD + Документ — JSON-LD document JSON-LD dokument JSON-LD JSON-LD-dokument JSON-LD-Dokument Έγγραφο JSON-LD - JSON-LD document + JSON-LD document documento JSON-LD JSON-LD dokumentua JSON-LD-asiakirja document JSON-LD + document JSON-LD cáipéis JSON-LD מסמך JSON-LD JSON-LD dokument @@ -13448,15 +14058,16 @@ Document JSON-LD Dokument JSON-LD documento JSON-LD - Documento JSON-LD + Documento JSON-LD Документ JSON-LD Dokument JSON-LD + Dokument JSON-LD ЈСОН-ЛД документ JSON-LD-dokument JSON-LD belgesi документ JSON-LD - JSON-LD 文档 - JSON-LD 文件 + JSON-LD 文档 + JSON-LD 文件 JSON-LD JavaScript Object Notation for Linked Data @@ -13464,55 +14075,55 @@ - Jupyter Notebook - llibreta de notes de Jupyter - sešit Jupyter - Jupyter Notebook - Jupyter-Dokument - Jupyter Notebook - libreta de Jupyter - Jupyter Notebook + Jupyter notebook document + Скицник — Jupyter + document de llibreta de notes de Jupyter + Jupyter notebook-dokument + Jupyter-Notebook-Dokument + Jupyter notebook document + documento de cuaderno de Jupyter + Jupyter notebook dokumentua + Jupyter notebook -asiakirja carnet de notes Jupyter - Leabhar nótaí Jupyter - מחברת Jupyter - Jupyter bilježnica - Jupyter notesz - Notebook Jupyter - Notebook Jupyter - Jupyter Notebook - Jupyter 노트북 - Notatnik Jupyter - Bloco de Notas Jupyter - Jupyter Notebook - Zošit programu Jupyter - Џупитер бележница - Jupyter Notebook-dokument - Jupyter Notebook - записник Jupyter - Jupyter 笔记本 - Jupyter 記事本 + Jupyter notebook dokument + Jupyter munkafüzet dokumentum + Dokumen Jupyter notebook + Documento notebook Jupyter + Jupyter блокнот құжаты + 주피터 노트북 문서 + Dokument notatnika Jupyter + Documento Jupyter Notebook + Документ Jupyter notebook + Jupyter-anteckningsboksdokument + Jupyter notebook belgesi + документ нотатника Jupyter + Jupyter 笔记本文档 + Jupyter 記事本文件 - - + + CoffeeScript document + CoffeeScript-dokument Documentu de CoffeScript + Документ — CoffeeScript document CoffeeScript dokument CoffeeScript CoffeeScript-dokument CoffeeScript-Dokument Έγγραφο CoffeeScript - CoffeeScript document + CoffeeScript document documento en CoffeeScript CoffeeScript dokumentua CoffeeScript-asiakirja document CoffeeScript + document CoffeeScript cáipéis CoffeeScript מסמך CoffeeScript CoffeeScript dokument @@ -13525,36 +14136,39 @@ Document CoffeScript Dokument CoffeeScript documento CoffeeScript - Documento CoffeeScript + Documento CoffeeScript Документ CoffeeScript Dokument CoffeeScript + Dokument CoffeeScript Кофи скрипт документ CoffeeScript-dokument CoffeeScript belgesi документ CoffeeScript - CoffeeScript 文档 - CoffeeScript 文件 + CoffeeScript 文档 + CoffeeScript 文件 JBuilder project + JBuilder-projek مشروع JBuilder - Prajekt JBuilder + Prajekt JBuilder Проект — JBuilder projecte de JBuilder projekt JBuilder JBuilder-projekt JBuilder-Projekt Εργο JBuilder - JBuilder project + JBuilder project JBuilder-projekto proyecto de JBuilder JBuilder proiektua JBuilder-projekti JBuilder verkætlan projet JBuilder + progjet JBuilder tionscadal JBuilder proxecto de JBuilder מיזם JBuilder @@ -13575,7 +14189,7 @@ projècte JBuilder Projekt JBuilder projecto JBuilder - Projeto do JBuilder + Projeto do JBuilder Proiect JBuilder Проект JBuilder Projekt JBuilder @@ -13584,31 +14198,33 @@ пројекат ЈГрадитеља JBuilder-projekt JBuilder projesi - проект JBuilder + проєкт JBuilder Dự án JBuilder - JBuilder 工程 - JBuilder 專案 + JBuilder 工程 + JBuilder 專案 Karbon14 drawing + Karbon14-tekening تصميم Karbon14 - Rysunak Karbon14 + Rysunak Karbon14 Чертеж — Karbon14 dibuix de Karbon14 kresba Karbon14 Karbon14-tegning Karbon14-Zeichnung Σχέδιο Karbon14 - Karbon14 drawing + Karbon14 drawing Karbon14-grafikaĵo dibujo de Karbon14 Karbon14 marrazkia Karbon14-piirros Karbon14 tekning dessin Karbon14 + dissen Karbon14 líníocht Karbon14 debuxo de Karbon14 ציור Karbon14 @@ -13629,7 +14245,7 @@ dessenh Karbon14 Rysunek Karbon14 desenho Karbon14 - Desenho do Karbon14 + Desenho do Karbon14 Desen Karbon14 Рисунок Karbon14 Kresba Karbon14 @@ -13640,18 +14256,18 @@ Karbon14 çizimi малюнок Karbon14 Bản vẽ Karbon14 - Karbon14 绘图 - Karbon14 繪圖 + Karbon14 绘图 + Karbon14 繪圖 - - - + + + - - - + + + @@ -13659,21 +14275,23 @@ KChart chart + KChart-grafiek رسم بياني KChart - Hrafik KChart + Hrafik KChart Диаграма — KChart diagrama de KChart graf Chart KChart-diagram KChart-Diagramm Γράφημα KChart - KChart chart + KChart chart KChart-diagramo gráfico de KChart KChart diagrama KChart-kaavio KChart strikumynd graphique KChart + grafic KChart cairt KChart gráfica de KChart תרשים KChart @@ -13694,7 +14312,7 @@ grafic KChart Wykres KChart gráfico KChart - Gráfico do KChart + Gráfico do KChart Diagramă KChart Диаграмма KChart Graf KChart @@ -13705,224 +14323,159 @@ KChart çizgesi діаграма KChart Sơ đồ KChart - KChart 图表 - KChart 圖表 + KChart 图表 + KChart 圖表 - - - + + + - - - + + + - Kexi settings for database server connection - إعدادات Kexi للإتصال بخادم قاعدة البيانات - Връзка към база от данни — Kexi - ajusts de Kexi per a la connexió al servidor de bases de dades - nastavení Kexi ke spojení s databázovým serverem - Kexiopsætning til forbindelsen for databaseserveren - Kexi-Einstellungen für Verbindung zum Datenbankserver - Ρυθμίσεις Kexi για σύνδεση με εξυπηρετητή βάσεων δεδομένων - Kexi settings for database server connection - configuración de Kexi para conectar con un servidor de bases de datos - Kexi-ren ezarpenak datu-basearen zerbitzariarekin konektatzeko - Kexi-tietokantayhteysasetukset - Kexi stillingar fyri dátustovnsambætara sambinding - paramètres Kexi pour connexion au serveur de base de données - socruithe Kexi do cheangal le freastalaí bunachair sonraí - configuración de Kexi para conexión con servidor de base de datos - הגדרות של Kexi עבור חיבור שרת למסד נתונים - Kexi postavke za povezeivanje baza podataka poslužitelja - Kexi beállítások adatbáziskiszolgáló-kapcsolathoz - Configuration Kexi pro connexion al servitor de base de datos - Tatanan Kexi bagi koneksi server basis data - Impostazioni Kexi per connessione a server di database - データベースサーバ接続用の Kexi 設定 - Дерекқор серверге байланыс Kexi баптаулары - Kexi 데이터베이스 서버 연결 설정 - Kexi duomenų bazės ryšio su serveriu parametrai - Kexi iestatījumi datubāzes servera savienojumam - Kexi instellingen voor database server connectie - paramètres Kexi per connexion al servidor de banca de donadas - Ustawienia Kexi dla połączenia serwera bazy danych - definições Kexi para ligação de servidor de base de dados - Configurações do Kexi para conexão a servidor de banco de dados - Configurări Kexi pentru conexiunea la serverul de baze de date - Параметры Kexi для подключения к серверу БД - Nastavenia Kexi pre pripojenie k databázovému serveru - Strežniška povezava do nastavitvene datoteke Kexi. - подешавања Кексија за везу са сервером базе података - Kexi-inställningar för anslutning till databasserver - Veritabanı sunucu bağlantısı için Kexi ayarları - параметри Kexi для встановлення з’єднання з сервером бази даних - Kexi 数据库服务器连接设置 - Kexi 設定值 (資料庫伺服器連線用) + Kexi settings + Настройки — Kexi + ajusts de Kexi + Kexi-indstillinger + Kexi-Einstellungen + Kexi settings + configuración de Kexi + Kexi ezarpenak + Kexi-asetukset + réglages Kexi + Kexi postavke + Kexi beállítások + Pengaturan Kexi + Impostazioni Kexi + Kexi баптаулары + Kexi 설정 + Ustawienia Kexi + Configurações do Kexi + Файл настроек Kexi + Nastavenia Kexi + Nastavitve Kexi + Kexi-inställningar + Kexi ayarları + параметри Kexi + Kexi 设置 + Kexi 設定 - shortcut to Kexi project on database server - اختصار لمشروع Kexi على خادم قاعدة بيانات - Връзка към проект — Kexi - drecera al projecte de Kexi en un servidor de base de dades - zástupce projektu Kexi na databázovém serveru - genvej til Kexiprojekt på databaseserver - Schnellzugriff zum Kexi-Projekt auf dem Datenbankserver - Συντόμευση σε έργο Kexi στον εξυπηρετητή βάσης δεδομένων - shortcut to Kexi project on database server - acceso directo a proyecto Kexi en el servidor de bases de datos - lasterbidea datu-basearen zerbitzariko Kexi proiekturako - pikakuvake tietokantapalvelimella olevaan Kexi-projektiin - snarvegur til Kexi verkætlan á dátustovnsambætara - raccourci vers projet Kexi sur serveur de base de données - aicearra go tionscadal Kexi ar fhreastalaí bunachair sonraí - acceso directo a proxecto Kexi no servidor de bases de datos - קיצור דרך לפרוירט Kexi בשרת נתונים - Prečac do Kexi projekta na poslužitelju baze podataka - indítóikon adatbázis-kiszolgálón lévő Kexi projektre - Ligamine a projecto Kexi in servitor de base de datos - pintasan ke projek Kexi pada server basis data - Scorciatoia a progetto Kexi su server di database - データベースサーバの Kexi プロジェクトへのショートカット - дерекқор серверіндегі Kexi жобасына сілтеме - 데이터베이스 서버의 Kexi 프로젝트 바로 가기 - nuoroda į Kexi projektą duomenų bazės serveryje - īsceļš uz Kexi projektu datubāzes serverī - shortcut naar Kexi project op database server - acorchi cap a projècte Kexi sus servidor de banca de donadas - Skrót do projektu Kexi na serwerze bazy danych - atalho para projeto Kexi em servidor de base de dados - Atalho para projeto Kexi no servidor de banco de dados - scurtătură către un proiect Kexi pe un server de baze de date - Ссылка на проект Kexi на сервере БД - Zástupca projektu Kexi na databázovom serveri - bližnjica do Kexi projekta na podatkovnem strežniku - пречица до пројекта Кексија на серверу базе података - genväg till Kexi-projekt på databasserver - veritabanı üzerindeki Kexi projesine kısayol - скорочення для проекту Kexi на сервері бази даних - 数据库服务器上 Kexi 项目的快捷方式 - 資料庫伺服器上 Kexi 專案的捷徑 + Kexi shortcut + Ускорител — Kexi + drecera de Kexi + Kexi-genvej + Kexi-Verweis + Kexi shortcut + atajo de Kexi + Kexi lasterbidea + KEXI-pikakuvake + raccourci Kexi + Kexi prečac + Kexi parancsiko + Pintasan Kexi + Scorciatoia Kexi + Kexi жарлығы + Kexi 바로 가기 + Skrót Kexi + Atalho do Kexi + Ссылка Kexi + Odkaz Kexi + Kexi-genväg + Kexi kısayolu + скорочення Kexi + Kexi 快捷方式 + Kexi 捷徑 - Kexi database file-based project - مشروع قاعدة بيانات Kexi يعتمد على ملفات - Проект с база от данни — Kexi - projecte basat en fitxer de base de dades de Kexi - projekt založený na souboru databáze Kexi - Filbaseret projekt for Kexidatabase - Dateibasiertes Kexi-Datenbankprojekt - Έργο βάσης δεδομένων Kexi βασισμένο σε αρχεία - Kexi database file-based project - proyecto de base de datos basada en archivos de Kexi - Kexi datu-baseko fitxategian oinarritutako proiektua - Kexin tiedostoperustainen tietokantaprojekti - Kexi dátustovns fílugrundað verkætlan - projet de base de données Kexi en mode fichier - tionscadal bunachair sonraí Kexi bunaithe ar chomhaid - proxecto baseado no ficheiro-base de datos Kexi - מיזם מסד נתונים מבוסס-קובץ של Kexi - Kexi baza podataka datotekom temeljen projekt - Kexi adatbázisfájl-alapú projekt - Projecto de base de datos Kexi in modo file - Projek berbasis berkas basis data Kexi - Progetto su file di database Kexi - Kexi データベース ファイルベースプロジェクト - Файл негізінде жоба үшін Kexi дерекқоры - Kexi 데이터베이스 파일 기반 프로젝트 - Kexi duomenų bazės failo tipo projektas - Kexi datubāzes datnes balstīts projekts - Kexi database bestandgebaseerd project - projècte de banca de donadas Kexi en mòde fichièr - Projekt bazy danych Kexi na podstawie plików - projeto Kexi em base de dados baseada em ficheiros - Projeto de banco de dados baseado em arquivo do Kexi - Proiect bazat pe fișiere al bazei de date Kexi - Файловый проект базы данных Kexi - Projekt databázy Kexi s úložiskom typu súbor - Datoteka projekta podatkovne zbirke Kexi - пројекат Кексијеве базе података на основу датотеке - Kexi-databas för filbaserat projekt - Dosya temelli Kexi veritabanı projesi - проект файлової бази даних Kexi - Kexi 基于文件的数据库项目 - Kexi 資料庫檔案基礎專案 + Kexi database file + База от данни — Kexi + fitxer de base de dades de Kexi + Kexi database-fil + Kexi-Datenbankdatei + Kexi database file + archivo de base de datos de Kexi + Kexi datu-base fitxategia + KEXI-tietokanta + fichier de base de données Kexi + Kexi datoteka baze podataka + Kexi adatbázisfájl + Berkas basis data Kexi + File database Kexi + Kexi дерекқор файлы + Kexi 데이터베이스 파일 + Plik bazy danych Kexi + Arquivo de banco de dados do Kexi + Файл базы данных Kexi + Súbor databázy Kexi + Kexi-databasfil + Kexi veri tabanı dosyası + файл бази даних Kexi + Kexi 数据库文件 + Kexi 資料庫檔案 - Kexi database file-based project - مشروع قاعدة بيانات Kexi يعتمد على ملفات - Проект с база от данни — Kexi - projecte basat en fitxer de base de dades de Kexi - projekt založený na souboru databáze Kexi - Filbaseret projekt for Kexidatabase - Dateibasiertes Kexi-Datenbankprojekt - Έργο βάσης δεδομένων Kexi βασισμένο σε αρχεία - Kexi database file-based project - proyecto de base de datos basada en archivos de Kexi - Kexi datu-baseko fitxategian oinarritutako proiektua - Kexin tiedostoperustainen tietokantaprojekti - Kexi dátustovns fílugrundað verkætlan - projet de base de données Kexi en mode fichier - tionscadal bunachair sonraí Kexi bunaithe ar chomhaid - proxecto baseado no ficheiro-base de datos Kexi - מיזם מסד נתונים מבוסס-קובץ של Kexi - Kexi baza podataka datotekom temeljen projekt - Kexi adatbázisfájl-alapú projekt - Projecto de base de datos Kexi in modo file - Projek berbasis berkas basis data Kexi - Progetto su file di database Kexi - Kexi データベース ファイルベースプロジェクト - Файл негізінде жоба үшін Kexi дерекқоры - Kexi 데이터베이스 파일 기반 프로젝트 - Kexi duomenų bazės failo tipo projektas - Kexi datubāzes datnes balstīts projekts - Kexi database bestandgebaseerd project - projècte de banca de donadas Kexi en mòde fichièr - Projekt bazy danych Kexi na podstawie plików - projeto Kexi em base de dados baseada em ficheiros - Projeto de banco de dados baseado em arquivo do Kexi - Proiect bazat pe fișiere al bazei de date Kexi - Файловый проект базы данных Kexi - Projekt databázy Kexi s úložiskom typu súbor - Datoteka projekta podatkovne zbirke Kexi - пројекат Кексијеве базе података на основу датотеке - Kexi-databas för filbaserat projekt - Dosya temelli Kexi veritabanı projesi - проект файлової бази даних Kexi - Kexi 基于文件的数据库项目 - Kexi 資料庫檔案基礎專案 - + Kexi database file + База от данни — Kexi + fitxer de base de dades de Kexi + Kexi database-fil + Kexi-Datenbankdatei + Kexi database file + archivo de base de datos de Kexi + Kexi datu-base fitxategia + KEXI-tietokanta + fichier de base de données Kexi + Kexi datoteka baze podataka + Kexi adatbázisfájl + Berkas basis data Kexi + File database Kexi + Kexi дерекқор файлы + Kexi 데이터베이스 파일 + Plik bazy danych Kexi + Arquivo de banco de dados do Kexi + Файл базы данных Kexi + Súbor databázy Kexi + Kexi-databasfil + Kexi veri tabanı dosyası + файл бази даних Kexi + Kexi 数据库文件 + Kexi 資料庫檔案 + KFormula formula + KFormula-formule صيغة KFormula - Formuła KFormula + Formuła KFormula Формула — KFormula fórmula de KFormula vzorec KFormula KFormula-formel KFormula-Formel Μαθηματικός τύπος KFormula - KFormula formula + KFormula formula KFormula-formulo fórmula de KFormula KFormula formula KFormula-kaava KFormula frymil formule KFormula + formule KFormula foirmle KFormula fórmula de KFormula נוסחת KFormula @@ -13943,7 +14496,7 @@ formula KFormula Formuła KFormula fórmula KFormula - Fórmula do KFormula + Fórmula do KFormula Formulă KFormula Формула KFormula Vzorec KFormula @@ -13954,18 +14507,18 @@ KFormula formülü формула KFormula Công thức KFormula - KFormula 公式 - KFormula 公式 + KFormula 公式 + KFormula 公式 - - - + + + - - - + + + @@ -13973,21 +14526,23 @@ KIllustrator drawing + KIllustrator-tekening تصميم KIllustrator - Rysunak KIllustrator + Rysunak KIllustrator Чертеж — KIllustrator dibuix de KIllustrator kresba KIllustrator KIllustrator-tegning KIllustrator-Zeichnung Σχέδιο KIllustrator - KIllustrator drawing + KIllustrator drawing KIllustrator-grafikaĵo dibujo de KIllustrator KIllustrator marrazkia KIllustrator-piirros KIllustrator tekning dessin KIllustrator + dissen KIllustrator líníocht KIllustrator debuxo de KIllustrator ציור KIllustrator @@ -14008,7 +14563,7 @@ dessenh KIllustrator Rysunek KIllustrator desenho KIllustrator - Desenho do KIllustrator + Desenho do KIllustrator Desen KIllustrator Рисунок KIllustrator Kresba KIllustrator @@ -14019,13 +14574,13 @@ KIllustrator çizimi малюнок KIllustrator Bản vẽ KIllustrator - KIllustrator 绘图 - KIllustrator 繪圖 + KIllustrator 绘图 + KIllustrator 繪圖 - - - + + + @@ -14033,21 +14588,23 @@ Kivio flowchart + Kivio-vloeidiagram قائمة تدفق Kivio - Blok-schiema Kivio + Blok-schiema Kivio Диаграма — Kivio diagrama de flux de Kivio vývojový diagram Kivio Kiviorutediagram Kivio-Flussdiagramm Διάγραμμα ροής Kivio - Kivio flowchart + Kivio flowchart Kivo-fluskemo diagrama de flujo de Kivio Kivio diagrama Kivio-vuokaavio Kivio leiðarit diagramme de flux Kivio + diagram di flus Kivio sreabhchairt Kivio gráfica de fluxo de Kivio תרשים זרימה של Kivio @@ -14068,7 +14625,7 @@ diagrama de flux Kivio Diagram przepływów Kivio gráfico de fluxo Kivio - Fluxograma do Kivio + Fluxograma do Kivio Diagramă Kivio Диаграмма Kivio Vývojový diagram Kivio @@ -14076,21 +14633,21 @@ Diagramë fluksi Kivio Кивиов дијаграм тока Kivio-flödesschema - Kivio akış şeması + Kivio akış çizgesi блок-схема Kivio Lược đồ Kivio - Kivio 流程图 - Kivio 圖表 + Kivio 流程图 + Kivio 流程圖 - - - + + + - - - + + + @@ -14098,21 +14655,23 @@ Kontour drawing + Kontour-tekening تصميم Kontour - Rysunak Kontour + Rysunak Kontour Чертеж — Kontour dibuix de Kontour kresba Kontour Kontourtegning Kontour-Zeichnung Σχέδιο Kontour - Kontour drawing + Kontour drawing Kontour-grafikaĵo dibujo de Kontour Kontour marrazkia Kontour-piirros Kontour tekning dessin Kontour + dissen Kontour líníocht Kontour debuxo de Kontour ציור Kontour @@ -14133,7 +14692,7 @@ dessenh Kontour Rysunek Kontour desenho Kontour - Desenho do Kontour + Desenho do Kontour Desen Kontour Рисунок Kontour Kresba Kontour @@ -14144,18 +14703,18 @@ Kontour çizimi малюнок Kontour Bản vẽ Kontour - Kontour 绘图 - Kontour 繪圖 + Kontour 绘图 + Kontour 繪圖 - - - + + + - - - + + + @@ -14163,21 +14722,23 @@ KPovModeler scene + KPovModeler-toneel مشهد KPovModeler - Scena KPovModeler + Scena KPovModeler Сцена — KPovModeler escena de KPovModeler scéna KPovModeler KPovModeler-scene KPovModeler-Szene Σκηνή KPovModeler - KPovModeler scene + KPovModeler scene KPovModeler-sceno escena de KPovModeler KPovModeler eszena KPovModeler-näkymä KPovModeler leikmynd scène KPovModeler + sene KPovModeler radharc KPovModeler escena de KPovModeler סצנת KPovModeler @@ -14198,7 +14759,7 @@ scène KPovModeler Scena KPovModeler cenário KPovModeler - Cena do KPovModeler + Cena do KPovModeler Scenă KPovModeler Сцена KPovModeler Scéna KPovModeler @@ -14209,28 +14770,30 @@ KPovModeler sahnesi сцена KPovModeler Cảnh KPovModeler - KPovModeler 场景 - KPovModeler 場景 + KPovModeler 场景 + KPovModeler 場景 KPresenter presentation + KPresenter-voorlegging عرض تقديمي KPresenter - Prezentacyja KPresenter + Prezentacyja KPresenter Презентация — KPresenter presentació de KPresenter prezentace KPresenter KPresenter-præsentation KPresenter-Präsentation Παρουσίαση KPresenter - KPresenter presentation + KPresenter presentation KPresenter-prezentaĵo presentación de KPresenter Kpresenter aurkezpena KPresenter-esitys KPresenter framløga présentation KPresenter + presentazion KPresenter láithreoireacht KPresenter presentación de KPresenter מצגת KPresenter @@ -14251,7 +14814,7 @@ presentacion KPresenter Prezentacja KPresenter apresentação KPresenter - Apresentação do KPresenter + Apresentação do KPresenter Prezentare KPresenter Презентация KPresenter Prezentácia KPresenter @@ -14262,18 +14825,18 @@ KPresenter sunum dosyası презентація KPresenter Trình diễn KPresenter - KPresenter 演示文稿 - KPresenter 簡報檔 + KPresenter 演示文稿 + KPresenter 簡報 - - - + + + - - - + + + @@ -14282,22 +14845,24 @@ Krita document + Krita-dokument مستند Krita Documentu de Krita - Dakument Krita + Dakument Krita Документ — Krita - document Krita + document de Krita dokument Krita Kritadokument Krita-Dokument Έγγραφο Krita - Krita document + Krita document Krita-dokumento documento de Krita Krita dokumentua Krita-asiakirja Krita skjal document Krita + document Krita cáipéis Krita documento de Krita מסמך Krita @@ -14318,7 +14883,7 @@ document Krita Dokument Krita documento Krita - Documento do Krita + Documento do Krita Document Krita Документ Krita Dokument Krita @@ -14329,18 +14894,18 @@ Krita belgesi документ Krita Tài liệu Krita - Krita 文档 - Krita 文件 + Krita 文档 + Krita 文件 - - - + + + - - - + + + @@ -14348,21 +14913,23 @@ KSpread spreadsheet + KSpread-sigblad جدول KSpread - Raźlikovy arkuš KSpread + Raźlikovy arkuš KSpread Таблица — KSpread full de càlcul de KSpread sešit KSpread KSpread-regneark KSpread-Tabelle Λογιστικό φύλλο KSpread - KSpread spreadsheet + KSpread spreadsheet KSpread-kalkultabelo hoja de cálculo de KSpread KSpread kalkulu-orria KSpread-taulukko KSpread rokniark feuille de calcul KSpread + sfuei di calcul KSpread scarbhileog KSpread folla de cálculo de KSpread גליון נתונים של Kspread @@ -14383,7 +14950,7 @@ fuèlh de calcul KSpread Arkusz KSpread folha de cálculo KSpread - Planilha do KSpread + Planilha do KSpread Foaie de calcul KSpread Электронная таблица KSpread Zošit KSpread @@ -14391,21 +14958,21 @@ Fletë llogaritjesh KSpread табела К-табеле KSpread-kalkylblad - KSpread çalışma sayfası + KSpread hesap çizelgesi ел. таблиця KSpread Bảng tính KSpread - KSpread 电子表格 - KSpread 試算表 + KSpread 电子表格 + KSpread 試算表 - - - + + + - - - + + + @@ -14413,21 +14980,23 @@ KSpread spreadsheet (encrypted) + KSpread-sigblad (geënkripteer) جدول KSpread (مشفر) - Raźlikovy arkuš KSpread (zašyfravany) + Raźlikovy arkuš KSpread (zašyfravany) Таблица — KSpread, шифрирана full de càlcul de KSpread (xifrat) sešit KSpread (šifrovaný) KSpread-regneark (krypteret) KSpread-Tabelle (verschlüsselt) Λογιστικό φύλλο KSpread (κρυπτογραφημένο) - KSpread spreadsheet (encrypted) + KSpread spreadsheet (encrypted) KSpread-kalkultabelo (ĉifrita) hoja de cálculo de KSpread (cifrada) - KSpread kalkulu-orria (enkriptatua) + KSpread kalkulu-orria (zifratuta) KSpread-taulukko (salattu) KSpread rokniark (bronglað) feuille de calcul KSpread (chiffrée) + sfuei di calcul KSpread (cifrât) scarbhileog KSpread (criptithe) folla de cálculo de KSpread (cifrada) גליון נתונים של KSpread (מוצפן) @@ -14448,7 +15017,7 @@ fuèlh de calcul KSpread (chifrada) Arkusz KSpread (zaszyfrowany) folha de cálculo KSpread (encriptada) - Planilha do KSpread (criptografada) + Planilha do KSpread (criptografada) Foaie de calcul KSpread (criptat) Электронная таблица KSpread (зашифрованная) Zošit KSpread (šifrovaný) @@ -14456,32 +15025,33 @@ Fletë llogaritjesh KSpread (e kriptuar) табела К-табеле (шифрована) KSpread-kalkylblad (krypterat) - KSpread çalışma sayfası (şifreli) + KSpread hesap çizelgesi (şifreli) ел. таблиця KSpread (зашифрована) Bảng tính KSpread (đã mật mã) - KSpread 电子表格(加密) - KSpread 試算表 (已加密) + KSpread 电子表格(加密) + KSpread 試算表 (加密) - + KSysV init package حزمة KSysV init - Inicyjalny pakunak KSysV + Inicyjalny pakunak KSysV Пакет — KSysV init - paquet d'inici KSysV + paquet de KSysV init balíček init KSysV KSsV init-pakke KSysV-Init-Paket Αρχικό πακέτο KSysV - KSysV init package + KSysV init package paquete de configuración de init para KSysV KSysV hasieratzeko paketea KSysV init -paketti KSysV init pakki paquet d'initialisation KSysV + pachet init KSysV pacáiste túsaithe KSysV paquete de KsysV init חבילת KSysV init @@ -14501,7 +15071,7 @@ paquet d'initializacion KSysV Pakiet KSysV init pacote inicial KSysV - Pacote init do KSysV + Pacote init do KSysV Pachet KSysV init Пакет инициализации KSysV Balíček KSysV init @@ -14512,33 +15082,35 @@ KSysV init paketi пакунок KSysV init Gói sở khởi KSysV - KSysV init 软件包 - KSysV init 軟體包 + KSysV init 软件包 + KSysV init 軟體包 - - + + Kugar document + Kugar-dokument مستند Kugar Documentu de Kugar - Dakument Kugar + Dakument Kugar Документ — Kugar document Kugar dokument Kugar Kugardokument Kugar-Dokument Έγγραφο Kugar - Kugar document + Kugar document Kugar-dokumento documento de Kugar Kugar dokumentua Kugar-asiakirja Kugar skjal document Kugar + document Kugar cáipéis Kugar documento de Kugar מסמך Kugar @@ -14559,7 +15131,7 @@ document Kugar Dokument Kuguar documento Kugar - Documento do Kugar + Documento do Kugar Document Kugar Документ Kugar Dokument Kugar @@ -14570,16 +15142,17 @@ Kugar belgesi документ Kugar Tài liệu Kugar - Kugar 文档 - Kugar 文件 + Kugar 文档 + Kugar 文件 KWord document + KWord-dokument مستند KWord Documentu de Kword - Dakument KWord + Dakument KWord Документ — KWord document KWord dokument KWord @@ -14587,13 +15160,14 @@ KWord-dokument KWord-Dokument Έγγραφο KWord - KWord document + KWord document KWord-dokumento documento de KWord KWord dokumentua KWord-asiakirja KWord skjal document KWord + document KWord cáipéis KWord documento de KWord מסמך KWord @@ -14614,7 +15188,7 @@ document KWord Dokument KWord documento KWord - Documento do KWord + Documento do KWord Document KWord Документ KWord Dokument KWord @@ -14625,18 +15199,18 @@ KWord belgesi документ KWord Tài liệu KWord - KWord 文档 - KWord 文件 + KWord 文档 + KWord 文件 - - - + + + - - - + + + @@ -14645,22 +15219,24 @@ KWord document (encrypted) + KWord-dokument (geënkripteer) مستند KWord (مشفر) Documentu de Kword (cifráu) - Dakument KWord (zašyfravany) + Dakument KWord (zašyfravany) Документ — KWord, шифриран document KWord (xifrat) dokument KWord (šifrovaný) KWord-dokument (krypteret) KWord-Dokument (verschlüsselt) Έγγραφο KWord (κρυπτογραφημένο) - KWord document (encrypted) + KWord document (encrypted) KWord-dokumento (ĉifrita) documento de KWord (cifrado) - KWord dokumentua (enkriptatua) + KWord dokumentua (zifratuta) KWord-asiakirja (salattu) KWord skjal (bronglað) document KWord (chiffré) + document KWord (cifrât) cáipéis KWord (criptithe) documento de KWord (cifrado) מסמך KWord (מוצפן) @@ -14681,7 +15257,7 @@ document KWord (chifrat) Dokument KWord (zaszyfrowany) documento KWord (encriptado) - Documento do KWord (criptografado) + Documento do KWord (criptografado) Document KWord (criptat) Документ KWord (зашифрованный) Dokument KWord (šifrovaný) @@ -14692,18 +15268,19 @@ KWord belgesi (şifreli) документ KWord (зашифрований) Tài liệu KWord (đã mật mã) - KWord 文档(加密) - KWord 文件 (已加密) + KWord 文档(加密) + KWord 文件 (加密) - + LHA archive + LHA-argief أرشيف LHA LHA arxivi - Archiŭ LHA + Archiŭ LHA Архив — LHA arxiu LHA archiv LHA @@ -14711,13 +15288,14 @@ LHA-arkiv LHA-Archiv Συμπιεσμένο αρχείο LHA - LHA archive + LHA archive LHA-arkivo archivador LHA LHA artxiboa LHA-arkisto LHA skjalasavn archive LHA + archivi LHA cartlann LHA arquivo LHA ארכיון LHA @@ -14738,7 +15316,7 @@ archiu LHA Archiwum LHA arquivo LHA - Pacote LHA + Pacote LHA Arhivă LHA Архив LHA Archív LHA @@ -14749,22 +15327,22 @@ LHA arşivi архів LHA Kho nén LHA - LHA 归档文件 - LHA 封存檔 + LHA 归档文件 + LHA 封存檔 - - - - - - - - - - - - + + + + + + + + + + + + @@ -14772,21 +15350,23 @@ LHZ archive + LHZ-argief أرشيف LHZ - Archiŭ LHZ + Archiŭ LHZ Архив — LHZ arxiu LHZ archiv LHZ LHZ-arkiv LHZ-Archiv Συμπιεσμένο αρχείο LHZ - LHZ archive + LHZ archive LHZ-arkivo archivador LHZ LHZ artxiboa LHZ-arkisto LHZ skjalasavn archive LHZ + archivi LHZ cartlann LHZ arquivo LHZ ארכיון LHZ @@ -14807,7 +15387,7 @@ archiu LHZ Archiwum LHZ arquivo LHZ - Pacote LHZ + Pacote LHZ Arhivă LHZ Архив LHZ Archív LHZ @@ -14818,28 +15398,30 @@ LHZ arşivi архів LHZ Kho nén LHZ (LHA đã nén) - LHZ 归档文件 - LHZ 封存檔 + LHZ 归档文件 + LHZ 封存檔 - + message catalog + boodskaplêer كتالوج الرسالة - kataloh paviedamleńniaŭ + kataloh paviedamleńniaŭ Каталог със съобщения catàleg de missatges katalog zpráv meddelelseskatalog Nachrichtenkatalog Κατάλογος μηνυμάτων - message catalogue + message catalogue katalogo de mesaĝoj catálogo de mensajes mezuen katalogoa viestiluettelo boðskrá catalogue de messages + catalic di messaçs catalóg theachtaireachtaí catálogo de mensaxes קטלוג הודעות @@ -14860,7 +15442,7 @@ catalòg de messatges Katalog wiadomości catálogo de mensagens - Catálogo de mensagens + Catálogo de mensagens catalog de mesaje Каталог сообщений Katalóg správ @@ -14871,34 +15453,37 @@ ileti kataloğu каталог повідомлень phân loại thông điệp - 消息库 - 訊息目錄 + 消息库 + 訊息目錄 - + + - + LyX document + LyX-dokument مستند LyX Documentu de Lyx - Dakument LyX + Dakument LyX Документ — LyX document LyX dokument LyX LyX-dokument LyX-Dokument Έγγραφο LyX - LyX document + LyX document LyX-dokumento documento de LyX LyX dokumentua LyX-asiakirja LyX skjal document LyX + document LyX cáipéis LyX documento LyX מסמך Lyx @@ -14919,7 +15504,7 @@ document LyX Dokument LyX documento LyX - Documento LyX + Documento LyX Document LyX Документ LyX Dokument LyX @@ -14930,28 +15515,31 @@ LyX belgesi документ LyX Tài liệu LyX - LyX 文档 - LyX 文件 + LyX 文档 + LyX 文件 - + LZ4 archive + LZ4-argief + Архив — LZ4 arxiu LZ4 archiv LZ4 LZ4-arkiv LZ4-Archiv Συμπιεσμένο αρχείο LZ4 - LZ4 archive + LZ4 archive archivador LZ4 LZ4 artxiboa LZ4-arkisto archive LZ4 + archivi LZ4 Cartlann LZ4 Arquivo LZ4 ארכיון LZ4 @@ -14965,7 +15553,7 @@ archiu LZ4 Archiwum LZ4 arquivo LZ4 - Pacote LZ4 + Pacote LZ4 Архив LZ4 Archív LZ4 Datoteka arhiva LZ4 @@ -14973,64 +15561,69 @@ LZ4-arkiv LZ4 arşivi архів LZ4 - LZ4 归档文件 - LZ4 封存檔 + LZ4 归档文件 + LZ4 封存檔 - - + + Tar archive (LZ4-compressed) + Tar-argief (LZ4-saamgepers) + Архив — tar, компресиран с LZ4 arxiu tar (amb compressió LZ4) archiv Tar (komprimace LZ4) Tar-arkiv (LZ4-komprimeret) Tar-Archiv (LZ4-komprimiert) - Tar archive (LZ4-compressed) + Tar archive (LZ4-compressed) archivador Tar (comprimido con LZ4) Tar artxiboa (LZ4-rekin konprimatua) Tar-arkisto (LZ4-pakattu) archive tar (compression LZ4) + archivi Tar (comprimût cun LZ4) cartlann Tar (comhbhrúite le LZ4) ארכיון Tar (מכווץ ע״י LZ4) Tar arhiva (LZ4 sažeto) - Tar archívum (LZ4-el tömörítve) - arsip tar (terkompresi LZ4) + Tar archívum (LZ4 tömörítésű) + Arsip tar (terkompresi LZ4) Archivio tar (compresso con LZ4) Tar архиві (LZ4-пен сығылған) Tar 묶음 파일(LZ4 압축) Archiwum tar (kompresja LZ4) - Arquvio Tar (compactado com LZ4) + Arquivo Tar (compactado com LZ4) Архив TAR (сжатый lz4) - Archív tar (komprimovaný pomocou LZ4) + Archív Tar (komprimovaný pomocou LZ4) Тар архива (запакована ЛЗ4-ом) Tar-arkiv (LZ4-komprimerat) Tar arşivi (LZ4 ile sıkıştırılmış) архів tar (стиснений LZ4) - Tar 归档文件(LZ4 压缩) - Tar 封存檔 (LZ4 格式壓縮) + Tar 归档文件(LZ4 压缩) + Tar 封存檔 (LZ4 壓縮) Lzip archive + Lzip-argief أرشيف Lzip - Архив — lzip + Архив — Lzip arxiu lzip archiv Lzip Lzip-arkiv Lzip-Archiv Συμπιεσμένο αρχείο Lzip - Lzip archive + Lzip archive Lzip-arkivo archivador Lzip Lzip artxiboa Lzip-arkisto Lzip skjalasavn archive lzip + archivi Lzip cartlann Lzip arquivo Lzip ארכיון Lzip @@ -15048,7 +15641,7 @@ archiu lzip Archiwum lzip arquivo LZip - Pacote Lzip + Pacote Lzip Arhivă Lzip Архив LZIP Archív Lzip @@ -15057,96 +15650,105 @@ Lzip-arkiv Lzip arşivi архів lzip - Lzip 归档文件 - Lzip 封存檔 + Lzip 归档文件 + Lzip 封存檔 - + Tar archive (lzip-compressed) + Tar-argief (lzip-saamgepers) + Архив — tar, компресиран с Lzip arxiu tar (amb compressió lzip) archiv Tar (komprimace lzip) Tar-arkiv (lzip-komprimeret) Tar-Archiv (lzip-komprimiert) - Tar archive (lzip-compressed) + Tar archive (lzip-compressed) archivador Tar (comprimido con lzip) Tar artxiboa (lzip-rekin konprimatua) Tar-arkisto (lzip-pakattu) archive tar (compressée lzip) + archivi Tar (comprimût cun lzip) cartlann Tar (comhbhrúite le lzip) ארכיון Tar (מכווץ ע״י lzip) Tar arhiva (lzip sažeto) - Tar archívum (lzippel tömörítve) - arsip tar (terkompresi lzip) + Tar archívum (lzip tömörítésű) + Arsip tar (terkompresi lzip) Archivio tar (compresso con lzip) Tar архиві (lzip-пен сығылған) TAR 묶음 파일(LZIP 압축) Archiwum tar (kompresja lzip) - Arquivo Tar (compactado com lzip) + Arquivo Tar (compactado com lzip) Архив TAR (сжатый lzip) - Archív tar (komprimovaný pomocou lzip) + Archív Tar (komprimovaný pomocou lzip) Тар архива (запакована лзипом) Tar-arkiv (lzip-komprimerat) Tar arşivi (lzip ile sıkıştırılmış) архів tar (стиснений lzip) - Tar 归档文件(lzip 压缩) - Tar 封存檔 (lzip 格式壓縮) + Tar 归档文件(lzip 压缩) + Tar 封存檔 (lzip 壓縮) PDF document (lzip-compressed) + PDF-dokument (lzip-saamgepers) Documentu PDF (comprimíu en lzip) + Документ — PDF, компресиран с Lzip document PDF (amb compressió lzip) dokument PDF (komprimace lzip) + PDF-dokument (lzip-komprimeret) PDF-Dokument (lzip-komprimiert) - PDF document (lzip-compressed) + PDF document (lzip-compressed) documento PDF (comprimido con lzip) PDF dokumentua (lzip-rekin konprimitua) PDF-asiakirja (lzip-pakattu) document PDF (compressé lzip) + document PDF (comprimût cun lzip) cáipéis PDF (comhbhrúite le lzip) PDF dokument (lzip sažeto) - PDF dokumentum (lzip-tömörítésű) - dokumen PDF (termkompresi lzip) + PDF dokumentum (lzip tömörítésű) + Dokumen PDF (termkompresi lzip) Documento PDF (compresso con lzip) PDF құжаты (lzip-пен сығылған) PDF 문서(LZIP 압축) Dokument PDF (kompresja lzip) - Documento PDF (compactado com lzip) + Documento PDF (compactado com lzip) Документ PDF (сжатый lzip) Dokument PDF (komprimovaný pomocou lzip) ПДФ документ (запакован лзип-ом) PDF-dokument (lzip-komprimerat) PDF belgesi (lzip ile sıkıştırılmış) документ PDF (стиснений lzip) - PDF 文档(lzip 压缩) - PDF 文件 (lzip 格式壓縮) + PDF 文档(lzip 压缩) + PDF 文件 (lzip 壓縮) LZMA archive + LZMA-argief أرشيف LZMA - Archiŭ LZMA + Archiŭ LZMA Архив — LZMA arxiu LZMA archiv LZMA LZHA-arkiv LZMA-Archiv Συμπιεσμένο αρχείο LZMA - LZMA archive + LZMA archive LZMA-arkivo archivador LZMA LZMA artxiboa LZMA-arkisto LZMA skjalasavn archive LZMA + archivi LZMA cartlann LZMA arquivo LZMA ארכיון LZMA @@ -15166,7 +15768,7 @@ archiu LZMA Archiwum LZMA arquivo LZMA - Pacote LZMA + Pacote LZMA Arhivă LZMA Архив LZMA Archív LZMA @@ -15177,8 +15779,8 @@ LZMA arşivi архів LZMA Kho nén LZMA - LZMA 归档文件 - LZMA 封存檔 + LZMA 归档文件 + LZMA 封存檔 LZMA Lempel-Ziv-Markov chain-Algorithm @@ -15186,25 +15788,27 @@ Tar archive (LZMA-compressed) + Tar-argief (LZMA-saamgepers) أرشيف Tar (مضغوط-LZMA) - Archiŭ tar (LZMA-skampresavany) + Archiŭ tar (LZMA-skampresavany) Архив — tar, компресиран с LZMA arxiu tar (amb compressió LZMA) archiv Tar (komprimace LZMA) Tar-arkiv (LZMA-komprimeret) Tar-Archiv (LZMA-komprimiert) Αρχείο Tar (συμπιεσμένο με LZMA) - Tar archive (LZMA-compressed) + Tar archive (LZMA-compressed) archivador Tar (comprimido con LZMA) Tar artxiboa (LZMA-rekin konprimitua) Tar-arkisto (LZMA-pakattu) Tar skjalasavn (LZMA-stappað) archive tar (compression LZMA) + archivi Tar (comprimût cun LZMA) cartlann Tar (comhbhrúite le LZMA) arquivo Tar (comprimido con LZMA) ארכיון Tar (מכווץ ע״י LZMA) Tar arhiva (LZMA sažeta) - Tar archívum (LZMA-val tömörítve) + Tar archívum (LZMA tömörítésű) Archivo Tar (comprimite con LZMA) Arsip Tar (terkompresi LZMA) Archivio tar (compresso con LZMA) @@ -15219,10 +15823,10 @@ archiu tar (compression LZMA) Archiwum tar (kompresja LZMA) arquivo Tar (compressão LZMA) - Pacote Tar (compactado com LZMA) + Pacote Tar (compactado com LZMA) Arhivă Tar (comprimată LZMA) Архив TAR (сжатый lzma) - Archív tar (komprimovaný pomocou LZMA) + Archív Tar (komprimovaný pomocou LZMA) Datoteka arhiva Tar (stisnjen z LZMA) Arkiv tar (i kompresuar me LZMA) Тар архива (запакована ЛЗМА-ом) @@ -15230,8 +15834,8 @@ Tar arşivi (LZMA ile sıkıştırılmış) архів tar (стиснений LZMA) Kho nén tar (đã nén LZMA) - Tar 归档文件(LZMA 压缩) - Tar 封存檔 (LZMA 格式壓縮) + Tar 归档文件(LZMA 压缩) + Tar 封存檔 (LZMA 壓縮) @@ -15239,21 +15843,23 @@ LZO archive + LZO-argief أرشيف LZO - Archiŭ LZO + Archiŭ LZO Архив — LZO arxiu LZO archiv LZO LZO-arkiv LZO-Archiv Συμπιεσμένο αρχείο LZO - LZO archive + LZO archive LZO-arkivo archivador LZO LZO artxiboa LZO-arkisto LZO skjalasavn archive LZO + archivi LZO cartlann LZO arquivo LZO ארכיון LZO @@ -15274,7 +15880,7 @@ archiu LZO Archiwum LZO arquivo LZO - Pacote LZO + Pacote LZO Arhivă LZO Архив LZO Archív LZO @@ -15285,27 +15891,31 @@ LZO arşivi архів LZO Kho nén LZO - LZO 归档文件 - LZO 封存檔 + LZO 归档文件 + LZO 封存檔 LZO Lempel-Ziv-Oberhumer - + Qpress archive + Qpress-argief + Архив — Qpress arxiu Qpress archiv Qpress Qpress-arkiv Qpress-Archiv Συμπιεσμένο αρχείο Qpress - Qpress archive + Qpress archive archivador de Qpress + Qpress artxiboa Qpress-arkisto Archive Qpress + archivi Qpress cartlann Qpress Arquivo Qpress ארכיון Qpress @@ -15319,7 +15929,7 @@ Archiu Qpress Archiwum Qpress arquivo Qpress - Pacote Qpress + Pacote Qpress Архив Qpress Archív Qpress Datoteka arhiva Qpress @@ -15327,25 +15937,28 @@ Qpress-arkiv Qpress arşivi архів Qpress - Qpress 归档文件 - Qpress 封存檔 + Qpress 归档文件 + Qpress 封存檔 - + XAR archive + XAR-argief + Архив — XAR arxiu XAR archiv XAR XAR-arkiv XAR-Archiv - XAR archive + XAR archive archivador XAR XAR artxiboa XAR-arkisto archive XAR + archivi XAR cartlann XAR ארכיון XAR XAR arhiva @@ -15356,36 +15969,40 @@ XAR 아카이브 Archiu XAR Archiwum XAR - Arquivo XAR + Arquivo XAR Архив XAR Archív XAR ИксАР архива XAR-arkiv XAR arşivi архів XAR - XAR 归档文件 - XAR 封存檔 + XAR 归档文件 + XAR 封存檔 XAR eXtensible ARchive - + - + Zlib archive + Zlib-argief + Архив — Zlib arxiu Zlib archiv Zlib Zlib-arkiv Zlib-Archiv Συμπιεσμένο αρχείο Zlib - Zlib archive + Zlib archive archivador Zlib + Zlib artxiboa Zlib-arkisto Archive Zlib + archivi Zlib cartlann Zlib Arquivo Zlib ארכיון Zlib @@ -15399,7 +16016,7 @@ Archiu Zlib Archiwum Zlib arquivo Zlib - Pacote Zlib + Pacote Zlib Архив Zlib Archív Zlib Datoteka arhiva Zlib @@ -15407,15 +16024,16 @@ Zlib-arkiv Zlib arşivi архів zlib - Alzip 归档文件 - Zlib 封存檔 + Alzip 归档文件 + Zlib 封存檔 MagicPoint presentation + MagicPoint-voorlegging عرض تقديمي MagicPoint - Prezentacyja MagicPoint + Prezentacyja MagicPoint Презентация — MagicPoint presentació de MagicPoint prezentace MagicPoint @@ -15423,13 +16041,14 @@ MagicPoint-præsentation MagicPoint-Präsentation Παρουσίαση MagicPoint - MagicPoint presentation + MagicPoint presentation MagicPoint-prezentaĵo presentación de MagicPoint MagicPoint aurkezpena MagicPoint-esitys MagicPoint framløga présentation MagicPoint + presentazion MagicPoint láithreoireacht MagicPoint presentación de MagicPoint מצגת MagicPoint @@ -15451,7 +16070,7 @@ presentacion MagicPoint Prezentacja programu MagicPoint apresentação MagicPoint - Apresentação do MagicPoint + Apresentação do MagicPoint Prezentare MagicPoint Презентация MagicPoint Prezentácia MagicPoint @@ -15462,29 +16081,31 @@ MagicPoint sunumu презентація MagicPoint Trình diễn MagicPoint - MagicPoint 演示文稿 - MagicPoint 簡報檔 + MagicPoint 演示文稿 + MagicPoint 簡報 Macintosh MacBinary file + Macintosh MacBinary-lêer ملف Macintosh MacBinary - Fajł Macintosh MacBinary + Fajł Macintosh MacBinary Файл — MacBinary fitxer MacBinary de Macintosh soubor MacBinary pro Macintosh Macintosh MacBinary-fil Macintosh-MacBinary-Datei Εκτελέσιμο Macintosh MacBinary - Macintosh MacBinary file + Macintosh MacBinary file MacBinary-dosiero de Macintosh archivo de Macintosh MacBinary Macintosh MacBinary fitxategia Macintosh MacBinary -tiedosto Macintosh MacBinary fíla fichier Macintosh MacBinary + file MacBinary di Macintosh comhad Macintosh MacBinary ficheiro MacBinary de Macintosh קובץ בינרי של מקינטוש @@ -15505,7 +16126,7 @@ fichièr Macintosh MacBinary Plik MacBinary Macintosh ficheiro MacBinary de Macintosh - Arquivo do Macintosh MacBinary + Arquivo do Macintosh MacBinary Fișier Macintosh MacBinary Файл Macintosh MacBinary Súbor pre Macintosh MacBinary @@ -15516,29 +16137,31 @@ Macintosh MacBinary dosyası файл Macintosh MacBinary Tập tin nhị phân MacBinary của Macintosh - Macintosh MacBinary 文件 - Macintosh MacBinary 檔 + Macintosh MacBinary 文件 + Macintosh MacBinary 檔 - + Matroska stream + Matroska-stroom دفق Matroska - Płyń Matroska + Płyń Matroska Поток — Matroska flux Matroska proud Matroska - Matroskastrøm + Matroska-strøm Matroska-Datenstrom Ροή Matroska - Matroska stream + Matroska stream flujo Matroska Matroska korrontea Matroska-virta Matroska streymur flux Matroska + flus Matroska sruth Matroska fluxo de Matroska זרימת Matroska @@ -15558,7 +16181,7 @@ flux Matroska Strumień Matroska fluxo Matroska - Transmissão do Matroska + Transmissão do Matroska Flux Matroska Поток Matroska Stream Matroska @@ -15569,38 +16192,40 @@ Matroska akışı потік даних Matroska Luồng Matroska - Matroska 流 - Matroska 串流 + Matroska 流 + Matroska 串流 - - - - - - + + + + + + Matroska video + Matroska-video Matroska مرئي Videu en Matroska - Videa Matroska + Videa Matroska Видео — Matroska vídeo Matroska video Matroska - Matroskavideo + Matroska-video Matroska-Video Βίντεο Matroska - Matroska video + Matroska video Matroska-video vídeo Matroska Matroska bideoa Matroska-video Matroska video vidéo Matroska + video Matroska físeán Matroska vídeo de Matroska וידאו Matroska @@ -15622,7 +16247,7 @@ vidèo Matroska Plik wideo Matroska vídeo Matroska - Vídeo Matroska + Vídeo Matroska Video Matroska Видео Matroska Video Matroska @@ -15633,24 +16258,27 @@ Matroska video відеокліп Matroska Ảnh động Matroska - Matroska 视频 - Matroska 視訊 + Matroska 视频 + Matroska 視訊 Matroska 3D video + Matroska 3D video Videu en Matroska 3D + Видео — Matroska 3D vídeo Matroska 3D 3D video Matroska Matroska 3D-video Matroska 3D-Video Βίντεο 3Δ Matroska - Matroska 3D video + Matroska 3D video vídeo Matroska en 3D Matroska 3D bideoa Matroska 3D-video vidéo Matroska 3D + video 3D Matroska físeán Matroska 3D Video Matroska 3D סרטון תלת ממדי מסוג Matroska @@ -15664,7 +16292,7 @@ vidèo Matroska 3D Plik wideo Matroska 3D vídeo 3D Matroska - Vídeo 3D Matroska + Vídeo 3D Matroska Видео Matroska 3D 3D video Matroska Video datoteka Matroska 3D @@ -15672,28 +16300,30 @@ Matroska 3D-video Matroska 3B video відеокліп Matroska 3D - Matroska 3D 视频 - Matroska 3D 視訊 + Matroska 3D 视频 + Matroska 3D 視訊 Matroska audio + Matroska-oudio سمعي Matroska - Aŭdyjo Matroska + Aŭdyjo Matroska Аудио — Matroska - àudio de Matroska + àudio Matroska zvuk Matroska - Matroskalyd + Matroska-lyd Matroska-Audio Ήχος Matroska - Matroska audio + Matroska audio Matroska-sondosiero - sonido Matroska + audio Matroska Matroska audioa Matroska-ääni Matroska ljóður audio Matroska + audio Matroska fuaim Matroska son de Matroska שמע Matroska @@ -15714,7 +16344,7 @@ àudio Matroska Plik dźwiękowy Matroska áudio Matroska - Áudio Matroska + Áudio Matroska Audio Matroska Аудио Matroska Zvuk Matroska @@ -15725,13 +16355,14 @@ Matroska ses звук Matroska Âm thanh Matroska - Matroska 音频 - Matroska 音訊 + Matroska 音频 + Matroska 音訊 WebM video + WebM-video WebM مرئي Videu en WebM Видео — WebM @@ -15740,13 +16371,14 @@ WebM-video WebM-Video Βίντεο WebM - WebM video + WebM video WebM-video vídeo WebM WebM bideoa WebM-video WebM video vidéo WebM + video WebM físeán WebM vídeo WebM וידאו WebM @@ -15764,7 +16396,7 @@ vidèo WebM Plik wideo WebM vídeo WebM - Vídeo WebM + Vídeo WebM Video WebM Видео WebM Video WebM @@ -15773,36 +16405,38 @@ WebM-video WebM video відео WebM - WebM 视频 - WebM 視訊 + WebM 视频 + WebM 視訊 - - - - - - + + + + + + WebM audio + WebM-oudio WebM سمعي Аудио — WebM - àudio de WebM + àudio WebM zvuk WebM WebM-lyd WebM-Audio Ήχος WebM - WebM audio + WebM audio WebM-sondosiero - sonido WebM + audio WebM WebM audioa WebM-ääni WebM ljóður audio WebM + audio WebM fuaim WebM son WebM שמע WebM @@ -15820,7 +16454,7 @@ àudio WebM Plik dźwiękowy WebM áudio WebM - Áudio WebM + Áudio WebM Audio WebM Аудио WebM Zvuk WebM @@ -15829,22 +16463,25 @@ WebM-ljud WebM sesi звук WebM - WebM 音频 - WebM 音訊 + WebM 音频 + WebM 音訊 MHTML web archive + MHTML-webargief + Архив — MHTML arxiu web MHTML webový archiv MHTML - MHTML-netarkiv + MHTML-webarkiv MHTML-Webarchiv Συμπιεσμένο αρχείο ιστού MHTML - MHTML web archive + MHTML web archive archivador web MHTML MHTML web artxiboa MHTML-kooste archive web MHTML + archivi web MHTML cartlann ghréasáin MHTML Arquivo web MHTML ארכיון רשת MHTML @@ -15860,7 +16497,7 @@ archiu web MHTML Archiwum witryny MHTML arquivo web MHTML - Pacote web MHTML + Pacote web MHTML Веб-архив MHTML Webový archív MHTML Spletni arhiv MHTML @@ -15868,8 +16505,8 @@ MHTML-webbarkiv MHTML web arşivi вебархів MHTML - MHTML 网络归档 - MHTML 網頁封存檔 + MHTML 网络归档 + MHTML 網頁封存檔 MHTML MIME HTML @@ -15878,6 +16515,7 @@ MXF video + MXF-video MXF مرئي Videu en MXF Видео — MXF @@ -15886,13 +16524,14 @@ MXF-video MXF-Video Βίντεο MXF - MXF video + MXF video MXF-video vídeo MXF MXF bideoa MXF-video MXF video vidéo MXF + video MXF físeán MXF vídeo MXF וידאו MXF @@ -15911,7 +16550,7 @@ vidèo MXF Plik wideo MXF vídeo MXF - Vídeo MXF + Vídeo MXF Video MXF Видео MXF Video MXF @@ -15920,33 +16559,35 @@ MXF-video MXF video відеокліп MXF - MXF 视频 - MXF 視訊 + MXF 视频 + MXF 視訊 MXF Material Exchange Format - + OCL file + OCL-lêer ملف OCL - Fajł OCL + Fajł OCL Файл — OCL fitxer OCL soubor OCL OCL-fil OCL-Datei Αρχείο OCL - OCL file + OCL file OCL-dosiero archivo OCL OCL fitxategia OCL-tiedosto OCL fíla fichier OCL + file OCL comhad OCL ficheiro OCL קובץ OCL @@ -15966,7 +16607,7 @@ fichièr OCL Plik OCL ficheiro OCL - Arquivo OCL + Arquivo OCL Fișier OCL Файл OCL Súbor OCL @@ -15977,54 +16618,39 @@ OCL dosyası файл OCL Tập tin OCL - OCL 文件 - OCL 檔 + OCL 文件 + OCL 檔 OCL Object Constraint Language - COBOL source file + COBOL source code Изходен код — COBOL codi font en COBOL - zdrojový soubor COBOL - COBOL-kildefil - COBOL-Quelldatei - Πηγαίο αρχείο COBOL - COBOL source file - COBOL-fontdosiero - archivo fuente de COBOL + COBOL-kildekode + COBOL-Quelltext + COBOL source code + código fuente en COBOL COBOL iturburu-kodea COBOL-lähdekoodi - fichier source COBOL - cód foinseach COBOL - ficheiro fonte de COBOL - קובץ מקור של COBOL - COBOL izvorna datoteka - COBOL forrásfájl - File de codice fonte COBOL - Berkas sumber COBOL - File sorgente COBOL - COBOL ソースファイル - COBOL-ის საწყისი ფაილი + code source COBOL + COBOL izvorni kôd + COBOL forráskód + Kode sumber COBOL + Codice sorgente COBOL COBOL бастапқы коды - COBOL 소스 파일 - COBOL pirmkods - COBOL bronbestand - fichièr font COBOL - Plik źródłowy COBOL - ficheiro origem COBOL - Arquivo de código-fonte em COBOL - Файл исходного кода на COBOL - Zdrojový súbor COBOLu - Izvorna koda COBOL - изворна датотека КОБОЛ-а - COBOL-källkodsfil - COBOL kaynak dosyası + 코볼 소스 코드 + Kod źródłowy COBOL + Código-fonte COBOL + Исходный код COBOL + Zdrojový kód COBOL + COBOL-källkod + COBOL kaynak kodu вихідний код мовою COBOL - COBOL 源文件 - COBOL 源檔 + COBOL 源代码 + COBOL 原始碼 COBOL COmmon Business Oriented Language @@ -16033,24 +16659,26 @@ Mobipocket e-book + Mobipocket e-boek Е-книга — Mobipocket llibre electrònic Mobipocket elektronická kniha Mobipocket Mobipocket e-bog Mobipocket E-Book Ηλεκτρονικό βιβλίο Mobipocket - Mobipocket e-book + Mobipocket e-book libro electrónico de Mobipocket Mobipocket liburua Mobipocket e-kirja livre numérique Mobipocket + e-book Mobipocket r-leabhar Mobipocket E-book Mobipocket ספר אלקטרוני של Mobipocket Mobipocket e-knjiga Mobipocket e-könyv E-libro Mobipocket - e-book Mobipocket + E-book Mobipocket E-book Mobipocket Mobipocket 電子書籍 Mobipocket-ის ელწიგნი @@ -16061,7 +16689,7 @@ libre numeric Mobipocket E-book Mobipocket ebook Mobipocket - E-book Mobipocket + E-book Mobipocket Электронная книга Mobipocket E-kniha Mobipocket e-knjiga Mobipocket @@ -16069,38 +16697,40 @@ Mobipocket-e-bok Mobipocket e-kitap електронна книга Mobipocket - Mobipocket 电子书 - Mobipocket e-book + Mobipocket 电子书 + Mobipocket e-book - - + + - + Adobe FrameMaker MIF document + Adobe FrameMaker MIF-dokument مستند أدوبي الصانع للإطارات MIF Documentu MIF d'Adobe FrameMaker - Dakument Adobe FrameMaker MIF + Dakument Adobe FrameMaker MIF Документ — Adobe FrameMaker MIF document MIF d'Adobe FrameMaker dokument Adobe FrameMaker MIF Adobe FrameMaker MIF-dokument Adobe-FrameMaker-MIF-Dokument Έγγραφο MIF του Adobe FrameMaker - Adobe FrameMaker MIF document + Adobe FrameMaker MIF document MIF-dokumento de Adobe FrameMaker documento MIF de Adobe FrameMaker Adobe FrameMaker-en MIF dokumentua Adobe FrameMaker MIF -asiakirja Adobe FrameMaker MIF skjal document MIF Adobe FrameMaker + document MIF di Adobe FrameMaker cáipéis MIF Adobe FrameMaker documento MIF de Adobe FrameMaker מסמך MIF של Adobe FrameMaker @@ -16121,7 +16751,7 @@ document MIF Adobe FrameMaker Dokument MIF Adobe FrameMaker documento Adobe FrameMaker MIF - Documento MIF do Adobe FrameMaker + Documento MIF do Adobe FrameMaker Document Adobe FrameMaker MIF Документ Adobe FrameMaker MIF Dokument Adobe FrameMaker MIF @@ -16132,27 +16762,29 @@ Adobe FrameMaker MIF belgesi документ Adobe FrameMaker MIF Tài liệu Adobe FrameMaker MIF - Adobe FrameMaker MIF 文档 - Adobe FrameMaker MIF 文件 + Adobe FrameMaker MIF 文档 + Adobe FrameMaker MIF 文件 Mozilla bookmarks + Mozilla-boekmerke علامات موزيلا - Zakładki Mozilla + Zakładki Mozilla Отметки — Mozilla llista d'adreces d'interès de Mozilla záložky Mozilla Mozillabogmærker Mozilla-Lesezeichen Σελιδοδείκτες Mozilla - Mozilla bookmarks + Mozilla bookmarks Mozilla-legosignoj marcadores de Mozilla Mozillako laster-markak Mozilla-kirjanmerkit Mozilla bókamerki marque-pages Mozilla + segnelibris Mozilla leabharmharcanna Mozilla Marcadores de Mozilla סימניה של Mozilla @@ -16173,7 +16805,7 @@ marcapaginas Mozilla Zakładki Mozilla marcadores do Mozilla - Favoritos do Mozilla + Favoritos do Mozilla Semne de carte Mozilla Закладки Mozilla Záložky Mozilla @@ -16184,32 +16816,34 @@ Mozilla yer imleri закладки Mozilla Liên kết đã lưu Mozilla - Mozilla 书签 - Mozilla 書籤 + Mozilla 书签 + Mozilla 書籤 - + DOS/Windows executable + DOS/Windows-uitvoerbaar تنفيذي DOS/Windows - Vykonvalny fajł DOS/Windows + Vykonvalny fajł DOS/Windows Изпълним файл — DOS/Windows executable de DOS o de Windows spustitelný soubor pro DOS/Windows DOS-/Windowskørbar DOS/Windows-Programmdatei Εκτελέσιμο DOS/Windows - DOS/Windows executable + DOS/Windows executable DOS/Windows-plenumebla ejecutable de DOS/Windows DOS/Windows-eko exekutagarria DOS/Windows-ohjelma DOS/Windows inningarfør exécutable DOS/Windows + eseguibil DOS/Windows comhad inrite DOS/Windows executábel de DOS/Windows קובץ בר־הרצה של DOS/חלונות @@ -16231,7 +16865,7 @@ executable DOS/Windows Program DOS/Windows executável DOS/Windows - Executável do DOS/Windows + Executável do DOS/Windows Executabil DOS/Windows Исполняемый файл DOS/Windows Spustiteľný súbor pre DOS/Windows @@ -16239,33 +16873,35 @@ I ekzekutueshëm DOS/Windows ДОС/Виндоуз извршна Körbar DOS/Windows-fil - DOS/Windows çalıştırılabilir + DOS/Windows çalıştırılabiliri виконуваний файл DOS/Windows Tập tin có thực hiện được DOS/Windows - DOS/Windows 可执行文件 - DOS/Windows 可執行檔 + DOS/Windows 可执行文件 + DOS/Windows 可執行檔 - + Internet shortcut + Internet-kortpad اختصار الإنترنت - Sieciŭnaja spasyłka + Sieciŭnaja spasyłka Адрес в Интернет drecera d'Internet odkaz do Internetu Internetgenvej Internet-Verweis Συντόμευση διαδικτύου - Internet shortcut + Internet shortcut acceso directo a Internet Interneteko lasterbidea Internet-pikakuvake Alnetssnarvegur raccourci Internet + scurte di internet aicearra Idirlín atallo de Internet קיצור דרך של האינטרנט @@ -16285,7 +16921,7 @@ acorchi Internet Skrót internetowy atalho da Internet - Atalho da Internet + Atalho da Internet Scurtătură Internet Интернет-ссылка Internetový odkaz @@ -16296,34 +16932,36 @@ İnternet kısayolu інтернет-посилання Lối tắt Internet - Internet 快捷方式 - 網際網路捷徑 + Internet 快捷方式 + 網際網路捷徑 - - - + + + WRI document + WRI-dokument مستند WRI Documentu WRI - Dakument WRI + Dakument WRI Документ — WRI document WRI dokument WRI WRI-dokument WRI-Dokument Έγγραφο WRI - WRI document + WRI document WRI-dokumento documento WRI WRI dokumentua WRI-asiakirja WRI skjal document WRI + document WRI cáipéis WRI documento WRI מסמך WRI @@ -16343,7 +16981,7 @@ document WRI Dokument WRI documento WRI - Documento WRI + Documento WRI Document WRI Документ WRI Dokument WRI @@ -16354,29 +16992,30 @@ WRI belgesi документ WRI Tài liệu WRI - WRI 文档 - WRI 文件 + WRI 文档 + WRI 文件 MSX ROM MSX ROM - MSX ROM + MSX ROM ROM — MSX ROM de MSX ROM pro MSX ROM MSX - MSX-rom + MSX-ROM MSX ROM MSX ROM - MSX ROM + MSX ROM MSX-NLM ROM de MSX MSX-ko ROMa MSX-ROM MSX ROM ROM MSX + ROM MSX ROM MSX ROM de MSX MSX ROM @@ -16398,7 +17037,7 @@ ROM MSX Plik ROM konsoli MSX ROM MSX - ROM de MSX + ROM de MSX ROM MSX MSX ROM ROM pre MSX @@ -16409,27 +17048,29 @@ MSX ROM ППП MSX ROM MSX - MSX ROM - MSX ROM + MSX ROM + MSX ROM M4 macro + M4-makro M4 macro - Makras M4 + Makras M4 Макроси — M4 macro M4 makro M4 M4-makro M4-Makro Μακροεντολή m4 - M4 macro + M4 macro macro M4 M4 makroa M4-makro M4 fjølvi macro M4 + macro M4 macra M4 macro M4 מאקרו M4 @@ -16449,7 +17090,7 @@ macro M4 Makro M4 macro M4 - Macro M4 + Macro M4 Macro M4 Макрос M4 Makro M4 @@ -16460,8 +17101,8 @@ M4 makrosu макрос M4 Vĩ lệnh M4 - M4 宏 - M4 巨集 + M4 宏 + M4 巨集 @@ -16469,20 +17110,21 @@ Nintendo64 ROM Nintendo64 ROM - Nintendo64 ROM + Nintendo64 ROM ROM — Nintendo64 ROM de Nintendo64 ROM pro Nintendo64 - Nintendo64-rom + Nintendo64-ROM Nintendo64 ROM Nintendo64 ROM - Nintendo64 ROM + Nintendo64 ROM Nintendo64-NLM ROM de Nintendo64 Nintendo64-ko ROMa Nintendo64-ROM Nintendo64 ROM ROM Nintendo64 + ROM Nintendo64 ROM Nintendo64 ROM de Nintendo64 ROM של Nintendo64 @@ -16503,7 +17145,7 @@ ROM Nintendo64 Plik ROM konsoli Nintendo64 ROM Nintendo64 - ROM de Nintendo64 + ROM de Nintendo64 ROM Nintendo64 Nintendo64 ROM ROM pre Nintendo64 @@ -16514,26 +17156,27 @@ Nintendo64 ROM ППП Nintendo64 ROM Nintendo64 - 任天堂 64 ROM - Nintendo64 ROM + 任天堂 64 ROM + Nintendo64 ROM - - - - - - + + + + + + Nautilus link + Nautilus-skakel وصلة Nautilus Nautilus körpüsü - Spasyłka Nautilus + Spasyłka Nautilus Връзка — Nautilus enllaç de Nautilus odkaz Nautilus @@ -16541,13 +17184,14 @@ Nautilus-henvisning Nautilus-Verknüpfung Σύνδεσμος Nautilus - Nautilus link + Nautilus link Nautilus-ligilo enlace de Nautilus Nautilus esteka Nautilus-linkki Nautilus leinkja lien Nautilus + colegament Nautilus nasc Nautilus ligazón de nautilus קישור של Nautilus @@ -16568,7 +17212,7 @@ ligam Nautilus Odnośnik Nautilus atalho Nautilus - Link do Nautilus + Link do Nautilus Legătură Nautilus Ссылка Nautilus Odkaz Nautilus @@ -16579,25 +17223,27 @@ Nautilus bağlantısı посилання Nautilus Liên kết Nautilus - Nautilus 链接 - Nautilus 鏈結 + Nautilus 链接 + Nautilus 連結 - + Neo-Geo Pocket ROM + ROM — Neo-Geo Pocket ROM de Neo-Geo Pocket ROM pro Neo-Geo Pocket - Neo-Geo Pocket ROM + Neo-Geo Pocket-ROM Neo-Geo Pocket ROM - Neo-Geo Pocket ROM + Neo-Geo Pocket ROM ROM de Neo-Geo Pocket Neo-Geo Pocket ROM Neo-Geo Pocket -ROM ROM Neo-Geo Pocket + ROM Neo-Geo Pocket ROM Neo-Geo Pocket Neo-Geo Pocket ROM Neo-Geo Pocket ROM @@ -16606,54 +17252,82 @@ Neo-Geo Pocket ROM 네오지오 포켓 롬 Plik ROM konsoli Neo-Geo Pocket - ROM de Neo-Geo Pocket + ROM de Neo-Geo Pocket Neo-Geo Pocket ROM ROM pre Neo-Geo Pocket Нео-Гео Покет РОМ Neo-Geo Pocket-rom Neo-Geo Pocket ROM ППП Neo-Geo Pocket - Neo-Geo Pocket ROM - Neo-Geo Pocket ROM + Neo-Geo Pocket ROM + Neo-Geo Pocket ROM - - - + + + Neo-Geo Pocket Color ROM + ROM — Neo-Geo Pocket Color + ROM de Neo-Geo Pocket Color + ROM pro Neo-Geo Pocket Color + Neo-Geo Pocket Color-ROM + Neo-Geo Pocket Color ROM + Neo-Geo Pocket Colour ROM + ROM de Neo-Geo Pocket Color + Neo-Geo Pocket Color ROM + Neo-Geo Pocket Color ROM + ROM Neo-Geo Pocket Color + ROM Neo-Geo Pocket Color + ROM datha Neo-Geo Pocket + Neo-Geo Pocket Color ROM + Neo-Geo Pocket Color ROM + ROM Neo-Geo Pocket Color + ROM Neo-Geo Pocket Color + Neo-Geo Pocket Color ROM + 네오지오 포켓 컬러 롬 + Plik ROM konsoli Neo-Geo Pocket Color + ROM de Neo-Geo Pocket Color + Neo-Geo Pocket Color ROM + ROM pre Neo-Geo Pocket Color + Neo-Geo Pocket Color ROM + Neo-Geo Pocket Color ROM + ППП Neo-Geo Pocket Color + Neo-Geo Pocket Color ROM + Neo-Geo Pocket Color ROM - - - + + + - + NES ROM NES ROM - NES ROM + NES ROM ROM — NES ROM de NES ROM pro NES ROM NES - NES-rom + NES-ROM NES ROM NES ROM - NES ROM + NES ROM NES-NLM ROM de NES NES-eko ROMa NES-ROM NES ROM ROM NES + ROM NES ROM NES ROM de NES ROM של NES @@ -16674,7 +17348,7 @@ ROM NES Plik ROM konsoli NES ROM NES - ROM de NES + ROM de NES ROM NES NES ROM ROM pre NES @@ -16685,8 +17359,8 @@ NES ROM ППП NES ROM NES - NES ROM - 任天堂 ROM + NES ROM + 任天堂紅白機 ROM @@ -16697,20 +17371,21 @@ Unidata NetCDF document مستند Unidata NetCDF Documentu NetCDF d'Unidata - Dakument Unidata NetCDF + Dakument Unidata NetCDF Документ — Unidata NetCDF document d'Unidata NetCDF dokument Unidata NetCDF Unidata NetCDF-dokument Unidata-NetCDF-Dokument Έγγραφο Unidata NetCDF - Unidata NetCDF document + Unidata NetCDF document dokumento en NetCDF-formato de Unidata documento de Unidata NetCDF Unidata NetCDF dokumentua Unidata NetCDF -asiakirja Unidata NetCDF skjal document Unidata NetCDF + document Unidata NetCDF cáipéis Unidata NetCDF Documentno de Unixdata NetCDF מסמך של Unidata NetCDF @@ -16731,7 +17406,7 @@ document Unidata NetCDF Dokument Unidata NetCDF documento Unidata NetCDF - Documento do Unidata NetCDF + Documento do Unidata NetCDF Document Unidata NetCDF Документ Unidata NetCDF Dokument Unidata NetCDF @@ -16742,8 +17417,8 @@ Unidata NetCDF belgesi документ Unidata NetCDF Tài liệu NetCDF Unidata - Unidata NetCDF 文档 - Unidata NetCDF 文件 + Unidata NetCDF 文档 + Unidata NetCDF 文件 NetCDF Network Common Data Form @@ -16755,13 +17430,15 @@ Индекс — Usenet, NewzBin índex d'Usenet NewzBin index NewzBin diskuzních skupin Usenet - NewzBin-brugernetindex + NewzBin usenet-indeks NewzBin-Usenet-Index Ευρετήριο usenet NewzBin - NewzBin usenet index + NewzBin usenet index índice NewzBin de usenet NewzBin usenet indizea + NewzBin usenet indeksi index usenet + tabele usenet NewzBin innéacs usenet NewzBin Índice de usenet NEwzBin אינדקס שרתי חדשות NewzBin @@ -16778,7 +17455,7 @@ indèx usenet NewzBin Indeks grup dyskusyjnych NewzBin índice usenet NewzBin - Índice de usenet NewzBin + Índice de usenet NewzBin Индекс usenet NewzBin Index Usenetu NewzBin Kazalo usenet NewzBin @@ -16786,30 +17463,32 @@ NewzBin-usenetindex NewzBin usenet dizini покажчик usenet NewzBin - NewzBin Usenet 索引 - NewzBin usenet 索引 + NewzBin Usenet 索引 + NewzBin usenet 索引 - + object code + objekkode رمز الكائن - abjektny kod + abjektny kod Обектен код codi objecte objektový kód objektkode Objektcode Μεταφρασμένος κώδικας - object code + object code celkodo código objeto objektu kodea objektikoodi code objet + codiç ogjet cód réada código obxecto קוד אובייקט @@ -16830,7 +17509,7 @@ còde objet Kod obiektowy código de objeto - Código-objeto + Código-objeto cod sursă obiect Объектный код Objektový kód @@ -16841,18 +17520,18 @@ nesne kodu об'єктний код mã đối tượng - 目标代码 - 目的碼 + 目标代码 + 目的碼 - - - + + + - - - + + + @@ -16867,12 +17546,13 @@ Udvekslingsformat for Annodex Annodex-Wechselformat Μορφή ανταλλαγής Annodex - Annodex exchange format + Annodex exchange format formato de intercambio de Annodex Annodex trukatze-formatua Annodex-siirtomuoto Annodex umbýtingarsnið format d'échange Annodex + formât di scambi Annodex formáid mhalairte Annodex formato intercambiábel de Annodex תבנית החלפת Annodex @@ -16891,7 +17571,7 @@ format d'escambi Annodex Format wymiany Annodex formato de troca Annodex - Formato de troca Annodex + Formato de troca Annodex Format schimb Annodex Формат обмена Annodex Formát pre výmenu Annodex @@ -16901,13 +17581,13 @@ Annodex değişim biçimi формат обміну даними Annodex Định dạng trao đổi Annodex - Annodex 交换格式 - Annodex 交換格式 + Annodex 交换格式 + Annodex 交換格式 - - - + + + @@ -16915,57 +17595,35 @@ - Annodex Video - Annodex مرئي - Videu n'Annodex + Annodex video Видео — Annodex - Annodex Video - video Annodex - Annodexvideo + vídeo Annodex + Annodex-video Annodex-Video - Βίντεο Annodex - Annodex Video - Annodex-video + Annodex video vídeo Annodex Annodex bideoa - Annodex-video - Annodex video + Annodex video vidéo Annodex - Físeán Annodex - vídeo de Annodex - וידאו Annodex Annodex video snimka Annodex videó - Video Annodex Video Annodex Video Annodex - Annodex 動画 - Annodex-ის ვიდეო Annodex видеосы Annodex 동영상 - Annodex vaizdo įrašas - Annodex video - Annodex Video - vidèo Annodex Plik wideo Annodex - vídeo Annodex - Vídeo Annodex - Video Annodex + Vídeo Annodex Видео Annodex - Video Annodex - Video datoteka Annodex - Анодекс видео Annodex-video - Annodex Video - відеокліп Annodex - Ảnh động Annodex - Annodex 视频 - Annodex 視訊 + Annodex video + відео Annodex + Annodex 视频 + Annodex 視訊 - - - + + + @@ -16973,56 +17631,35 @@ - Annodex Audio - Annodex سمعي + Annodex audio Аудио — Annodex - Annodex Audio - zvuk Annodex - Annodexlyd + àudio Annodex + Annodex-lyd Annodex-Audio - Ήχος Annodex - Annodex Audio - Annodex-sondosiero - sonido Annodex + Annodex audio + audio Annodex Annodex audioa - Annodex-ääni - Annodex ljóður + Annodex ääni audio Annodex - Fuaim Annodex - son de Annodex - שמע Annodex Annodex zvučni zapis Annodex hang - Audio Annodex Audio Annodex Audio Annodex - Annodex オーディオ - Annodex-ის აუდიო Annodex аудиосы Annodex 오디오 - Annodex garso įrašas - Annodex audio - Annodex Audio - àudio Annodex Plik dźwiękowy Annodex - áudio Annodex - Áudio Annodex - Audio Annodex + Áudio Annodex Аудио Annodex - Zvuk Annodex - Zvočna datoteka Annodex - Анодекс аудио Annodex-ljud - Annodex Sesi + Annodex sesi звук Annodex - Âm thanh Annodex - Annodex 音频 - Annodex 音訊 + Annodex 音频 + Annodex 音訊 - - - + + + @@ -17031,20 +17668,22 @@ Ogg multimedia file + Ogg-multimedialêer ملف وسائط متعددة Ogg - Multymedyjny fajł Ogg + Multymedyjny fajł Ogg Мултимедия — Ogg fitxer multimèdia Ogg multimediální soubor Ogg Ogg multimedie-fil Ogg-Multimediadatei Αρχείο πολυμέσων Ogg - Ogg multimedia file + Ogg multimedia file archivo multimedia Ogg Ogg multimediako fitxategia Ogg-multimediatiedosto Ogg margmiðlafíla fichier multimédia Ogg + file multimediâl Ogg comhad ilmheán Ogg ficheiro multimedia Ogg קובץ מולטימדיה Ogg @@ -17065,7 +17704,7 @@ fichièr multimèdia Ogg Plik multimedialny Ogg ficheiro multimédia Ogg - Arquivo multimídia Ogg + Arquivo multimídia Ogg Fișier multimedia Ogg Мультимедийный файл Ogg Súbor multimédií Ogg @@ -17073,70 +17712,47 @@ File multimedial Ogg Огг мултимедијална датотека Ogg-multimediafil - Ogg çokluortam dosyası + Ogg çoklu ortam dosyası мультимедійний файл Ogg Tập tin đa phương tiện Ogg - Ogg 多媒体文件 - Ogg 多媒體檔案 + Ogg 多媒体文件 + Ogg 多媒體檔案 - + - Ogg Audio - Ogg سمعي - Aŭdyjo Ogg + Ogg audio Аудио — Ogg - àudio d'Ogg - zvuk Ogg + àudio Ogg Ogg-lyd Ogg-Audio - Ήχος Ogg - Ogg Audio - sonido Ogg + Ogg audio + audio Ogg Ogg audioa Ogg-ääni - Ogg ljóður audio Ogg - Fuaim Ogg - son Ogg - שמע Ogg Ogg zvučni zapis Ogg hang - Audio Ogg Audio Ogg Audio Ogg - Ogg オーディオ - Ogg-ის აუდიო - Ogg аудиосы + Ogg аулиосы Ogg 오디오 - Ogg garso įrašas - Ogg audio - Ogg lyd - Ogg-audio - Ogg-lyd - àudio Ogg Plik dźwiękowy Ogg - áudio Ogg - Áudio Ogg - Audio Ogg + Áudio Ogg Аудио Ogg Zvuk Ogg - Zvočna datoteka Ogg - Audio Ogg - Огг звук Ogg-ljud - Ogg Sesi + Ogg sesi звук ogg - Âm thanh Ogg - Ogg 音频 - Ogg 音訊 + Ogg 音频 + Ogg 音訊 - + @@ -17144,58 +17760,34 @@ - Ogg Video - Ogg مرئي - Videu n'Ogg - Videa Ogg + Ogg video Видео — Ogg vídeo Ogg - video Ogg Ogg-video Ogg-Video - Βίντεο Ogg - Ogg Video + Ogg video vídeo Ogg Ogg bideoa Ogg-video - Ogg Video vidéo Ogg - Físeán Ogg - vídeo Ogg - וידאו Ogg Ogg video snimka Ogg videó - Video Ogg Video Ogg Video Ogg - Ogg 動画 - Ogg ვიდეო Ogg видеосы Ogg 동영상 - Ogg vaizdo įrašas - Ogg video - Ogg video - Ogg-video - Ogg-video - vidèo Ogg Plik wideo Ogg - vídeo Ogg - Vídeo Ogg - Video Ogg + Vídeo Ogg Видео Ogg Video Ogg - Video datoteka Ogg - Video Ogg - Огг снимак Ogg-video - Ogg Video - відеокліп ogg - Ảnh động Ogg - Ogg 视频 - Ogg 視訊 + Ogg video + відео ogg + Ogg 视频 + Ogg 視訊 - + @@ -17203,23 +17795,25 @@ Ogg Vorbis audio + Ogg Vorbis-oudio Ogg Vorbis سمعي Ogg Vorbis audio faylı - Aŭdyjo Ogg Vorbis + Aŭdyjo Ogg Vorbis Аудио — Ogg Vorbis - àudio d'Ogg Vorbis + àudio Ogg Vorbis zvuk Ogg Vorbis Sain Ogg Vorbis Ogg Vorbis-lyd Ogg-Vorbis-Audio Ήχος Ogg Vobris - Ogg Vorbis audio + Ogg Vorbis audio Ogg-Vorbis-sondosiero - sonido Ogg Vorbis + audio Ogg Vorbis Ogg Vorbis audioa Ogg Vorbis -ääni Ogg Vorbis ljóður audio Ogg Vorbis + audio Ogg Vorbis fuaim Ogg Vorbis son Ogg Vorbis שמע Ogg Vorbis @@ -17241,7 +17835,7 @@ àudio Ogg Vorbis Plik dźwiękowy Ogg Vorbis áudio Ogg Vorbis - Áudio Ogg Vorbis + Áudio Ogg Vorbis Audio Ogg Vorbis Аудио Ogg Vorbis Zvuk Ogg Vorbis @@ -17252,14 +17846,14 @@ Ogg Vorbis sesi звук ogg Vorbis Âm thanh Vorbis Ogg - Ogg Vorbis 音频 - Ogg Vorbis 音訊 + Ogg Vorbis 音频 + Ogg Vorbis 音訊 - - + + @@ -17267,20 +17861,22 @@ Ogg FLAC audio + Ogg FLAC-oudio Ogg FLAC سمعي - Aŭdyjo Ogg FLAC + Aŭdyjo Ogg FLAC Аудио — Ogg FLAC - àudio FLAC d'Ogg + àudio Ogg FLAC zvuk Ogg FLAC Ogg FLAC-lyd Ogg-FLAC-Audio Ήχος Ogg FLAC - Ogg FLAC audio - sonido Ogg FLAC + Ogg FLAC audio + audio Ogg FLAC Ogg FLAC audioa Ogg FLAC -ääni Ogg FLAC ljóður audio Ogg FLAC + audio Ogg FLAC fuaim Ogg FLAC son Ogg FLAC שמע Ogg FLAC @@ -17301,7 +17897,7 @@ àudio Ogg FLAC Plik dźwiękowy Ogg FLAC áudio Ogg FLAC - Áudio Ogg FLAC + Áudio Ogg FLAC Audio Ogg FLAC Аудио Ogg FLAC Zvuk Ogg FLAC @@ -17312,13 +17908,13 @@ Ogg FLAC sesi звук ogg FLAC Âm thanh FLAC Ogg - Ogg FLAC 音频 - Ogg FLAC 音訊 + Ogg FLAC 音频 + Ogg FLAC 音訊 - - + + @@ -17329,16 +17925,19 @@ Opus audio - àudio d'Opus + Opus-oudio + Аудио — Opus + àudio Opus zvuk Opus Opus-lyd Opus-Audio Ήχος Opus - Opus audio - sonido Opus + Opus audio + audio Opus Opus audioa Opus-ääni audio Opus + audio Opus fuaim Opus Son Opus שמע Opus @@ -17352,7 +17951,7 @@ àudio Opus Plik dźwiękowy Opus áudio Opus - Áudio Opus + Áudio Opus Аудио Opus Zvuk Opu Zvočna datoteka Opus @@ -17360,32 +17959,34 @@ Opus-ljud Opus sesi звук Opus - Opus 音频 - Opus 音訊 + Opus 音频 + Opus 音訊 - - + + Ogg Speex audio + Ogg Speex-oudio Ogg Speex سمعي - Aŭdyjo Ogg Speex + Aŭdyjo Ogg Speex Аудио — Ogg Speex - àudio Speex d'Ogg + àudio Ogg Speex zvuk Ogg Speex Ogg Speex-lyd Ogg-Speex-Audio Ήχος Ogg Speex - Ogg Speex audio - sonido Ogg Speex + Ogg Speex audio + audio Ogg Speex Ogg Speex audioa Ogg Speex -ääni Ogg Speex ljóður audio Ogg Speex + audio Ogg Speex fuaim Ogg Speex son Ogg Speex שמע Ogg Speex @@ -17406,7 +18007,7 @@ àudio Ogg Speex Plik dźwiękowy Ogg Speex áudio Ogg Speex - Áudio Ogg Speex + Áudio Ogg Speex Audio Ogg Speex Аудио Ogg Speex Zvuk Ogg Speex @@ -17417,33 +18018,36 @@ Ogg Speex sesi звук ogg Speex Âm thanh Speex Ogg - Ogg Speex 音频 - Ogg Speex 音訊 + Ogg Speex 音频 + Ogg Speex 音訊 - - + + + Speex audio + Speex-oudio Speex سمعي - Aŭdyjo Speex + Aŭdyjo Speex Аудио — Speex - àudio de Speex + àudio Speex zvuk Speex - Speexlyd + Speex-lyd Speex-Audio Ήχος Speex - Speex audio - sonido Speex + Speex audio + audio Speex Speex audioa Speex-ääni Speex ljóður audio Speex + audio Speex fuaim Speex son Speex שמע של Speex @@ -17463,7 +18067,7 @@ àudio Speex Plik dźwiękowy Speex áudio Speex - Áudio Speex + Áudio Speex Audio Speex Аудио Speex Zvuk Speex @@ -17474,30 +18078,32 @@ Speex sesi звук Speex Âm thanh Speex - Speex 音频 - Speex 音訊 + Speex 音频 + Speex 音訊 - + Ogg Theora video + Ogg Theora-video Ogg Theora مرئي Videu n'Ogg Theora - Videa Ogg Theora + Videa Ogg Theora Видео — Ogg Theora vídeo Ogg Theora video Ogg Theora Ogg Theora-video Ogg-Theora-Video Βίντεο Ogg Theora - Ogg Theora video + Ogg Theora video vídeo Ogg Theora Ogg Theora bideoa Ogg Theora -video Ogg Theora video vidéo Ogg Theora + video Ogg Theora físeán Ogg Theora vídeo Ogg Theora שמע Ogg Theora @@ -17518,7 +18124,7 @@ vidèo Ogg Theora Plik wideo Ogg Theora vídeo Ogg Theora - Vídeo Ogg Theora + Vídeo Ogg Theora Video Ogg Theora Видео Ogg Theora Video Ogg Theora @@ -17529,35 +18135,37 @@ Ogg Theora video відеокліп ogg Theora Ảnh động Theora Ogg - Ogg Theora 视频 - Ogg Theora 視訊 + Ogg Theora 视频 + Ogg Theora 視訊 - - + + OGM video + OGM-video OGM مرئي Videu n'OGM - Videa OGM + Videa OGM Видео — OGM vídeo OGM video OGM OGM-video OGM-Video Βίντεο OGM - OGM video + OGM video OGM-video vídeo OGM OGM bideoa OGM-video OGM video vidéo OGM + video OGM físeán OGM vídeo OGM וידאו OGM @@ -17578,7 +18186,7 @@ vidèo OGM Plik wideo OGM vídeo OGM - Vídeo OGM + Vídeo OGM Video OGM Видео OGM Video OGM @@ -17589,43 +18197,45 @@ OGM video відеокліп OGM Ảnh động OGM - OGM 视频 - OGM 視訊 + OGM 视频 + OGM 視訊 - - + + - + OLE2 compound document storage تخزين مجمع مستند OLE2 Almacenamientu de documentos compuestu por OLE2 - Schovišča dla kampanentaŭ dakumentu OLE2 + Schovišča dla kampanentaŭ dakumentu OLE2 Съставен документ-хранилище — OLE2 emmagatzematge de documents compostos OLE2 úložiště složeného dokumentu OLE2 OLE2-sammensat dokumentlager OLE2-Verbunddokumentenspeicher Αρχείο συμπαγούς αποθήκευσης εγγράφων OLE2 - OLE2 compound document storage + OLE2 compound document storage OLE2-deponejo de parentezaj dokumentoj almacenamiento de documentos compuestos OLE2 OLE2 konposatutako dokumentu-bilduma OLE2-yhdisteasiakirjatallenne OLE2 samansett skjalagoymsla document de stockage composé OLE2 + memorizazion document compost OLE2 stóras cáipéisí comhshuite OLE2 almacenamento de documento composto OLE2 אחסון מסמך משותף OLE2 OLE2 pohrana složenog dokumenta OLE2 összetett dokumentumtároló Magazin de documentos composite OLE2 - penyimpan dokumen kompon OLE2 + Penyimpan dokumen kompon OLE2 Memorizzazione documento composto OLE2 OLE2 複合ドキュメントストレージ OLE2 құрама құжаттар қоймасы @@ -17639,7 +18249,7 @@ document d'emmagazinatge compausat OLE2 Magazyn dokumentu złożonego OLE2 armazenamento de documento composto OLE2 - Armazenamento de documento composto OLE2 + Armazenamento de documento composto OLE2 Document de stocare compus OLE2 Хранилище составных документов OLE2 Úložisko zloženého dokumentu OLE2 @@ -17650,27 +18260,30 @@ OLE2 bileşik belge depolama сховище складних документів OLE2 Kho lưu tài liệu ghép OLE2 - OLE2 组合文档存储 - OLE2 複合文件儲存 + OLE2 组合文档存储 + OLE2 複合文件儲存 - - + + Microsoft Publisher document + Microsoft Publisher-dokument Documentu de Microsoft Publisher + Документ — Microsoft Publisher document de Microsoft Publisher dokument Microsoft Publisher Microsoft Publisher-dokument Microsoft-Publisher-Dokument Έγγραφο Microsoft Publisher - Microsoft Publisher document + Microsoft Publisher document documento de Microsoft Publisher Microsoft Publisher dokumentua Microsoft Publisher -asiakirja document Microsoft Publisher + document Microsoft Publisher cáipéis Microsoft Publisher Documento de Microsoft Publisher מסמך Microsoft Publisher @@ -17684,7 +18297,7 @@ document Microsoft Publisher Dokument Microsoft Publisher documento Microsoft Publisher - Documento do Microsoft Publisher + Documento do Microsoft Publisher Документ Microsoft Publisher Dokument Microsoft Publisher Dokument Microsoft Publisher @@ -17692,27 +18305,29 @@ Microsoft Publisher-dokument Microsoft Publisher belgesi документ Microsoft Publisher - Microsoft Publisher 文档 - Microsoft Publisher 文件 + Microsoft Publisher 文档 + 微軟 Publisher 文件 Windows Installer package + Windows-installeerpakket حزمة مثبّت ويندوز - Pakunak Windows Installer + Pakunak Windows Installer Пакет — инсталация за Windows paquet de Windows Installer balíček Windows Installer - Windows Installer-pakke + Windows installationsprogram-pakke Windows-Installationspaket Πακέτο Windows Installer - Windows Installer package + Windows Installer package paquete de instalación de Windows Windows-eko pakete instalatzailea Windows-asennuspaketti Windows innleggingarpakki paquet d'installation Windows + pachet Windows Installer pacáiste Windows Installer paquete de instalación de Windows חבילה של Windows Installer @@ -17731,7 +18346,7 @@ paquet d'installacion Windows Pakiet instalatora Windows pacote de instalação Windows - Pacote do Windows Installer + Pacote do Windows Installer Pachet instalator Windows Пакет Windows Installer Balík Windows Installer @@ -17742,28 +18357,30 @@ Windows Installer paketi пакунок Windows Installer Gói cài đặt Windows - Windows 程序安装包 - Windows Installer 軟體包 + Windows 程序安装包 + Windows Installer 軟體包 GNU Oleo spreadsheet + GNU Oleo-sigblad جدول جنو Oleo - Raźlikovy arkuš GNU Oleo + Raźlikovy arkuš GNU Oleo Таблица — GNU Oleo full de càlcul de GNU Oleo sešit GNU Oleo GNU Oleo-regneark GNU-Oleo-Tabelle Λογιστικό φύλλο GNU Oleo - GNU Oleo spreadsheet + GNU Oleo spreadsheet Kalkultabelo de GNU Oleo hoja de cálculo de GNU Oleo GNU Oleo kalkulu-orria GNU Oleo -taulukko GNU Oleo rokniark feuille de calcul GNU Oleo + sfuei di calcul GNU Oleo scarbhileog GNU Oleo folla de cálculo de Oleo GNU גליון נתונים של GNU Oleo @@ -17785,7 +18402,7 @@ fuèlh de calcul GNU Oleo Arkusz GNU Oleo folha de cálculo GNU Oleo - Planilha do GNU Oleo + Planilha do GNU Oleo Foaie de calcul GNU Oleo Электронная таблица GNU Oleo Zošit GNU Oleo @@ -17793,34 +18410,36 @@ Fletë llogaritje GNU Oleo ГНУ Олео табела GNU Oleo-kalkylblad - GNU Oleo çalışma sayfası + GNU Oleo hesap çizelgesi ел. таблиця GNU Oleo Bảng tính Oleo của GNU - GNU Oleo 电子表格 - GNU Oleo 試算表 + GNU Oleo 电子表格 + GNU Oleo 試算表 - + PAK archive + PAK-argief أرشيف PAK - Archiŭ PAK + Archiŭ PAK Архив — PAK arxiu PAK archiv PAK PAK-arkiv PAK-Archiv Συμπιεσμένο αρχείο PAK - PAK archive + PAK archive PAK-arkivo archivador PAK PAK artxiboa PAK-arkisto PAK skjalasavn archive PAK + archivi PAK cartlann PAK arquivo PAK ארכיון PAK @@ -17841,7 +18460,7 @@ archiu PAK Archiwum PAK arquivo PAK - Pacote PAK + Pacote PAK Arhivă PAK Архив PAK Archív PAK @@ -17852,19 +18471,20 @@ PAK arşivi архів PAK Kho nén PAK - PAK 归档文件 - PAK 封存檔 + PAK 归档文件 + PAK 封存檔 - + Palm OS database + Palm OS-databasis قاعدة بيانات Palm OS Palm OS mə'lumat bazası - Baza źviestak Palm OS + Baza źviestak Palm OS База от данни — Palm OS base de dades Palm OS databáze Palm OS @@ -17872,13 +18492,14 @@ Palm OS-database Palm-OS-Datenbank Βάση δεδομένων Palm OS - Palm OS database + Palm OS database datumbazo de Palm OS base de datos de Palm OS Palm OS datu-basea Palm OS -tietokanta Palm OS dátustovnur base de données Palm OS + base di dâts Palm OS bunachar sonraí Palm OS base de datos de Palm OS מסד נתונים של Palm OS @@ -17899,7 +18520,7 @@ banca de donadas Palm OS Baza danych Palm OS base de dados Palm OS - Banco de dados do Palm OS + Banco de dados do Palm OS Bază de date Palm OS База данных Palm OS Databáza Palm OS @@ -17907,11 +18528,11 @@ Bankë me të dhëna Palm OS база података Палм ОС-а Palm OS-databas - Palm OS veritabanı + Palm OS veri tabanı база даних Palm OS Cơ sở dữ liệu PalmOS - Palm OS 数据库 - Palm OS 資料庫 + Palm OS 数据库 + Palm OS 資料庫 @@ -17920,20 +18541,22 @@ Parchive archive + Parchive-argief أرشيف Parchive - Archiŭ Parchive + Archiŭ Parchive Архив — parchive arxiu Parchive archiv Parchive Parchive-arkiv Parchive-Archiv Συμπιεσμένο αρχείο Parchive - Parchive archive + Parchive archive archivador Parchive Parchive artxiboa Parchive-arkisto Parchive skjalasavn archive Parchive + archivi Parchive cartlann Parchive arquivo Parchive ארכיון של Parchive @@ -17953,7 +18576,7 @@ archiu Parchive Archiwum parchive arquivo Parchive - Pacote Parchive + Pacote Parchive Arhivă Parchive Архив Parchive Archív Parchive @@ -17964,34 +18587,36 @@ Parchive arşivi архів Parchive Kho nén Parchive - Parchive 归档文件 - Parchive 封存檔 + Parchive 归档文件 + Parchive 封存檔 Parchive Parity Volume Set Archive - + PEF executable + PEF-uitvoerbaar PEF تنفيذي - Vykonvalny fajł PEF + Vykonvalny fajł PEF Изпълним файл — PEF executable PEF spustitelný soubor PEF PEF-kørbar PEF-Programm Εκτελέσιμο PEF - PEF executable + PEF executable PEF-plenumebla ejecutable PEF PEF exekutagarria PEF-ohjelma PEF inningarfør exécutable PEF + eseguibil PEF comhad inrite PEF Executábel PEF קובץ הרצה PEF @@ -18012,7 +18637,7 @@ executable PEF Program PEF executável PEF - Executável PEF + Executável PEF Executabil PEF Исполняемый файл PEF Spustiteľný súbor PEF @@ -18023,31 +18648,33 @@ PEF çalıştırılabilir виконуваний файл PEF Tập tin thực hiện được PEF - PEF 可执行文件 - PEF 可執行檔 + PEF 可执行文件 + PEF 可執行檔 - + Perl script + Perl-skrip سكربت بيرل - Skrypt Perl + Skrypt Perl Скрипт — Perl script Perl skript v Perlu Sgript Perl - Perlprogram + Perl-program Perl-Skript Δέσμη ενεργειών Perl - Perl script + Perl script Perl-skripto secuencia de órdenes en Perl Perl script-a Perl-komentotiedosto Perl boðrøð script Perl + script Perl script Perl Script de Perl תסריט מעטפת של Perl @@ -18068,7 +18695,7 @@ escript Perl Skrypt Perl script Perl - Script Perl + Script Perl Script Perl Сценарий Perl Skript jazyka Perl @@ -18079,40 +18706,41 @@ Perl betiği скрипт на Perl Văn lệnh Perl - Perl 脚本 - Perl 指令稿 + Perl 脚本 + Perl 指令稿 - - - - - - - - + + + + + - - - + + + + + + - - - + + + - - + + PHP script + PHP-skrip سكربت PHP PHP skripti - Skrypt PHP + Skrypt PHP Скрипт — PHP script PHP skript PHP @@ -18120,13 +18748,14 @@ PHP-program PHP-Skript Δέσμη ενεργειών PHP - PHP script + PHP script PHP-skripto secuencia de órdenes en PHP PHP script-a PHP-komentotiedosto PHP boðrøð script PHP + script PHP script PHP Script de PHP תסריט מעטפת של PHP @@ -18147,7 +18776,7 @@ escript PHP Skrypt PHP script PHP - Script PHP + Script PHP Script PHP Сценарий PHP Skript PHP @@ -18158,12 +18787,12 @@ PHP betiği скрипт PHP Văn lệnh PHP - PHP 脚本 - PHP 指令稿 + PHP 脚本 + PHP 指令稿 - + @@ -18173,19 +18802,21 @@ PKCS#7 certificate bundle + PKCS#7-sertifikaatbundel رزمة الشهادة PKCS#7 - Сбор със сертификати — PKCS#7 + Пакет със сертификати — PKCS#7 conjunt de certificats PKCS#7 svazek certifikátů PKCS#7 PKCS#7-certifikatbundt PKCS#7-Zertifikatspaket Πακέτο ψηφιακών πιστοποιητικών PKCS#7 - PKCS#7 certificate bundle + PKCS#7 certificate bundle lote de certificados PCKS#7 PKCS#7 zertifikazio sorta PKCS#7-varmennenippu PKCS#7 váttanar bundi lot de certificats PKCS#7 + côl di certificâts PKCS#7 burla teastas PKCS#7 paquete de certificado PKCS#7 בקשה מוסמכת PKCS#7 @@ -18203,7 +18834,7 @@ lòt de certificats PKCS#7 Pakiet certyfikatu PKCS#7 pacote de certificação PKCS#7 - Pacote de certificados PKCS#7 + Pacote de certificados PKCS#7 Pachet certificat PKCS#7 Пакет сертификата PKCS#7 Zväzok certifikátov PKCS#7 @@ -18213,8 +18844,8 @@ PKCS#7 sertifika paketi комплект сертифікатів PKCS#7 Bó chứng nhận PKCS#7 - PKCS#7 证书束 - PKCS#7 憑證綁包 + PKCS#7 证书束 + PKCS#7 憑證綁包 PKCS Public-Key Cryptography Standards @@ -18222,21 +18853,23 @@ PKCS#12 certificate bundle + PKCS#12-sertifikaatbundel رزمة الشهادة PKCS#12 - Viazka sertyfikataŭ PKCS#12 - Сбор със сертификати — PKCS#12 + Viazka sertyfikataŭ PKCS#12 + Пакет със сертификати — PKCS#12 conjunt de certificats PKCS#12 svazek certifikátů PKCS#12 PKCS#12-certifikatbundt PKCS#12-Zertifikatspaket Πακέτο ψηφιακών πιστοποιητικών PKCS#12 - PKCS#12 certificate bundle + PKCS#12 certificate bundle ligaĵo de PKCS#12-atestiloj lote de certificados PCKS#12 PKCS#12 zertifikazio sorta PKCS#12-varmennenippu PKCS#12 váttanar bundi lot de certificats PKCS#12 + côl di certificâts PKCS#12 burla teastas PKCS#12 paquete de certificado PKCS#12 בקשה מוסמכת PKCS#12 @@ -18257,7 +18890,7 @@ lòt de certificats PKCS#12 Pakiet certyfikatu PKCS#12 pacote de certificação PKCS#12 - Pacote de certificados PKCS#12 + Pacote de certificados PKCS#12 Certificat împachetat PKCS#12 Пакет сертификата PKCS#12 Zväzok certifikátov PKCS#12 @@ -18268,8 +18901,8 @@ PKCS#12 sertifika paketi комплект сертифікатів PKCS#12 Bó chứng nhận PKCS#12 - PKCS#12 证书束 - PKCS#12 憑證檔綁包 + PKCS#12 证书束 + PKCS#12 憑證綁包 PKCS Public-Key Cryptography Standards @@ -18278,20 +18911,22 @@ PlanPerfect spreadsheet + PlanPerfect-sigblad جدول PlanPerfect - Raźlikovy arkuš PlanPerfect + Raźlikovy arkuš PlanPerfect Таблица — PlanPerfect full de càlcul de PlanPerfect sešit PlanPerfect PlanPerfect-regneark PlanPerfect-Tabelle Φύλλο εργασίας PlanPerfect - PlanPerfect spreadsheet + PlanPerfect spreadsheet hoja de cálculo de PlanPerfect PlanPerfect kalkulu-orria PlanPerfect-taulukko PlanPerfect rokniark feuille de calcul PlanPerfect + sfuei di calcul PlanPerfect scarbhileog PlanPerfect folla de cálculo de PlanPerfect גליון נתונים של PlanPerfect @@ -18311,7 +18946,7 @@ fuèlh de calcul PlanPerfect Arkusz PlanPerfect folha de cálculo PlanPerfect - Planilha do PlanPerfect + Planilha do PlanPerfect Foaie de calcul PlanPerfect Электронная таблица PlanPerfect Zošit PlanPerfect @@ -18319,16 +18954,17 @@ Fletë llogaritjesh PlanPerfect табела План Перфекта PlanPerfect-kalkylblad - PlanPerfect çalışma sayfası + PlanPerfect hesap çizelgesi ел. таблиця PlanPerfect Bảng tính PlanPerfect - PlanPerfect 电子表格 - PlanPerfect 試算表 + PlanPerfect 电子表格 + PlanPerfect 試算表 Pocket Word document + Pocket Word-dokument مستند Pocket Word Documentu de PocketWord Документ — Pocket Word @@ -18337,12 +18973,13 @@ Pocket Word-dokument Pocket-Word-Dokument Έγγραφο Pocket Word - Pocket Word document + Pocket Word document documento de Pocket Word Pocket Word dokumentua Pocket Word -asiakirja Pocket Word skjal document Pocket Word + document Pocket Word cáipéis Pocket Word documento de Pocket Word מסמך של Pocket Word @@ -18360,7 +18997,7 @@ document Pocket Word Dokument Pocket Word documento Pocket Word - Documento do Pocket Word + Documento do Pocket Word Document Pocket Word Документ Pocket Word Dokument Pocket Word @@ -18370,32 +19007,34 @@ Pocket Word belgesi документ Pocket Word Tài liệu Pocket Word - Pocket Word 文档 - Pocket Word 文件 + Pocket Word 文档 + Pocket Word 文件 - + profiler results + profieldata نتائج المحلل profiler nəticələri - vyniki profilera + vyniki profilera Резултати от анализатора - resultats de profiler + resultats del perfilador výsledky profileru canlyniadau proffeilio profileringsresultater Profiler-Ergebnisse Αποτελέσματα μετρήσεων για την εκτέλεση προγράμματος - profiler results + profiler results resultoj de profililo resultados del perfilador profiler-aren emaitzak profilointitulokset résultats de profileur + risultâts profiladôr torthaí próifíleora resultados do perfilador תוצאות מאבחן @@ -18416,7 +19055,7 @@ resultats de perfilador Wyniki profilowania resultados de análise de perfil - Resultados do profiler + Resultados do profiler rezultate profiler Результаты профилирования Výsledky profilera @@ -18424,33 +19063,35 @@ Rezultate të profiluesit резултати профилатора profilerarresultat - profil sonuçları + profiler sonuçları результати профілювання kết quả nét hiện trạng - 探查器结果 - 硬體資訊產生器成果 + 探查器结果 + 硬體資訊產生器成果 Pathetic Writer document + Pathetic Writer-dokument مستند Pathetic Writer Documentu de Pathetic Writer - Dakument Pathetic Writer + Dakument Pathetic Writer Документ — Pathetic Writer document de Pathetic Writer dokument Pathetic Writer Pathetic Writer-dokument Pathetic-Writer-Dokument Έγγραφο Pathetic Writer - Pathetic Writer document + Pathetic Writer document dokumento de Pathetic Writer documento de Pathetic Writer Pathetic Writer dokumentua Pathetic Writer -asiakirja Pathetic Writer skjal document Pathetic Writer + document Pathetic Writer cáipéis Pathetic Writer documento de Pathetic Writer מסמך של Pathetic Writer @@ -18471,7 +19112,7 @@ document Pathetic Writer Dokument Pathetic Writer documento do Pathetic Writer - Documento do Pathetic Writer + Documento do Pathetic Writer Document Pathetic Writer Документ Pathetic Writer Dokument Pathetic Writer @@ -18482,30 +19123,32 @@ Pathetic Writer belgesi документ Pathetic Writer Tài liệu Pathetic Writer - Pathetic Writer 文档 - Pathetic Writer 文件 + Pathetic Writer 文档 + Pathetic Writer 文件 Python bytecode + Python binêre kode Python bytecode Python bayt kodu - Bajtavy kod Python + Bajtavy kod Python Байт код — Python bytecode de Python bajtový kód Python Côd beit Python - Pythonbytekode + Python-bytekode Python-Bytecode Συμβολοκώδικας Python - Python bytecode + Python bytecode Python-bajtkodo bytecode de Python Python byte-kodea Python-tavukoodi Python býtkota bytecode Python + bytecode di Python beartchód Python bytecode de Python Bytecode של Python @@ -18526,7 +19169,7 @@ bytecode Python Kod bajtowy Python código binário Python - Código compilado Python + Código compilado Python Bytecode Python Байт-код Python Bajtový kód Python @@ -18537,27 +19180,30 @@ Python bayt kodu байт-код Python Mã byte Python - Python 字节码 - Python 位元組碼 + Python 字节码 + Python 位元組碼 - + QtiPlot document + QtiPlot-dokument Documentu de QtiPlot + Документ — QtiPlot document QtiPlot dokument GtiPlot QtiPlot-dokument QtiPlot-Dokument Έγγραφο QtiPlot - QtiPlot document + QtiPlot document documento de QtiPlot QtiPlot dokumentua QtiPlot-asiakirja document QtiPlot + document QtiPlot cáipéis QtiPlot Documento de QtiPilot מסמך QtiPlot @@ -18573,7 +19219,7 @@ document QtiPlot Dokument QtiPlot documento QtiPlot - Documento do QtiPlot + Documento do QtiPlot Документ QtiPlot Dokument QtiPlot Dokument QtiPlot @@ -18581,8 +19227,8 @@ QtiPlot-dokument QtiPlot belgesi документ QtiPlot - QtiPlot 文档 - QtiPlot 文件 + QtiPlot 文档 + QtiPlot 文件 @@ -18593,21 +19239,23 @@ Quattro Pro spreadsheet + Quattro Pro-sigblad جدول Quattro Pro - Raźlikovy arkuš Quattro Pro + Raźlikovy arkuš Quattro Pro Таблица — Quattro Pro full de càlcul de Quattro Pro sešit Quattro Pro Quattro Pro-regneark Quattro-Pro-Tabelle Λογιστικό φύλλο Quattro Pro - Quattro Pro spreadsheet + Quattro Pro spreadsheet sterntabelo de Quattro Pro hoja de cálculo de Quattro Pro Quattro Pro kalkulu-orria Quattro Pro -taulukko Quattro Pro rokniark feuille de calcul Quattro Pro + sfuei di calcul Quattro Pro scarbhileog Quattro Pro folla de cálculo Quattro Pro גליון נתונים של Quattro Pro @@ -18628,7 +19276,7 @@ fuèlh de calcul Quattro Pro Arkusz Quattro Pro folha de cálculo Quattro Pro - Planilha do Quattro Pro + Planilha do Quattro Pro Foaie de calcul Quattro Pro Электронная таблица Quattro Pro Zošit Quattro Pro @@ -18636,70 +19284,48 @@ Fletë llogaritjesh Quattro Pro Кватро Про табела Quattro Pro-kalkylblad - Quattro Pro çalışma sayfası + Quattro Pro hesap çizelgesi ел. таблиця Quattro Pro Bảng tính Quattro Pro - Quattro Pro 电子表格 - Quattro Pro 試算表 + Quattro Pro 电子表格 + Quattro Pro 試算表 - QuickTime metalink playlist - قائمة تشغيل QuickTime metalink - śpis metaspasyłak na pieśni QuickTime + QuickTime playlist Списък за изпълнение — QuickTime - llista de reproducció de metaenllaços QuickTime - seznam k přehrání metalink QuickTime - QuickTime metalink-afspilningsliste - QuickTime-Metalink-Wiedergabeliste - Λίστα αναπαραγωγής metalinks QuickTime - QuickTime metalink playlist - lista de reproducción de metaenlaces QuickTime - QuickTime meta-esteken erreprodukzio-zerrenda - QuickTime metalink -soittolista - QuickTime metaleinkju avspælingarlisti - liste de lecture metalink QuickTime - seinmliosta meiteanasc QuickTime - lista de reprodución de metaligazóns QuickTime - רשימת השמעה מקושרת של QuickTime - QuickTime meta poveznica popisa izvođenja - QuickTime metalink lejátszólista - Lista de selection Metalink QuickTime - Senarai berkas taut meta QuickTime - Playlist metalink QuickTime - QuickTime メタリンク再生リスト - QuickTime метасілтемелер ойнау тізімі - 퀵타임 메타링크 재생 목록 - QuickTime metanuorodos grojaraštis - QuickTime metasaites repertuārs - QuickTime metalink-spilleliste - QuickTime metalink-afspeellijst - QuickTime metalink-speleliste - lista de lectura metalink QuickTime - Lista odtwarzania metaodnośników QuickTime - lista de reprodução QuickTime metalink - Lista de reprodução metalink do QuickTime - Listă cu metalegături QuickTime - Список воспроизведения мета-ссылок QuickTime - Zoznam skladieb metalink QuickTime - Seznam predvajanja QuickTime - Listë titujsh metalink QuickTime - списак нумера мета везе Квик Тајма - QuickTime-metalänkspellista - QuickTime metalink çalma listesi - список відтворення QuickTime metalink - Danh mục nhạc siêu liên kết Quicktime - QuickTime Metalink 播放列表 - QuickTime metalink 播放清單 + llista de reproducció QuickTime + QuickTime-afspilningsliste + QuickTime-Wiedergabeliste + QuickTime playlist + lista de reproducción de QuickTime + QuickTime erreprodukzio-zerrenda + QuickTime-soittolista + liste de lecture QuickTime + QuickTime popis izvođenja + QuickTime lejátszólista + Daftar putar QuickTime + Playlist QuickTime + QuickTime ойнау тізімі + 퀵타임 재생 목록 + Lista odtwarzania QuickTime + Lista de reprodução do QuickTime + Список воспроизведения QuickTime + Zoznam skladieb QuickTime + QuickTime-spellista + QuickTime çalma listesi + список відтворення QuickTime + QuickTime 播放列表 + QuickTime 播放清單 - + @@ -18709,10 +19335,11 @@ Quicken document + Quicken-dokument مستند Quicken Documentu de Quicken Quicken sənədi - Dakument Quicken + Dakument Quicken Документ — Quicken document Quicken dokument Quicken @@ -18720,13 +19347,14 @@ Quickendokument Quicken-Dokument Έγγραφο Quicken - Quicken document + Quicken document Quicken-dokumento documento de Quicken Quicken dokumentua Quicken-asiakirja Quicken skjal document Quicken + document Quicken cáipéis Quicken documento de Quicken מסמך של Quicken @@ -18747,7 +19375,7 @@ document Quicken Dokument Quicken documento Quicken - Documento do Quicken + Documento do Quicken Document Quicken Документ Quicken Dokument Quicken @@ -18758,15 +19386,16 @@ Quicken belgesi документ Quicken Tài liệu Quicken - Quicken 文档 - Quicken 文件 + Quicken 文档 + Quicken 文件 RAR archive + RAR-argief أرشيف RAR - Archiŭ RAR + Archiŭ RAR Архив — RAR arxiu RAR archiv RAR @@ -18774,13 +19403,14 @@ RAR-arkiv RAR-Archiv Συμπιεσμένο αρχείο RAR - RAR archive + RAR archive RAR-arkivo archivador RAR RAR artxiboa RAR-arkisto RAR skjalasavn archive RAR + archivi RAR cartlann RAR ficheiro RAR ארכיון RAR @@ -18801,7 +19431,7 @@ archiu RAR Archiwum RAR arquivo RAR - Pacote RAR + Pacote RAR Arhivă RAR Архив RAR Archív RAR @@ -18812,35 +19442,37 @@ RAR arşivi архів RAR Kho nén RAR - RAR 归档文件 - RAR 封存檔 + RAR 归档文件 + RAR 封存檔 RAR Roshal ARchive - + DAR archive + DAR-argief أرشيف DAR - Archiŭ DAR + Archiŭ DAR Архив — DAR arxiu DAR archiv DAR DAR-arkiv DAR-Archiv Συμπιεσμένο αρχείο DAR - DAR archive + DAR archive DAR-arkivo archivador DAR DAR artxiboa DAR-arkisto DAR skjalasavn archive DAR + archivi DAR cartlann DAR arquivo DAR ארכיון DAR @@ -18861,7 +19493,7 @@ archiu DAR Archiwum DAR arquivo DAR - Pacote DAR + Pacote DAR Arhivă DAR Архив DAR Archív DAR @@ -18872,31 +19504,33 @@ DAR arşivi архів DAR Kho nén DAR - DAR 归档文件 - DAR 封存檔 + DAR 归档文件 + DAR 封存檔 - + Alzip archive + Alzip-argief أرشيف Alzip - Archiŭ Alzip + Archiŭ Alzip Архив — alzip arxiu Alzip archiv Alzip - Alziparkiv + Alzip-arkiv Alzip-Archiv Συμπιεσμένο αρχείο Alzip - Alzip archive + Alzip archive Alzip-arkivo archivador Alzip Alzip artxiboa Alzip-arkisto Alsip skjalasavn archive alzip + archivi Alzip cartlann Alzip arquivo Alzip ארכיון Alzip @@ -18917,7 +19551,7 @@ archiu alzip Archiwum alzip arquivo Alzip - Pacote Alzip + Pacote Alzip Arhivă Alzip Архив ALZIP Archív Alzip @@ -18928,31 +19562,32 @@ Alzip arşivi архів Alzip Kho nén Alzip - Alzip 归档文件 - Alzip 封存檔 + Alzip 归档文件 + Alzip 封存檔 - + rejected patch رقعة مرفوضة - niepryniaty patch + niepryniaty patch Отхвърлен файл с кръпка pedaç rebutjat odmítnutá záplata - afvist tekstlap + afvist rettelse Abgelehnter Patch Διόρθωση που απορρίφθηκε - rejected patch + rejected patch reĵeta flikaĵo parche rechazado baztertutako adabakia hylättyjen muutosten tiedosto vrakað rætting correctif rejeté + blec refudât paiste diúltaithe parche rexeitado טלאי שנדחה @@ -18973,7 +19608,7 @@ correctiu regetat Odrzucona łata patch rejeitado - Arquivo de patch rejeitado + Arquivo de patch rejeitado petec respsins Отклонённый патч Odmietnutá záplata @@ -18984,8 +19619,8 @@ reddedilmiş yama відхилена латка đắp vá bị từ chối - 拒绝的补丁 - 回絕的修補 + 拒绝的补丁 + 回絕的修補 @@ -18993,21 +19628,23 @@ RPM package + RPM-pakket حزمة RPM - Pakunak RPM + Pakunak RPM Пакет — RPM paquet RPM balíček RPM RPM-pakke RPM-Paket Πακέτο RPM - RPM package + RPM package RPM-pakaĵo paquete RPM RPM paketea RPM-paketti RPM pakki paquet RPM + pachet RPM pacáiste RPM paquete RFM חבילת RPM @@ -19028,7 +19665,7 @@ paquet RPM Pakiet RPM pacote RPM - Pacote RPM + Pacote RPM Pachet RPM Пакет RPM Balík RPM @@ -19039,27 +19676,30 @@ RPM paketi пакунок RPM Gói RPM - RPM 软件包 - RPM 軟體包 + RPM 软件包 + RPM 軟體包 - + Source RPM package + Bron-RPM-pakket + Пакет — RPM с изходен код paquet RPM de codi font zdrojový balíček RPM Kilde RPM-pakke Quell-RPM-Paket Πακέτο πηγής RPM - Source RPM package + Source RPM package paquete de fuente RPM Iturburu RPM paketea RPM-lähdepaketti paquet source RPM + pachet sorzint RPM pacáiste foinse RPM Paquete RPM de fontes חבילת מקור RPM @@ -19075,7 +19715,7 @@ paquet font RPM Źródłowy pakiet RPM pacote origem RPM - Pacote fonte RPM + Pacote fonte RPM Пакет RPM с исходным кодом Zdrojový balík RPM Paket izvorne kode RPM @@ -19083,8 +19723,8 @@ Käll-RPM-paket Kaynak RPM paketi пакунок RPM з початковим кодом - 源码 RPM 软件包 - 來源 RPM 軟體包 + 源码 RPM 软件包 + 來源 RPM 軟體包 @@ -19092,21 +19732,23 @@ Ruby script + Ruby-skrip سكربت روبي - Skrypt Ruby + Skrypt Ruby Скрипт — Ruby script Ruby skript Ruby - Rubyprogram + Ruby-program Ruby-Skript Δέσμη ενεργειών Ruby - Ruby script + Ruby script Ruby-skripto secuencia de órdenes en Ruby Ruby script-a Ruby-komentotiedosto Ruby boðrøð script Ruby + script Ruby script Ruby Script de Ruby תסריט Ruby @@ -19127,7 +19769,7 @@ escript Ruby Skrypt Ruby script Ruby - Script Ruby + Script Ruby Script Ruby Сценарий Ruby Skript Ruby @@ -19138,34 +19780,36 @@ Ruby betiği скрипт Ruby Văn lệnh Ruby - Ruby 脚本 - Ruby 指令稿 + Ruby 脚本 + Ruby 指令稿 - - + + Markaby script + Markaby-skrip سكربت Markaby - Skrypt Markaby + Skrypt Markaby Скрипт — Markaby script Markaby skript Markaby - Markabyprogram + Markaby-program Markaby-Skript Δέσμη ενεργειών Markaby - Markaby script + Markaby script Markaby-skripto secuencia de órdenes en Markaby Markaby script-a Markaby-komentotiedosto Markaby boðrøð script Markaby + script Markaby script Markaby Script de Markaby תסריט Markby @@ -19186,7 +19830,7 @@ escript Markaby Skrypt Markaby script Markaby - Script Markaby + Script Markaby Script Markaby Сценарий Markaby Skript Markaby @@ -19197,24 +19841,27 @@ Markaby betiği скрипт Markaby Văn lệnh Markaby - RMarkaby 脚本 - Markaby 指令稿 + RMarkaby 脚本 + Markaby 指令稿 Rust source code + Rust-bronkode + Изходен код — Rust codi font en Rust zdrojový kód v jazyce Rust Rust-kildekode Rust-Quelltext Πηγαίος κώδικας Rust - Rust source code + Rust source code código fuente en Rust Rust iturburu-kodea Rust-lähdekoodi code source Rust + codiç sorzint Rust cód foinseach Rust קוד מקור של Rust Rust izvorni kôd @@ -19227,35 +19874,38 @@ còde font Rust Kod źródłowy Rust código origem Rust - Código-fonte Rust + Código-fonte Rust Исходный код Rust Zdrojový kód Rust + Izvorna koda Rust Раст изворни ко̂д Rust-källkod Rust kaynak kodu вихідний код мовою Rust - Rust 源代码 - Rust 源碼 + Rust 源代码 + Rust 源碼 SC/Xspread spreadsheet + SC/Xspread-sigblad جدول SC/Xspread - Raźlikovy arkuš SC/Xspread + Raźlikovy arkuš SC/Xspread Таблица — SC/Xspread full de càlcul de SC/Xspread sešit SC/Xspread SC/Xspread-regneark SX/Xspread-Tabelle Λογιστικό φύλλο SC/Xspread - SC/Xspread spreadsheet + SC/Xspread spreadsheet SC/Xspread-kalkultabelo hoja de cálculo SC/Xspread SC/Xspread kalkulu-orria SC/Xspread-taulukko SC/Xspread rokniark feuille de calcul SC/Xspread + sfuei di calcul SC/Xspread scarbhileog SC/Xspread folla de cálculo SC/Xspread גליון נתונים של SC/Xspread @@ -19275,7 +19925,7 @@ fuèlh de calcul SC/Xspread Arkusz SC/Xspread folha de cálculo SC/Xspread - Planilha do SC/Xspread + Planilha do SC/Xspread Foaie de calcul SC/Xspread Электронная таблица SC/Xspread Zošit SC/Xspread @@ -19283,35 +19933,37 @@ Fletë llogaritjesh SC/Xspread табела СЦ/Икс-табеле SC/Xspread-kalkylblad - SC/Xspread çalışma sayfası + SC/Xspread hesap çizelgesi ел. таблиця SC/Xspread Bảng tính SC/Xspread - SC/Xspread 电子表格 - SC/Xspread 試算表 + SC/Xspread 电子表格 + SC/Xspread 試算表 - + shell archive + shell-argief أرشيف شِل qabıq arxivi - archiŭ abałonki + archiŭ abałonki Архив на обвивката arxiu de shell archiv shellu archif plisgyn - skalarkiv + skal-arkiv Shell-Archiv Αρχείο κέλυφους - shell archive + shell archive ŝel-arkivo archivador shell shell artxiboa komentotulkkiarkisto skel savn archive shell + archivi shell cartlann bhlaoisce ficheiro shell ארכיון מעטפת @@ -19332,7 +19984,7 @@ archiu shell Archiwum powłoki arquivo de terminal - Pacote shell + Pacote shell arhivă shell Архив shell Archív shellu @@ -19343,27 +19995,29 @@ kabuk arşivi архів оболонки kho trình bao - shell 归档文件 - shell 封存檔 + shell 归档文件 + shell 封存檔 libtool shared library + libtool- gedeelde biblioteek مكتبة libtool المشتركة - supolnaja biblijateka libtool + supolnaja biblijateka libtool Споделена библиотека — libtool biblioteca compartida libtool sdílená knihovna libtool libtool delt bibliotek Gemeinsame libtool-Bibliothek Κοινόχρηστη βιβλιοθήκη libtool - libtool shared library + libtool shared library biblioteca compartida de libtool libtool partekatutako liburutegia jaettu libtool-kirjasto libtool felagssavn bibliothèque partagée libtool + librarie condividude libtool comhleabharlann libtool biblioteca compartida de libtool ספרייה משותפת של libtool @@ -19383,7 +20037,7 @@ bibliotèca partejada libtool Biblioteka współdzielona libtool biblioteca partilhada libtool - Biblioteca compartilhada libtool + Biblioteca compartilhada libtool bibliotecă partajată libtool Разделяемая библиотека libtool Zdieľaná knižnica libtool @@ -19394,17 +20048,18 @@ libtool paylaşımlı kitaplığı спільна бібліотека libtool thư viện dùng chung libtool - libtool 共享库 - libtool 共享函式庫 + libtool 共享库 + libtool 共享函式庫 shared library + gedeelde biblioteek مكتبة مشتركة bölüşülmüş kitabxana - supolnaja biblijateka + supolnaja biblijateka Споделена библиотека biblioteca compartida sdílená knihovna @@ -19412,13 +20067,14 @@ delt bibliotek Gemeinsame Bibliothek Αρχείο κοινόχρηστης βιβλιοθήκης - shared library + shared library dinamike bindebla biblioteko biblioteca compartida partekatutako liburutegia jaettu kirjasto felagssavn bibliothèque partagée + librarie condividude comhleabharlann biblioteca compartida ספרייה משותפת @@ -19439,7 +20095,7 @@ bibliotèca partejada Biblioteka współdzielona biblioteca partilhada - Biblioteca compartilhada + Biblioteca compartilhada bibliotecă partajată Разделяемая библиотека Zdieľaná knižnica @@ -19450,45 +20106,36 @@ paylaşımlı kitaplık спільна бібліотека thư viện dùng chung - 共享库 - 共享函式庫 + 共享库 + 共享函式庫 - - - - - - - - - - - - + + - shell script + shell-skrip سكربت شِل qabıq skripti - skrypt abałonki + skrypt abałonki Скрипт на обвивката script shell skript shellu sgript plisgyn - skalprogram + skal-program Shell-Skript Δέσμη ενεργειών κελύφους - shell script + shell script ŝelskripto secuencia de órdenes en shell shell script-a komentotulkin komentotiedosto skel boðrøð script shell + script shell script bhlaoisce script de shell תסריט מעטפת @@ -19509,7 +20156,7 @@ escript shell Skrypt powłoki script de terminal - Script shell + Script shell script shell Сценарий shell Skript shellu @@ -19520,44 +20167,46 @@ kabuk betiği скрипт оболонки văn lệnh trình bao - shell 脚本 - shell 指令稿 + shell 脚本 + shell 指令稿 - - - - - - - - - - - + + + + + + + + + + + Shockwave Flash file + Shockwave Flash-lêer ملف Shockwave Flash - Fajł Shockwave Flash + Fajł Shockwave Flash Файл — Shockwave Flash fitxer Shockwave Flash soubor Shockwave Flash Shockwave Flash-fil Shockwave-Flash-Datei Αρχείο Shockwave Flash - Shockwave Flash file + Shockwave Flash file dosiero de Shockwave Flash archivo Shockwave Flash Shockwave Flash fitxategia Shockwave Flash -tiedosto Shockwave Flash fíla fichier Shockwave Flash + file Shockwave Flash comhad Shockwave Flash ficheiro sockwave Flash קובץ של Shockwave Flash @@ -19578,7 +20227,7 @@ fichièr Shockwave Flash Plik Shockwave Flash ficheiro Shockwave Flash - Arquivo Shockwave Flash + Arquivo Shockwave Flash Fișier Shockwave Flash Файл Shockwave Flash Súbor Shockwave Flash @@ -19589,36 +20238,38 @@ Shockwave Flash dosyası файл Shockwave Flash Tập tin Flash Shockwave - Shockwave Flash 文件 - Shockwave Flash 檔案 + Shockwave Flash 文件 + Shockwave Flash 檔案 - - + + - + Shorten audio + Shorten-oudio Shorten سمعي - Aŭdyjo Shorten + Aŭdyjo Shorten Аудио — Shorten àudio de Shorten zvuk Shorten - Shortenlyd + Shorten-lyd Shorten-Audio Ήχος Shorten - Shorten audio + Shorten audio Shorten-sondosiero - sonido Shorten + audio Shorten Shorten audioa Shorten-ääni Shorten ljóður audio Shorten + audio Shorten fuaim Shorten son Shorten שמע של Shorten @@ -19638,7 +20289,7 @@ àudio Shorten Plik dźwiękowy Shorten áudio Shorten - Áudio Shorten + Áudio Shorten Audio Shorten Аудио Shorten Zvuk Shorten @@ -19646,35 +20297,37 @@ Audio Shorten Шортен звук Shorten-ljud - Kısaltılmış ses + Shorten sesi звук Shorten Âm thanh Shorten - Shorten 音频 - Shorten 音訊 + Shorten 音频 + Shorten 音訊 - + Siag spreadsheet + Siag-sigblad جدول Siag - Raźlikovy arkuš Siag + Raźlikovy arkuš Siag Таблица — Siag full de càlcul Siag sešit Siag Siagregneark Siag-Tabelle Λογιστικό φύλλο Siag - Siag spreadsheet + Siag spreadsheet Siag-kalkultabelo hoja de cálculo de Siag Siag kalkulu-orria Siag-taulukko Siag rokniark feuille de calcul Siag + sfuei di calcul Siag scarbhileog Siag folla de cálculo de Siag גליון נתונים של Siag @@ -19695,7 +20348,7 @@ fuèlh de calcul Siag Arkusz Siag folha de cálculo Siag - Planilha do Siag + Planilha do Siag Foaie de calcul Siag Электронная таблица Siag Zošit Siag @@ -19703,32 +20356,34 @@ Fletë llogaritjesh Siag Сјаг табела Siag-kalkylblad - Siag çalışma sayfası + Siag hesap çizelgesi ел. таблиця Siag Bảng tính Slag - Siag 电子表格 - Siag 試算表 + Siag 电子表格 + Siag 試算表 Skencil document + Skencil-dokument مستند Skencil Documentu de Skencil - Dakument Skencil + Dakument Skencil Документ — Skencil document Skencil dokument Skencil Skencildokument Skencil-Dokument Έγγραφο Skencil - Skencil document + Skencil document Skencil-dokumento documento de Skencil Skencil dokumentua Skencil-asiakirja Skencil skjal document Skencil + document Skencil cáipéis Skencil documento Skencil מסמך Skencil @@ -19747,7 +20402,7 @@ document Skencil Dokument Skencil documento Skencil - Documento do Skencil + Documento do Skencil Document Skencil Документ Skencil Dokument Skencil @@ -19758,19 +20413,20 @@ Skencil belgesi документ Skencil Tài liệu Skencil - Skencil 文档 - Skencil 文件 + Skencil 文档 + Skencil 文件 - + Stampede package + Stampede-pakket حزمة Stampede Stampede paketi - Pakunak Stampede + Pakunak Stampede Пакет — Stampede paquet Stampede balíček Stampede @@ -19778,13 +20434,14 @@ Stampedepakke Stampede-Paket Πακέτο Stampede - Stampede package + Stampede package Stampede-pakaĵo paquete Stampede Stampede paketea Stampede-paketti Stampede pakki paquet Stampede + pachet Stampede pacáiste Stampede paquete Stampede חבילה של Stampede @@ -19805,7 +20462,7 @@ paquet Stampede Pakiet Stampede pacote Stampede - Pacote Stampede + Pacote Stampede Pachet Stampede Пакет Stampede Balíček Stampede @@ -19816,21 +20473,23 @@ Stampede paketi пакунок Stampede Gói Stampede - Stampede 软件包 - Stampede 軟體包 + Stampede 软件包 + Stampede 軟體包 SG-1000 ROM + ROM — SG-1000 ROM de SG-1000 ROM pro SG-1000 - SG-1000 ROM + SG-1000-ROM SG-1000 ROM - SG-1000 ROM + SG-1000 ROM ROM de SG-1000 SG-1000 ROM SG-1000 -ROM ROM SG-1000 + ROM SG-1000 ROM SG-1000 SG-1000 ROM SG-1000 ROM @@ -19839,30 +20498,33 @@ SG-1000 ROM SG-1000 롬 Plik ROM konsoli SG-1000 - ROM de SG-1000 + ROM de SG-1000 SG-1000 ROM ROM pre SG-1000 + SG-1000 ROM СГ-1000 РОМ SG-1000-rom SG-1000 ROM ППП SG-1000 - SG-1000 ROM - SG-1000 ROM + SG-1000 ROM + SG-1000 ROM - + Master System ROM + ROM — Master System ROM de Master System ROM pro Master System - Master System ROM + Master System-ROM Master System ROM - Master System ROM + Master System ROM ROM de Master System Master System ROM Master System -ROM ROM Master System + ROM Master System ROM Master System Master System ROM Master System ROM @@ -19871,30 +20533,38 @@ Master System ROM 마스터 시스템 롬 Plik ROM konsoli SMS - ROM de Master System + ROM de Master System Master System ROM ROM pre Master System Мастер Систем РОМ Master System-rom Master System ROM ППП Master System - Master System ROM - Master System ROM + Master System ROM + Master System ROM - + Game Gear ROM + ROM — Game Gear ROM de Game Gear ROM pro Game Gear - Game Gear ROM + Game Gear-ROM Game Gear ROM - Game Gear ROM + Game Gear ROM ROM de Game Gear Game Gear ROM Game Gear -ROM ROM Game Gear + ROM Game Gear ROM Game Gear Game Gear ROM Game Gear ROM @@ -19903,36 +20573,44 @@ Game Gear ROM 게임 기어 롬 Plik ROM konsoli Game Gear - ROM de Game Gear + ROM de Game Gear Game Gear ROM ROM pre Game Gear Гејм Гир РОМ Game Gear-rom Game Gear ROM ППП Game Gear - Game Gear ROM - Game Gear ROM + Game Gear ROM + Game Gear ROM - + - + Super NES ROM Super NES ROM - Super Nintendo ROM + Super Nintendo ROM ROM — Super NES ROM de Super NES ROM pro Super Nintendo - Super NES-rom + Super NES-ROM Super NES ROM Super NES ROM - Super NES ROM + Super NES ROM ROM de Super NES Super Nintendo-ko ROMa Super Nintendo -ROM Super NES ROM ROM Super Nintendo + ROM Super Nintendo ROM Super NES ROM de Super NES ROM של Super NES @@ -19952,7 +20630,7 @@ ROM Super Nintendo Plik ROM konsoli SNES ROM Super Nintendo - ROM de Super Nintendo + ROM de Super Nintendo ROM Super Nintendo Super NES ROM ROM pre Super Nintendo @@ -19963,8 +20641,8 @@ Super NES ROM ППП Super NES ROM Super Nintendo - Super NES ROM - 超級任天堂 ROM + Super NES ROM + 超級任天堂 ROM @@ -19972,21 +20650,23 @@ StuffIt archive + StuffIt-argief أرشيف StuffIt - Archiŭ StuffIt + Archiŭ StuffIt Архив — StuffIt arxiu StuffIt archiv StuffIt StuffIt-arkiv StuffIt-Archiv Συμπιεσμένο αρχείο StuffIt - StuffIt archive + StuffIt archive StuffIt-arkivo archivador de StuffIt StuffIt artxiboa StuffIt-arkisto StuffIt skjalasavn archive StuffIt + archivi StuffIt cartlann StuffIt arquivo StuffIt ארכיון של StuffIt @@ -20006,7 +20686,7 @@ archiu StuffIt Archiwum StuffIt arquivo StuffIt - Pacote StuffIt + Pacote StuffIt Arhivă StuffIt Архив StuffIt Archív StuffIt @@ -20017,34 +20697,36 @@ StuffIt arşivi архів StuffIt Kho nén Stuffit - Macintosh StuffIt 归档文件 - StuffIt 封存檔 + Macintosh StuffIt 归档文件 + StuffIt 封存檔 - - + + SubRip subtitles + SubRip-onderskrifte ترجمات SubRip - Subtytry SubRip + Subtytry SubRip Субтитри — SubRip subtítols SubRip titulky SubRip SubRip-undertekster SubRip-Untertitel Υπότιτλοι SubRip - SubRip subtitles + SubRip subtitles SubRip-subtekstoj subtítulos SubRip SubRip azpitituluak SubRip-tekstitykset SubRip undirtekstir sous-titres SubRip + sottitui SubRip fotheidil SubRip subtítulos SubRip כתוביות של SubRip @@ -20064,7 +20746,7 @@ sostítols SubRip Napisy SubRip legendas SubRip - Legendas SubRip + Legendas SubRip Subtitrare SubRip Субтитры SubRip Titulky SubRip @@ -20072,34 +20754,36 @@ Nëntituj SubRip Суб Рип преводи SubRip-undertexter - SubRip altyazıları + SubRip alt yazıları субтитри SubRip Phụ đề SubRip - SubRip 字幕 - SubRip 字幕 + SubRip 字幕 + SubRip 字幕 - - + + WebVTT subtitles + WebVTT-onderskrifte Субтитри — WebVTT subtítols WebVTT titulky WebVTT WebVTT-undertekster WebVTT-Untertitel Υπότιτλοι WebVTT - WebVTT subtitles + WebVTT subtitles subtítulos WebVTT WebVTT azpitituluak WebVTT-tekstitykset sous-titres WebVTT + sottitui WebVTT fotheidil WebVTT subtítulos WebVTT כתוביות WebVTT @@ -20117,42 +20801,44 @@ sostítols WebVTT Napisy WebVTT legendas WebVTT - Legendas WebVTT + Legendas WebVTT Субтитры WebVTT Titulky WebVTT Podnapisi WebVTT Веб ВТТ преводи WebVTT-undertexter - WebVTT altyazıları + WebVTT alt yazıları субтитри WebVTT - WebVTT 字幕 - WebVTT 字幕 + WebVTT 字幕 + WebVTT 字幕 VTT Video Text Tracks - + SAMI subtitles + SAMI-onderskrifte ترجمات SAMI - Subtytry SAMI + Subtytry SAMI Субтитри — SAMI subtítols SAMI titulky SAMI SAMI-undertekster SAMI-Untertitel Υπότιτλοι SAMI - SAMI subtitles + SAMI subtitles SAMI-subtekstoj subtítulos SAMI SAMI azpitituluak SAMI-tekstitykset SAMI undirtekstir sous-titres SAMI + sottitui SAMI fotheidil SAMI subtítulos SAMI כתוביות SAMI @@ -20172,7 +20858,7 @@ sostítols SAMI Napisy SAMI legendas SAMI - Legendas SAMI + Legendas SAMI Subtitrări SAMI Субтитры SAMI Titulky SAMI @@ -20180,38 +20866,40 @@ Nëntituj SAMI САМИ преводи SAMI-undertexter - SAMI altyazıları + SAMI alt yazıları субтитри SAMI Phụ đề SAMI - SAMI 字幕 - SAMI 字幕 + SAMI 字幕 + SAMI 字幕 SAMI Synchronized Accessible Media Interchange - + MicroDVD subtitles + MicroDVD-onderskrifte ترجمات MicroDVD - Subtytry MicroDVD + Subtytry MicroDVD Субтитри — MicroDVD subtítols MicroDVD titulky MicroDVD MicroDVD-undertekster MicroDVD-Untertitel Υπότιτλοι MicroDVD - MicroDVD subtitles + MicroDVD subtitles MicroDVD-subtekstoj subtítulos de MicroDVD MicroDVD azpitituluak MicroDVD-tekstitykset MicroDVD undirtekstir sous-titres MicroDVD + sottitui MicroDVD fotheidil MicroDVD subtítulos de MicroDVD כתוביות של MicroDVD @@ -20232,7 +20920,7 @@ sostítols MicroDVD Napisy MicroDVD legendas MicroDVD - Legendas MicroDVD + Legendas MicroDVD Subtitrări MicroDVD Субтитры MicroDVD Titulky MicroDVD @@ -20240,36 +20928,38 @@ Nëntituj MicroDVD Микро ДВД преводи MicroDVD-undertexter - MicroDVD altyazısı + MicroDVD alt yazısı субтитри MicroDVD Phụ đề MicroDVD - MicroDVD 字幕 - MicroDVD 字幕 + MicroDVD 字幕 + MicroDVD 字幕 - - - + + + MPSub subtitles + MPSub-onderskrifte ترجمات MPSub - Subtytry MPSub + Subtytry MPSub Субтитри — MPSub subtítols MPSub titulky MPSub MPSub-undertekster MPSub-Untertitel Υπότιτλοι MPSub - MPSub subtitles + MPSub subtitles MPSub-subtekstoj subtítulos MPSub MPSub azpitituluak MPSub-tekstitykset MPSub undirtekstir sous-titres MPSub + sottitui MPSub fotheidil MPSub subtítulos MPSub כתוביות MPSub @@ -20290,7 +20980,7 @@ sostítols MPSub Napisy MPSub legendas MPSub - Legendas MPSub + Legendas MPSub Subtitrări MPSub Субтитры MPSub Titulky MPSub @@ -20298,36 +20988,38 @@ Nëntituj MPSub МПСуб преводи MPSub-undertexter - MPSub altyazıları + MPSub alt yazıları субтитри MPSub Phụ đề MPSub - MPSub 字幕 - MPSub 字幕 + MPSub 字幕 + MPSub 字幕 MPSub MPlayer Subtitle - + SSA subtitles + SSA-onderskrifte ترجمات SSA - Subtytry SSA + Subtytry SSA Субтитри — SSA subtítols SSA titulky SSA SSA-undertekster SSA-Untertitel Υπότιτλοι SSA - SSA subtitles + SSA subtitles SSA-subtekstoj subtítulos SSA SSA azpitituluak SSA-tekstitykset SSA undirtekstir sous-titres SSA + sottitui SSA fotheidil SSA Subtitulos SSA כתובית SSA @@ -20347,7 +21039,7 @@ sostítols SSA Napisy SSA legendas SSA - Legendas SSA + Legendas SSA Subtitrări SSA Субтитры SSA Titulky SSA @@ -20355,38 +21047,40 @@ Nëntituj SSA ССА преводи SSA-undertexter - SSA altyazıları + SSA alt yazıları субтитри SSA Phụ đề SSA - SSA 字幕 - SSA 字幕 + SSA 字幕 + SSA 字幕 SSA SubStation Alpha - - + + SubViewer subtitles + SubViewer-onderskrifte ترجمات SubViewer - Subtytry SubViewer + Subtytry SubViewer Субтитри — SubViewer subtítols SubViewer titulky SubViewer SubViewer-undertekster SubViewer-Untertitel Υπότιτλοι SubViewer - SubViewer subtitles + SubViewer subtitles SubViewer-subtekstoj subtítulos SubViewer SubViewer azpitituluak SubViewer-tekstitykset SubViewer undirtekstir sous-titres SubViewer + sottitui SubViewer fotheidil SubViewer subtítulos SubViewer כתוביות של SubViewer @@ -20406,7 +21100,7 @@ sostítols SubViewer Napisy SubViewer legendas SubViewer - Legendas SubViewer + Legendas SubViewer Subtitrare SubViewer Субтитры SubViewer Titulky SubViewer @@ -20414,33 +21108,35 @@ Nëntituj SubViewer Суб Вјивер преводи SubViewer-undertexter - SubViewer altyazıları + SubViewer alt yazıları субтитри SubViewer Phụ đề SubViewer - SubViewer 字幕 - SubViewer 字幕 + SubViewer 字幕 + SubViewer 字幕 - + iMelody ringtone + iMelody-luitoon نغمة iMelody - Rington iMelody + Rington iMelody Аудио — iMelody to de trucada iMelody vyzváněcí melodie iMelody iMelody-ringetone iMelody-Klingelton ringtone iMelody - iMelody ringtone + iMelody ringtone tono de llamada iMelody iMelody doinua iMelody-soittoääni iMelody ringitóni sonnerie iMelody + sunarie iMelody ton buailte iMelody Melodía de iMelody צלצול של iMelody @@ -20460,7 +21156,7 @@ sonariá iMelody Dzwonek iMelody toque iMelody - Toque de celular do iMelody + Toque de celular do iMelody Sonerie iMelody Мелодия iMelody Vyzváňacie melódie iMelody @@ -20471,33 +21167,35 @@ iMelody melodisi рінгтон iMelody tiếng réo iMelody - iMelody 铃声 - iMelody 鈴聲 + iMelody 铃声 + iMelody 鈴聲 - + - + SMAF audio + SMAF-oudio SMAF سمعي - Aŭdyjo SMAF + Aŭdyjo SMAF Аудио — SMAF àudio SMAF zvuk SMAF SMAF-lyd SMAF-Audio Ήχος SMAF - SMAF audio + SMAF audio SMAF-sondosiero - sonido SMAF + audio SMAF SMAF audioa SMAF-ääni SMAF ljóður audio SMAF + audio SMAF fuaim SMAF son SMAF שמע SMAF @@ -20517,7 +21215,7 @@ àudio SMAF Plik dźwiękowy SMAF áudio SMAF - Áudio SMAF + Áudio SMAF Audio SMAF Аудио SMAF Zvuk SMAF @@ -20528,35 +21226,37 @@ SMAF sesi звук SMAF Âm thanh SMAF - SMAF 音频 - SMAF 音訊 + SMAF 音频 + SMAF 音訊 SMAF Synthetic music Mobile Application Format - + - + MRML playlist + MRML-speellys قائمة تشغيل MRML - Śpis piesień MRML + Śpis piesień MRML Списък за изпълнение — MRML llista de reproducció MRML seznam k přehrání MRML MRML-afspilningsliste MRML-Wiedergabeliste Λίστα αναπαραγωγής MRML - MRML playlist + MRML playlist MRML-ludlisto lista de reproducción MRML MRML erreprodukzio-zerrenda MRML-soittolista MRML avspælingarlisti liste de lecture MRML + liste di riproduzion MRML seinmliosta MRML lista de reprodución MRML רשימת השמעה MRML @@ -20577,7 +21277,7 @@ lista de lectura MRML Lista odtwarzania MRML lista de reprodução MRML - Lista de reprodução do MRML + Lista de reprodução do MRML Listă redare MRML Список воспроизведения MRML Zoznam skladieb MRML @@ -20585,36 +21285,38 @@ Listë titujsh MRML МРМЛ списак нумера MRML-spellista - MRML oynatma listesi + MRML çalma listesi список відтворення MRML Danh mục nhạc MRML - MRML 播放列表 - MRML 播放清單 + MRML 播放列表 + MRML 播放清單 MRML Multimedia Retrieval Markup Language - + XMF audio + XMF-oudio XMF سمعي - Aŭdyjo XMF + Aŭdyjo XMF Аудио — XMF àudio XMF zvuk XMF XMF-lyd XMF-Audio Ήχος XMF - XMF audio + XMF audio XMF-sondosiero - sonido XMF + audio XMF XMF audioa XMF-ääni XMF ljóður audio XMF + audio XMF fuaim XMF son XMF שמע XMF @@ -20634,7 +21336,7 @@ àudio XMF Plik dźwiękowy XMF aúdio XMF - Áudio XMF + Áudio XMF Audio XMF Аудио XMF Zvuk XMF @@ -20645,13 +21347,13 @@ XMF sesi звук XMF Âm thanh XMF - XMF 音频 - XMF 音訊 + XMF 音频 + XMF 音訊 XMF eXtensible Music Format - - + + @@ -20659,23 +21361,25 @@ SV4 CPIO archive + SV4 CPIO-argief أرشيف SV4 CPIO SV4 CPIO arxivi - Archiŭ SV4 CPIO + Archiŭ SV4 CPIO Архив — SV4 CPIO - arxiu CPIO SV4 + arxiu SV4 CPIO archiv SV4 CPIO Archif CPIO SV4 SV4 CPIO-arkiv SV4-CPIO-Archiv Συμπιεσμένο αρχείο SV4 CPIO - SV4 CPIO archive + SV4 CPIO archive SV4-CPIO-arkivo archivador SV4 CPIO SV4 CPIO artxiboa SV4 CPIO -arkisto SV4 CPIO skjalasavn archive SV4 CPIO + archivi SV4 CPIO cartlann SV4 CPIO arquivo SV4 CPIO ארכיון של SV4 SPIO @@ -20696,7 +21400,7 @@ archiu SV4 CPIO Archiwum SV4 CPIO arquivo SV4 CPIO - Pacote SV4 CPIO + Pacote SV4 CPIO Arhivă SV4 CPIO Архив SV4 CPIO Archív SV4 CPIO @@ -20707,28 +21411,30 @@ SV4 CPIO arşivi архів SV4 CPIO Kho nén CPIO SV4 - SV4 CPIO 归档文件 - SV4 CPIO 封存檔 + SV4 CPIO 归档文件 + SV4 CPIO 封存檔 SV4 CPIO archive (with CRC) + SV4 CPIO-argief (met CRC) أرشيف SV4 CPIO (مع CRC) - Archiŭ SV4 CPIO (z CRC) + Archiŭ SV4 CPIO (z CRC) Архив — SV4 CPIO, проверка за грешки CRC - arxiu CPIO SV4 (amb CRC) + arxiu SV4 CPIO (amb CRC) archiv SV4 CPIO (s CRC) SV4 CPIO-arkiv (med CRC) SV4-CPIO-Archiv (mit CRC) Συμπιεσμένο αρχείο SV4 CPIO (με CRC) - SV4 CPIO archive (with CRC) + SV4 CPIO archive (with CRC) SV4-CPIO-arkivo (kun CRC) archivador SV4 CPIO (con CRC) SV4 CPIO artxiboa (CRC-rekin) SV4 CPIO -arkisto (CRC:llä) SV4 CPIO skjalasavn (við CRC) archive SV4 CPIO (avec CRC) + archivi SV4 CPIO (cun CRC) cartlann SV4 CPIO (le CRC) Arquivador SV4 CPIO (con CRC) ארכיון של SV4 SPIO (עם CRC) @@ -20747,9 +21453,9 @@ SV4 CPIO-archief (met CRC) SV4 CPIO arkiv (med CRC) archiu SV4 CPIO (avec CRC) - Archiwum SV4 CPIO (z sumą kontrolną) + Archiwum SV4 CPIO (z sumą kontrolną) arquivo SV4 CPIO (com CRC) - Pacote SV4 CPIO (com CRC) + Pacote SV4 CPIO (com CRC) Arhivă SV4 CPIO (cu CRC) Архив SV4 CPIO (с CRC) Archív SV4 CPIO (s CRC) @@ -20760,16 +21466,17 @@ SV4 CPIO arşivi (CRC ile) архів SV4 CPIO (з CRC) Kho nén CPIO SV4 (với CRC) - SV4 CPIP 归档文件(带 CRC) - SV4 CPIO 封存檔 (具有 CRC) + SV4 CPIP 归档文件(带 CRC) + SV4 CPIO 封存檔 (具有 CRC) Tar archive + Tar-argief أرشيف Tar Tar arxivi - Archiŭ tar + Archiŭ tar Архив — tar arxiu tar archiv Tar @@ -20777,12 +21484,13 @@ Tar-arkiv Tar-Archiv Συμπιεσμένο αρχείο Tar - Tar archive + Tar archive archivador Tar Tar artxiboa Tar-arkisto Tar skjalasavn archive tar + archivi Tar cartlann Tar arquivo Tar ארכיון Tar @@ -20803,10 +21511,10 @@ archiu tar Archiwum tar arquivo Tar - Pacote Tar + Pacote Tar Arhivă Tar Архив TAR - Archív tar + Archív Tar Datoteka arhiva Tar Arkiv tar Тар архива @@ -20814,13 +21522,13 @@ Tar arşivi архів tar Kho nén tar - Tar 归档文件 - Tar 封存檔 + Tar 归档文件 + Tar 封存檔 - - + + @@ -20828,20 +21536,22 @@ Tar archive (compressed) + Tar-argief (saamgepers) أرشيف Tar (مضغوط) - Archiŭ tar (skampresavany) + Archiŭ tar (skampresavany) Архив — tar, компресиран arxiu tar (amb compressió) archiv Tar (komprimovaný) Tar-arkiv (komprimeret) Tar-Archiv (komprimiert) Αρχείο Tar (συμπιεσμένο) - Tar archive (compressed) + Tar archive (compressed) archivador Tar (comprimido) Tar artxiboa (konprimitua) Tar-arkisto (pakattu) Tar skjalasavn (stappað) archive tar (compressée) + archivi Tar (comprimût) cartlann Tar (comhbhrúite) arquivo Tar (comprimido) ארכיון Tar (מכווץ) @@ -20861,10 +21571,10 @@ archiu tar (compressat) Archiwum tar (skompresowane) arquivo Tar (comprimido) - Pacote Tar (compactado) + Pacote Tar (compactado) Arhivă Tar (comprimată) Архив TAR (сжатый) - Archív tar (komprimovaný) + Archív Tar (komprimovaný) Datoteka arhiva Tar (stisnjen) Arkiv tar (i kompresuar) Тар архива (запакована) @@ -20872,8 +21582,8 @@ Tar arşivi (sıkıştırılmış) архів tar (стиснений) Kho nén tar (đã nén) - Tar 归档文件(压缩) - Tar 封存檔 (UNIX 格式壓縮) + Tar 归档文件(压缩) + Tar 封存檔 (壓縮) @@ -20881,25 +21591,27 @@ generic font file + generiese skriftipelêer ملف الخط العام - zvyčajny fajł šryftu + zvyčajny fajł šryftu Шрифт fitxer de lletra genèrica obecný soubor s fontem general skrifttypefil Allgemeine Schriftdatei Γενικό αρχείο γραμματοσειράς - generic font file + generic font file genera tipara dosiero tipo de letra genérico letra-tipo orokorra yleinen fonttitiedosto felagsstavasniðsfíla fichier de polices générique + file di caratar gjeneric comhad cló ginearálta ficheiro de tipo de fonte xenérica קובץ גופן גנרי - Izvorna datoteka slova + generička datoteka fonta általános betűkészletfájl File de typo de litteras generic berkas fonta generik @@ -20916,7 +21628,7 @@ fichièr de poliças generic Zwykły plik czcionki ficheiro genérico de letra - Arquivo de fonte genérico + Arquivo de fonte genérico fișier de font generic Обычный файл шрифта Obyčajný súbor písma @@ -20927,32 +21639,34 @@ genel yazı tipi dosyası загальний файл шрифту tập tin phông giống loài - 通用字体文件 - 通用字型檔 + 通用字体文件 + 通用字型檔 packed font file + verpakte skriftipelêer ملف الخط المرزم - zapakavany fajł šryftu + zapakavany fajł šryftu Шрифт — компресиран fitxer de lletra empaquetada komprimovaný soubor s fontem pakket skrifttypefil Gepackte Schriftdatei Αρχείο συμπιεσμένης γραμματοσειράς - packed font file + packed font file pakigita tipara dosiero tipo de letra empaquetado Letra-tipo fitxategi paketatua pakattu fonttitiedosto pakkað stavasniðsfíla fichier de polices empaquetées + file di caratar impachetât comhad cló pacáilte ficheiro de fonte empaquetada קובץ גופן ארוז - Zapakirana datoteka slova + zapakirana datoteka fonta packed font-fájl File de typos de litteras impacchettate berkas fonta terkemas @@ -20969,7 +21683,7 @@ fichièr de poliças empaquetadas Plik ze spakowaną czcionką ficheiro de letras empacotadas - Arquivo de fonte empacotado + Arquivo de fonte empacotado fișier font împachetat Сжатый файл шрифта Komprimovaný súbor písma @@ -20980,29 +21694,31 @@ paketlenmiş yazı tipi dosyası запакований файл шрифту tập tin phông chữ đã đóng gói - 打包的字体文件 - 包裝字型檔 + 打包的字体文件 + 包裝字型檔 TGIF document + TGIF-dokument مستند TGIF Documentu de TGIF - Dakument TGIF + Dakument TGIF Документ — TGIF document TGIF dokument TGIF TGIF-dokument TGIF-Dokument Έγγραφο TGIF - TGIF document + TGIF document TGIF-dokumento documento TGIF TGIF dokumentua TGIF-asiakirja TGIF skjal document TGIF + document TGIF cáipéis TGIF documento TGIF מסמך TGIF @@ -21023,7 +21739,7 @@ document TGIF Dokument TGIF documento TGIF - Documento TGIF + Documento TGIF Document TGIF Документ TGIF Dokument TGIF @@ -21034,19 +21750,20 @@ TGIF belgesi документ TGIF Tài liệu TGIF - TGIF 文档 - TGIF 文件 + TGIF 文档 + TGIF 文件 - + theme + tema سمة örtük - matyŭ + matyŭ Тема tema motiv @@ -21054,13 +21771,14 @@ tema Thema Θέμα - theme + theme etoso tema gaia teema tema thème + teme téama tema ערכת נושא @@ -21082,7 +21800,7 @@ tèma Motyw tema - Tema + Tema temă Тема Motív @@ -21093,18 +21811,19 @@ tema тема sắc thái - 主题 - 佈景主題 + 主题 + 佈景主題 ToutDoux document + ToutDoux-dokument مستند ToutDoux Documentu de ToutDoux ToutDoux sənədi - Dakument ToutDoux + Dakument ToutDoux Документ — ToutDoux document ToutDoux dokument ToutDoux @@ -21112,13 +21831,14 @@ ToutDoux-dokument ToutDoux-Dokument Έγγραφο ToutDoux - ToutDoux document + ToutDoux document ToutDoux-dokumento documento de ToutDoux ToutDoux dokumentua ToutDoux-asiakirja ToutDoux skjal document ToutDoux + document ToutDoux cáipéis ToutDoux documento de ToutDoux מסמך של ToutDoux @@ -21139,7 +21859,7 @@ document ToutDoux Dokument ToutDoux documento ToutDoux - Documento do ToutDoux + Documento do ToutDoux Document ToutDoux Документ ToutDoux Dokument ToutDoux @@ -21150,27 +21870,29 @@ ToutDoux belgesi документ ToutDoux Tài liệu ToutDoux - ToutDoux 文档 - ToutDoux 文件 + ToutDoux 文档 + ToutDoux 文件 backup file + rugsteunlêer ملف النسخ الاحتياطي - zapasny fajł + zapasny fajł Резервно копие fitxer de còpia de seguretat záložní soubor sikkerhedskopi Sicherungsdatei Αντίγραφο ασφαλείας - backup file + backup file restaŭrkopio archivo de respaldo babes-kopiako fitxategia varmuuskopio trygdarritsfíla fichier de sauvegarde + file di backup comhad cúltaca ficheiro de copia de seguridade קובץ גיבוי @@ -21191,7 +21913,7 @@ fichièr de salvament Plik zapasowy cópia de segurança - Arquivo de backup + Arquivo de backup fișier de backup Резервная копия Záložný súbor @@ -21202,8 +21924,8 @@ yedek dosyası резервна копія tập tin sao lưu - 备份文件 - 備份檔 + 备份文件 + 備份檔 @@ -21212,10 +21934,11 @@ Troff document + Troff-dokument مستند Troff Documentu de Troff Troff sənədi - Dakument Troff + Dakument Troff Документ — Troff document Troff dokument Troff @@ -21223,13 +21946,14 @@ Troffdokument Troff-Dokument Έγγραφο troff - Troff document + Troff document Troff-dokumento documento de Troff Troff dokumentua Troff-asiakirja Troff skjal document Troff + document Troff cáipéis Troff documento Troff מסמך Troff @@ -21250,7 +21974,7 @@ document Troff Dokument Troff documento Troff - Documento Troff + Documento Troff Document Troff Документ Troff Dokument troff @@ -21261,16 +21985,16 @@ Troff belgesi документ Troff Tài liệu Troff - Troff 文档 - Troff 文件 + Troff 文档 + Troff 文件 - - - - + + + + @@ -21278,15 +22002,19 @@ Manpage manual document + Manpage-handleiding + Страница от ръководството document de pàgina man manuálová stránka Manpage-manualdokument Manpage-Handbuchdokument Έγγραφο βοήθειας manpage - Manpage manual document + Manpage manual document documento de manual de Manpage Manpage eskuliburu dokumentua + Manpage manuaali dokumentit document manuel Manpage + document manuâl Manpage cáipéis lámhleabhair Man מסמך תיעוד man Manpage dokument priručnika @@ -21295,42 +22023,44 @@ Dokumen manual manpage Documento di manuale manpage Manpage нұсқаулық құжаты - 맨 페이지 설명서 문서 + man 페이지 설명서 문서 document de manual Manpage Dokument podręcznika stron pomocy documento de ajuda Manpage - Documento Manpage + Documento Manpage Документ справочной системы Manpage Dokument manuálu Manpage документ упутства странице упутства Manpage-manualdokument Man sayfası el kitabı belgesi документ підручника man - Manpage 手册文档 - Manpage 手冊說明文件 + Manpage 手册文档 + Manpage 手冊說明文件 manual page (compressed) + handleiding (saamgepers) صفحة المساعدة (مضغوطة) man səhifəsi (sıxışdırılmış) - staronka dapamohi (skampresavanaja) - Страница от справочника, компресирана + staronka dapamohi (skampresavanaja) + Страница от ръководството — компресирана pàgina de manual (amb compressió) manuálová stránka (komprimovaná) tudalen llawlyfr (wedi ei gywasgu) manualside (komprimeret) Handbuchseite (komprimiert) Σελίδα οδηγιών (συμπιεσμένη) - manual page (compressed) + manual page (compressed) manpaĝo (kunpremita) página de manual (comprimida) eskuliburu orria (konprimitua) manuaalisivu (pakattu) handbókasíða (stappað) page de manuel (compressée) + pagjine di manuâl (comprimude) leathanach lámhleabhair (comhbhrúite) páxina de manual (comprimida) דף עזר (מכווץ) @@ -21351,7 +22081,7 @@ pagina de manual (compressat) Strona podręcznika (skompresowana) página de manual (comprimida) - Página de manual (compactada) + Página de manual (compactada) pagină de manual (comprimată) Страница руководства (сжатая) Manuálová stránka (komprimovaná) @@ -21362,31 +22092,33 @@ kılavuz dosyası (sıkıştırılmış) сторінка посібника (стиснена) trang hướng dẫn (đã nén) - 手册页(压缩) - 手冊頁面 (壓縮版) + 手册页(压缩) + 手冊頁面 (壓縮版) Tar archive (LZO-compressed) + Tar-argief (LZO-saamgepers) أرشيف Tar (مضغوط-LZO) - Archiŭ tar (LZO-skampresavany) + Archiŭ tar (LZO-skampresavany) Архив — tar, компресиран с LZO arxiu tar (amb compressió LZO) archiv Tar (komprimovaný pomocí LZO) Tar-arkiv (LZO-komprimeret) Tar-Archiv (LZO-komprimiert) Αρχείο Tar (συμπιεσμένο με LZO) - Tar archive (LZO-compressed) + Tar archive (LZO-compressed) archivador Tar (comprimido con LZO) Tar artxiboa (LZO-rekin konprimitua) Tar-arkisto (LZO-pakattu) Tar skjalasavn (LZO-stappað) archive tar (compression LZO) + archivi Tar (comprimût cun LZO) cartlann Tar (comhbhrúite le LZO) arquivo Tar (comprimido con LZO) ארכיון Tar (מכווץ ע״י LZO) Tar arhiva (LZO sažeta) - Tar archívum (LZO-val tömörítve) + Tar archívum (LZO tömörítésű) Archivo Tar (comprimite con LZO) Arsip Tar (terkompresi LZO) Archivio tar (compresso con LZO) @@ -21401,10 +22133,10 @@ archiu tar (compression LZO) Archiwum tar (kompresja LZO) arquivo Tar (compressão LZO) - Pacote Tar (compactado com LZO) + Pacote Tar (compactado com LZO) Arhivă Tar (comprimată LZO) Архив TAR (сжатый lzo) - Archív tar (komprimovaný pomocou LZO) + Archív Tar (komprimovaný pomocou LZO) Datoteka arhiva Tar (stisnjen z LZO) Arkiv tar (i kompresuar me LZO) Тар архива (запакована ЛЗО-ом) @@ -21412,8 +22144,8 @@ Tar arşivi (LZO ile sıkıştırılmış) архів tar (стиснений LZO) Kho nén tar (đã nén LZO) - Tar 归档文件(LZO 压缩) - Tar 封存檔 (LZO 格式壓縮) + Tar 归档文件(LZO 压缩) + Tar 封存檔 (LZO 壓縮) @@ -21421,6 +22153,7 @@ XZ archive + XZ-argief أرشيف XZ Архив — XZ arxiu XZ @@ -21428,13 +22161,14 @@ XZ-arkiv XZ-Archiv Συμπιεσμένο αρχείο XZ - XZ archive + XZ archive XZ-arkivo archivador XZ XZ artxiboa XZ-arkisto XZ skjalasavn archive XZ + archivi XZ cartlann XZ ficheiro XZ ארכיון XZ @@ -21452,7 +22186,7 @@ archiu XZ Archiwum XZ arquivo XZ - Pacote XZ + Pacote XZ Arhivă XZ Архив XZ Archív XZ @@ -21461,16 +22195,17 @@ XZ-arkiv XZ arşivi архів XZ - XZ 归档文件 - XZ 封存檔 + XZ 归档文件 + XZ 封存檔 - + Tar archive (XZ-compressed) + Tar-argief (XZ-saamgepers) أرشيف Tar (مضغوط-XZ) Архив — tar, компресиран с XZ arxiu tar (amb compressió XZ) @@ -21478,17 +22213,18 @@ Tar-arkiv (XZ-komprimeret) Tar-Archiv (XZ-komprimiert) Αρχείο Tar (συμπιεσμένο με XZ) - Tar archive (XZ-compressed) + Tar archive (XZ-compressed) archivador Tar (comprimido con XZ) Tar artxiboa (XZ-rekin konprimitua) Tar-arkisto (XZ-pakattu) Tar skjalasavn(XZ-stappað) archive tar (compression XZ) + archivi Tar (comprimût cun XZ) cartlann Tar (comhbhrúite le XZ) arquivo Tar (comprimido con XZ) ארכיון Tar (מכווץ ע״י XZ) Tar arhiva ( XZ sažeta) - Tar archívum (XZ-vel tömörítve) + Tar archívum (XZ tömörítésű) Archivo Tar (comprimite con XZ) Arsip Tar (terkompresi XZ) Archivio tar (compresso con XZ) @@ -21501,24 +22237,91 @@ archiu tar (compression XZ) Archiwum tar (kompresja XZ) arquivo Tar (compressão XZ) - Pacote Tar (compactado com XZ) + Pacote Tar (compactado com XZ) Arhivă Tar (comprimată XZ) Архив TAR (сжатый xz) - Archív tar (komprimovaný pomocou XZ) + Archív Tar (komprimovaný pomocou XZ) Datoteka arhiva Tar (stisnjen z XZ) Тар архива (запакована ИксЗ-ом) Tar-arkiv (XZ-komprimerat) Tar arşivi (XZ ile sıkıştırılmış) архів tar (стиснений XZ) - Tar 归档文件(XZ 压缩) - Tar 封存檔 (XZ 格式壓縮) + Tar 归档文件(XZ 压缩) + Tar 封存檔 (XZ 壓縮) + + Zstandard archive + Архив — Zstandard + arxiu Zstandard + archiv Zstandard + Zstandard-arkiv + Zstandard-Archiv + Zstandard archive + archivador Zstandard + Zstandard archive + Zstandard-arkisto + archive Zstandard + archivi Zstandard + Zstandard arhiva + Zstandard archívum + Arsip Zstandard + Archivio Zstandard + Zstandard архиві + Zstandard 압축 파일 + Archiwum Zstandard + Pacote Zstandard + Архив Zstandard + Archív Zstandard + Zstandard-arkiv + Zstandard arşivi + архів Zstandard + Zstandard 归档文件 + Zstandard 封存檔 + + + + + + + + Tar archive (Zstandard-compressed) + Архив — tar, компресиран със Zstandard + arxiu tar (amb compressió Zstandard) + archiv Tar (komprimovaný pomocí Zstandard) + Tar-arkiv (Zstandard-komprimeret) + Tar-Archiv (Zstandard-komprimiert) + Tar archive (Zstandard-compressed) + archivador Tar (comprimido con Zstandard) + Tar artxiboa (Zstandard-rekin konprimitua) + Tar-arkisto (Zstandard-pakattu) + archive tar (compression Zstandard) + archivi Tar (comprimût cun Zstandard) + Tar arhiva (Zstandard-sažeta) + Tar archívum (Zstandard tömörítésű) + Arsip Tar (terkompresi Zstandard) + Archivio tar (compresso con Zstandard) + Tar архиві (Zstandard-пен сығылған) + TAR 묶음 파일(Zstandard 압축) + Archiwum tar (kompresja Zstandard) + Pacote Tar (compactado com Zstandard) + Архив TAR (сжатый zstandard) + Tar-arkiv (Zstandard-komprimerat) + Tar arşivi (Zstandard ile sıkıştırılmış) + архів tar archive (стиснений Zstandard) + Tar 归档文件(Zstandard 压缩) + Tar 封存檔 (Zstandard 壓縮) + + + + + PDF document (XZ-compressed) + PDF-dokument (XZ-saamgepers) Documentu PDF (comprimíu en XZ) Документ — PDF, компресиран с XZ document PDF (amb compressió XZ) @@ -21526,16 +22329,17 @@ PDF-dokument (XZ-komprimeret) PDF-Dokument (XZ-komprimiert) Έγγραφο PDF (συμπιεσμένο με XZ) - PDF document (XZ-compressed) + PDF document (XZ-compressed) documento PDF (comprimido con XZ) PDF dokumentua (XZ-rekin konprimitua) PDF-asiakirja (XZ-pakattu) document PDF (compressé XZ) + document PDF (comprimût cun XZ) cáipéis PDF (comhbhrúite le XZ) documento PDF (comprimido en XZ) מסמך PDF (מכווץ ע״י XZ) PDF dokument ( XZ sažet) - PDF dokumentum (XZ-vel tömörített) + PDF dokumentum (XZ tömörítésű) Documento PDF (comprimite con XZ) Dokumen PDF (terkompresi XZ) Documento PDF (compresso con XZ) @@ -21548,7 +22352,7 @@ document PDF (compressat XZ) Dokument PDF (kompresja XZ) documento PDF (compressão XZ) - Documento PDF (compactado com XZ) + Documento PDF (compactado com XZ) Документ PDF (сжатый xz) Dokument PDF (komprimovaný pomocou XZ) Dokument PDF (XZ-stisnjen) @@ -21556,29 +22360,31 @@ PDF-dokument (XZ-komprimerat) PDF belgesi (XZ ile sıkıştırılmış) документ PDF (стиснений xz) - PDF 文档(XZ) - PDF 文件 (XZ 格式壓縮) + PDF 文档(XZ) + PDF 文件 (XZ 壓縮) Ustar archive + Ustar-argief أرشيف Ustar - Archiŭ ustar + Archiŭ ustar Архив — ustar arxiu ustar archiv Ustar - Ustararkiv + Ustar-arkiv Ustar-Archiv Συμπιεσμένο αρχείο Ustar - Ustar archive + Ustar archive Ustar-arkivo archivador de Ustar Ustar artxiboa Ustar-arkisto Ustar skjalasavn archive Ustar + archivi Ustar cartlann Ustar arquivo Ustar ארכיון Ustar @@ -21598,10 +22404,10 @@ archiu Ustar Archiwum ustar arquivo Ustar - Pacote Ustar + Pacote Ustar Arhivă Ustar Архив Ustar - Archív ustar + Archív Ustar Datoteka arhiva Ustar Arkiv Ustar Устар архива @@ -21609,16 +22415,17 @@ Ustar arşivi архів ustar Kho nén ustar - Ustar 归档文件 - Ustar 封存檔 + Ustar 归档文件 + Ustar 封存檔 WAIS source code + WAIS-bronkode شفرة مصدر WAIS WAIS mənbə faylı - Kryničny kod WAIS + Kryničny kod WAIS Изходен код — WAIS codi font en WAIS zdrojový kód WAIS @@ -21626,13 +22433,14 @@ WAIS-kildekode WAIS-Quelltext Πηγαίος κώδικας WAIS - WAIS source code + WAIS source code WAIS-fontkodo código fuente en WAIS WAIS iturburu-kodea WAIS-lähdekoodi WAIS keldukota code source WAIS + codiç sorzint WAIS cód foinseach WAIS código fonte WAIS קוד מקור של WAIS @@ -21651,9 +22459,9 @@ WAIS-broncode WAIS-kjeldekode còde font WAIS - Plik źródłowy WAIS + Kod źródłowy WAIS código origem WAIS - Código-fonte WAIS + Código-fonte WAIS Cod sursă WAIS Исходный код WAIS Zdrojový kód WAIS @@ -21664,29 +22472,31 @@ WAIS kaynak kodu вихідний код мовою WAIS Mã nguồn WAIS - WAIS 源代码 - WAIS 源碼 + WAIS 源代码 + WAIS 源碼 WordPerfect/Drawperfect image + WordPerfect/Drawperfect-beeld صورة WordPerfect/Drawperfect - Vyjava WordPerfect/Drawperfect + Vyjava WordPerfect/Drawperfect Изображение — WordPerfect/Drawperfect imatge de WordPerfect/Drawperfect obrázek WordPerfect/Drawperfect WordPerfect/Drawperfect-billede WordPerfect/DrawPerfect-Bild Εικόνα WordPerfect/Drawperfect - WordPerfect/Drawperfect image + WordPerfect/Drawperfect image WordPerfect/Drawperfect-bildo imagen de WordPerfect/Drawperfect WordPerfect/Drawperfect irudia WordPerfect/Drawperfect-kuva WordPerfect/Drawperfect mynd image WordPerfect/DrawPerfect + imagjin WordPerfect/Drawperfect íomhá WordPerfect/Drawperfect imaxe de WordPerfect/DrawPerfect תמונה של WordPerfect/Drawperfect @@ -21707,7 +22517,7 @@ imatge WordPerfect/DrawPerfect Obraz WordPerfect/DrawPerfect imagem do WordPerfect/Drawperfect - Imagem do WordPerfect/Drawperfect + Imagem do WordPerfect/Drawperfect Imagine WordPerfect/Drawperfect Изображение WordPerfect/Drawperfect Obrázok WordPerfect/Drawperfect @@ -21718,18 +22528,25 @@ WordPerfect/DrawPerfect görüntüsü зображення WordPerfect/Drawperfect Ảnh WordPerfect/Drawperfect - WordPerfect/Drawperfect 图像 - WordPerfect/Drawperfect 影像 + WordPerfect/Drawperfect 图像 + WordPerfect/Drawperfect 影像 Bandai WonderSwan ROM + ROM — Bandai WonderSwan ROM de Bandai WonderSwan ROM pro Bandai WonderSwan + Bandai WonderSwan-ROM Bandai WonderSwan ROM - Bandai WonderSwan ROM + Bandai WonderSwan ROM ROM de Bandai WonderSwan + Bandai WonderSwan ROM + Bandai WonderSwan ROM + ROM Bandai WonderSwan + ROM Bandai WonderSwan + ROM Bandai WonderSwan Bandai WonderSwan ROM Bandai WonderSwan ROM ROM Bandai WonderSwan @@ -21737,23 +22554,31 @@ Bandai WonderSwan ROM 반다이 원더스완 롬 Plik ROM konsoli Bandai WonderSwan - ROM de WonderSwan da Bandai + ROM de WonderSwan da Bandai Bandai WonderSwan ROM ROM pre Bandai WonderSwan Bandai WonderSwan-rom + Bandai WonderSwan ROM ROM Bandai WonderSwan - 万代 WonderSwan ROM - Bandai WonderSwan ROM + 万代 WonderSwan ROM + 萬代 WonderSwan ROM Bandai WonderSwan Color ROM + ROM — Bandai WonderSwan Color ROM de Bandai WonderSwan Color ROM pro Bandai WonderSwan Color + Bandai WonderSwan Color-ROM Bandai WonderSwan Color ROM - Bandai WonderSwan Color ROM + Bandai WonderSwan Color ROM ROM de Bandai WonderSwan Color + Bandai WonderSwan Color ROM + Bandai WonderSwan Color ROM + ROM Bandai WonderSwan Color + ROM Bandai WonderSwan Color + ROM datha Bandai WonderSwan Bandai WonderSwan Color ROM Bandai WonderSwan Color ROM ROM Bandai WonderSwan Color @@ -21761,33 +22586,36 @@ Bandai WonderSwan Color ROM 반다이 원더스완 컬러 롬 Plik ROM konsoli Bandai WonderSwan Color - ROM de WonderSwan Color da Bandai + ROM de WonderSwan Color da Bandai Bandai WonderSwan Color ROM ROM pre Bandai WonderSwan Color Bandai WonderSwan Color-rom + Bandai WonderSwan Color ROM ROM Bandai WonderSwan Color - 万代 WonderSwan Color ROM - Bandai WonderSwan Color ROM + 万代 WonderSwan Color ROM + 萬代 WonderSwan Color ROM DER/PEM/Netscape-encoded X.509 certificate + DER/PEM/Netscape-geënkodeerde X.509-sertifikaat شهادة DER/PEM/Netscape-encoded X.509 - Sertyfikat X.509, zakadavany ŭ DER/PEM/Netscape + Sertyfikat X.509, zakadavany ŭ DER/PEM/Netscape Сертификат — DER/PEM/Netscape X.509 certificat X.509 codificat com DER/PEM/Netscape certifikát X.509 kódovaný jako DER/PEM/Netscape - DER-/PEM-/Netscapekodet X.509-certifikat + DER-/PEM-/Netscape-kodet X.509-certifikat DER/PEM/Netscape-kodiertes X.509-Zertifikat Ψηφιακό πιστοποιητικό X.509 κωδικοποιημένο κατά DER/PEM/Netscape - DER/PEM/Netscape-encoded X.509 certificate + DER/PEM/Netscape-encoded X.509 certificate DER/PEM/Netscape-kodigita X.509-atestilo certificado X.509 codificado con DER/PEM/Netscape X.509rekin kodetutako DER, PEM edo Netscape zertifikatua DER/PEM/Netscape-koodattu X.509-varmenne DER/PEM/Netscape-encoded X.509 váttan certificat X.509 codé DER/PEM/Netscape + certificât X.509 codificât cun DER/PEM/Netscape teastas X.509 ionchódaithe le DER/PEM/Netscape certificado X.509 codificado con DER/PEM/Netscape אישור מסוג X.509 של DER/PEM/Netscape-encoded @@ -21809,7 +22637,7 @@ certificat X.509 encodat DER/PEM/Netscape Zakodowany w DER/PEM/Netscape certyfikat X.509 certificado X.509 codificado com DER/PEM/Netscape - Certificado X.509 codificado com DER/PEM/Netscape + Certificado X.509 codificado com DER/PEM/Netscape Certificat DER/PEM/Netscape-codat X.509 Сертификат X.509 (DER/PEM/Netscape-закодированный) Certifikát X.509 kódovaný ako DER/PEM/Netscape @@ -21820,8 +22648,8 @@ DER/PEM/Netscape-kodlanmış X.509 sertfikası сертифікат X.509 у форматі DER/PEM/Netscape Chứng nhận X.509 mã hoá bằng Netscape/PEM/DER - DER/PEM/Netscape-encoded X.509 证书 - DER/PEM/Netscape 編碼的 X.509 憑證 + DER/PEM/Netscape-encoded X.509 证书 + DER/PEM/Netscape 編碼的 X.509 憑證 @@ -21830,22 +22658,24 @@ empty document + leë dokument مستند فارغ documentu baleru - pusty dakument + pusty dakument Празен документ document buit prázdný dokument tomt dokument Leeres Dokument Κενό έγγραφο - empty document + empty document malplena dokumento documento vacío dokumentu hutsa tyhjä asiakirja tómt skjal document vide + document vueit cáipéis fholamh documeto baleiro מסמך ריק @@ -21866,7 +22696,7 @@ document void Pusty dokument documento vazio - Documento vazio + Documento vazio document gol Пустой документ Prázdny dokument @@ -21877,28 +22707,30 @@ boş belge порожній документ tài liệu rỗng - 空文档 - 空白文件 + 空文档 + 空白文件 Zoo archive + Zoo-argief أرشيف Zoo Zoo arxivi - Archiŭ zoo + Archiŭ zoo Архив — zoo arxiu zoo archiv Zoo Archif zoo - Zooarkiv + Zoo-arkiv Zoo-Archiv Συμπιεσμένο αρχείο Zoo - Zoo archive + Zoo archive Zoo-arkivo archivador Zoo Zoo artxiboa Zoo-arkisto Zoo skjalasavn archive zoo + archivi Zoo cartlann Zoo ficheiro Zoo ארכיון Zoo @@ -21918,10 +22750,10 @@ archiu zoo Archiwum zoo arquivo Zoo - Pacote Zoo + Pacote Zoo Arhivă Zoo Архив ZOO - Archív zoo + Archív Zoo Datoteka arhiva ZOO Arkiv zoo Зoo архива @@ -21929,31 +22761,33 @@ Zoo arşivi архів zoo Kho nén zoo - Zoo 归档文件 - Zoo 封存檔 + Zoo 归档文件 + Zoo 封存檔 - + XHTML page + XHTML-bladsy صفحة XHTML - Staronka XHTML + Staronka XHTML Страница — XHTML pàgina XHTML stránka XHTML XHTML-side XHTML-Seite Σελίδα XHTML - XHTML page + XHTML page XHTML-paĝo página XHTML XHTML orria XHTML-sivu XHTML síða page XHTML + pagjine XHTML leathanach XHTML Páxina XHTML דף XHTML @@ -21974,7 +22808,7 @@ pagina XHTML Strona XHTML página XHTML - Página XHTML + Página XHTML Pagină XHTML Страница XHTML Stránka XHTML @@ -21985,41 +22819,45 @@ XHTML sayfası сторінка XHTML Trang XHTML - XHTML 页面 - XHTML 網頁 + XHTML 页面 + XHTML 網頁 XHTML Extensible HyperText Markup Language + + - - - - + + + + - + Zip archive + Zip-argief أرشيف Zip Zip arxivi - Archiŭ zip + Archiŭ zip Архив — zip arxiu zip archiv ZIP Archif ZIP - Ziparkiv + Zip-arkiv Zip-Archiv Συμπιεσμένο αρχείο Zip - Zip archive + Zip archive Zip-arkivo archivador Zip Zip artxiboa Zip-arkisto Zip skjalasavn archive zip + archivi Zip cartlann Zip ficheiro Zip ארכיון Zip @@ -22039,7 +22877,7 @@ archiu zip Archiwum ZIP arquivo Zip - Pacote Zip + Pacote Zip Arhivă zip Архив ZIP Archív ZIP @@ -22050,76 +22888,71 @@ Zip arşivi архів zip Kho nén zip - Zip 归档文件 - Zip 封存檔 + Zip 归档文件 + Zip 封存檔 - + - WIM disk Image + WIM disk image + Диск — WIM imatge de disc WIM - obraz disku WIM WIM-diskaftryk WIM-Datenträgerabbild - Εικόνα δίσκου WIM - WIM disk Image + WIM disk image imagen de disco WIM WIM disko irudia - WIM-levytiedosto + WIM-levykuva image disque WIM - íomhá diosca WIM - דמות דיסק WIM WIM slika diska WIM lemezkép - Imagine de disco WIM Image disk WIM Immagine disco WIM WIM диск бейнесі WIM 디스크 이미지 - imatge disc WIM Obraz dysku WIM - imagem de disco WIM - Imagem de disco WIM + Imagem de disco WIM Образ диска WIM Obraz disku WIM - слика диска ВИМ-а - WIM-diskavbild - WIM disk kalıbı + WIM-diskavbildning + WIM disk görüntüsü образ диска WIM - WIM 磁盘映像 - WIM 磁碟映像檔 + WIM 磁盘映像 + WIM 磁碟映像檔 WIM Windows Imaging Format - + Dolby Digital audio + Dolby Digital-oudio Dolby Digital سمعي Dolby Digital audio - Aŭdyjo Dolby Digital + Aŭdyjo Dolby Digital Аудио — Dolby Digital - àudio de Dolby Digital + àudio Dolby Digital zvuk Dolby Digital Sain Dolby Digital Dolby Ditital-lyd Dolby-Digital-Audio Ψηφιακός Ήχος Dolby - Dolby Digital audio + Dolby Digital audio Sondosiero en Dolby Digital - sonido Dolby Digital + audio Dolby Digital Dolby audio digitala Dolby Digital -ääni Dolby Digital ljóður audio Dolby Digital + audio Dolby Digital fuaim Dolby Digital son Dolby Digital שמע Dolby Digital @@ -22141,7 +22974,7 @@ àudio Dolby Digital Plik dźwiękowy Dolby Digital áudio Dolby Digital - Áudio Dolby Digital + Áudio Dolby Digital Audio Dolby Digital Аудио Dolby Digital Zvuk Dolby Digital @@ -22152,25 +22985,28 @@ Dolby Digital sesi звук Dolby Digital Âm thanh Dolby Digital - 杜比数字音频 - 杜比數位音訊 + 杜比数字音频 + 杜比數位音訊 - + DTS audio + DTS-oudio + Аудио — DTS àudio DTS zvuk DTS DTS-lyd DTS-Audio Ήχος DTS - DTS audio - sonido DTS + DTS audio + audio DTS DTS audioa DTS-ääni audio DTS + audio DTS fuaim DTS Son DTS שמע DTS @@ -22186,7 +23022,7 @@ àudio DTS Plik dźwiękowy DTS aúdio DTS - Áudio DTS + Áudio DTS Аудио DTS Zvuk DTS Zvok DTS @@ -22194,29 +23030,32 @@ DTS-ljud DTS sesi звукові дані DTS - DTS 音频 - DTS 音訊 + DTS 音频 + DTS 音訊 - - - - + + + + DTSHD audio + DTSHD-oudio + Аудио — DTSHD àudio DTSHD zvuk DTSHD DTSDH-lyd DTSHD-Audio Ήχος DTSHD - DTSHD audio - sonido DTSHD + DTSHD audio + audio DTSHD DTSHD audioa DTS-HD-ääni audio DTSHD + audio DTSHD fuaim DTSHD Son DTSHD שמע DTSHD @@ -22232,7 +23071,7 @@ àudio DTSHD Plik dźwiękowy DTSHD áudio DTSHD - Áudio DTSHD + Áudio DTSHD Аудио DTSHD Zvuk DTSHD Zvok DTSHD @@ -22240,32 +23079,34 @@ DTSHD-ljud DTSHD sesi звукові дані DTSHD - DTSHD 音频 - DTSHD 音訊 + DTSHD 音频 + DTSHD 音訊 - + AMR audio + AMR-oudio AMR سمعي - Aŭdyjo AMR + Aŭdyjo AMR Аудио — AMR àudio AMR zvuk AMR AMR-lyd AMR-Audio Ήχος AMR - AMR audio + AMR audio AMR-sondosiero - sonido AMR + audio AMR AMR audioa AMR-ääni AMR ljóður audio AMR + audio AMR fuaim AMR son AMR שמע AMR @@ -22286,7 +23127,7 @@ àudio AMR Plik dźwiękowy AMR áudio AMR - Áudio AMR + Áudio AMR Audio AMR Аудио AMR Zvuk AMR @@ -22297,34 +23138,36 @@ AMR sesi звук AMR Âm thanh AMR - AMR 音频 - AMR 音訊 + AMR 音频 + AMR 音訊 AMR Adaptive Multi-Rate - - + + AMR-WB audio + AMR-WB-oudio AMR-WB سمعي - Aŭdyjo AMR-WB + Aŭdyjo AMR-WB Аудио — AMR-WB àudio AMR-WB zvuk AMR-WB AMR-WB-lyd AMR-WB-Audio Ήχος AMR-WB - AMR-WB audio + AMR-WB audio AMR-WB-sondosiero - sonido AMR-WB + audio AMR-WB AMR-WB audioa AMR-WB-ääni AMR-WB ljóður audio AMR-WB + audio AMR-WB fuaim AMR-WB son AMR-WB שמע AMR-WN @@ -22345,7 +23188,7 @@ àudio AMR-WB Plik dźwiękowy AMR-WB áudio AMR-WB - Áudio AMR-WB + Áudio AMR-WB Audio AMR-WB Аудио AMR-WB Zvuk AMR-WB @@ -22356,22 +23199,23 @@ AMR-WB sesi звук AMR-WB Âm thanh AMR-WB - AMR-WB 音频 - AMR-WB 音訊 + AMR-WB 音频 + AMR-WB 音訊 AMR-WB Adaptive Multi-Rate Wideband - - + + ULAW (Sun) audio + ULAW- (Sun) oudio ULAW (صن) سمعي ULAW (Sun) audio faylı - Aŭdyjo ULAW (Sun) + Aŭdyjo ULAW (Sun) Аудио — ULAW, Sun àudio ULAW (Sun) zvuk ULAW (Sun) @@ -22379,13 +23223,14 @@ ULAW-lyd (Sun) ULAW-Audio (Sun) Ήχος ULAW (Sun) - ULAW (Sun) audio + ULAW (Sun) audio ULAW-sondosiero (Sun) - sonido ULAW (Sun) + audio ULAW (Sun) ULAW (sun) audioa ULAW (Sun) -ääni ULAW (Sun) ljóður audio ULAW (Sun) + audio ULAW (Sun) fuaim ULAW (Sun) son ULAW (Sun) שמע ULAW (של Sun) @@ -22406,7 +23251,7 @@ àudio ULAW (Sun) Plik dźwiękowy ULAW (Sun) áudio ULAW (Sun) - Áudio ULAW (Sun) + Áudio ULAW (Sun) Fișier audio ULAW (Sun) Аудио ULAW (Sun) Zvuk ULAW (Sun) @@ -22417,31 +23262,33 @@ ULAW (Sun) sesi звук ULAW (Sun) Âm thanh ULAW (Sun) - ULAW (Sun) 音频 - ULAW (Sun) 音訊 + ULAW (Sun) 音频 + ULAW (Sun) 音訊 - + Commodore 64 audio + Commodore 64-oudio Commodore 64 سمعي - Aŭdyjo Commodore 64 + Aŭdyjo Commodore 64 Аудио — Commodore 64 àudio de Commodore 64 zvuk Commodore 64 Commodore 64-lyd Commodore-64-Audio Ήχος Commodore 64 - Commodore 64 audio + Commodore 64 audio Sondosiero de Commodore 64 - sonido de Commodore 64 + audio de Commodore 64 Commodore 64 Audioa Commodore 64 -ääni Commodore 64 ljóð audio Commodore 64 + audio Commodore 64 fuaim Commodore 64 son de Commodore 64 שמע של Commodore 64 @@ -22463,7 +23310,7 @@ àudio Commodore 64 Plik dźwiękowy Commodore 64 áudio Commodore 64 - Áudio Commodore 64 + Áudio Commodore 64 Audio Commodore 64 Аудио Commodore 64 Zvuk Commodore 64 @@ -22474,19 +23321,20 @@ Commodore 64 sesi звук Commodore 64 Âm thanh Commodore 64 - Commodore 64 音频 - Commodore 64 音訊 + Commodore 64 音频 + Commodore 64 音訊 - + PCM audio + PCM-oudio سمعي PCM PCM audio faylı - Aŭdyjo PCM + Aŭdyjo PCM Аудио — PCM àudio PCM zvuk PCM @@ -22494,13 +23342,14 @@ PCM-lyd PCM-Audio Ήχος PCM - PCM audio + PCM audio PCM-sondosiero - sonido PCM + audio PCM PCM audioa PCM-ääni PCM ljóður audio PCM + audio PCM fuaim PCM son PCM שמע PCM @@ -22521,7 +23370,7 @@ àudio PCM Plik dźwiękowy PCM áudio PCM - Áudio PCM + Áudio PCM Audio PCM Аудио PCM Zvuk PCM @@ -22532,29 +23381,30 @@ PCM sesi звук PCM Âm thanh PCM - PCM 音频 - PCM 音訊 + PCM 音频 + PCM 音訊 - - + + - - - - - - - - - + + + + + + + + + AIFC audio + AIFC-oudio AIFC سمعي AIFC audio faylı - Aŭdyjo AIFC + Aŭdyjo AIFC Аудио — AIFC àudio AIFC zvuk AIFC @@ -22562,13 +23412,14 @@ AIFC-lyd AIFC-Audio Ήχος AIFC - AIFC audio + AIFC audio AIFC-sondosiero - sonido AIFC + audio AIFC AIFC audioa AIFC-ääni AIFC ljóður audio AIFC + audio AIFC fuaim AIFC son AIFC שמע AIFC @@ -22590,7 +23441,7 @@ àudio AIFC Plik dźwiękowy AIFC áudio AIFC - Áudio AIFC + Áudio AIFC Fișier audio AIFC Аудио AIFC Zvuk AIFC @@ -22601,13 +23452,13 @@ AIFC sesi звук AIFC Âm thanh AIFC - AIFC 音频 - AIFC 音訊 + AIFC 音频 + AIFC 音訊 AIFC Audio Interchange File format Compressed - + @@ -22615,23 +23466,25 @@ AIFF/Amiga/Mac audio + AIFF/Amiga/Mac-oudio AIFF/Amiga/Mac سمعي AIFF/Amiga/Mac audio faylı - Aŭdyjo AIFF/Amiga/Mac + Aŭdyjo AIFF/Amiga/Mac Аудио — AIFF/Amiga/Mac àudio AIFF/Amiga/Mac zvuk AIFF/Amiga/Mac Sain AIFF/Amiga/Mac - AIFF-/Amiga-/Maclyd + AIFF-/Amiga-/Mac-lyd AIFF/Amiga/Mac-Audio Ήχος AIFF/Amiga/Mac - AIFF/Amiga/Mac audio + AIFF/Amiga/Mac audio AIFF/Amiga/Mac-sondosiero - sonido AIFF/Amiga/Mac + audio AIFF/Amiga/Mac AIFF/Amiga/Mac audioa AIFF/Amiga/Mac-ääni AIFF/Amiga/Mac ljóður audio AIFF/Amiga/Mac + audio AIFF/Amiga/Mac fuaim AIFF/Amiga/Mac son AIFF/Amiga/Mac שמע AIFF/Amiga/Mac @@ -22653,7 +23506,7 @@ àudio AIFF/Amiga/Mac Plik dźwiękowy AIFF/Amiga/Mac áudio AIFF/Amiga/Mac - Áudio AIFF/Amiga/Mac + Áudio AIFF/Amiga/Mac Audio AIFF/Amiga/Mac Аудио AIFF/Amiga/Mac Zvuk AIFF/Amiga/Mac @@ -22664,14 +23517,14 @@ AIFF/Amiga/Mac sesi звук AIFF/Amiga/Mac Âm thanh AIFF/Amiga/Mac - AIFF/Amiga/Mac 音频 - AIFF/Amiga/Mac 音訊 + AIFF/Amiga/Mac 音频 + AIFF/Amiga/Mac 音訊 AIFF Audio Interchange File Format - - + + @@ -22679,19 +23532,20 @@ Monkey's audio Monkey سمعي - Aŭdyjo Monkey's + Aŭdyjo Monkey's Аудио — Monkey àudio de Monkey zvuk Monkey's - Monkeys lyd + Monkey's-lyd Monkey's-Audio Ήχος Monkey's - Monkey's audio - sonido de Monkey + Monkey's audio + audio de Monkey Monkey audioa Monkey's Audio -ääni Monkey's ljóður audio Monkey + audio Monkey's fuaim Monkey's son de Monkey שמע של Monkey's @@ -22711,7 +23565,7 @@ àudio Monkey Plik dźwiękowy Monkey's Audio áudio Monkey - Áudio Monkey's + Áudio Monkey's Audio Monkey's Аудио Monkey's Zvuk Monkey's @@ -22722,20 +23576,27 @@ Monkey's sesi звук Monkey's Âm thanh cua Monkey - Monkey's Audio 音频 - Monkey's 音訊 + Monkey's Audio 音频 + Monkey's 音訊 - + Audible.Com audio - àudio Audible.Com + Аудио — Audible.Com + àudio d'Audible.Com zvuk Audible.Com + Audible.Com-lyd Audible.Com-Audio - Audible.Com audio - sonido de Audible.com + Audible.Com audio + audio de Audible.com + Audible.Com audioa + Audible.Com-ääni + audio Audible.Com + audio Audible.Com + fuaim Audible.Com Audible.Com zvučni zapis Audible.Com hang Audio Audible.Com @@ -22743,28 +23604,46 @@ Audible.Com аудиосы Audible.Com 오디오 Plik dźwiękowy Audible.com - Áudio de audible.com + Áudio de audible.com Аудио Audible.Com Audio Audible.Com Audible.Com-ljud + Audible.Com sesi звук Audible.Com - Audible.Com 音频 - Audible.Com 音訊 + Audible.Com 音频 + Audible.Com 音訊 - - - + + - - + + + Audible Enhanced audio + àudio d'Audible Enhanced + Audible Enhanced-lyd + Audible Erweitertes Audio + Audible Enhanced audio + audio mejorado de Audible + Selvä parannettu ääni + Audible poboljšani zvučni zapis + Audio Audible Enhanced + Plik dźwiękowy Audible Enhanced + Áudio Audible Enhanced + Audible förbättrat ljud + звук Audible Enhanced + Audible 增强音频 + + + + Impulse Tracker audio Impulse Tracker سمعي Impulse Tracker audio faylı - Aŭdyjo Impulse Tracker + Aŭdyjo Impulse Tracker Аудио — Impulse Tracker àudio d'Impulse Tracker zvuk Impulse Tracker @@ -22772,13 +23651,14 @@ Impulse Tracker-lyd Impulse-Tracker-Audio Ήχος Impulse Tracker - Impulse Tracker audio + Impulse Tracker audio Sondosiero de Impulse Tracker - sonido de Impulse Tracker + audio de Impulse Tracker Impulse Tracker audioa Impulse Tracker -ääni Impulse Tracker ljóður audio Impulse Tracker + audio Impulse Tracker fuaim Impulse Tracker son de Impulse Tracker שמע של Impulse Tracker @@ -22799,7 +23679,7 @@ àudio Impulse Tracker Plik dźwiękowy Impulse Tracker áudio Impulse Tracker - Áudio Impulse Tracker + Áudio Impulse Tracker Audio Impulse Tracker Аудио Impulse Tracker Zvuk Impulse Tracker @@ -22810,30 +23690,32 @@ Impulse Tracker sesi звук Impulse Tracker Âm thanh Impulse Tracker - Impulse Tracker 音频 - Impulse Tracker 音訊 + Impulse Tracker 音频 + Impulse Tracker 音訊 - + FLAC audio + FLAC-oudio FLAC سمعي - Aŭdyjo FLAC + Aŭdyjo FLAC Аудио — FLAC àudio FLAC zvuk FLAC FLAC-lyd FLAC-Audio Ήχος FLAC - FLAC audio + FLAC audio FLAC-sondosiero - sonido FLAC + audio FLAC FLAC audioa FLAC-ääni FLAC ljóður audio FLAC + audio FLAC fuaim FLAC son FLAC קובץ שמע מסוג FLAC @@ -22855,7 +23737,7 @@ àudio FLAC Plik dźwiękowy FLAC áudio FLAC - Áudio FLAC + Áudio FLAC Audio FLAC Аудио FLAC Zvuk FLAC @@ -22866,8 +23748,8 @@ FLAC sesi звук FLAC Âm thanh FLAC - FLAC 音频 - FLAC 音訊 + FLAC 音频 + FLAC 音訊 @@ -22876,21 +23758,23 @@ WavPack audio + WavPack-oudio WavPack سمعي - Aŭdyjo WavPack + Aŭdyjo WavPack Аудио — WavPack àudio de WavPack zvuk WavPack WavPack-lyd WavPack-Audio Ήχος WavePack - WavPack audio + WavPack audio WavPack-sondosiero - sonido WavPack + audio WavPack WavPack audioa WavPack-ääni WavPack ljóður audio WavPack + audio WavPack fuaim WavPack son WavPack שמע WavPack @@ -22910,7 +23794,7 @@ àudio WavPack Plik dźwiękowy WavPack áudio WavPack - Áudio WavPack + Áudio WavPack Audio WavPack Аудио WavPack Zvuk WavPack @@ -22921,10 +23805,10 @@ WavPack sesi звук WavPack Âm thanh WavPack - WavPack 音频 - WavPack 音訊 + WavPack 音频 + WavPack 音訊 - + @@ -22932,19 +23816,20 @@ WavPack audio correction file ملف تصحيح WavPack السمعي - Fajł aŭdyjokarekcyi WavPack + Fajł aŭdyjokarekcyi WavPack Файл за корекции на аудио — WavPack fitxer de correcció d'àudio de WavPack opravný zvukový soubor WavPack WavPack-lydkorrektionsfil WavPack-Audiokorrekturdatei Αρχείο διόρθωσης ήχου WavePack - WavPack audio correction file - archivo de corrección de sonido WavPack + WavPack audio correction file + archivo de corrección de audio WavPack WavPack audio-zuzenketaren fitxategia WavPack-äänikorjaustiedosto WavPack ljóðrættingarfíla fichier de correction audio WavPack + file di corezion audio WavPack comhad ceartúchán fuaime WavPack ficheiro de corrección de son WavPack קובץ תיקון שמע של WavPack @@ -22964,7 +23849,7 @@ fichièr de correccion àudio WavPack Plik korekcji dźwięku WavPack ficheiro de correção áudio WavPack - Arquivo de correção de áudio WavPack + Arquivo de correção de áudio WavPack Fișier audio de corecție WavPack Файл коррекции аудио WavPack Opravný zvukový súbor WavPack @@ -22975,18 +23860,19 @@ WavPack ses düzeltme dosyası файл корекції звуку WavPack Tập tin sửa chữa âm thanh WavPack - WavPack 音频校正文件 - WavPack 音訊校正檔 + WavPack 音频校正文件 + WavPack 音訊校正檔 - + MIDI audio + MIDI-oudio MIDI سمعي MIDI audio faylı - Aŭdyjo MIDI + Aŭdyjo MIDI Аудио — MIDI àudio MIDI zvuk MIDI @@ -22994,13 +23880,14 @@ MIDI-lyd MIDI-Audio Ήχος MIDI - MIDI audio + MIDI audio MIDI-sondosiero - sonido MIDI + audio MIDI MIDI audioa MIDI-ääni MIDI ljóður audio MIDI + audio MIDI fuaim MIDI son MIDI שמע MIDI @@ -23021,7 +23908,7 @@ àudio MIDI Plik dźwiękowy MIDI áudio MIDI - Áudio MIDI + Áudio MIDI Audio MIDI Аудио MIDI Zvuk MIDI @@ -23032,11 +23919,11 @@ MIDI sesi звук MIDI Âm thanh MIDI - MIDI 音频 - MIDI 音訊 + MIDI 音频 + MIDI 音訊 - + @@ -23045,19 +23932,20 @@ compressed Tracker audio Tracker سمعي مضغوط - aŭdyjo skampresavanaha Trackera + aŭdyjo skampresavanaha Trackera Аудио — Tracker, компресирано àudio Tracker amb compressió komprimovaný zvuk Tracker - Trackerkomprimeret lyd + komprimeret trackerlyd Komprimiertes Tracker-Audio Συμπιεσμένος ήχος Tracker - compressed Tracker audio - sonido de Tracker comprimido + compressed Tracker audio + audio de Tracker comprimido konprimitutako Tracker audioa pakattu Tracker-ääni stappað Tracker ljóður audio Tracker compressé + audio Tracker comprimût fuaim chomhbhrúite Tracker son comprimido de Tracker שמע גשש מכווץ @@ -23076,7 +23964,7 @@ àudio Tracker compressat Skompresowany plik dźwiękowy Tracker áudio comprimido Tracker - Áudio Tracker compactado + Áudio Tracker compactado Tracker audio comprimat Сжатое аудио Tracker Komprimovaný zvuk Tracker @@ -23087,25 +23975,28 @@ sıkıştırılmış Tracker sesi стиснутий звук Tracker âm thanh Tracker đã nén - 压缩的 Tracker 音频 - 壓縮版 Tracker 音訊 + 压缩的 Tracker 音频 + 壓縮版 Tracker 音訊 - + AAC audio + AAC-oudio + Аудио — AAC àudio AAC zvuk AAC AAC-lyd AAC-Audio Ήχος AAC - AAC audio - sonido AAC + AAC audio + audio AAC AAC audioa AAC-ääni audio AAC + audio AAC fuaim AAC Son AAC שמע AAC @@ -23121,7 +24012,7 @@ àudio AAC Plik dźwiękowy AAC áudio AAC - Áudio AAC + Áudio AAC Аудио AAC Zvuk AAC Zvok AAC @@ -23129,21 +24020,49 @@ AAC-ljud AAC sesi звукові дані AAC - AAC 音频 - AAC 音訊 + AAC 音频 + AAC 音訊 AAC Advanced Audio Coding - - + + - + USAC audio + USAC-oudio + Аудио — USAC + àudio USAC + zvuk USAC + USAC-lyd + USAC-Audio + USAC audio + audio USAC + USAC audioa + USAC-ääni + audio USAC + audio USAC + fuaim USAC + USAC zvučni zapis + USAC hang + Audio USAC + Audio USAC + USAC аудиосы + USAC 오디오 + Plik dźwiękowy USAC + Áudio USAC + Аудио USAC + Zvuk USAC + USAC-ljud + USAC sesi + звукові дані USAC + USAC 音频 + USAC 音訊 USAC Unified Speech and Audio Coding @@ -23151,21 +24070,23 @@ MPEG-4 audio + MPEG-4-oudio MPEG-4 سمعي - Aŭdyjo MPEG-4 + Aŭdyjo MPEG-4 Аудио — MPEG-4 àudio MPEG-4 zvuk MPEG-4 MPEG4-lyd MPEG-4-Audio Ήχος MPEG-4 - MPEG-4 audio + MPEG-4 audio MPEG4-sondosiero - sonido MPEG-4 + audio MPEG-4 MPEG-4 audioa MPEG-4-ääni MPEG-4 ljóður audio MPEG-4 + audio MPEG-4 fuaim MPEG-4 son MPEG-4 שמע MPEG-4 @@ -23186,7 +24107,7 @@ àudio MPEG-4 Plik dźwiękowy MPEG-4 áudio MPEG-4 - Áudio MPEG-4 + Áudio MPEG-4 Audio MPEG-4 Аудио MPEG-4 Zvuk MPEG-4 @@ -23197,39 +24118,65 @@ MPEG-4 sesi звук MPEG-4 Âm thanh MPEG-4 - MPEG-4 音频 - MPEG-4 音訊 + MPEG-4 音频 + MPEG-4 音訊 - + - MPEG-4 Ringtone + MPEG-4 ringtone + Аудио — MPEG-4, звънене + to de trucada MPEG-4 + MPEG-4-ringetone + MPEG-4-Klingelton + MPEG-4 ringtone + tono de llamada MPEG-4 + MPEG-4 dei-tonua + MPEG-4-soittoääni + sonnerie MPEG-4 + MPEG-4 melodija zvona + MPEG-4 csengőhang + Nada panggil MPEG-4 + Suoneria MPEG-4 + MPEG-4 рингтоны + MPEG-4 벨소리 + Dzwonek MPEG-4 + Toque MPEG-4 + Мелодия MPEG-4 + Zvonenie MPEG-4 + MPEG-4-ringsignal + MPEG-4 zil sesi + рингтон MPEG-4 + MPEG-4 铃声 + MPEG-4 鈴聲 MPEG-4 video + MPEG-4-video MPEG-4 مرئي Videu en MPEG-4 - Videa MPEG-4 + Videa MPEG-4 Видео — MPEG-4 vídeo MPEG-4 video MPEG-4 MPEG4-video MPEG-4-Video Βίντεο MPEG-4 - MPEG-4 video + MPEG-4 video MPEG-4-video vídeo MPEG-4 MPEG-4 bideoa MPEG-4-video MPEG-4 video vidéo MPEG-4 + video MPEG-4 físeán MPEG-4 vídeo MPEG-4 וידאו MPEG-4 @@ -23250,7 +24197,7 @@ vidèo MPEG-4 Plik wideo MPEG-4 vídeo MPEG-4 - Vídeo MPEG-4 + Vídeo MPEG-4 Video MPEG-4 Видео MPEG-4 Video MPEG-4 @@ -23261,15 +24208,16 @@ MPEG-4 video відеокліп MPEG-4 Ảnh động MPEG-4 - MPEG-4 视频 - MPEG-4 視訊 + MPEG-4 视频 + MPEG-4 視訊 - - - - - + + + + + + @@ -23279,21 +24227,23 @@ MPEG-4 audio book + MPEG-4-oudioboek كتاب MPEG-4 السمعي - Aŭdyjokniha MPEG-4 + Aŭdyjokniha MPEG-4 Аудио книга — MPEG-4 llibre d'àudio MPEG-4 zvuková kniha MPEG-4 MPEG4-lydbog MPEG-4-Hörbuch Ηχητικό βιβλίο MPEG-4 - MPEG-4 audio book + MPEG-4 audio book MPEG-4-sonlibro audiolibro MPEG-4 MPEG-4 audio-liburua MPEG-4-äänikirja MPEG-4 ljóðbók livre audio MPEG-4 + audio-libri MPEG-4 closleabhar MPEG-4 sonlibro de MPEG-4 ספר דיגיטלי MPEG-4 @@ -23314,7 +24264,7 @@ libre àudio MPEG-4 Książka dźwiękowa MPEG-4 livro áudio MPEG-4 - Áudio livro MPEG-4 + Áudio livro MPEG-4 Carte audio MPEG-4 Аудиокнига MPEG-4 Zvuková kniha MPEG-4 @@ -23325,31 +24275,33 @@ MPEG-4 sesli kitabı аудіокнига MPEG-4 Sách âm thanh MPEG-4 - MPEG-4 有声书 - MPEG-4 音訊書 + MPEG-4 有声书 + MPEG-4 音訊書 - + 3GPP multimedia file + 3GPP-multimedialêer ملف وسائط متعددة 3GPP - Multymedyjny fajł 3GPP + Multymedyjny fajł 3GPP Мултимедия — 3GPP fitxer multimèdia 3GPP multimediální soubor 3GPP 3GPP multimedie-fil 3GPP-Multimediadatei Αρχείο πολυμέσων 3GPP - 3GPP multimedia file + 3GPP multimedia file archivo multimedia 3GPP 3GPP multimediako fitxategia 3GPP-multimediatiedosto 3GGP margmiðlafíla fichier multimédia 3GPP + file multimediâl 3GPP comhad ilmheán 3GPP ficheiro multimedia 3GPP קובץ מולטימדיה מסוג 3GPP @@ -23370,7 +24322,7 @@ fichièr multimèdia 3GPP Plik multimedialny 3GPP ficheiro multimédia 3GPP - Arquivo multimídia 3GPP + Arquivo multimídia 3GPP Fișier multimedia 3GPP Мультимедийный файл 3GPP Súbor multimédií 3GPP @@ -23378,19 +24330,19 @@ File multimedial 3GPP 3ГПП мултимедијална датотека 3GPP-multimediafil - 3GPP multimedya dosyası + 3GPP çoklu ortam dosyası файл мультимедійних даних 3GPP Tập tin đa phương tiện 3GPP - 3GPP 多媒体文件 - 3GPP 多媒體檔案 + 3GPP 多媒体文件 + 3GPP 多媒體檔案 3GPP 3rd Generation Partnership Project - - - - + + + + @@ -23406,6 +24358,7 @@ 3GPP2 multimedia file + 3GPP2-multimedialêer ملف وسائط متعددة 3GPP2 Мултимедия — 3GPP2 fitxer multimèdia 3GPP2 @@ -23413,12 +24366,13 @@ 3GPP2 multimedie-fil 3GPP2-Multimediadatei Αρχείο πολυμέσων 3GPP2 - 3GPP2 multimedia file + 3GPP2 multimedia file archivo multimedia 3GPP2 3GPP2 multimediako fitxategia 3GPP2-multimediatiedosto 3GGP2 margmiðlafíla fichier multimédia 3GPP2 + file multimediâl 3GPP2 comhad ilmheán 3GPP2 ficheiro multimedia 3GPP2 קובץ מולטימדיה 3GPP2 @@ -23436,22 +24390,21 @@ fichièr multimèdia 3GPP2 Plik multimedialny 3GPP2 ficheiro multimédia 3GPP2 - Arquivo multimídia 3GPP2 + Arquivo multimídia 3GPP2 Fișier multimedia 3GPP2 Мультимедийный файл 3GPP2 Súbor multimédií 3GPP2 Večpredstavnostna datoteka 3GPP2 3ГПП2 мултимедијална датотека 3GPP2-multimediafil - 3GPP2 multimedya dosyası + 3GPP2 çoklu ortam dosyası файл мультимедійних даних 3GPP2 - 3GPP2 多媒体文件 - 3GPP2 多媒體檔案 + 3GPP2 多媒体文件 + 3GPP2 多媒體檔案 3GPP2 3rd Generation Partnership Project 2 - - + @@ -23461,20 +24414,21 @@ Amiga SoundTracker audio مقتفي صوت Amiga السمعي - Aŭdyjo Amiga SoundTracker + Aŭdyjo Amiga SoundTracker Аудио — Amiga SoundTracker àudio SoundTracker d'Amiga zvuk Amiga SoundTracker Amiga SoundTracker-lyd Amiga-SoundTracker-Audio Ήχος Amiga SoundTracker - Amiga SoundTracker audio + Amiga SoundTracker audio Sondosiero de Amiga SoundTracker - sonido de Amiga SoundTracker + audio de Amiga SoundTracker Amiga soundtracker audioa Amiga SoundTracker -ääni Amiga SoundTracker ljóður audio SoundTracker Amiga + audio Amiga SoundTracker fuaim Amiga SoundTracker son de Amiga SoundTracker קובץ שמע של Amiga SoundTracker @@ -23496,7 +24450,7 @@ àudio SoundTracker Amiga Plik dźwiękowy Amiga SoundTracker áudio SoundTracker do Amiga - Áudio Amiga SoundTracker + Áudio Amiga SoundTracker Audio Amiga SoundTracker Аудио Amiga SoundTracker Zvuk Amiga SoundTracker @@ -23507,41 +24461,60 @@ Amiga SoundTracker sesi звук Amiga SoundTracker Âm thanh Amiga SoundTracker - Amiga SoundTracker 音频 - Amiga SoundTracker 音訊 + Amiga SoundTracker 音频 + Amiga SoundTracker 音訊 - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + + + + + + + - + @@ -23553,21 +24526,23 @@ MP2 audio + MP2-oudio MP2 سمعي - Aŭdyjo MP2 + Aŭdyjo MP2 Аудио — MP2 àudio MP2 zvuk MP2 MP2-lyd MP2-Audio Ήχος MP2 - MP2 audio + MP2 audio MP2-sondosiero - sonido MP2 + audio MP2 MP2 audioa MP2-ääni MP2 ljóður audio MP2 + audio MP2 fuaim MP2 son MP2 שמע MP2 @@ -23587,7 +24562,7 @@ àudio MP2 Plik dźwiękowy MP2 áudio MP2 - Áudio MP2 + Áudio MP2 Audio MP2 Аудио MP2 Zvuk MP2 @@ -23598,16 +24573,17 @@ MP2 sesi звук MP2 Âm thanh MP2 - MP2 音频 - MP2 音訊 + MP2 音频 + MP2 音訊 MP3 audio + MP3-oudio MP3 سمعي MP3 audio faylı - Aŭdyjo MP3 + Aŭdyjo MP3 Аудио — MP3 àudio MP3 zvuk MP3 @@ -23615,13 +24591,14 @@ MP3-lyd MP3-Audio Ήχος MP3 - MP3 audio + MP3 audio MP3-sondosiero - sonido MP3 + audio MP3 MP3 audioa MP3-ääni MP3 ljóður audio MP3 + audio MP3 fuaim MP3 son MP3 שמע MP3 @@ -23643,7 +24620,7 @@ àudio MP3 Plik dźwiękowy MP3 áudio MP3 - Áudio MP3 + Áudio MP3 Audio MP3 Аудио MP3 Zvuk MP3 @@ -23654,70 +24631,26 @@ MP3 sesi звук MP3 Âm thanh MP3 - MP3 音频 - MP3 音訊 + MP3 音频 + MP3 音訊 - - + + + + + + + - MP3 audio (streamed) - MP3 سمعي (تدفق) - Aŭdyjo MP3 (płyń) - Аудио — MP3, поточно - àudio MP3 (flux) - zvuk MP3 (proud) - MP3-lyd (strøm) - MP3-Audio (Stream) - Ήχος MP3 (εκπεμπόμενος) - MP3 audio (streamed) - MP3-sondosiero (fluigate) - sonido MP3 (en transmisión) - MP3 audioa (korrontea) - MP3-ääni (virtaus) - MP3 ljóður (streymað) - audio MP3 (flux) - fuaim MP3 (sruthaithe) - son MP3 (en stream) - שמע MP3 (מוזרם) - MP3 zvučni zapis (strujanje) - MP3 hang (sugárzott) - Audio MP3 (fluxo) - Audio MP3 (stream) - Audio MP3 (in streaming) - MP3 オーディオ (ストリーム) - MP3 აუდიო (ნაკადი) - MP3 аудиосы (ағымдық) - MP3 오디오(스트림) - MP3 garso įrašas (transliuojamas) - MP3 audio (straumēts) - Audio MP3 (aliran) - MP3-lyd (streaming) - MP3-audio (gestreamd) - Strauma MP3-lyd - àudio MP3 (flux) - Plik dźwiękowy MP3 (strumień) - áudio MP3 (em fluxo) - Áudio MP3 (em fluxo) - Audio MP3 (flux) - Аудио MP3 (потоковое) - Zvuk MP3 (streamovaný) - Zvočna datoteka MP3 (pretočna) - Audio MP3 (streamed) - МП3 звук (проточан) - MP3-ljud (flöde) - MP3 sesi (akış) - звук MP3 (потоковий) - Âm thanh MP3 (chạy luồng) - MP3 音频流媒体 - MP3 音訊 (串流) + Media playlist @@ -23728,77 +24661,38 @@ - + - HTTP Live Streaming playlist - قائمة بث HTTP حية - Списък за изпълнение — поток по HTTP - llista de reproducció en temps real HTTP - seznam k přehrání HTTP Live Streaming - Afspilningsliste til HTTP-livestrøm - HTTP Live-Streaming-Wiedergabeliste - Λίστα αναπαραγωγής ζωντανής μετάδοσης σε HTTP - HTTP Live Streaming playlist - lista de reproducción de flujo en directo HTTP - HTTP zuzeneko korrontearen erreprodukzio-zerrenda - HTTP beinleiðis streymaður avspælingarlisti - liste de lecture de flux HTTP Live - seinmliosta sruthaithe bheo HTTP - lista de reprodución de fluxo HTTP - רשימת השמעה הזרימה של HTTP - HTTP popis izvođenja emitiranja uživo - HTTP élő lejátszólista - Lista de selection HTTP Live Streaming - Daftar putar HTTP Live Streaming - Playlist Live Steaming HTTP - HTTP ライブストリーミング再生リスト - HTTP тірі ағым ойнау тізімі - HTTP 라이브 스트리밍 재생 목록 - HTTP tiesioginio transliavimo grojaraštis - HTTP dzīvās straumēšanas repertuārs - HTTP Live Streaming afspeellijst - lista de lectura de flux HTTP Live - Lista odtwarzania strumieniowego na żywo HTTP - lista de reprodução HTTP Live Streaming - Lista de Reprodução Streaming ao Vivo de HTTP - Listă de redare difuzată ca flux HTTP - Список воспроизведения HTTP-потока - Zoznam stôp HTTP Live Streaming - Seznam predvajanja živega pretoka HTTP - ХТТП списак нумера Живог Протока - HTTP Live Streaming-spellista - HTTP Canlı Akış çalma listesi - список відтворення HTTP Live Streaming - HTTP 实时流播放列表 - HTTP 即時串流播放清單 + Media playlist - - - + + + Microsoft ASX playlist قائمة تشغيل مايكروسوفت ASX - Śpis Microsoft ASX + Śpis Microsoft ASX Списък за изпълнение — Microsoft ASX llista de reproducció de Microsoft ASX seznam k přehrání Microsoft ASX Microsoft ASX-afspilningsliste Microsoft-ASX-Wiedergabeliste Λίστα αναπαραγωγής Microsoft ASX - Microsoft ASX playlist + Microsoft ASX playlist lista de reproducción ASX de Microsoft Microsoft ASX erreprodukzio-zerrenda Microsoft ASX -soittolista Microsoft ASX avspælingarlisti liste de lecture Microsoft ASX + liste di riproduzion Microsoft ASX seinmliosta Microsoft ASX lista de reprodución Microsoft ASX רשימת השמעה ASX (מיקרוסופט) @@ -23819,7 +24713,7 @@ lista de lectura Microsoft ASX Lista odtwarzania Microsoft ASX lista de reprodução Microsoft ASX - Lista de reprodução do Microsoft ASX + Lista de reprodução do Microsoft ASX Listă redare Microsoft ASX Список воспроизведения Microsoft ASX Zoznam skladieb Microsoft ASX @@ -23830,8 +24724,8 @@ Microsoft ASX çalma listesi список відтворення ASX Microsoft Danh mục nhạc Microsoft ASX - Microsoft ASX 播放列表 - 微軟 ASX 播放清單 + Microsoft ASX 播放列表 + 微軟 ASX 播放清單 @@ -23841,29 +24735,31 @@ - - - - + + + + PSF audio + PSF-oudio PSF سمعي - Aŭdyjo PSF + Aŭdyjo PSF Аудио — PSF àudio PSF zvuk PSF PSF-lyd PSF-Audio Ήχος PSF - PSF audio + PSF audio PSF-sondosiero - sonido PSF + audio PSF PSF audioa PSF-ääni PSF ljóður audio PSF + audio PSF fuaim PSF son PSF שמע PSF @@ -23883,7 +24779,7 @@ àudio PSF Plik dźwiękowy PSF áudio PSF - Áudio PSF + Áudio PSF Audio PSF Аудио PSF Zvuk PSF @@ -23894,32 +24790,34 @@ PSF sesi звук PSF Âm thanh PSF - PSF 音频 - PSF 音訊 + PSF 音频 + PSF 音訊 PSF Portable Sound Format - + MiniPSF audio + MiniPSF-oudio MiniPSF سمعي - Aŭdyjo MiniPSF + Aŭdyjo MiniPSF Аудио — MiniPSF àudio MiniPSF zvuk MiniPSF MiniPSF-lyd MiniPSF-Audio Ήχος MiniPSF - MiniPSF audio + MiniPSF audio MiniPSF-sondosiero - sonido MiniPSF + audio MiniPSF MiniPSF audioa MiniPSF-ääni MiniPSF ljóður audio MiniPSF + audio MiniPSF fuaim MiniPSF son MiniPSF שמע של MiniPSP @@ -23940,7 +24838,7 @@ àudio MiniPSF Plik dźwiękowy MiniPSF áudio MiniPSF - Áudio MiniPSF + Áudio MiniPSF Audio MiniPSF Аудио MiniPSF Zvuk MiniPSF @@ -23951,8 +24849,8 @@ MiniPSF sesi звук MiniPSF Âm thanh MiniPSF - MiniPSF 音频 - MiniPSF 音訊 + MiniPSF 音频 + MiniPSF 音訊 MiniPSF Miniature Portable Sound Format @@ -23960,20 +24858,22 @@ PSFlib audio library + PSFlib-oudiobiblioteek مكتبة PSFlib السمعية - Aŭdyjobiblijateka PSFlib + Aŭdyjobiblijateka PSFlib Аудио библиотека — PSFlib biblioteca d'àudio PSFlib zvuková knihovna PSFlib PSFlib-lydbibliotek PSFlib-Audiobibliothek Βιβλιοθήκη ήχου PSFlib - PSFlib audio library - biblioteca de sonido PSFlib + PSFlib audio library + biblioteca de audio PSFlib PSFlib audioaren liburutegia PSFlib-äänikirjasto PSFlib ljóðsavn bibliothèque audio PSFlib + librarie audio PSFlib leabharlann fhuaime PSFlib Biblioteca de son PSFlib ספריית שמע PSFlib @@ -23993,7 +24893,7 @@ bibliotèca àudio PSFlib Biblioteka dźwiękowa PSFlib biblioteca áudio PSFlib - Biblioteca de áudio PSFlib + Biblioteca de áudio PSFlib Bibliotecă audio PSFlib Фонотека PSFlib Zvuková knižnica PSFlib @@ -24004,8 +24904,8 @@ PSFlib ses kitaplığı аудіобібліотека PSFlib Thư viện âm thanh PSFlib - PSFlib 音频库 - PSFlib 音訊庫 + PSFlib 音频库 + PSFlib 音訊庫 PSFlib Portable Sound Format Library @@ -24013,20 +24913,22 @@ Windows Media audio + Windows Media-oudio Windows Media سمعي - Aŭdyjo Windows Media + Aŭdyjo Windows Media Аудио — Windows Media àudio de Windows Media zvuk Windows Media Windows Media-lyd Windows-Media-Audio Ήχος Windows Media - Windows Media audio - sonido de Windows Media + Windows Media audio + audio de Windows Media Windows Media audioa Windows Media -ääni Windows Media ljóður audio Windows Media + audio Windows Media fuaim Windows Media son de Windows Media שמע של Windows Media @@ -24046,7 +24948,7 @@ àudio Windows Media Plik dźwiękowy Windows Media áudio Windows Media - Áudio do Windows Media + Áudio do Windows Media Audio Windows Media Аудио Windows Media Zvuk Windows Media @@ -24057,28 +24959,30 @@ Windows Media sesi звук Windows Media Âm thanh Windows Media - Windows Media 音频 - Windows Media 音訊 + Windows Media 音频 + Windows Media 音訊 Musepack audio + Musepack-oudio Musepack سمعي - Aŭdyjo Musepack + Aŭdyjo Musepack Аудио — Musepack àudio de Musepack zvuk Musepack - Musepacklyd + Musepack-lyd Musepack-Audio Ήχος Musepack - Musepack audio - sonido Musepack + Musepack audio + audio Musepack Musepack audioa Musepack-ääni Musepack ljóður audio Musepack + audio Musepack fuaim Musepack son de Musepack שמע של Musepack @@ -24098,7 +25002,7 @@ àudio Musepack Plik dźwiękowy Musepack áudio Musepack - Áudio Musepack + Áudio Musepack Audio Musepack Аудио Musepack Zvuk Musepack @@ -24109,10 +25013,11 @@ Musepack sesi звук Musepack Âm thanh Musepack - Musepack 音频 - Musepack 音訊 + Musepack 音频 + Musepack 音訊 - + + @@ -24120,22 +25025,24 @@ RealAudio document + RealAudio-dokument مستند RealAudio Documentu RealAudio - Dakument RealAudio + Dakument RealAudio Документ — RealAudio document RealAudio dokument RealAudio RealAudio-dokument RealAudio-Dokument Έγγραφο RealAudio - RealAudio document + RealAudio document RealAudio-dokumento documento RealAudio RealAudio dokumentua RealAudio-asiakirja RealAudio skjal document RealAudio + document RealAudio cáipéis RealAudio documento Realson מסמך של RealAudio @@ -24155,7 +25062,7 @@ document RealAudio Dokument RealAudio documento RealAudio - Documento RealAudio + Documento RealAudio Document RealAudio Документ RealAudio Dokument RealAudio @@ -24166,81 +25073,61 @@ RealAudio belgesi документ RealAudio Tài liệu âm thanh RealAudio - RealAudio 文档 - RealAudio 文件 + RealAudio 文档 + RealAudio 文件 - RealMedia Metafile - ملف تعريف RealMedia - Metafajł RealMedia - Метафайл — RealMedia - metafitxer RealMedia - RealMedia Metafile - RealMedia-metafil - RealMedia-Metadatei - Metafile RealMedia - RealMedia Metafile - metaarchivo RealMedia - RealMedia metafitxategia - RealMedia-metatiedosto - RealMedia metafíla - métafichier RealMedia - Meiteachomhad RealMedia - Metaficheiro RealMedia - קובץ מטא של RealMedia - RealMedia meta datoteka - RealMedia metafájl - Metafile RealMedia - RealMedia Metafile - Metafile RealMedia - RealMedia メタファイル - RealMedia метафайлы - RealMedia 메타 파일 - RealMedia metafailas - RealMedia metadatne - RealMedia-metafil - RealMedia-metabestand - RealMedia-metafil - metafichièr RealMedia - Metaplik RealMedia - metaficheiro RealMedia - Meta arquivo do RealMedia - Metafișier RealMedia - Мета-файл RealMedia - RealMedia Metafile - Metadatoteka RealMedia - Metafile RealMedia - метадатотека Рил Медија - RealMedia-metafil - RealMedia Meta Dosyası - метафайл RealMedia - Siêu tập tin RealMedia - RealMedia 元文件 - RealMedia 中介檔 + RealMedia playlist + Списък за изпълнение — RealMedia + llista de reproducció RealMedia + RealMedia-afspilningsliste + RealMedia-Wiedergabeliste + RealMedia playlist + lista de reproducción de RealMedia + RealMedia erreprodukzio-zerrenda + RealMedia-soittolista + liste de lecture RealMedia + RealMedia popis izvođenja + RealMedia lejátszólista + Daftar putar RealMedia + Playlist RealMedia + RealMedia ойнау тізімі + RealMedia 재생 목록 + Lista odtwarzania RealMedia + Lista de reprodução do RealMedia + Список воспроизведения RealMedia + Zoznam skladieb RealMedia + RealMedia-spellista + RealMedia çalma listesi + список відтворення RealMedia + RealMedia 播放列表 + RealMedia 播放清單 RealVideo document + RealVideo-dokument مستند RealVideo Documentu RealVideo - Dakument RealVideo + Dakument RealVideo Документ — RealVideo document RealVideo dokument RealVideo RealAudio-dokument RealVideo-Dokument Έγγραφο RealVideo - RealVideo document + RealVideo document RealVideo-dokumento documento RealVideo RealVideo dokumentua RealVideo-asiakirja RealVideo skjal document RealVideo + document RealVideo cáipéis RealVideo documento RealVideo מסמך של RealVideo @@ -24260,7 +25147,7 @@ document RealVideo Dokument RealVideo documento RealVideo - Documento RealVideo + Documento RealVideo Document RealVideo Документ RealVideo Dokument RealVideo @@ -24268,33 +25155,35 @@ Dokument RealVideo документ Рил Видеа RealVideo-dokument - RealAudio belgesi + RealVideo belgesi документ RealVideo Tài liệu ảnh động RealVideo - RealAudio 文档 - RealVideo 文件 + RealAudio 文档 + RealVideo 文件 RealMedia document + RealMedia-dokument مستند RealMedia Documentu RealMedia - Dakument RealMedia + Dakument RealMedia Документ — RealMedia document RealMedia dokument RealMedia RealMedia-dokument RealMedia-Dokument Έγγραφο RealMedia - RealMedia document + RealMedia document RealMedia-dokumento documento RealMedia RealMedia dokumentua RealMedia-asiakirja RealMedia skjal document RealMedia + document RealMedia cáipéis RealMedia documento RealMedia מסמך של RealMedia @@ -24314,7 +25203,7 @@ document RealMedia Dokument RealMedia documento RealMedia - Documento RealMedia + Documento RealMedia Document RealMedia Документ RealMedia Dokument RealMedia @@ -24325,11 +25214,11 @@ RealMedia belgesi документ RealMedia Tài liệu RealMedia - RealMedia 文档 - RealMedia 文件 + RealMedia 文档 + RealMedia 文件 - + @@ -24341,22 +25230,24 @@ RealPix document + RealPix-dokument مستند RealPix Documentu RealPix - Dakument RealPix + Dakument RealPix Документ — RealPix document RealPix dokument RealPix RealPix-dokument RealPix-Dokument Έγγραφο RealPix - RealPix document + RealPix document RealPix-dokumento documento RealPix RealPix dokumentua RealPix-asiakirja RealPix skjal document RealPix + document RealPix cáipéis RealPix documento RealPix מסמך של RealPix @@ -24376,7 +25267,7 @@ document RealPix Dokument RealPix documento RealPix - Documento RealPix + Documento RealPix Document RealPix Документ RealPix Dokument RealPix @@ -24387,28 +25278,30 @@ RealPix belgesi документ RealPix Tài liệu ảnh RealPix - RealPix 文档 - RealPix 文件 + RealPix 文档 + RealPix 文件 RealText document + RealText-dokument مستند RealText Documentu RealText - Dakument RealText + Dakument RealText Документ — RealText document RealText dokument RealText RealText-dokument RealText-Dokument Έγγραφο RealText - RealText document + RealText document RealText-dokumento documento RealText RealText dokumentua RealText-asiakirja RealText skjal document RealText + document RealText cáipéis RealText documento RealText מסמך של RealText @@ -24428,7 +25321,7 @@ document RealText Dokument RealText documento RealText - Documento RealText + Documento RealText Document RealText Документ RealText Dokument RealText @@ -24439,15 +25332,16 @@ RealText belgesi документ RealText Tài liệu văn bản RealText - RealText 文档 - RealText 文件 + RealText 文档 + RealText 文件 RIFF audio + RIFF-oudio RIFF سمعي RIFF audio faylı - Aŭdyjo RIFF + Aŭdyjo RIFF Аудио — RIFF àudio RIFF zvuk RIFF @@ -24455,13 +25349,14 @@ RIFF-lyd RIFF-Audio Ήχος RIFF - RIFF audio + RIFF audio RIFF-sondosiero - sonido RIFF + audio RIFF RIFF audioa RIFF-ääni RIFF ljóð audio RIFF + audio RIFF fuaim RIFF son RIFF שמע RIFF @@ -24482,7 +25377,7 @@ àudio RIFF Plik dźwiękowy RIFF áudio RIFF - Áudio RIFF + Áudio RIFF Audio RIFF Аудио RIFF Zvuk RIFF @@ -24493,20 +25388,24 @@ RIFF sesi звук RIFF Âm thanh RIFF - RIFF 音频 - RIFF 音訊 + RIFF 音频 + RIFF 音訊 RIFF container + RIFF-houer + Контейнер — RIFF contenidor RIFF kontejner RIFF RIFF-container RIFF-Container Περιέκτης RIFF - RIFF container + RIFF container contenedor RIFF RIFF edukitzailea + RIFF-kontti conteneur RIFF + contignidôr RIFF coimeádán RIFF Contenedor RIFF מכולת RIFF @@ -24520,7 +25419,7 @@ contenidor RIFF Kontener RIFF contentor RIFF - Contêiner RIFF + Contêiner RIFF Контейнер RIFF Kontajner RIFF Vsebnik RIFF @@ -24528,18 +25427,18 @@ RIFF-behållare RIFF deposu контейнер RIFF - RIFF 容器 - RIFF 容器 - + RIFF 容器 + RIFF 容器 + - + Scream Tracker 3 audio Scream Tracker 3 سمعي Scream Tracker 3 audio faylı - Aŭdyjo Scream Tracker 3 + Aŭdyjo Scream Tracker 3 Аудио — Scream Tracker 3 àudio de Scream Tracker 3 skladba Scream Tracker 3 @@ -24547,13 +25446,14 @@ Scream Tracker 3-lyd Scream-Tracker-3-Audio Ήχος Scream Tracker 3 - Scream Tracker 3 audio + Scream Tracker 3 audio Sondosiero de Scream Tracker 3 - sonido Scream Tracker 3 + audio Scream Tracker 3 Scream Tracker 3 audioa Scream Tracker 3 -ääni Scream Tracker 3 ljóður audio Scream Tracker 3 + audio Scream Tracker 3 fuaim Scream Tracker 3 son Scream Tracker 3 שמע של Scream Tracker 3 @@ -24574,7 +25474,7 @@ àudio Scream Tracker 3 Plik dźwiękowy Scream Tracker 3 áudio Scream Tracker 3 - Áudio Scream Tracker 3 + Áudio Scream Tracker 3 Audio Scream Tracker 3 Аудио Scream Tracker 3 Skladba Scream Tracker 3 @@ -24585,8 +25485,8 @@ Scream Tracker 3 sesi звук Scream Tracker 3 Âm thanh Scream Tracker 3 - Scheme Tracker 3 音频 - Scream Tracker 3 音訊 + Scheme Tracker 3 音频 + Scream Tracker 3 音訊 @@ -24595,20 +25495,21 @@ MP3 ShoutCast playlist قائمة تشغيل MP3 ShoutCast - Śpis piesień dla tranślacyi MP3 + Śpis piesień dla tranślacyi MP3 Списък за изпълнение — MP3 ShoutCast llista de reproducció MP3 ShoutCast seznam k přehrání MP3 ShoutCast MP3 ShoutCast-afspilningsliste MP3-ShoutCast-Wiedergabeliste Λίστα αναπαραγωγής MP3 ShoutCast - MP3 ShoutCast playlist + MP3 ShoutCast playlist MP3-ludlisto de ShoutCast lista de reproducción MP3 ShoutCast MP3 ShoutCast erreprodukzio-zerrenda MP3 ShoutCast -soittolista MP3 ShoutCast avspælingarlisti liste de lecture MP3 ShoutCast + liste di riproduzion MP3 ShoutCast seinmliosta MP3 ShoutCast lista de reprodución MP3 de ShoutCast רשימת השמעה MP3 של ShoutCast @@ -24629,7 +25530,7 @@ lista de lectura MP3 ShoutCast Lista odtwarzania MP3 ShoutCast lista de reprodução MP3 ShoutCast - Lista de reprodução MP3 ShoutCast + Lista de reprodução MP3 ShoutCast Listă MP3 ShoutCast Список воспроизведения MP3 ShoutCast Zoznam skladieb MP3 ShoutCast @@ -24640,14 +25541,14 @@ MP3 ShoutCast çalma listesi список програвання MP3 ShoutCast Danh mục nhạc MP3 ShoutCast - MP3 ShoutCast 播放列表 - MP3 ShoutCast 播放清單 + MP3 ShoutCast 播放列表 + MP3 ShoutCast 播放清單 - - - + + + @@ -24655,7 +25556,7 @@ Scream Tracker audio Scream Tracker سمعي Scream Tracker audio faylı - Aŭdyjo Scream Tracker + Aŭdyjo Scream Tracker Аудио — Scream Tracker àudio de Scream Tracker skladba Scream Tracker @@ -24663,13 +25564,14 @@ Scream Tracker-lyd Scream-Tracker-Audio Ήχος Scream Tracker - Scream Tracker audio + Scream Tracker audio Sondosiero de Scream Tracker - sonido Scream Tracker + audio Scream Tracker Scream Tracker audioa Scream Tracker -ääni Scream Tracker ljóður audio Scream Tracker + audio Scream Tracker fuaim Scream Tracker son Scream Tracker שמע של Scream Tracker @@ -24690,7 +25592,7 @@ àudio Scream Tracker Plik dźwiękowy Scream Tracker áudio Scream Tracker - Áudio Scream Tracker + Áudio Scream Tracker Audio Scream Tracker Аудио Scream Tracker Skladba Scream Tracker @@ -24701,20 +25603,21 @@ Scream Tracker sesi звук Scream Tracker Âm thanh Scream Tracker - Scream Tracker 音频 - Scream Tracker 音訊 + Scream Tracker 音频 + Scream Tracker 音訊 - - - + + + VOC audio + VOC-oudio VOC سمعي VOC audio faylı - Aŭdyjo VOC + Aŭdyjo VOC Аудио — VOC àudio VOC zvuk VOC @@ -24722,13 +25625,14 @@ VOC-lyd VOC-Audio Ήχος VOC - VOC audio + VOC audio VOC-sondosiero - sonido VOC + audio VOC VOC audioa VOC-ääni VOC ljóður audio VOC + audio VOC fuaim VOC son VOC שמע VOC @@ -24749,7 +25653,7 @@ àudio VOC Plik dźwiękowy VOC áudio VOC - Áudio VOC + Áudio VOC Audio VOC Аудио VOC Zvuk VOC @@ -24760,15 +25664,16 @@ VOC sesi звук VOC Âm thanh VOC - VOC 音频 - VOC 音訊 + VOC 音频 + VOC 音訊 WAV audio + WAV-oudio WAV سمعي WAV audio faylı - Aŭdyjo WAV + Aŭdyjo WAV Аудио — WAV àudio WAV zvuk WAV @@ -24776,13 +25681,14 @@ WAV-lyd WAV-Audio Ήχος WAV - WAV audio + WAV audio WAV-sonkodo - sonido WAV + audio WAV WAV audioa WAV-ääni WAV ljóður audio WAV + audio WAV fuaim WAV son WAV שמע WAV @@ -24803,7 +25709,7 @@ àudio WAV Plik dźwiękowy WAV áudio WAV - Áudio WAV + Áudio WAV Audio WAV Аудио WAV Zvuk WAV @@ -24814,13 +25720,13 @@ WAV sesi звук WAV Âm thanh WAV - WAV 音频 - WAV 音訊 + WAV 音频 + WAV 音訊 - - + + @@ -24828,7 +25734,7 @@ Scream Tracker instrument آلة Scream Tracker Scream Tracker instrumenti - Instrument Scream Tracker + Instrument Scream Tracker Инструмент — Scream Tracker instrument de Scream Tracker nástroj pro Scream Tracker @@ -24836,13 +25742,14 @@ Scream Tracker-instrument Scream-Tracker-Instrument Μουσικό όργανο Scream Tracker - Scream Tracker instrument + Scream Tracker instrument instrumento de Scream Tracker instrumento Scream Tracker Scream Tracker instrumentua Scream Tracker -soitin Scream Tracker ljóðføri instrument Scream Tracker + strument Scream Tracker ionstraim Scream Tracker Instrumento Scream Tracker כלי של Scream Tracker @@ -24863,7 +25770,7 @@ instrument Scream Tracker Instrument Scream Tracker instrumento Scream Tracker - Instrumento Scream Tracker + Instrumento Scream Tracker Instrument Scream Tracker Инструмент Scream Tracker Nástroj pre Scream Tracker @@ -24874,8 +25781,8 @@ Scream Tracker çalgısı інструмент Scream Tracker Nhạc khí Scream Tracker - Scream Tracker 乐器 - Scream Tracker 樂器檔 + Scream Tracker 乐器 + Scream Tracker 樂器檔 @@ -24885,7 +25792,7 @@ FastTracker II audio FastTracker II سمعي FastTracker II audio faylı - Aŭdyjo FastTracker II + Aŭdyjo FastTracker II Аудио — FastTracker II àudio de FastTracker II zvuk FastTracker II @@ -24893,13 +25800,14 @@ FastTracker II-lyd FastTracker-II-Audio Ήχος FastTracker II - FastTracker II audio + FastTracker II audio Sondosiero de FastTracker II - sonido FastTracker II + audio FastTracker II FastTracker II.ren audioa FastTracker II -ääni FastTracker II ljóður audio FastTracker II + audio FastTracker II fuaim FastTracker II son de FastTracker II שמע FastTracker II @@ -24921,7 +25829,7 @@ àudio FastTracker II Plik dźwiękowy FastTracker II áudio FastTracker II - Áudio FastTracker II + Áudio FastTracker II Audio FastTracker II Аудио FastTracker II Zvuk FastTracker II @@ -24932,8 +25840,8 @@ FastTracker II sesi звук FastTracker II Âm thanh FastTracker II - FastTracker II 音频 - FastTracker II 音訊 + FastTracker II 音频 + FastTracker II 音訊 @@ -24941,21 +25849,23 @@ TrueAudio audio + TrueAudio-oudio TrueAudio سمعي - Aŭdyjo TrueAudio + Aŭdyjo TrueAudio Аудио — TrueAudio - àudio de TrueAudio + àudio TrueAudio zvuk TrueAudio TrueAudio-lyd TrueAudio-Audio Ήχος TrueAudio - TrueAudio audio + TrueAudio audio TrueAudio-sondosiero - sonido TrueAudio + audio TrueAudio TrueAudio audioa TrueAudio-ääni TrueAudio ljóður audio TrueAudio + audio TrueAudio fuaim TrueAudio son Trueson שמע TrueAudio @@ -24975,7 +25885,7 @@ àudio TrueAudio Plik dźwiękowy TrueAudio áudio TrueAudio - Áudio TrueAudio + Áudio TrueAudio Audio TrueAudio Аудио TrueAudio Zvuk TrueAudio @@ -24986,8 +25896,8 @@ TrueAudio sesi звук TrueAudio Âm thanh TrueAudio - TrueAudio 音频 - TrueAudio 音訊 + TrueAudio 音频 + TrueAudio 音訊 @@ -24996,9 +25906,10 @@ Windows BMP image + Windows BMP-beeld صورة Windows BMP Windows BMP rəsmi - Vyjava Windows BMP + Vyjava Windows BMP Изображение — Windows BMP imatge BMP de Windows obrázek Windows BMP @@ -25006,13 +25917,14 @@ Windows BMP-billede Windows-BMP-Bild Εικόνα Windows BMP - Windows BMP image + Windows BMP image BMP-bildo de Vindozo imagen BMP de Windows Windows BMP irudia Windows BMP -kuva Windows BMP mynd image Windows BMP + imagjin Windows BMP íomhá BMP Windows imaxe BMP de Windows תמונת BMP של Windows @@ -25033,7 +25945,7 @@ imatge Windows BMP Obraz BMP Windows imagem BMP Windows - Imagem BMP do Windows + Imagem BMP do Windows Imagine Windows BMP Изображение Windows BMP Obrázok Windows BMP @@ -25044,14 +25956,14 @@ Windows BMP görüntüsü зображення Windows BMP Ảnh BMP Windows - Windows BMP 图像 - Windows BMP 影像 - - - - - - + Windows BMP 图像 + Windows BMP 影像 + + + + + + @@ -25061,21 +25973,23 @@ WBMP image + WBMP-beeld صورة WBMP - Vyjava WBMP + Vyjava WBMP Изображение — WBMP imatge WBMP obrázek WBMP WBMP-billede WBMP-Bild Εικόνα WBMP - WBMP image + WBMP image WBMP-bildo imagen WBMP WBMP irudia WBMP-kuva WBMP mynd image WBMP + imagjin WBMP íomhá WBMP imaxe WBMP תמונת WBMP @@ -25095,7 +26009,7 @@ imatge WBMP Obraz WBMP imagem WBMP - Imagem WBMP + Imagem WBMP Imagine WBMP Изображение WBMP Obrázok WBMP @@ -25106,177 +26020,77 @@ WBMP görüntüsü зображення WBMP Ảnh WBMP - WBMP 图像 - WBMP 影像 + WBMP 图像 + WBMP 影像 WBMP WAP bitmap - Computer Graphics Metafile - ملف تعريف رسوميات الحاسوب - Kompüter Qrafikası Meta Faylı - Metafajł Computer Graphics - Метафайл — Computer Graphics - metafitxer de Computer Graphics - Computer Graphics Metafile - Delwedd ffurf CGM - Computer Graphics-metafil - CGM-Datei - Αρχείο Computer Graphics Metafile - Computer Graphics Metafile - metaarchivo de Computer Graphics - Ordenagailuko grafikoen meta-fitxategia - Computer Graphics -metatiedosto - Teldugrafikk metafíla - métafichier Computer Graphics - Meiteachomhad Grafaicí Ríomhaire - metaficheiro de Computer Graphics - קובץ-מטה מסוג Computer Graphics - Computer Graphics meta datoteka - Computer Graphics-metafájl - Metafile Computer Graphics - Computer Graphics Metafile - Computer Graphics Metafile - コンピューターグラフィックメタファイル - компьютерлік графика метафайлы - 컴퓨터 그래픽스 메타 파일 - Computer Graphics metafailas - Datorgrafikas metadatne - Failmeta Grafik Komputer - Computer Graphics Metafile - Computer Graphics-metabestand - Computer Graphics Metafile - metafichièr Computer Graphics - Metaplik grafiki komputerowej (CGM) - metaficheiro Computer Graphics - Meta-arquivo do Computer Graphics - Metafișier Computer Graphics - Метафайл компьютерной графики - Computer Graphics Metafile - Metadatoteka računalniške grafike (CGM) - Metafile Computer Graphics - Метадатотека рачунарске графике - Computer Graphics Metafil - Computer Graphics Meta dosyası - метафайл комп'ютерної графіки - Siêu tập tin đồ họa máy tính (CMF) - 计算机图形图元文件 (CGM) - CGM 影像 + CGM image + Изображение — CGM + imatge CGM + CGM-billede + CGM-Bild + CGM image + imagen CGM + CGM irudia + CGM-kuva + image CGM + CGM slika + CGM-kép + Citra CGM + Immagine CGM + CGM суреті + CGM 이미지 + Obraz CGM + Imagem CGM + Изображение CGM + Obrázok CGM + Slika CGM + CGM-bild + CGM görüntüsü + зображення CGM + CGM 图像 + CGM 影像 + CGM + Computer Graphics Metafile - - CCITT G3 fax - فاكس CCITT G3 - Faks CCITT G3 - Факс — CCITT G3 - fax CCITT G3 - fax CCITT G3 - CCITT G3-fax - CCITT-G3-Fax - φαξ σε μορφή CCITT G3 - CCITT G3 fax - G3-fakso de CCITT - fax de CCITT G3 - CCITT G3 faxa - CCITT G3 -faksi - CCITT G3 telefaks - télécopie G3 CCITT - facs CCITT G3 - fax de CCITT G3 - פקס של CCITT G3 - CCITT G3 faks - CCITT G3-fax - Fax CCITT G3 - Faks CCITT G3 - Fax CCITT G3 - CCITT G3 FAX - CCITT G3 ფაქსი - CCITT G3 факсі - CCITT G3 팩스 - CCITT G3 faksas - CCITT G3 fakss - Faks g3 CCITT - CCITT G3-faks - CCITT G3-fax - CCITT G3-fax - telecòpia G3 CCITT - Faks CCITT G3 - fax CCITT G3 - Fax do CCITT G3 - Fax CCITT G3 - Факс CCITT G3 - Fax CCITT G3 - Datoteka faksimila CCITT G3 - Fax CCITT G3 - ЦЦИТТ Г3 факс - CCITT G3-fax - CCITT G3 faksı - факс CCITT G3 - Điện thư G3 CCITT - CCITT G3 传真 - CCITT G3 傳真檔 - - - G3 fax image - صورة فاكس G3 - G3 faks rəsmi - Faksavaja vyjava G3 - Изображение — факс G3 - imatge de fax G3 - faxový obrázek G3 - Delwedd Ffacs G3 - G3-faxbillede - G3-Faxbild - Εικόνα φαξ G3 - G3 fax image - G3-faksbildo - imagen de fax G3 - G3 fax-irudia - G3-faksikuva - G3 fax mynd - image de télécopie G3 - íomhá fhacs G3 - imaxe de fax G3 - תמונת פקס של G3 - G3 slika faksa - G3-faxkép - Imagine de fax G3 - Citra faks G3 - Immagine fax G3 - G3 FAX 画像 - G3 fax გამოსახულება - G3 факс суреті - G3 팩스 그림 - G3 fax paveikslėlis - G3 faksa attēls - Imej fax G3 - G3-faksbilde - G3 faxafbeelding - G3 faksbilete - imatge de telecòpia G3 - Obraz faksowy G3 - imagem de fax G3 - Imagem de fax G3 - Imagine fax G3 - Факсовое изображение G3 - Obrázok fax G3 - Slikovna datoteka G3 fax - Figurë Fax G3 - слика Г3 факса - G3-faxbild - G3 fax görüntüsü - факс G3 - Ảnh điện thư G3 - G3 传真图像 - G3 傳真圖 + CCITT G3 fax image + Изображение — CCITT G3, факс + imatge de fax CCITT G3 + CCITT G3-faxbillede + CCITT-G3-Faxbild + CCITT G3 fax image + imagen de fax CCITT G3 + CCITT G3 fax irudia + CCITT G3 -faksikuva + image de télécopie CCITT G3 + CCITT G3 slika faksa + CCITT G3-faxkép + Citra faks CCITT G3 + Immagine fax CCIT G3 + CCITT G3 факс суреті + CCITT G3 팩스 이미지 + Obraz faksowy G3 CCITT + Imagem de fax CCITT G3 + Факсовое изображение CCITT G3 + CCITT G3 faxbild + CCITT G3 faks görüntüsü + зображення факсу G3 CCITT + CCITT G3 传真图像 + CCITT G3 傳真影像 + + GIF image + GIF-beeld صورة GIF GIF rəsmi - Vyjava GIF + Vyjava GIF Изображение — GIF imatge GIF obrázek GIF @@ -25284,13 +26098,14 @@ GIF-billede GIF-Bild Εικόνα GIF - GIF image + GIF image GIF-bildo imagen GIF GIF irudia GIF-kuva GIF mynd image GIF + imagjin GIF íomhá GIF imaxe GIF תמונת GIF @@ -25312,7 +26127,7 @@ imatge GIF Obraz GIF imagem GIF - Imagem GIF + Imagem GIF Imagine GIF Изображение GIF Obrázok GIF @@ -25323,15 +26138,44 @@ GIF görüntüsü зображення GIF Ảnh GIF - GIF 图像 - GIF 影像 + GIF 图像 + GIF 影像 - + HEIF image + HEIF-beeld + Изображение — HEIF + imatge HEIF + obrázek HEIF + HEIF-billede + HEIF-Bild + HEIF image + imagen HEIF + HEIF irudia + HEIF-kuva + image HEIF + imagjin HEIF + íomhá HEIF + HEIF slika + HEIF kép + Citra HEIF + Immagine HEIF + HEIF суреті + HEIF 그림 + Obraz HEIF + Imagem HEIF + Изображение HEIF + Obrázok HEIF + Slika HEIF + HEIF-bild + HEIF görüntüsü + зображення HEIF + HEIF 图像 + HEIF 影像 HEIF High Efficiency Image File @@ -25342,9 +26186,10 @@ IEF image + IEF-beeld صورة IEF IEF rəsmi - Vyjava IEF + Vyjava IEF Изображение — IEF imatge IEF obrázek IEF @@ -25352,13 +26197,14 @@ IEF-billede IEF-Bild Εικόνα IEF - IEF image + IEF image IEF-bildo imagen IEF IEF irudia IEF-kuva IEF mynd image IEF + imagjin IEF íomhá IEF imaxe IEF תמונת IEF @@ -25379,7 +26225,7 @@ imatge IEF Obraz IEF imagem IEF - Imagem IEF + Imagem IEF Imagine IEF Изображение IEF Obrázok IEF @@ -25390,15 +26236,16 @@ IEF görüntüsü зображення IEF Ảnh IEF - IEF 图像 - IEF 影像 + IEF 图像 + IEF 影像 JPEG image + JPEG-beeld صورة JPEG JPEG rəsmi - Vyjava JPEG + Vyjava JPEG Изображение — JPEG imatge JPEG obrázek JPEG @@ -25406,13 +26253,14 @@ JPEG-billede JPEG-Bild Εικόνα JPEG - JPEG image + JPEG image JPEG-bildo imagen JPEG JPEG irudia JPEG-kuva JPEG mynd image JPEG + imagjin JPEG íomhá JPEG imaxe JPEG תמונת JPEG @@ -25433,7 +26281,7 @@ imatge JPEG Obraz JPEG imagem JPEG - Imagem JPEG + Imagem JPEG Imagine JPEG Изображение JPEG Obrázok JPEG @@ -25444,19 +26292,47 @@ JPEG görüntüsü зображення JPEG Ảnh JPEG - JPEG 图像 - JPEG 影像 + JPEG 图像 + JPEG 影像 - - + + - + MJPEG video stream + MJPEG-videostroom + Поток — MJPEG, видео + flux de vídeo MJPEG + datový tok videa MJPEG + MJPEG-videostrøm + MJPEG-Videodatenstrom + MJPEG video stream + videotransmisión MJPEG + MJPEG bideo korrontea + MJPEG-videon suoratoisto + flux vidéo MJPEG + trasmission video MJPEG + sruth físe MJPEG + Prijenos MJPEG videa + MJPEG videofolyam + Stream video MJPEG + Stream video MJPEG + MJPEG видео ағыны + MJPEG 비디오 스트림 + Strumień wideo MJPEG + Fluxo de vídeo MPEG + Видеопоток MJPEG + Stream videa MJPEG + MJPEG-videoström + MJPEG video akışı + відеопотік MJPEG + MJPEG 视频流 + MJPEG 視訊串流 MJPEG Motion JPEG @@ -25465,27 +26341,35 @@ JPEG-2000 codestream + Поток — JPEG-2000, кодирано flux de codis JPEG-2000 datový tok JPEG-2000 + JPEG-2000-kodestrøm JPEG-2000 Codestream - JPEG-2000 codestream + JPEG-2000 codestream secuencia de código JPEG-2000 + JPEG-2000 kodekorrontea + JPEG-2000-koodivirta + flux de code JPEG-2000 + trasmission codiç JPEG-2000 + códsruth JPEG-2000 JPEG-2000 kôd strujanja JPEG-2000 kódfolyam - codestream JPEG-2000 + Codestream JPEG-2000 Codestream JPEG-2000 JPEG-2000 код ағыны JPEG-2000 코드스트림 Strumień kodu JPEG-2000 - Imagem JPEG-2000 + Imagem JPEG-2000 Кодовый поток JPEG-2000 JPEG-2000 codestream JPEG-2000-kodström + JPEG-2000 codestream потік коду JPEG-2000 - JPEG-2000 码流 - JPEG-2000 代碼串流 + JPEG-2000 码流 + JPEG-2000 代碼串流 - + @@ -25493,12 +26377,19 @@ JPEG-2000 JP2 image + JPEG-2000 JP2-beeld + Изображение — JPEG-2000 JP2 imatge JPEG-2000 JP2 obrázek JPEG-2000 JP2 + JPEG-2000 JP2-billede JPEG-2000 JP2-Bild - JPEG-2000 JP2 image + JPEG-2000 JP2 image imagen JPEG-2000 JP2 + JPEG-2000 JP2 irudia JPEG-2000 JP2 -kuva + image JPEG-2000 JP2 + imagjin JPEG-2000 JP2 + íomhá JPEG-2000 JP2 JPEG-2000 JP2 slika JPEG-2000 JP2 kép Citra JPEG-2000 JP2 @@ -25506,32 +26397,41 @@ JPEG-2000 JP2 суреті JPEG-2000 JP2 그림 Obraz JP2 JPEG-2000 - Imagem JP2 de JPEG-2000 + Imagem JP2 de JPEG-2000 Изоражение JPEG-2000 JP2 Obrázok JPEG-2000 JP2 + Slika JPEG-2000 JP2 JPEG-2000 JP2-bild + JPEG-2000 JP2 görüntüsü зображення JP2 JPEG-2000 - JPEG-2000 JP2 图像 - JPEG-2000 JP2 影像 + JPEG-2000 JP2 图像 + JPEG-2000 JP2 影像 JP2 JPEG-2000 - + JPEG-2000 JPX image + JPEG-2000 JPX-beeld + Изображение — JPEG-2000 JPX imatge JPEG-2000 JPX obrázek JPEG-2000 JPX + JPEG-2000 JPX-billede JPEG-2000 JPX-Bild - JPEG-2000 JPX image + JPEG-2000 JPX image imagen JPEG-2000 JPX + JPEG-2000 JPX irudia JPEG-2000 JPX -kuva + image JPEG-2000 JPX + imagjinJPEG-2000 JPX + íomhá JPEG-2000 JPX JPEG-2000 JPX slika JPEG-2000 JPX kép Citra JPEG-2000 JPX @@ -25539,29 +26439,38 @@ JPEG-2000 JPX суреті JPEG-2000 JPX 그림 Obraz JPX JPEG-2000 - Imagem JPX de JPEG-2000 + Imagem JPX de JPEG-2000 Изображение JPEG-2000 JPX Obrázok JPEG-2000 JPX + Slika JPEG-2000 JPX JPEG-2000 JPX-bild + JPEG-2000 JPX görüntüsü зображення JPX JPEG-2000 - JPEG-2000 JPX 图像 - JPEG-2000 JPX 影像 + JPEG-2000 JPX 图像 + JPEG-2000 JPX 影像 JPX JPEG-2000 eXtended - + JPEG-2000 JPM image + JPEG-2000 JPM-beeld + Изображение — JPEG-2000 JPM imatge JPEG-2000 JPM obrázek JPEG-2000 JPM + JPEG-2000 JPM-billede JPEG-2000 JPM-Bild - JPEG-2000 JPM image + JPEG-2000 JPM image imagen JPEG-2000 JPM + JPEG-2000 JPM irudia JPEG-2000 JPM -kuva + image JPEG-2000 JPM + imagjin JPEG-2000 JPM + íomhá JPEG-2000 JPM JPEG-2000 JPM slika JPEG-2000 JPM kép Citra JPEG-2000 JPM @@ -25569,29 +26478,38 @@ JPEG-2000 JPM суреті JPEG-2000 JPM 그림 Obraz JPM JPEG-2000 - Imagem JPM de JPEG-2000 + Imagem JPM de JPEG-2000 Изображение JPEG-2000 JPM Obrázok JPEG-2000 JPM + Slika JPEG-2000 JPM JPEG-2000 JPM-bild + JPEG-2000 JPM görüntüsü зображення JPM JPEG-2000 - JPEG-2000 JPM 图像 - JPEG-2000 JPM 影像 + JPEG-2000 JPM 图像 + JPEG-2000 JPM 影像 JPM JPEG-2000 Mixed - + JPEG-2000 MJ2 video + JPEG-2000 MJ2-video + Видео — JPEG-2000 MJ2 vídeo JPEG-2000 MJ2 video JPEG-2000 MJ2 + JPEG-2000 MJ2-video JPEG-2000 MJ2-Video - JPEG-2000 MJ2 video + JPEG-2000 MJ2 video vídeo JPEG-2000 MJ2 + JPEG-2000 MJ2 bideoa JPEG-2000 MJ2 -video + vidéo JPEG-2000 MJ2 + video JPEG-2000 MJ2 + íomhá JPEG-2000 MJ2 JPEG-2000 MJ2 video snimka JPEG-2000 MJ2 videó Video JPEG-2000 MJ2 @@ -25599,70 +26517,55 @@ JPEG-2000 MJ2 видеосы JPEG-2000 MJ2 동영상 Plik wideo MJ2 JPEG-2000 - Imagem MJ2 de JPEG-2000 + Imagem MJ2 de JPEG-2000 Видео JPEG-2000 MJ2 Video JPEG-2000 MJ2 + Video JPEG-2000 MJ2 JPEG-2000 MJ2-bild + JPEG-2000 MJ2 videosu зображення MJ2 JPEG-2000 - JPEG-2000 MJ2 视频 - JPEG-2000 MJ2 視訊 + JPEG-2000 MJ2 视频 + JPEG-2000 MJ2 視訊 MJ2 Motion JPEG-2000 - + - OpenRaster archiving image - صورة أرشيف OpenRaster + OpenRaster image Изображение — OpenRaster - imatge d'arxivat OpenRaster - archivační obraz OpenRaster - OpenRaster-arkivaftryk - OpenRaster-Archivierungsbild - Εικόνα αρχειοθέτησης OpenRaster - OpenRaster archiving image - imagen de archivado de OpenRaster - OpenRaster artxiboaren irudia - OpenRaster-arkistokuva - OpenRaster goymslumynd - image d'archive OpenRaster - íomhá chartlannaithe OpenRaster - imaxe arquivada de OpenRaster - תמונת ארכיון של OpenRaster - OpenRaster slika arhive - OpenRaster archiválási kép - Imagine de archivo OpenRaster - Gambar pengarsipan OpenRaster - Immagine archiviazione OpenRaster - OpenRaster アーカイブイメージ - OpenRaster-ის საარქივო გამოსახულება - OpenRaster архивтеу суреті - OpenRaster 압축 이미지 - OpenRaster archyvavimo paveikslėlis - OpenRaster arhivēšanas attēls - OpenRaster archiverings-image - imatge d'archiu OpenRaster - Archiwalny obraz OpenRaster - imagem arquivo OpenRaster - Imagem de arquivamento OpenRaster - Arhivă imagine OpenRaster - Архивное изображение OpenRaster - Archivačný obrázok OpenRaster - Odtis arhiva OpenRaster - слика Опен Растер архивирања - OpenRaster-arkivbild - OpenRaster arşivleme görüntüsü - архівоване зображення OpenRaster - OpenRaster 归档图像 - OpenRaster 封存影像 + imatge OpenRaster + OpenRaster-billede + OpenRaster-Bild + OpenRaster image + imagen OpenRaster + OpenRaster irudia + OpenRaster-kuva + image OpenRaster + OpenRaster slika + OpenRaster kép + Citra OpenRaster + Immagine OpenRaster + OpenRaster суреті + OpenRaster 그림 + Obraz OpenRaster + Imagem OpenRaster + Изображение OpenRaster + Obrázok OpenRaster + Slika OpenRaster + OpenRaster-bild + OpenRaster görüntüsü + зображення OpenRaster + OpenRaster 图像 + OpenRaster 影像 - - - + + + @@ -25671,19 +26574,20 @@ DirectDraw surface مساحة DirectDraw - Pavierchnia DirectDraw + Pavierchnia DirectDraw Изображение — повърхност на DirectDraw superfície DirectDraw povrch DirectDraw DirectDraw-overflade DirectDraw-Oberfläche Επιφάνεια DirectDraw - DirectDraw surface + DirectDraw surface superficie de DirectDraw DirectDraw gainazala DirectDraw-piirtoalue DirectDraw yvirflata surface DirectDraw + superficie DirectDraw dromchla DirectDraw superficie de DirectDraw משטח של DirectDraw @@ -25704,7 +26608,7 @@ surfàcia DirectDraw Powierzchnia DirectDraw superfície DirectDraw - Superfície do DirectDraw + Superfície do DirectDraw Suprafață DirectDraw Плоскость DirectDraw Plocha DirectDraw @@ -25715,8 +26619,8 @@ DirectDraw yüzeyi поверхня DirectDraw Mặt DirectDraw - DirectDraw 表面 - DirectDraw 表面 + DirectDraw 表面 + DirectDraw 表面 @@ -25724,20 +26628,22 @@ X11 cursor + X11-wyser مؤشر X11 - Kursor X11 + Kursor X11 Курсор — X11 - cursor X11 + cursor de X11 kurzor X11 X11-markør X11-Zeiger Δρομέας X11 - X11 cursor + X11 cursor cursor de X11 X11 kurtsorea X11-osoitin X11 vísi curseur X11 + cursôr X11 cúrsóir X11 Cursor X11 סמן של X11 @@ -25757,7 +26663,7 @@ cursor X11 Kursor X11 cursor X11 - Cursor do X11 + Cursor do X11 Cursor X11 Курсор X11 Kurzor X11 @@ -25768,29 +26674,31 @@ X11 imleci курсор X11 Con chạy X11 - X11 指针 - X11 滑鼠游標 + X11 指针 + X11 滑鼠游標 - + EXR image + EXR-beeld صورة EXR - Vyjava EXR + Vyjava EXR Изображение — EXR imatge EXR obrázek EXR EXR-billede EXR-Bild Εικόνα EXR - EXR image + EXR image EXR-bildo imagen EXR EXR irudia EXR-kuva EXR mynd image EXR + imagjin EXR íomhá EXR imaxe EXR תמונת EXR @@ -25811,7 +26719,7 @@ imatge EXR Obraz EXR imagem EXR - Imagem EXR + Imagem EXR Imagine EXR Изображение EXR Obrázok EXR @@ -25822,30 +26730,32 @@ EXR görüntüsü зображення EXR Ảnh EXR - EXR 图像 - EXR 影像 + EXR 图像 + EXR 影像 - + Macintosh Quickdraw/PICT drawing + Macintosh Quickdraw/PICT-tekening رسمة ماكنتوش Quickdraw/PICT - Rysunak Macintosh Quickdraw/PICT + Rysunak Macintosh Quickdraw/PICT Чертеж — Macintosh Quickdraw/PICT dibuix Quickdraw/PICT de Macintosh kresba Macintosh Quickdraw/PICT Macintosh Quickdraw/PICT-tegning Macintosh-Quickdraw/PICT-Zeichnung Σχέδιο Macintosh Quickdraw/PICT - Macintosh Quickdraw/PICT drawing + Macintosh Quickdraw/PICT drawing Quickdraw/PICT-grafikaĵo de Macintosh dibujo de Macintosh Quickdraw/PICT Macintosh Quickdraw/PICT marrazkia Macintosh Quickdraw/PICT -piirros Macintosh Quickdraw/PICT tekning dessin Macintosh Quickdraw/PICT + dissen Macintosh Quickdraw/PICT líníocht Macintosh Quickdraw/PICT debuxo de Macintosh Quickdraw/PICT ציור של Macintosh Quickdraw/PICT @@ -25866,7 +26776,7 @@ dessenh Macintosh Quickdraw/PICT Rysunek QuickDraw/PICT Macintosh desenho Quickdraw/PICT de Macintosh - Desenho do Macintosh Quickdraw/PICT + Desenho do Macintosh Quickdraw/PICT Desen Macintosh Quickdraw/PICT Рисунок Macintosh Quickdraw/PICT Kresba Macintosh QuickDraw/PICT @@ -25877,22 +26787,22 @@ Macintosh Quickdraw/PICT çizimi малюнок Macintosh Quickdraw/PICT Bản vẽ Quickdraw/PICT của Macintosh - Macintosh Quickdraw/PICT 绘图 - Macintosh Quickdraw/PICT 繪圖 + Macintosh Quickdraw/PICT 绘图 + Macintosh Quickdraw/PICT 繪圖 - - - - + + + + - - - - + + + + @@ -25904,20 +26814,22 @@ UFRaw ID image + UFRaw ID-beeld صورة UFRaw ID - Vyjava UFRaw ID + Vyjava UFRaw ID Изображение — UFRaw ID imatge ID UFRaw obrázek ID UFRaw UFRaw ID-billede UFRaw-Bildbeschreibungsdatei Εικόνα UFRaw - UFRaw ID image + UFRaw ID image imagen de identificación UFRaw UFRaw ID irudia UFRaw ID -kuva UFRaw ID mynd image ID UFRaw + imagjin UFRaw ID íomhá aitheantais UFRaw imaxe de identificación UFRaw תמונה של UFRaw ID @@ -25937,7 +26849,7 @@ imatge ID UFRaw Obraz UFRaw ID imagem UFRaw ID - Imagem ID do UFRaw + Imagem ID do UFRaw ID imagine UFRaw Изображение UFRaw ID Obrázok ID UFRaw @@ -25948,8 +26860,8 @@ UFRaw ID görüntüsü зображення UFRaw ID Ảnh ID UFRaw - UFRaw ID 图像 - UFRaw ID 影像 + UFRaw ID 图像 + UFRaw ID 影像 UFRaw Unidentified Flying Raw @@ -25958,20 +26870,22 @@ digital raw image + digitale rou beeld صورة رقمية خامة - suvoraja ličbavaja vyjava + suvoraja ličbavaja vyjava Изображение — digital raw imatge digital en cru digitální surový obrázek - digitalt råbillede + digitalt raw-billede Digitales Rohbild Ανεπεξέργαστη ψηφιακή εικόνα - digital raw image + digital raw image imagen digital en bruto irudi gordin digitala digitaalinen raakakuva talgild rámynd image brute numérique + imagjin grese digjitâl amhíomhá dhigiteach imaxe en bruto dixital תמונה דיגטלית גולמית @@ -25991,7 +26905,7 @@ imatge brut numeric Surowy obraz cyfrowy imagem digital em bruto - Imagem digital bruta + Imagem digital bruta imagine digitală brută Необработанное цифровое изображение Digitálny surový obrázok @@ -26002,25 +26916,27 @@ sayısal ham görüntü зображення цифрового негатива ảnh thô số - 数字化原始图像 - 數位原生影像 + 数字化原始图像 + 數位原始影像 Adobe DNG negative + Adobe DNG-negatief Adobe DNG negative - Adobe DNG Negative + Adobe DNG Negative Изображение — Adobe DNG negative negatiu DNG d'Adobe negativ Adobe (DNG) Adobe DNG-negativ Adobe Digitales Negativ Αρνητικό Adobe DNG - Adobe DNG negative + Adobe DNG negative negativo DNG de Adobe Adobe DNG negatiboa Adobe-DNG-negatiivi Adobe DNG negativ négatif DNG Adobe + negatîf Adobe DNG claonchló DNG Adobe negativo DNG de Adobe תשליל Adobe DNG @@ -26041,7 +26957,7 @@ négatif DNG Adobe Negatyw DNG Adobe negativo Adobe DNG - Negativo DNG da Adobe + Negativo DNG da Adobe Negativ Adobe DNG Негатив Adobe DNG Adobe Digital Negative (DNG) @@ -26052,32 +26968,34 @@ Adobe DNG negatifi цифровий негатив DNG Adobe Âm bản Adobe DNG - Adobe DNG 负片 - Adobe DNG 負片 + Adobe DNG 负片 + Adobe DNG 負片 DNG Digital Negative - - + + Canon CRW raw image + Canon CRW rou beeld صورة Canon CRW خامة - Suvoraja vyjava Canon CRW + Suvoraja vyjava Canon CRW Изображение — Canon CRW raw imatge en cru de Canon CRW surový obrázek Canon CRW - Canon CRW-råbillede + Canon CRW raw-billede Canon-CRW-Rohbild Ανεπεξέργαστη εικόνα Canon CRW - Canon CRW raw image + Canon CRW raw image imagen en bruto CRW de Canon Canon CRW irudi gordina Canon-CRW-raakakuva Canon CRW rámynd image brute CRW Canon + imagjin grese Canon CRW amhíomhá Canon CRW imaxe en bruto de Canon CRW תמונה גולמית של Canon CRW @@ -26098,7 +27016,7 @@ imatge brut CRW Canon Surowy obraz CRW Canon imagem em bruto Canon CRW - Imagem bruta CRW da Canon + Imagem bruta CRW da Canon Imagine brută Canon CRW Необработанное изображение Canon CRW Surový obrázok Canon CRW @@ -26109,8 +27027,8 @@ Canon CRW ham görüntüsü цифровий негатив CRW Canon Ảnh thô Canon CRW - 佳能 CRW 原始图像 - Canon CRW 原生影像 + 佳能 CRW 原始图像 + Canon CRW 原始影像 CRW Canon RaW @@ -26119,23 +27037,25 @@ - + Canon CR2 raw image + Canon CR2 rou beeld صورة Canon CR2 خامة - Suvoraja vyjava Canon CR2 + Suvoraja vyjava Canon CR2 Изображение — Canon CR2 raw imatge en cru de Canon CR2 surový obrázek Canon CR2 - Canon CR2-råbillede + Canon CR2 raw-billede Canon-CR2-Rohbild Ανεπεξέργαστη εικόνα Canon CR2 - Canon CR2 raw image + Canon CR2 raw image imagen en bruto CR2 de Canon Canon CR2 irudi gordina Canon-CR2-raakakuva Canon CR2 rámynd image brute CR2 Canon + imagjin grese Canon CR2 amhíomhá Canon CR2 imaxe en bruto de Canon CR2 תמונה גולמית של Canon CR2 @@ -26156,7 +27076,7 @@ imatge brut CR2 Canon Surowy obraz CR2 Canon imagem em bruto Canon CR2 - Imagem bruta CR2 da Canon + Imagem bruta CR2 da Canon Imagine brută Canon CR2 Необработанное изображение Canon CR2 Surový obrázok Canon CR2 @@ -26167,8 +27087,8 @@ Canon CR2 ham görüntüsü цифровий негатив CR2 Canon Ảnh thô Canon CR2 - 佳能 CR2 原始图像 - Canon CR2 原生影像 + 佳能 CR2 原始图像 + Canon CR2 原始影像 CR2 Canon Raw 2 @@ -26177,20 +27097,22 @@ Fuji RAF raw image + Fuji RAF rou beeld صورة Fuji RAF خامة - Suvoraja vyjava Fuji RAF + Suvoraja vyjava Fuji RAF Изображение — Fuji RAF raw imatge en cru de Fuji RAF surový obrázek Fuji RAF - Fuji RAF-råbillede + Fuji RAF raw-billede Fuji-RAF-Rohbild Ανεπεξέργαστη εικόνα Fuji RAF - Fuji RAF raw image + Fuji RAF raw image imagen en bruto RAF de Fuji Fuji RAF irudi gordina Fuji-RAF-raakakuva Fuji RAF raw mynd image brute RAF Fuji + imagjin grese Fuji RAF amhíomhá Fuji RAF imaxe en bruto de Fuji RAF תמונה גולמית של Fuji RAF @@ -26211,7 +27133,7 @@ imatge brut RAF Fuji Surowy obraz RAF Fuji imagem em bruto Fuji RAF - Imagem bruta RAF da Fuji + Imagem bruta RAF da Fuji Imagine brută Fuji RAF Необработанное изображение Fuji RAF Surový obrázok Fuji RAF @@ -26222,8 +27144,8 @@ Fuji RAF ham görüntüsü Цифровий негатив RAF Fuji Ảnh thô Fuji RAF - 富士 RAF 原始图像 - Fuji RAF 原生影像 + 富士 RAF 原始图像 + Fuji RAF 原始影像 RAF RAw Format @@ -26234,20 +27156,22 @@ Kodak DCR raw image + Kodak DCR rou beeld صورة Kodak DCR خامة - Suvoraja vyjava Kodak DCR + Suvoraja vyjava Kodak DCR Изображение — Kodak DCR raw imatge en cru de Kodak DCR surový obrázek Kodak DCR - Kodak DCR-råbillede + Kodak DCR raw-billede Kodak-DCR-Rohbild Ανεπεξέργαστη εικόνα Kodak DCR - Kodak DCR raw image + Kodak DCR raw image imagen en bruto DCR de Kodak Kodak DCR irudi gordina Kodak-DCR-raakakuva Kodak DCR rámynd image brute DCR Kodak + imagjin grese Kodak DCR amhíomhá Kodak DCR imaxe en bruto de Kodad DCR תמונה גולמית של Kodak DCR @@ -26267,7 +27191,7 @@ imatge brut DCR Kodak Surowy obraz DCR Kodak imagem em bruto Kodak DCR - Imagem bruta DCR da Kodak + Imagem bruta DCR da Kodak Imagine brută Kodak DCR Необработанное изображение Kodak DCR Surový obrázok Kodak DCR @@ -26278,8 +27202,8 @@ Kodak DCR ham görüntüsü цифровий негатив DCR Kodak Ảnh thô Kodak DCR - 柯达 DCR 原始图像 - Kodak DCR 原生影像 + 柯达 DCR 原始图像 + Kodak DCR 原始影像 DCR Digital Camera Raw @@ -26288,20 +27212,22 @@ Kodak K25 raw image + Kodak K25 rou beeld صورة Kodak K25 خامة - Suvoraja vyjava Kodak K25 + Suvoraja vyjava Kodak K25 Изображение — Kodak K25 raw imatge en cru de Kodak K25 surový obrázek Kodak K25 - Kodak K25-råbillede + Kodak K25 raw-billede Kodak-K25-Rohbild Ανεπεξέργαστη εικόνα Kodak K25 - Kodak K25 raw image + Kodak K25 raw image imagen en bruto K25 de Kodak Kodak K25 raw image Kodak-K25-raakakuva Kodak K25 rámynd image brute K25 Kodak + imagjin grese Kodak K25 amhíomhá Kodak K25 imaxe en bruto de Kodad K25 תמונה גולמית של Kodak K25 @@ -26321,7 +27247,7 @@ imatge brut K25 Kodak Surowy obraz K25 Kodak imagem em bruto Kodak K25 - Imagem bruta K25 da Kodak + Imagem bruta K25 da Kodak Imagine brută Kodak K25 Необработанное изображение Kodak K25 Surový obrázok Kodak K25 @@ -26332,8 +27258,8 @@ Kodak K25 ham görüntüsü цифровий негатив K25 Kodak Ảnh thô Kodak K25 - 柯达 K25 原始图像 - Kodak K25 原生影像 + 柯达 K25 原始图像 + Kodak K25 原始影像 K25 Kodak DC25 @@ -26342,20 +27268,22 @@ Kodak KDC raw image + Kodak KDC rou beeld صورة Kodak KDC خامة - Suvoraja vyjava Kodak KDC + Suvoraja vyjava Kodak KDC Изображение — Kodak KDC raw imatge en cru de Kodak KDC surový obrázek Kodak KDC - Kodak KDC-råbillede + Kodak KDC raw-billede Kodak-KDC-Rohbild Ανεπεξέργαστη εικόνα Kodak KDC - Kodak KDC raw image + Kodak KDC raw image imagen en bruto KDC de Kodak Kodak KDC irudi gordina Kodak-KDC-raakakuva Kodak KDC rámynd image brute KDC Kodak + imagjin grese Kodak KDC amhíomhá Kodak KDC imaxe en bruto de Kodad KDC תמונה גולמית של Kodak KDC @@ -26375,7 +27303,7 @@ imatge brut KDC Kodak Surowy obraz KDC Kodak imagem em bruto Kodak KDC - Imagem bruta KDC da Kodak + Imagem bruta KDC da Kodak Imagine brută Kodak KDC Необработанное изображение Kodak KDC Surový obrázok Kodak KDC @@ -26386,8 +27314,8 @@ Kodak KDC ham görüntüsü цифровий негатив KDC Kodak Ảnh thô Kodak KDC - 柯达 KDC 原始图像 - Kodak KDC 原生影像 + 柯达 KDC 原始图像 + Kodak KDC 原始影像 KDC Kodak Digital Camera @@ -26399,20 +27327,22 @@ Minolta MRW raw image + Minolta MRW rou beeld صورة Minolta MRW خامة - Suvoraja vyjava Minolta MRW + Suvoraja vyjava Minolta MRW Изображение — Minolta MRW raw imatge en cru de Minolta MRW surový obrázek Minolta MRW - Minolta MRW-råbillede + Minolta MRW raw-billede Minolta-MRW-Rohbild Ανεπεξέργαστη εικόνα Minolta MRW - Minolta MRW raw image + Minolta MRW raw image imagen en bruto MRW de Minolta Minolta MRW irudi gordina Minolta-MRW-raakakuva Minolta MRW rámynd image brute MRW Minolta + imagjin grese Minolta MRW amhíomhá Minolta MRW imaxe RAW de Minolta MRW תמונה גולמית של Minolta MRW @@ -26432,7 +27362,7 @@ imatge brut MRW Minolta Surowy obraz MRW Minolta imagem em bruto Minolta MRW - Imagem bruta MRW do Minolta + Imagem bruta MRW do Minolta Imagine brută Minolta MRW Необработанное изображение Minolta MRW Surový obrázok Minolta MRW @@ -26443,8 +27373,8 @@ Minolta MRW ham görüntüsü цифровий негатив MRW Minolta Ảnh thô Minolta MRW - 美能达 MRW 原始图像 - Minolta MRW 原生影像 + 美能达 MRW 原始图像 + Minolta MRW 原始影像 MRW Minolta RaW @@ -26455,20 +27385,22 @@ Nikon NEF raw image + Nikon NEF rou beeld صورة Nikon NEF خامة - Suvoraja vyjava Nikon NEF + Suvoraja vyjava Nikon NEF Изображение — Nikon NEF raw imatge en cru de Nikon NEF surový obrázek Nikon NEF - Nikon NEF-råbillede + Nikon NEF raw-billede Nikon-NEF-Rohbild Ανεπεξέργαστη εικόνα Nikon NEF - Nikon NEF raw image + Nikon NEF raw image imagen en bruto NEF de Nikon Nikon NEF irudi gordina Nikon-NEF-raakakuva Nikon NEF rámynd image brute NEF Nikon + imagjin grese Nikon NEF amhíomhá Nikon NEF imaxe RAW NEF Nikon תמונה גולמית של Nikon NEF @@ -26488,7 +27420,7 @@ imatge brut NEF Nikon Surowy obraz NEF Nikon imagem em bruto Nikon NEF - Imagem bruta NEF da Nikon + Imagem bruta NEF da Nikon Imagine brută Nikon NEF Необработанное изображение Nikon NEF Surový obrázok Nikon NEF @@ -26499,8 +27431,8 @@ Nikon NEF ham görüntüsü цифровий негатив NEF Nikon Ảnh thô Nikon NEF - 尼康 NEF 原始图像 - Nikon NEF 原生影像 + 尼康 NEF 原始图像 + Nikon NEF 原始影像 NEF Nikon Electronic Format @@ -26509,20 +27441,22 @@ Olympus ORF raw image + Olympus ORF rou beeld صورة Olympus ORF خامة - Suvoraja vyjava Olympus ORF + Suvoraja vyjava Olympus ORF Изображение — Olympus ORF raw imatge en cru d'Olympus ORF surový obrázek Olympus ORF - Olympus ORF-råbillede + Olympus ORF raw-billede Olympus-ORF-Rohbild Ανεπεξέργαστη εικόνα Olympus ORF - Olympus ORF raw image + Olympus ORF raw image imagen en bruto ORF de Olympus Olympus ORF irudi gordina Olympus-ORF-raakakuva Olympus ORF rámynd image brute ORF Olympus + imagjin grese Olympus ORF amhíomhá Olympus ORF imaxe en bruto de Olympus ORF תמונה גולמית של Olympus ORF @@ -26543,7 +27477,7 @@ imatge brut ORF Olympus Surowy obraz Olympus ORF imagem em bruto Olympus ORF - Imagem bruta ORF da Olympus + Imagem bruta ORF da Olympus Imagine brută Olympus ORF Необработанное изображение Olympus ORF Surový obrázok Olympus ORF @@ -26554,37 +27488,39 @@ Olympus ORF ham görüntüsü цифровий негатив ORF Olympus Ảnh thô Olympus ORF - 奥林巴斯 ORF 原始图像 - Olympus ORF 原生影像 + 奥林巴斯 ORF 原始图像 + Olympus ORF 原始影像 ORF Olympus Raw Format - - - - - + + + + + Panasonic raw image + Panasonic rou beeld صورة Panasonic خامة - Suvoraja vyjava Panasonic + Suvoraja vyjava Panasonic Изображение — Panasonic raw imatge en cru de Panasonic surový obrázek Panasonic - Panasonicråbillede (raw) + Panasonic raw-billede Panasonic-Rohbild Ανεπεξέργαστη εικόνα Panasonic - Panasonic raw image + Panasonic raw image imagen en bruto de Panasonic Panasonic irudi gordina Panasonic-raakakuva Panasonic rámynd image brute Panasonic + imagjin grese Panasonic amhíomhá Panasonic imaxe en bruto de Panasonic תמונה גולמית של Panasonic @@ -26604,7 +27540,7 @@ imatge brut Panasonic Obraz raw Panasonic imagem em bruto Panasonic - Imagem bruta da Panasonic + Imagem bruta da Panasonic Imagine brută Panasonic Необработанное изображение Panasonic Surový obrázok Panasonic @@ -26615,58 +27551,69 @@ Panasonic ham görüntüsü цифровий негатив Panasonic Ảnh thô Panasonic - 松下原始图像 - Panasonic 原生影像 + 松下原始图像 + Panasonic 原始影像 - + - Panasonic raw2 image - Изображение — Panasonic raw2 - imatge «RAW2» de Panasonic - surový obrázek Panasonic raw2 - Panasonic-rå2-billede (raw) - Panasonic raw2-Bild - Ανεπεξέργαστη εικόνα Panasonic (raw2) - Panasonic raw2 image - imagen en bruto raw2 de Panasonic - Panasonic raw2 irudia - Panasonic raw2 -kuva - image raw2 Panasonic - íomhá raw2 Panasonic - imaxe en bruto raw2 de Panasonic - תמונת raw2 של Panasonic - Panasonic raw2 image - Panasonic raw2 kép - Imagine raw2 Panasonic - Image Panasonic raw2 - Immagine raw2 Panasonic - Panasonic raw2 画像 - Panasonic raw2 суреті - 파나소닉 RAW2 사진 - Panasonic raw2 jēlattēls - Panasonic raw2 image - imatge raw2 Panasonic - Obraz raw2 Panasonic + Panasonic raw image + Panasonic rou beeld + صورة Panasonic خامة + Suvoraja vyjava Panasonic + Изображение — Panasonic raw + imatge en cru de Panasonic + surový obrázek Panasonic + Panasonic raw-billede + Panasonic-Rohbild + Ανεπεξέργαστη εικόνα Panasonic + Panasonic raw image + imagen en bruto de Panasonic + Panasonic irudi gordina + Panasonic-raakakuva + Panasonic rámynd + image brute Panasonic + imagjin grese Panasonic + amhíomhá Panasonic + imaxe en bruto de Panasonic + תמונה גולמית של Panasonic + Panasonic osnovna slika + Panasonic nyers kép + Imagine brute Panasonic + Citra mentah Panasonic + Immagine raw Panasonic + Panasonic raw 画像 + Panasonic өңделмеген суреті + 파나소닉 RAW 사진 + Panasonic neapdorotas paveikslėlis + Panasonic jēlattēls + Panasonic raw-bilde + onbewerkt Panasonic-beeld + Panasonic råbilete + imatge brut Panasonic + Obraz raw Panasonic imagem em bruto Panasonic - Imagem raw2 da Panasonic - Необработанное изображение Panasonic raw2 - Surový obrázok Panasonic raw2 - Slikovna datoteka Panasonic raw2 - Панасоник сирова2 слика - Panasonic raw2-bild - Panasonic raw2 görüntüsü - зображення формату raw2 Panasonic - 松下 raw2 图像 - Panasonic raw2 影像 + Imagem bruta da Panasonic + Imagine brută Panasonic + Необработанное изображение Panasonic + Surový obrázok Panasonic + Surova slikovna datoteka Panasonic + Figurë raw Panasonic + Панасоник сирова слика + Panasonic-råbild + Panasonic ham görüntüsü + цифровий негатив Panasonic + Ảnh thô Panasonic + 松下原始图像 + Panasonic 原始影像 - + @@ -26674,20 +27621,22 @@ Pentax PEF raw image + Pentax PEF rou beeld صورة Pentax PEF خامة - Suvoraja vyjava Pentax PEF + Suvoraja vyjava Pentax PEF Изображение — Pentax PEF raw imatge en cru de Pentax PEF surový obrázek Pentax PEF - Pentax PEF-råbillede + Pentax PEF raw-billede Pentax-PEF-Rohbild Ανεπεξέργαστη εικόνα Pentax PEF - Pentax PEF raw image + Pentax PEF raw image imagen en bruto PEF de Pentax Pentax PEF irudi gordina Pentax-PEF-raakakuva Pentax PEF rámynd image brute PEF Pentax + imagjin grese Pentax PEF amhíomhá Pentax PEF imaxe en bruto PEF de Pentax תמונה גולמית של Pentax PEF @@ -26707,7 +27656,7 @@ imatge brut PEF Pentax Surowy obraz Pentax PEF imagem em bruto Pentax PEF - Imagem bruta PEF da Pentax + Imagem bruta PEF da Pentax Imagine brută Pentax PEF Необработанное изображение Pentax PEF Surový obrázok Pentax PEF @@ -26718,8 +27667,8 @@ Pentax PEF ham görüntüsü цифровий негатив PEF Pentax Ảnh thô Pentax PEF - 宾得 PEF 原始图像 - Pentax PEF 原生影像 + 宾得 PEF 原始图像 + Pentax PEF 原始影像 PEF Pentax Electronic Format @@ -26728,20 +27677,22 @@ Sigma X3F raw image + Sigma X3F rou beeld صورة Sigma X3F خامة - Suvoraja vyjava Sigma X3F + Suvoraja vyjava Sigma X3F Изображение — Sigma X3F raw imatge en cru de Sigma X3F surový obrázek Sigma X3F - Sigma X3F-råbillede + Sigma X3F raw-billede Sigma-X3F-Rohbild Ανεπεξέργαστη εικόνα Sigma X3F - Sigma X3F raw image + Sigma X3F raw image imagen en bruto X3F de Sigma Sigma X3F irudi gordina Sigma-X3F-raakakuva Sigma X3F rámynd image brute X3F Sigma + imagjin grese Sigma X3F amhíomhá Sigma X3F imaxe en bruto X3F de Sigma תמונה גולמית של Sigma X3F @@ -26761,7 +27712,7 @@ imatge brut X3F Sigma Surowy obraz X3F Sigma imagem em bruto Sigma X3F - Imagem bruta X3F da Sigma + Imagem bruta X3F da Sigma Imagine brută Sigma X3F Необработанное изображение Sigma X3F Surový obrázok Sigma X3F @@ -26772,15 +27723,15 @@ Sigma X3F ham görüntüsü цифровий негатив X3F Sigma Ảnh thô Sigma X3F - 适马 X3F 原始图像 - Sigma X3F 原生影像 + 适马 X3F 原始图像 + Sigma X3F 原始影像 X3F X3 Foveon - + - + @@ -26788,20 +27739,22 @@ Sony SRF raw image + Sony SRF rou beeld صورة Sony SRF خامة - Suvoraja vyjava Sony SRF + Suvoraja vyjava Sony SRF Изображение — Sony SRF raw imatge en cru de Sony SRF surový obrázek Sony SRF - Sony SRF-råbillede + Sony SRF raw-billede Sony-SRF-Rohbild Ανεπεξέργαστη εικόνα Sony SRF - Sony SRF raw image + Sony SRF raw image imagen en bruto SRF de Sony Sony SRF irudi gordina Sony-SRF-raakakuva Sony SRF rámynd image brute SRF Sony + imagjin grese Sony SRF amhíomhá Sony SRF imaxe en bruto SRF de sony תמונה גולמית של Sony SRF @@ -26821,7 +27774,7 @@ imatge brut SRF Sony Surowy obraz SRF Sony imagem em bruto Sony SRF - Imagem bruta SRF da Sony + Imagem bruta SRF da Sony Imagine brută Sony SRF Необработанное изображение Sony SRF Surový obrázok Sony SRF @@ -26832,8 +27785,8 @@ Sony SRF ham görüntüsü цифровий негатив SRF Sony Ảnh thô Sony SRF - 索尼 SRF 原始映像 - Sony SRF 原生影像 + 索尼 SRF 原始映像 + Sony SRF 原始影像 SRF Sony Raw Format @@ -26842,20 +27795,22 @@ Sony SR2 raw image + Sony SR2 rou beeld صورة Sony SR2 خامة - Suvoraja vyjava Sony SR2 + Suvoraja vyjava Sony SR2 Изображение — Sony SR2 raw imatge en cru de Sony SR2 surový obrázek Sony SR2 - Sony SR2-råbillede + Sony SR2 raw-billede Sony-SR2-Rohbild Ανεπεξέργαστη εικόνα Sony SR2 - Sony SR2 raw image + Sony SR2 raw image imagen en bruto SR2 de Sony Sony SR2 irudi gordina Sony-SR2-raakakuva Sony SR2 rámynd image brute SR2 Sony + imagjin grese Sony SR2 amhíomhá Sony SR2 imaxe en bruto SR2 de sony תמונה גולמית של Sony SR2 @@ -26875,7 +27830,7 @@ imatge brut SR2 Sony Surowy obraz SR2 Sony imagem em bruto Sony SR2 - Imagem bruta SR2 da Sony + Imagem bruta SR2 da Sony Imagine brută Sony SR2 Необработанное изображение Sony SR2 Surový obrázok Sony SR2 @@ -26886,8 +27841,8 @@ Sony SR2 ham görüntüsü цифровий негатив SR2 Sony Ảnh thô Sony SR2 - 索尼 SR2 原始映像 - Sony SR2 原生影像 + 索尼 SR2 原始映像 + Sony SR2 原始影像 SR2 Sony Raw format 2 @@ -26896,20 +27851,22 @@ Sony ARW raw image + Sony ARW rou beeld صورة Sony ARW خامة - Suvoraja vyjava Sony ARW + Suvoraja vyjava Sony ARW Изображение — Sony ARW raw imatge en cru de Sony ARW surový obrázek Sony ARW - Sony ARW-råbillede + Sony ARW raw-billede Sony-ARW-Rohbild Ανεπεξέργαστη εικόνα Sony ARW - Sony ARW raw image + Sony ARW raw image imagen en bruto ARW de Sony Sony ARW irudi gordina Sony-ARW-raakakuva Sony ARW rámynd image brute ARW Sony + imagjin grese Sony ARW amhíomhá Sony ARW imaxe en bruto ARW de sony תמונה גולמית של Sony ARW @@ -26929,7 +27886,7 @@ imatge brut ARW Sony Surowy obraz ARW Sony imagem em bruto Sony ARW - Imagem bruta ARW da Sony + Imagem bruta ARW da Sony Imagine brută Sony ARW Необработанное изображение Sony ARW Surový obrázok Sony ARW @@ -26940,8 +27897,8 @@ Sony ARW ham görüntüsü цифровий негатив ARW Sony Ảnh thô Sony ARW - 索尼 ARW 原始映像 - Sony ARW 原生影像 + 索尼 ARW 原始映像 + Sony ARW 原始影像 ARW Alpha Raw format @@ -26950,9 +27907,10 @@ PNG image + PNG-beeld صورة PNG PNG rəsmi - Vyjava PNG + Vyjava PNG Изображение — PNG imatge PNG obrázek PNG @@ -26960,13 +27918,14 @@ PNG-billede PNG-Bild Εικόνα PNG - PNG image + PNG image PNG-bildo imagen PNG PNG irudia PNG-kuva PNG mynd image PNG + imagjin PNG íomhá PNG imaxe PNG תמונת PNG @@ -26987,7 +27946,7 @@ imatge PNG Obraz PNG imagem PNG - Imagem PNG + Imagem PNG Imagine PNG Изображение PNG Obrázok PNG @@ -26998,79 +27957,62 @@ PNG görüntüsü зображення PNG Ảnh PNG - PNG 图像 - PNG 影像 + PNG 图像 + PNG 影像 - + - Run Length Encoded bitmap image - تشغيل صورة نقطية طولية الترميز - Bitmapnaja vyjava, zakadavanaja ŭ Run Length - Изображение — RLE Bitmap - imatge de mapa de bits «Run Lenght Encoded» - obrázek bitové mapy Run Length Encoded - Run Length Encoded-bitmapbillede + RLE bitmap image + Изображение — RLE bitmap + imatge de mapa de bits RLE + RLE bitmap-billede Lauflängenkodiertes Bitmap-Bild - Εικόνα bitmap κωδικοποιημένου μήκος εκτέλεσης - Run Length Encoded bitmap image - mapa de bits con codificación del tamaño durante la ejecución - 'Run Lenght Encoded' bitmap irudia - RLE-koodattu bittikartta - image matricielle Run Length Encoded - íomhá ghiotánmhapach ionchódaithe fad reatha - mapa de bits con codificación do tamaño durante a execución - מקודד מפת סיביות של Run Length - Run Length Encoded bitmap slika - Run Length Encoded bitkép - Imagine raster in codification Run-Length - Citra peta bit Run Length Encoded - Immagine bitmap RLE (Run Length Encoded) - ランレングス符号化ビットマップ画像 - RLE сығылған растрлік суреті - RLE 인코딩된 비트맵 그림 - Run Length Encoded rastrinis paveikslėlis - Secīgo atkārtojumu kodēts bitkartes attēls - Run Length Encoded bitmap bilde - RLE-gecodeerde bitmap-afbeelding - Run Length Encoded punktgrafikk - imatge matriciala Run Length Encoded + RLE bitmap image + imagen de mapa de bits RLE + RLE bitmap irudia + RLE-bittikarttakuva + image matricielle RLE + RLE bitmap slika + RLE bitkép + Citra bitmap RLE + Immagine bitmap RLE + RLE растрлық суреті + RLE 비트맵 그림 Obraz bitmapy RLE - mapa de bitas Run Length Encoded - Classe de comprimento imagem bitmap codificada - Imagine bitmap codată RLE - Растровое изображение, сжатое RLE - Bitmapový obrázok Run Length Encoded - Zaporedno kodirana bitna slika (RLE) - Figurë bitmap RLE (Run Length Encoded) - битмап слика кодирана дужином скупине - Körlängdskodad bitmappbild - Run Length Encoded bit eşlem görüntüsü + Imagem bitmap RLE + Растровое изображение RLE + Bitna slika RLE + RLE bitmappsbild + RLE bit eşlem görüntüsü растрове зображення RLE - Ảnh mảng mã hóa chiều dài chạy (RLE) - 游程编码位图 - Run Length Encoded 點陣影像 + RLE 位图图像 + RLE 點陣影像 + RLE + Run Length Encoded SVG image + SVG-beeld صورة SVG - Vyjava SVG + Vyjava SVG Изображение — SVG imatge SVG obrázek SVG SVG-billede SVG-Bild Εικόνα SVG - SVG image + SVG image SVG-bildo imagen SVG SVG irudia SVG-kuva SVG mynd image SVG + imagjin SVG íomhá SVG imaxe SVG תמונת SVG @@ -27090,7 +28032,7 @@ imatge SVG Obraz SVG imagem SVG - Imagem SVG + Imagem SVG Imagine SVG Изображение SVG Obrázok SVG @@ -27101,41 +28043,49 @@ SVG görüntüsü зображення SVG Ảnh SVG - SVG 图像 - SVG 影像 + SVG 图像 + SVG 影像 SVG Scalable Vector Graphics - - + + + + + + + + compressed SVG image + saamgepersde SVG-beeld صورة SVG مضغوطة - skampresavanaja vyjava SVG + skampresavanaja vyjava SVG Изображение — SVG, компресирано imatge SVG amb compressió komprimovaný obrázek SVG SVG-komprimeret billede Komprimiertes SVG-Bild Συμπιεσμένη εικόνα SVG - compressed SVG image + compressed SVG image imagen SVG comprimida konprimitutako SVG irudia pakattu SVG-kuva stappað SVG mynd image SVG compressée + imagjin SVG comprimude íomhá SVG comhbhrúite imaxe SVG comprimida תמונת SVG מכווצת Sažeta SVG slika tömörített SVG kép Imagine SVG comprimite - Citra SVG terkompresi + citra SVG terkompresi Immagine SVG compressa 圧縮 SVG 画像 сығылған SVG суреті @@ -27148,7 +28098,7 @@ imatge SVG compressat Skompresowany obraz SVG imagem SVG comprimida - Imagem SVG compactada + Imagem SVG compactada imagine comprimată SVG Сжатое изображение SVG Komprimovaný obrázok SVG @@ -27159,8 +28109,8 @@ sıkıştırılmış SVG görüntüsü стиснене зображення SVG ảnh SVG đã nén - 压缩的 SVG 图像 - 壓縮版 SVG 影像 + 压缩的 SVG 图像 + 壓縮版 SVG 影像 SVG Scalable Vector Graphics @@ -27168,21 +28118,23 @@ TIFF image + TIFF-beeld صورة TIFF - Vyjava TIFF + Vyjava TIFF Изображение — TIFF imatge TIFF obrázek TIFF TIFF-billede TIFF-Bild Εικόνα TIFF - TIFF image + TIFF image TIFF-bildo imagen TIFF TIFF irudia TIFF-kuva TIFF mynd image TIFF + imagjin TIFF íomhá TIFF imaxe TIFF תמונת TIFF @@ -27203,7 +28155,7 @@ imatge TIFF Obraz TIFF imagem TIFF - Imagem TIFF + Imagem TIFF Imagine TIFF Изображение TIFF Obrázok TIFF @@ -27214,28 +28166,32 @@ TIFF görüntüsü зображення TIFF Ảnh TIFF - TIFF 图像 - TIFF 影像 + TIFF 图像 + TIFF 影像 TIFF Tagged Image File Format - - + + Multi-page TIFF image + Multibladsy TIFF-beeld + Изображение — TIFF, много страници imatge TIFF multipàgina vícestránkový obrázek TIFF Flersidet TIFF-billede Mehrseitiges TIFF-Bild Πολυσέλιδη εικόνα TIFF - Multi-page TIFF image + Multi-page TIFF image imagen TIFF de varias páginas + Multi-page TIFF irudia Monisivuinen TIFF-kuva Image TIFF multi-page + imagjin a plui pagjinis TIFF íomhá il-leathanach TIFF Imaxe TIFF multipáxina תמונת TIFF עם ריבוי עמודים @@ -27249,7 +28205,7 @@ Imatge TIFF multipagina Wielostronnicowy obraz TIFF imagem TIFF multipágina - Imagem TIFF multipágina + Imagem TIFF multipágina Многостраничное изображение TIFF Viacstránkový obrázok TIFF Večstranska slika TIFF @@ -27257,17 +28213,18 @@ Flersidig TIFF-bild Çok sayfalı TIFF görüntüsü багатосторінкове зображення TIFF - 多页 TIFF 图像 - 多頁 TIFF 影像 + 多页 TIFF 图像 + 多頁 TIFF 影像 TIFF Tagged Image File Format AutoCAD image + AutoCAD-beeld صورة AutoCAD AutoCAD rəsmi - Vyjava AutoCAD + Vyjava AutoCAD Изображение — AutoCAD imatge d'AutoCAD výkres AutoCAD @@ -27275,13 +28232,14 @@ AutoCAD-billede AutoCAD-Bild Εικόνα AutoCAD - AutoCAD image + AutoCAD image AutoCAD-bildo imagen de AutoCAD AutoCAD-eko irudia AutoCAD-kuva AutoCAD mynd image AutoCAD + imagjin AutoCAD íomhá AutoCAD imaxe de AutoCAD תמונה של AutoCAD @@ -27303,7 +28261,7 @@ imatge AutoCAD Obraz AutoCAD imagem AutoCAD - Imagem do AutoCAD + Imagem do AutoCAD Imagine AutoCAD Изображение AutoCAD Obrázok AutoCAD @@ -27314,27 +28272,29 @@ AutoCAD görüntüsü зображення AutoCAD Ảnh AutoCAD - AutoCAD 图像 - AutoCAD 影像 + AutoCAD 图像 + AutoCAD 影像 DXF vector image + DXF-vektorbeeld صورة DXF نقطية - Vektarnaja vyjava DXF + Vektarnaja vyjava DXF Изображение — DXF imatge vectorial DXF vektorový obrázek DXF DXF-vektorbillede DXF-Vektorbild Διανυσματική εικόνα DXF - DXF vector image + DXF vector image vektora DXF-bildo imagen vectorial DXF DXF bektore-grafikoa DXF-vektorikuva DXF vektormynd image vectorielle DXF + imagjin vetoriâl DXF íomhá veicteoireach DXF imaxe de vector DXF תמונת DXF וקטורית @@ -27356,7 +28316,7 @@ imatge vectorial DXF Obraz wektorowy DXF imagem de vectores DXF - Imagem vetorial DXF + Imagem vetorial DXF Imagine vectorială DXF Векторное изображение DXF Vektorový obrázok DXF @@ -27367,78 +28327,63 @@ DXF vektör görüntüsü векторне зображення DXF Ảnh véc-tơ DXF - DXF 矢量图像 - DXF 向量圖 + DXF 矢量图像 + DXF 向量圖 - - + + - Microsoft Document Imaging format - صيغة مستند تصوير مايكروسوفت - Formatu d'imáxenes de Microsoft Document - Изображение — Microsoft Document Imaging - format Microsoft Document Imaging - formát Microsoft Document Imaging - Microsofts dokumentbilledformat - Microsoft-Document-Imaging-Bildformat - Μορφή Microsoft Document Imaging - Microsoft Document Imaging format - formato de imagen para documentos de Microsoft - Microsoft Document Imaging formatua - Microsoft Document Imaging -muoto - Microsoft Document Imaging snið - format Document Imaging Microsoft - formáid Microsoft Document Imaging - formato de Microsoft Document Imaging - תבנית של Microsoft Document Imaging - Microsoft Document Imaging format - Microsoft Document Imaging formátum - File in formato Microsoft Document Imaging - Format Microsoft Document Imaging - Formato MDI (Microsoft Document Imaging) - Microsoft ドキュメントイメージフォーマット - Microsoft Document Imaging пішімі - Microsoft 문서 이미지 형식 - Microsoft Document Imaging formatas - Microsoft dokumentu attēlošanas formāts - Microsoft Document Imaging - format Document Imaging Microsoft - Format Microsoft Document Imaging - formato Microsoft Document Imaging - Formato do Microsoft Document Imaging - Format Microsoft Document Imaging - Формат Microsoft Document Imaging - Formát Microsoft Document Imaging - Zapis Microsoft Document Imaging - запис слика Мајкрософтовог документа - Microsoft Document Imaging-format - Microsoft Belge Görüntüleme biçimi - формат Microsoft Document Imaging - Định dạng tạo ảnh tài liệu Microsoft - Microsoft Document Imaging 格式 - 微軟文件影像格式 + MDI image + Изображение — MDI + imatge MDI + MDI-billede + MDI-Bild + MDI image + imagen MDI + MDI irudia + MDI-kuva + image MDI + MDI slika + MDI-kép + Citra MDI + Immagine MDI + MDI суреті + MDI 그림 + Obraz MDI + Imagem MDI + Изображение MDI + Obrázok MDI + Slika MDI + MDI-bild + MDI görüntüsü + зображення MDI + MDI 图像 + MDI 影像 MDI Microsoft Document Imaging - + WebP image + WebP-beeld + Изображение — WebP imatge WebP obrázek WebP WebP-billede WebP-Bild Εικόνα WebP - WebP image + WebP image imagen WebP WebP irudia WebP-kuva image WebP + imagjin WebP íomhá WebP Imaxe WebP תמונת WebP @@ -27452,7 +28397,7 @@ imatge WebP Obraz WebP imagem WebP - Imagem WebP + Imagem WebP Изображение WebP Obrázok WebP Slika WebP @@ -27460,20 +28405,21 @@ WebP-bild WebP görüntüsü зображення WebP - WebP 图像 - WebP 影像 + WebP 图像 + WebP 影像 - - + + 3D Studio image + 3D Studio-beeld صورة استديو ثلاثية الأبعاد 3D Studio rəsmi - Vyjava 3D Studio + Vyjava 3D Studio Изображение — 3D Studio imatge de 3D Studio obrázek 3D Studio @@ -27481,13 +28427,14 @@ 3D Studio-billede 3D-Studio-Bild Εικόνα 3D Studio - 3D Studio image + 3D Studio image bildo de 3D Studio imagen de 3D Studio 3D Studio-ko irudia 3D Studio -kuva 3D Studio mynd image 3D Studio + imagjin 3D Studio íomhá 3D Studio Imaxe de 3D Studio תמונת 3D Studio @@ -27509,7 +28456,7 @@ imatge 3D Studio Obraz 3D Studio imagem 3D Studio - Imagem do 3D Studio + Imagem do 3D Studio Imagine 3D Studio Сцена 3D Studio Obrázok 3D Studio @@ -27520,27 +28467,32 @@ 3D Studio görüntüsü зображення 3D Studio Ảnh xuởng vẽ 3D - 3D Studio 图像 - 3D Studio 影像 + 3D Studio 图像 + 3D Studio 影像 + + + Applix Graphics image + Applix Graphics-beeld صورة رسوميات Applix - Vyjava Applix Graphics + Vyjava Applix Graphics Изображение — Applix Graphics imatge d'Applix Graphics obrázek Applix Graphics Applix Graphics-billede Applix-Graphics-Bild Εικόνα Applix Graphics - Applix Graphics image + Applix Graphics image bildo de Applix Graphics imagen de Applix Graphics Applix Graphics irudia Applix Graphics -kuva Applix Graphics mynd image Applix Graphics + imagjin Applix Graphics íomhá Applix Graphics imaxe de Applix Graphics תמונה של Applix Graphics @@ -27562,7 +28514,7 @@ imatge Applix Graphics Obraz Applix Graphics imagem Applix Graphics - Imagem do Applix Graphics + Imagem do Applix Graphics Imagine Applix Graphics Изображение Applix Graphics Obrázok Applix Graphics @@ -27573,36 +28525,38 @@ Applix Graphics görüntüsü зображення Applix Graphics Ảnh Applix Graphics - Applix Graphics 图像 - Applix Graphics 影像 + Applix Graphics 图像 + Applix Graphics 影像 - - + + EPS image (bzip-compressed) + EPS-beeld (bzip-saamgepers) صورة EPS (مضغوط-bzip) - Vyjava EPS (bzip-skampresavanaja) + Vyjava EPS (bzip-skampresavanaja) Изображение — EPS, компресирано с bzip imatge EPS (amb compressió bzip) obrázek EPS (komprimovaný pomocí bzip) EPS-billede (bzip-komprimeret) EPS-Bild (bzip-komprimiert) Εικόνα EPS (συμπιεσμένη bzip) - EPS image (bzip-compressed) + EPS image (bzip-compressed) imagen EPS (comprimida con bzip) EPS irudia (bzip-ekin konprimitua) EPS-kuva (bzip-pakattu) EPS mynd (bzip-stappað) image EPS (compressée bzip) + imagjin EPS (comprimude cun bzip) íomhá EPS (comhbhrúite le bzip) imaxe EPS (comprimida con bzip) תמונת EPS (מכווץ בbzip) EPS slika (bzip sažeta) - EPS kép (bzip-tömörítésű) + EPS kép (bzip tömörítésű) Imagine EPS (comprimite con bzip) Citra EPS (terkompresi bzip) Immagine EPS (compressa con bzip) @@ -27618,7 +28572,7 @@ imatge EPS (compressat bzip) Obraz EPS (kompresja bzip) imagem EPS (compressão bzip) - Imagem EPS (compactada com bzip) + Imagem EPS (compactada com bzip) Imagine EPS (compresie bzip) Изображение EPS (сжатое bzip) Obrázok EPS (komprimovaný pomocou bzip) @@ -27629,8 +28583,8 @@ EPS görüntüsü (bzip ile sıkıştırılmış) зображення EPS (стиснене bzip) Ảnh EPS (đã nén bzip) - EPS 图像(bzip 压缩) - EPS 影像 (bzip 格式壓縮) + EPS 图像(bzip 压缩) + EPS 影像 (bzip 壓縮) @@ -27638,9 +28592,10 @@ CMU raster image + CMU-roosterbeeld صورة CMU نقطية CMU raster rəsmi - Rastravaja vyjava CMU + Rastravaja vyjava CMU Изображение — CMU raster imatge ràster CMU rastrový obrázek CMU @@ -27648,13 +28603,14 @@ CMU-rasterbillede CMU-Rasterbild Εικόνα ράστερ CMU - CMU raster image + CMU raster image rastruma bildo de CMU imagen ráster CMU CMU bilbe-irudia CMU-rasterikuva CMU raster mynd image raster CMU + imagjin raster CMU íomhá rastar CMU imaxe raster CMU תמונת סריקה CMU @@ -27676,7 +28632,7 @@ imatge raster CMU Obraz rastrowy CMU imagem raster CMU - Imagem raster CMU + Imagem raster CMU Imagine raster CMU Растровое изображение CMU Rastrový obrázok CMU @@ -27687,33 +28643,35 @@ CMU tarama görüntüsü растрове зображення CMU Ảnh mành CMU - CMU 光栅图像 - CMU raster 影像 + CMU 光栅图像 + CMU raster 影像 compressed GIMP image + saamgepersde GIMP-beeld صورة GIMP مضغوطة - skampresavanaja vyjava GIMP + skampresavanaja vyjava GIMP Изображение — GIMP, компресирано imatge GIMP amb compressió komprimovaný obrázek GIMP komprimeret GIMP-billede Komprimiertes GIMP-Bild Συμπιεσμένη εικόνα GIMP - compressed GIMP image + compressed GIMP image imagen GIMP comprimida konprimitutako GIMP irudia pakattu GIMP-kuva stappað GIMP mynd image GIMP compressée + imagjin GIMP comprimude íomhá GIMP comhbhrúite imaxe de GIMP comprimida תמונת GIMP מכווצת Sažeta GIMP slika tömörített GIMP kép Imagine GIMP comprimite - Citra GIMP terkompresi + citra GIMP terkompresi Immagine GIMP compressa 圧縮 GIMP 画像 сығылған GIMP суреті @@ -27726,7 +28684,7 @@ imatge GIMP compressat Skompresowany obraz GIMP imagem GIMP comprimida - Imagem do GIMP compactada + Imagem do GIMP compactada imagine comprimată GIMP Сжатое изображение GIMP Komprimovaný obrázok GIMP @@ -27737,28 +28695,30 @@ sıkıştırılmış GIMP görüntüsü стиснене зображення GIMP ảnh GIMP đã nén - 压缩的 GIMP 图像 - 壓縮版 GIMP 影像 + 压缩的 GIMP 图像 + 壓縮版 GIMP 影像 DICOM image + DICOM-beeld صورة DICOM - Vyjava DICOM + Vyjava DICOM Изображение — DICOM imatge DICOM obrázek DICOM DICOM-billede DICOM-Bild Εικόνα DICOM - DICOM image + DICOM image DICOM-bildo imagen DICOM DICOM irudia DICOM-kuva DICOM mynd image DICOM + imagjin DICOM íomhá DICOM imaxe DICOM תמונת DICOM @@ -27779,7 +28739,7 @@ imatge DICOM Obraz DICOM imagem DICOM - Imagem DICOM + Imagem DICOM Imagine DICOM Изображение DICOM Obrázok DICOM @@ -27790,35 +28750,37 @@ DICOM görüntüsü зображення DICOM Ảnh DICOM - DICOM 图像 - DICOM 影像 + DICOM 图像 + DICOM 影像 DICOM Digital Imaging and Communications in Medicine - + DocBook document + DocBook-dokument مستند DocBook Documentu DocBook - Dakument DocBook + Dakument DocBook Документ — DocBook document DocBook dokument DocBook DocBook-dokument DocBook-Dokument Έγγραφο DocBook - DocBook document + DocBook document DocBook-dokumento documento DocBook DocBook dokumentua DocBook-asiakirja DocBook skjal document DocBook + document DocBook cáipéis DocBook documento de DocBook מסמך DocBook @@ -27839,7 +28801,7 @@ document DocBook Dokument DocBook documento DocBook - Documento DocBook + Documento DocBook Document DocBook Документ DocBook Dokument DocBook @@ -27850,8 +28812,8 @@ DocBook belgesi документ DocBook Tài liệu DocBook - DocBook 文档 - DocBook 文件 + DocBook 文档 + DocBook 文件 @@ -27867,21 +28829,23 @@ DIB image + DIB-beeld صورة DIB - Vyjava DIB + Vyjava DIB Изображение — DIB imatge DIB obrázek DIB DIB-billede DIB-Bild Εικόνα DIB - DIB image + DIB image DIB-bildo imagen DIB DIB irudia DIB-kuva DIB mynd image DIB + imagjin DIB íomhá DIB imaxe DIB תמונת DIB @@ -27902,7 +28866,7 @@ imatge DIB Obraz DIB imagem DIB - Imagem DIB + Imagem DIB Imagine DIB Изображение DIB Obrázok DIB @@ -27913,31 +28877,33 @@ DIB görüntüsü зображення DIB Ảnh DIB - DIB 图像 - DIB 影像 + DIB 图像 + DIB 影像 DIB Device Independent Bitmap - + DjVu image + DjVu-beeld صورة DjVu - Vyjava DjVu + Vyjava DjVu Изображение — DjVu imatge DjVu obrázek DjVu DjVu-billede DjVu-Bild Εικόνα DjVu - DjVu image + DjVu image DjVu-bildo imagen DjVu DjVU-ko irudia DjVu-kuva DjVu mynd image DjVu + imagjin DjVu íomhá DjVu imaxe de DjVu תמונת DjVu @@ -27959,7 +28925,7 @@ imatge DjVu Obraz DjVu imagem DjVu - Imagem DjVu + Imagem DjVu Imagine DjVu Изображение DjVu Obrázok DjVu @@ -27970,16 +28936,16 @@ DjVu görüntüsü зображення DjVu Ảnh DjVu - DjVu 图像 - DjVu 影像 + DjVu 图像 + DjVu 影像 - - + + - - + + @@ -27987,17 +28953,20 @@ DjVu document + DjVu-dokument Documentu DjVu + Документ — DjVu document DjVu dokument DjVu DjVu-dokument DjVu-Dokument Έγγραφο DjVu - DjVu document + DjVu document documento DjVu DjVu dokumentua DjVu-asiakirja document DjVu + document DjVu cáipéis DjVu מסמך DjVu DjVu dokument @@ -28010,22 +28979,23 @@ document DjVu Dokument DjVu documento DjVu - Documento DjVu + Documento DjVu Документ DjVu Dokument DjVu + Dokument DjVu ДјВу документ DjVu-dokument DjVu belgesi документ DjVu - DjVu 文档 - DjVu 文件 + DjVu 文档 + DjVu 文件 - - + + - - + + @@ -28034,21 +29004,23 @@ DPX image + DPX-beeld صورة DPX - Vyjava DPX + Vyjava DPX Изображение — DPX imatge DPX obrázek DPX DPX-billede DPX-Bild Εικόνα DPX - DPX image + DPX image DPX-bildo imagen DPX DPX irudia DPX-kuva DPX mynd image DPX + imagjin DPX íomhá DPX imaxe DPX תמונת DPX @@ -28069,7 +29041,7 @@ imatge DPX Obraz DPX imagem DPX - Imagem DPX + Imagem DPX Imagine DPX Изображение DPX Obrázok DPX @@ -28080,31 +29052,33 @@ DPX görüntüsü зображення DPX Ảnh DPX - DPX 图像 - DPX 影像 + DPX 图像 + DPX 影像 DPX Digital Moving Picture Exchange - + EPS image + EPS-beeld صورة EPS - Vyjava EPS + Vyjava EPS Изображение — EPS imatge EPS obrázek EPS EPS-billede EPS-Bild Εικόνα EPS - EPS image + EPS image EPS-bildo imagen EPS EPS irudia EPS-kuva EPS mynd image EPS + imagjin EPS íomhá EPS imaxe EPS תמונת EPS @@ -28125,7 +29099,7 @@ imatge EPS Obraz EPS imagem EPS - Imagem EPS + Imagem EPS Imagine EPS Изображение EPS Obrázok EPS @@ -28136,19 +29110,19 @@ EPS görüntüsü зображення EPS Ảnh EPS - EPS 图像 - EPS 影像 + EPS 图像 + EPS 影像 EPS Encapsulated PostScript - - + + - - + + - + @@ -28156,22 +29130,24 @@ FITS document + FITS-dokument مستند FITS Documentu FITS - Dakument FITS + Dakument FITS Документ — FITS document FITS dokument FITS FITS-dokument FITS-Dokument Έγγραφο FITS - FITS document + FITS document FITS-dokumento documento FITS FITS dokumentua FITS-asiakirja FITS skjal document FITS + document FITS cáipéis FITS documento FICT מסמך FITS @@ -28192,7 +29168,7 @@ document FITS Dokument FITS documento FITS - Documento FITS + Documento FITS Document FITS Документ FITS Dokument FITS @@ -28203,33 +29179,35 @@ FITS belgesi документ FITS Tài liệu FITS - FITS 文档 - FITS 文件 + FITS 文档 + FITS 文件 FITS Flexible Image Transport System - + FPX image + FPX-beeld صورة FPX - Vyjava FPX + Vyjava FPX Изображение — FPX imatge FPX obrázek FPX FPX-billede FPX-Bild Εικόνα FPX - FPX image + FPX image FPX-bildo imagen FPX FPX irudia FPX-kuva FPX mynd image FPX + imagjin FPX íomhá FPX imaxe FPX תמונת FPX @@ -28250,7 +29228,7 @@ imatge FPX Obraz FPX imagem FPX - Imagem FPX + Imagem FPX Imagine FPX Изображение FPX Obrázok FPX @@ -28261,35 +29239,37 @@ FPX görüntüsü зображення FPX Ảnh FPX - FPX 图像 - FPX 影像 + FPX 图像 + FPX 影像 FPX FlashPiX - + EPS image (gzip-compressed) + EPS-beeld (gzip-saamgepers) صورة EPS (مضغوط-gzip) - Vyjava EPS (gzip-skampresavanaja) + Vyjava EPS (gzip-skampresavanaja) Изображение — EPS, компресирано с gzip imatge EPS (amb compressió gzip) obrázek EPS (komprimovaný pomocí gzip) EPS-billede (gzip-komprimeret) EPS-Bild (gzip-komprimiert) Εικόνα EPS (συμπιεσμένη gzip) - EPS image (gzip-compressed) + EPS image (gzip-compressed) imagen EPS (comprimida con gzip) EPS irudia (gzip-ekin konprimitua) EPS-kuva (gzip-pakattu) EPS mynd (gzip-stappað) image EPS (compressée gzip) + imagjin EPS (comprimude cun gzip) íomhá EPS (comhbhrúite le gzip) imaxe EPS (comprimida con gzip) תמונת EPS (מכווץ ע״י gzip) EPS slika (gzip sažeta) - EPS kép (gzip-tömörítésű) + EPS kép (gzip tömörítésű) Imagine EPS (comprimite con gzip) Citra EPS (terkompresi gzip) Immagine EPS (compressa con gzip) @@ -28305,7 +29285,7 @@ imatge EPS (compressat gzip) Obraz EPS (kompresja gzip) imagem EPS (compressão gzip) - Imagem EPS (compactada com gzip) + Imagem EPS (compactada com gzip) Imagine EPS (compresie gzip) Изображение EPS (сжатое gzip) Obrázok EPS (komprimovaný pomocou gzip) @@ -28316,8 +29296,8 @@ EPS görüntüsü (gzip ile sıkıştırılmış) зображення EPS (стиснене gzip) Ảnh EPS (đã nén gzip) - EPS 图像(gzip 压缩) - EPS 影像 (gzip 格式壓縮) + EPS 图像(gzip 压缩) + EPS 影像 (gzip 壓縮) @@ -28325,16 +29305,19 @@ Windows icon + Windows-ikoon + Икона — Windows icona de Windows ikona Windows Windows-ikon Windows-Symbol Εικονίδιο Windows - Windows icon + Windows icon icono de Windows Windows ikonoa Windows-kuvake icône Windows + icone Windows deilbhín Windows סמל של Windows Windows ikona @@ -28343,11 +29326,11 @@ Ikon Windows Icona Windows Windows таңбашасы - 윈도우 아이콘 + Windows 아이콘 icòna Windows Ikona Windows ícone Windows - Ícone do Windows + Ícone do Windows Значок Windows Ikona Windows Ikona Windows @@ -28355,11 +29338,11 @@ Windows-ikon Windows simgesi піктограма Windows - Windows 图标 - Windows 圖示 + Windows 图标 + Windows 圖示 - - + + @@ -28372,21 +29355,23 @@ MacOS X icon + MacOS X-ikoon أيقونة MacOS X - Ikona MacOS X + Ikona MacOS X Икона — MacOS X icona MacOS X ikona MacOS X MacOS X-ikon MacOS-X-Symbol Εικονίδιο MacOS X - MacOS X icon + MacOS X icon MacOS-X-piktogramo icono de OS X MacOS X ikonoa MacOS X -kuvake MacOS X ímynd icône MacOS X + icone MacOS X deilbhín MacOS X Icona de MacOS X סמל בתקן MacOS X @@ -28407,7 +29392,7 @@ icòna MacOS X Ikona Mac OS X ćone MacOS X - Ícone do MacOS X + Ícone do MacOS X Iconiță MacOS X Значок MacOS X Ikona MacOS X @@ -28418,18 +29403,19 @@ MacOS X simgesi піктограма MacOS X Biểu tượng MacOS X - MacOS X 图标 - MacOS X 圖示 + MacOS X 图标 + MacOS X 圖示 - + ILBM image + ILBM-beeld صورة ILBM ILBM rəsmi - Vyjava ILBM + Vyjava ILBM Изображение — ILBM imatge ILBM obrázek ILMB @@ -28437,13 +29423,14 @@ ILBM-billede ILBM-Bild Εικόνα ILBM - ILBM image + ILBM image ILBM-bildo imagen ILBM ILBM irudia ILBM-kuva ILBM mynd image ILBM + imagjin ILBM íomhá ILBM imaxe ILBM תמונת ILBM @@ -28464,7 +29451,7 @@ imatge ILBM Obraz ILBM imagem ILBM - Imagem ILBM + Imagem ILBM Imagine ILBM Изображение ILBM Obrázok ILMB @@ -28475,8 +29462,8 @@ ILBM görüntüsü зображення ILBM Ảnh ILBM - ILBM 图像 - ILBM 影像 + ILBM 图像 + ILBM 影像 ILBM InterLeaved BitMap @@ -28491,9 +29478,10 @@ JNG image + JNG-beeld صورة JNG JNG rəsmi - Vyjava JNG + Vyjava JNG Изображение — JNG imatge JNG obrázek JNG @@ -28501,13 +29489,14 @@ JNG-billede JNG-Bild Εικόνα JNG - JNG image + JNG image JNG-bildo imagen JNG JNG irudia JNG-kuva JNG mynd image JNG + imagjin JNG íomhá JNG imaxe JNG תמונת JNG @@ -28528,7 +29517,7 @@ imatge JNG Obraz JNG imagem JNG - Imagem JNG + Imagem JNG Imagine JNG Изображение JNG Obrázok JNG @@ -28539,17 +29528,18 @@ JNG görüntüsü зображення JNG Ảnh JNG - JNG 图像 - JNG 影像 + JNG 图像 + JNG 影像 JNG JPEG Network Graphics LightWave object + LightWave-objek كائن LightWave LightWave cismi - Abjekt LightWave + Abjekt LightWave Обект — LightWave objecte de LightWave objekt LightWave @@ -28557,13 +29547,14 @@ LightWave-objekt LightWave-Objekt Αντικείμενο LightWave - LightWave object + LightWave object LightWave-objekto objeto de LightWave LightWave objektua LightWave-esine LightWave lutur objet LightWave + ogjet LightWave réad LightWave obxecto de LightWave עצם LightWave @@ -28584,7 +29575,7 @@ objècte LightWave Obiekt LightWave Objecto LightWave - Objeto LightWave + Objeto LightWave Obiect LightWave Объект LightWave Objekt LightWave @@ -28595,16 +29586,17 @@ LightWave nesnesi об'єкт LightWave Đối tượng LightWave - LightWave 对象 - LightWave 物件 + LightWave 对象 + LightWave 物件 LightWave scene + LightWave-toneel مشهد LightWave LightWave səhnəsi - Scena LightWave + Scena LightWave Сцена — LightWave escena de LightWave scéna LightWave @@ -28612,13 +29604,14 @@ LightWave-scene LightWave-Szene Σκηνή LightWave - LightWave scene + LightWave scene LightWave-sceno escena de LightWave LightWave eszena LightWave-maisema LightWave leikmynd scène LightWave + sene LightWave radharc LightWave escena de LightWave סצנה של LightWave @@ -28639,7 +29632,7 @@ scèna LightWave Scena Lightwave cenário LightWave - Cena LightWave + Cena LightWave Scenă LightWave Сцена LightWave Scéna LightWave @@ -28650,26 +29643,28 @@ LightWave sahnesi сцена LightWave Cảnh LightWave - LightWave 场景 - LightWave 場景 + LightWave 场景 + LightWave 場景 MacPaint Bitmap image + MacPaint-roosterbeeld صورة MacPaint Bitmap - Bitmapnaja vyjava MacPaint + Bitmapnaja vyjava MacPaint Изображение — MacPaint Bitmap imatge de mapa de bits MacPaint obrázek MacPaint Bitmap MacPaint BitMap-billede MacPaint-Bitmap-Datei Εικόνα Bitmap MacPaint - MacPaint Bitmap image + MacPaint Bitmap image imagen de mapa de bits de MacPaint MacPaint Bitmap irudia MacPaint-bittikartta MacPaint Bitmap mynd image matricielle MacPaint + imagjin bitmap MacPaint íomhá ghiotánmhapach MacPaint imaxe de mapa de bits MacPaint תמונת מפת-סיביות של MacPaint @@ -28689,7 +29684,7 @@ imatge matricial MacPaint Obraz bitmapowy MacPaint imagem MacPaint Bitmap - Imagem de bitmap do MacPaint + Imagem de bitmap do MacPaint Imagine MacPaint Bitmap Растровое изображение MacPaint Obrázok MacPaint Bitmap @@ -28700,26 +29695,28 @@ MacPaint bit eşlem görüntüsü растрове зображення MacPaint Ảnh mảng MacPaint - MacPaint 位图 - MacPaint 點陣影像 + MacPaint 位图 + MacPaint 點陣影像 Office drawing + Office-tekening تصميم أوفيس - Ofisny rysunak + Ofisny rysunak Чертеж — Office dibuix d'Office kresba Office Officetegning Office-Zeichnung Σχέδιο Office - Office drawing + Office drawing dibujo de Office Office marrazkia Office-piirros Office tekning dessin Office + dissen di Office líníocht Office debuxo de Office ציור של Office @@ -28739,7 +29736,7 @@ dessenh Office Rysunek Office desenho Office - Desenho do Office + Desenho do Office Desen Office Рисунок Office Kresba Office @@ -28750,27 +29747,29 @@ Ofis çizimi малюнок Office Bản vẽ Office - Office 绘图 - Office 繪圖 + Office 绘图 + Office 繪圖 NIFF image + NIFF-beeld صورة NIFF - Vyjava NIFF + Vyjava NIFF Изображение — NIFF imatge NIFF obrázek NIFF NIFF-billede NIFF-Bild Εικόνα NIFF - NIFF image + NIFF image NIFF-bildo imagen NIFF NIFF irudia NIFF-kuva NIFF mynd image NIFF + imagjin NIFF íomhá NIFF imaxe NIFF תמונת NIFF @@ -28790,7 +29789,7 @@ imatge NIFF Obraz NIFF imagem NIFF - Imagem NIFF + Imagem NIFF Imagine NIF Изображение NIFF Obrázok NIFF @@ -28801,29 +29800,31 @@ NIFF görüntüsü зображення NIFF Ảnh NIFF - NIFF 图像 - NIFF 影像 + NIFF 图像 + NIFF 影像 - + PCX image + PCX-beeld صورة PCX - Vyjava PCX + Vyjava PCX Изображение — PCX imatge PCX obrázek PCX PCX-billede PCX-Bild Εικόνα PCX - PCX image + PCX image PCX-bildo imagen PCX PCX irudia PCX-kuva PCX mynd image PCX + imagjin PCX íomhá PCX imaxe PCX תמונת PCX @@ -28843,7 +29844,7 @@ imatge PCX Obraz PCX imagem PCX - Imagem PCX + Imagem PCX Imagine PCX Изображение PCX Obrázok PCX @@ -28854,16 +29855,16 @@ PCX görüntüsü зображення PCX Ảnh PCX - PCX 图像 - PCX 影像 + PCX 图像 + PCX 影像 PCX PiCture eXchange - - - - - + + + + + @@ -28871,21 +29872,23 @@ PCD image + PCD-beeld صورة PCD - Vyjava PCD + Vyjava PCD Изображение — PCD imatge PCD obrázek PCD PCD-billede PCD-Bild Εικόνα PCD - PCD image + PCD image PCD-bildo imagen PCD PCD irudia PCD-kuva PCD mynd image PCD + imagjin PCD íomhá PCD imaxe PCD תמונת PCD @@ -28906,7 +29909,7 @@ imatge PCD Obraz PCD imagem PCD - Imagem PCD + Imagem PCD Imagine PCD Изображение PCD Obrázok PCD @@ -28917,17 +29920,18 @@ PCD görüntüsü зображення PCD Ảnh PCD - PCD 图像 - PCD 影像 + PCD 图像 + PCD 影像 PCD PhotoCD PNM image + PNM-beeld صورة PNM PNM rəsmi - Vyjava PNM + Vyjava PNM Изображение — PNM imatge PNM obrázek PNM @@ -28935,13 +29939,14 @@ PNM-billede PNM-Bild Εικόνα PNM - PNM image + PNM image PNM-bildo imagen PNM PNM irudia PNM-kuva PNM mynd image PNM + imagjin PNM íomhá PNM imaxe PNM תמונת PNM @@ -28962,7 +29967,7 @@ imatge PNM Obraz PNM imagem PNM - Imagem PNM + Imagem PNM Imagine PNM Изображение PNM Obrázok PNM @@ -28973,14 +29978,15 @@ PNM görüntüsü зображення PNM Ảnh PNM - PNM 图像 - PNM 影像 + PNM 图像 + PNM 影像 PBM image + PBM-beeld صورة PBM - Vyjava PBM + Vyjava PBM Изображение — PBM imatge PBM obrázek PBM @@ -28988,13 +29994,14 @@ PBM-billede PBM-Bild Εικόνα PBM - PBM image + PBM image PBM-bildo imagen PBM PBM irudia PBM-kuva PBM mynd image PBM + imagjin PBM íomhá PBM imaxe PBM תמונת PBM @@ -29015,7 +30022,7 @@ imatge PBM Obraz PBM imagem PBM - Imagem PBM + Imagem PBM Imagine PBM Изображение PBM Obrázok PBM @@ -29026,31 +30033,32 @@ PBM görüntüsü зображення PBM Ảnh PBM - PBM 图像 - PBM 影像 + PBM 图像 + PBM 影像 PBM Portable BitMap - - - - - + + + + + - - - - - + + + + + PGM image + PGM-beeld صورة PGM - Vyjava PGM + Vyjava PGM Изображение — PGM imatge PGM obrázek PGM @@ -29058,13 +30066,14 @@ PGM-billede PGM-Bild Εικόνα PGM - PGM image + PGM image PGM-bildo imagen PGM PGM irudia PGM-kuva PGM mynd image PGM + imagjin PGM íomhá PGM imaxe PGM תמונת PGM @@ -29084,7 +30093,7 @@ imatge PGM Obraz PGM imagem PGM - Imagem PGM + Imagem PGM Imagine PGM Изображение PGM Obrázok PGM @@ -29095,31 +30104,32 @@ PGM görüntüsü зображення PGM Ảnh PGM - PGM 图像 - PGM 影像 + PGM 图像 + PGM 影像 PGM Portable GrayMap - - - - - + + + + + - - - - - + + + + + PPM image + PPM-beeld صورة PPM - Vyjava PPM + Vyjava PPM Изображение — PPM imatge PPM obrázek PPM @@ -29127,13 +30137,14 @@ PPM-billede PPM-Bild Εικόνα PPM - PPM image + PPM image PPM-bildo imagen PPM PPM irudia PPM-kuva PPM mynd image PPM + imagjin PPM íomhá PPM imaxe PPM תמונת PPM @@ -29153,7 +30164,7 @@ imatge PPM Obraz PPM imagem PPM - Imagem PPM + Imagem PPM Imagine PPM Изображение PPM Obrázok PPM @@ -29164,29 +30175,30 @@ PPM görüntüsü зображення PPM Ảnh PPM - PPM 图像 - PPM 影像 + PPM 图像 + PPM 影像 PPM Portable PixMap - - - - - + + + + + - - - - - + + + + + Photoshop image + Photoshop-beeld صورة فوتوشوب Изображение — Photoshop imatge de Photoshop @@ -29194,13 +30206,14 @@ Photoshop-billede Photoshop-Bild Εικόνα Photoshop - Photoshop image + Photoshop image Photoshop-bildo imagen de Photoshop Photoshop irudia Photoshop-kuva Photoshop mynd image Photoshop + imagjin Photoshop íomhá Photoshop imaxe de Photoshop תמונת Photoshop @@ -29219,7 +30232,7 @@ imatge Photoshop Obraz Photoshop imagem Photoshop - Imagem do Photoshop + Imagem do Photoshop Imagine Photoshop Изображение Photoshop Obrázok Photoshop @@ -29229,10 +30242,10 @@ Photoshop görüntüsü зображення Photoshop Ảnh Photoshop - Photoshop 图像 - Photoshop 影像 + Photoshop 图像 + Photoshop 影像 - + @@ -29244,9 +30257,10 @@ RGB image + RGB-beeld صورة RGB RGB rəsmi - Vyjava RGB + Vyjava RGB Изображение — RGB imatge RGB obrázek RGB @@ -29254,13 +30268,14 @@ RGB-billede RGB-Bild Εικόνα RGB - RGB image + RGB image RGB-bildo imagen RGB RGB irudia RGB-kuva RGB mynd image RGB + imagjin RGB íomhá RGB imaxe RGB תמונת RGB @@ -29281,7 +30296,7 @@ imatge RGB Obraz RGB imagem RGB - Imagem RGB + Imagem RGB Imagine RGB Изображение RGB Obrázok RGB @@ -29292,27 +30307,29 @@ RGB görüntüsü зображення RGB Ảnh kiểu RGB - RGB 图像 - RGB 影像 + RGB 图像 + RGB 影像 SGI image + SGI-beeld صورة SGI - Vyjava SGI + Vyjava SGI Изображение — SGI imatge SGI obrázek SGI SGI-billede SGI-Bild Εικόνα SGI - SGI image + SGI image SGI-bildo imagen SGI SGI irudia SGI-kuva SGI mynd image SGI + imagjin SGI íomhá SGI imaxe SGI תמונת SGI @@ -29332,7 +30349,7 @@ imatge SGI Obraz SGI imagem SGI - Imagem SGI + Imagem SGI Imagine SGI Изображение SGI Obrázok SGI @@ -29343,26 +30360,28 @@ SGI görüntüsü зображення SGI Ảnh SGI - SGI 图像 - SGI 影像 + SGI 图像 + SGI 影像 Sun raster image + Sun-roosterbeeld صورة Sun raster - Rastravaja vyjava Sun + Rastravaja vyjava Sun Изображение — Sun raster imatge ràster Sun rastrový obrázek Sun Sun rasterbillede Sun-Rasterbild Εικόνα Sun raster - Sun raster image + Sun raster image imagen rasterizada de Sun Sun raster irudia Sun-rasterikuva Sun raster mynd image raster Sun + imagjin raster Sun íomhá rastar Sun imaxe ráster de Sun תמונה סרוקה של Sun @@ -29382,7 +30401,7 @@ imatge raster Sun Obraz rastrowy Sun imagem raster Sun - Imagem raster da Sun + Imagem raster da Sun Imagine rasterizată Sun Растровое изображение Sun Rastrový obrázok Sun @@ -29393,30 +30412,32 @@ Sun raster görüntüsü растрове зображення Sun Ảnh mành Sun - Sun 光栅图像 - Sun raster 影像 + Sun 光栅图像 + Sun raster 影像 - + TGA image + TGA-beeld صورة TGA - Vyjava TGA + Vyjava TGA Изображение — TGA imatge TGA obrázek TGA TGA-billede TGA-Bild Εικόνα TGA - TGA image + TGA image TGA-bildo imagen TGA TGA irudia TGA-kuva TGA mynd image TGA + imagjin TGA íomhá TGA imaxe TGA תמונת TGA @@ -29436,7 +30457,7 @@ imatge TGA Obraz TGA imagem TGA - Imagem TGA + Imagem TGA Imagine TGA Изображение TGA Obrázok TGA @@ -29447,23 +30468,23 @@ TGA görüntüsü зображення TGA Ảnh TGA - TGA 图像 - TGA 影像 + TGA 图像 + TGA 影像 TGA Truevision Graphics Adapter - - - - - - - - - - - - + + + + + + + + + + + + @@ -29471,25 +30492,33 @@ + + + + + + Windows cursor + Windows-wyser مؤشر ويندوز - Kursor Windows + Kursor Windows Курсор — Windows cursor de Windows kurzor Windows Windowsmarkør Windows-Cursor Δρομέας Windows - Windows cursor + Windows cursor Windows-kursoro cursor de Windows Windows kurtsorea Windows-osoitin Windows vísi curseur Windows + cursôr di Windows cúrsóir Windows Cursor de Windows סמן של Windows @@ -29510,7 +30539,7 @@ cursor Windows Kursor Windows cursor Windows - Cursor do Windows + Cursor do Windows Cursor Windows Курсор Windows Kurzor Windows @@ -29521,31 +30550,33 @@ Windows imleci курсор Windows Con chạy Windows - Windows 光标 - Windows 滑鼠游標 + Windows 光标 + Windows 滑鼠游標 - - + + Windows animated cursor + Windows geanimeerde wyser مؤشر ويندوز المتحرك - Animavany kursor Windows + Animavany kursor Windows Курсор — Windows, анимиран cursor animat de Windows animovaný kurzor Windows Windowsanimeret markør Animierter Windows-Cursor Κινούμενος δρομέας Windows - Windows animated cursor + Windows animated cursor cursor animado de Windows Windows-eko kurtsore animatua animoitu Windows-osoitin Windows livindaigjørdur vísi curseur animé Windows + cursôr animât di Windows cúrsóir beoite Windows Cursor animado de Windows סמן מונפש של Windows @@ -29564,7 +30595,7 @@ cursor animat Windows Animowany kursor Windows cursor animado Windows - Cursor animado do Windows + Cursor animado do Windows Cursor animat Windows Анимированный курсор Windows Animovaný kurzor Windows @@ -29575,32 +30606,34 @@ Windows canlandırmalı imleci анімований курсор Windows Con chạy hoạt họa Windows - Windows 动态光标 - Windows 滑鼠動畫游標 + Windows 动态光标 + Windows 滑鼠動畫游標 - - + + EMF image + EMF-beeld صورة EMF - Vyjava EMF + Vyjava EMF Изображение — EMF imatge EMF obrázek EMF EMF-billede EMF-Bild Εικόνα EMF - EMF image + EMF image EMF-bildo imagen EMF EMF irudia EMF-kuva EMF mynd image EMF + imagjin EMF íomhá EMF imaxe EMF תמונת EMF @@ -29621,7 +30654,7 @@ imatge EMF Obraz EMF imagem EMF - Imagem EMF + Imagem EMF Imagine EMF Изображение EMF Obrázok EMF @@ -29632,8 +30665,8 @@ EMF görüntüsü зображення EMF Ảnh EMF - EMF 图像 - EMF 影像 + EMF 图像 + EMF 影像 EMF Enhanced MetaFile @@ -29641,10 +30674,10 @@ - - - - + + + + @@ -29652,21 +30685,23 @@ WMF image + WMF-beeld صورة WMF - Vyjava WMF + Vyjava WMF Изображение — WMF imatge WMF obrázek WMF WMF-billede WMF-Bild Εικόνα WML - WMF image + WMF image WMF-bildo imagen WMF WMF irudia WMF-kuva WMF mynd image WMF + imagjin WMF íomhá WMF imaxe WMF תמונת WMF @@ -29686,7 +30721,7 @@ imatge WMF Obraz WMF imagem WMF - Imagem WMF + Imagem WMF Imagine WMF Изображение WMF Obrázok WMF @@ -29697,21 +30732,21 @@ WMF görüntüsü зображення WMF Ảnh WMF - WMF 图像 - WMF 影像 + WMF 图像 + WMF 影像 WMF Windows Metafile - - - - - + + + + + - - - + + + @@ -29723,21 +30758,23 @@ XBM image + XBM-beeld صورة XBM - Vyjava XBM + Vyjava XBM Изображение — XBM imatge XBM obrázek XBM XBM-billede XBM-Bild Εικόνα XBM - XBM image + XBM image XBM-bildo imagen XBM XBM irudia XBM-kuva XBM mynd image XBM + imagjin XBM íomhá XBM imaxe XBM תמונת XBM @@ -29757,7 +30794,7 @@ imatge XBM Obraz XBM imagem XBM - Imagem XBM + Imagem XBM Imagine XBM Изображение XBM Obrázok XBM @@ -29768,29 +30805,31 @@ XBM görüntüsü зображення XBM Ảnh XBM - XBM 图像 - XBM 影像 + XBM 图像 + XBM 影像 XBM X BitMap GIMP image + GIMP-beeld صورة GIMP - Vyjava GIMP + Vyjava GIMP Изображение — GIMP imatge de GIMP obrázek GIMP GIMP-billede GIMP-Bild Εικόνα GIMP - GIMP image + GIMP image GIMP-bildo imagen del GIMP GIMP irudia GIMP-kuva GIMP mynd image GIMP + imagjin GIMP íomhá GIMP imaxe de GIMP תמונת GIMP @@ -29812,7 +30851,7 @@ imatge GIMP Obraz GIMP imagem GIMP - Imagem do GIMP + Imagem do GIMP Imagine GIMP Изображение GIMP Obrázok GIMP @@ -29823,21 +30862,29 @@ GIMP görüntüsü зображення GIMP Ảnh GIMP - GIMP 图像 - GIMP 影像 + GIMP 图像 + GIMP 影像 - - + + GIMP brush + GIMP-kwas + Четка — GIMP pinzell de GIMP štětec GIMP + GIMP-pensel GIMP-Pinsel - GIMP brush + GIMP brush pincel del GIMP + GIMP pintzela + GIMP-sivellin + brosse GIMP + pinel GIMP + scuab GIMP GIMP kist GIMP ecset Kuas GIMP @@ -29845,47 +30892,65 @@ GIMP бояу жаққышы GIMP 붓 Pędzel programu GIMP - Pincel do GIMP + Pincel do GIMP Кисть GIMP Štetec aplikácie GIMP + Čopič GIMP GIMP-pensel + GIMP fırçası пензель GIMP - GIMP 笔刷 - GIMP 筆刷 + GIMP 笔刷 + GIMP 筆刷 - + GIMP brush pipe + Конвейер с четки — GIMP conducte del pinzell de GIMP zřetězení štětců GIMP + GIMP-penselrør GIMP-Pinselanimation - GIMP brush pipe + GIMP brush pipe pincel animado del GIMP - GIMP valjkasti kist + GIMP pintzel hodia pipe + GIMP-sivellinputki + brosse animée GIMP + condot pinel GIMP + píopa scuaba GIMP + Proces GIMP kista GIMP ecsetcsatorna Pipa kuas GIMP Pipe pennello GIMP GIMP бояу жаққыш түтігі GIMP 붓 파이프 Potok pędzla programu GIMP - Tubo de pincel do GIMP + Tubo de pincel do GIMP Анимированная кисть GIMP GIMP-penselrör + GIMP fırça borusu канал пензлів GIMP - GIMP 管刷 - GIMP 筆刷導管 + GIMP 管刷 + GIMP 筆刷導管 GIMP pattern + GIMP-patroon + Шарка — GIMP patró de GIMP vzorek GIMP + GIMP-mønster GIMP-Muster - GIMP pattern + GIMP pattern patrón del GIMP + GIMP eredua + GIMP-kuvio + motif GIMP + motîf GIMP + patrún GIMP GIMP uzorak GIMP minta Pola GIMP @@ -29893,35 +30958,39 @@ GIMP оюы GIMP 패턴 Deseń programu GIMP - Textura do GIMP + Textura do GIMP Шаблон GIMP Vzor aplikácie GIMP + Vzorec GIMP GIMP-mönster + GIMP deseni візерунок GIMP - GIMP 图案 - GIMP 樣式 + GIMP 图案 + GIMP 樣式 - + XFig image + XFig-beeld صورة XFig - Vyjava XFig + Vyjava XFig Изображение — XFig imatge de XFig obrázek XFig XFig-billede XFig-Bild Εικόνα XFig - XFig image + XFig image XFig-bildo imagen de XFig XFig irudia XFig-kuva XFig mynd image XFig + imagjin XFig íomhá XFig imaxe de XFig תמונת XFig @@ -29942,7 +31011,7 @@ imatge XFig Obraz XFig imagem XFig - Imagem do XFig + Imagem do XFig Imagine XFig Изображение XFig Obrázok XFig @@ -29953,17 +31022,18 @@ XFig görüntüsü зображення XFig Ảnh XFig - XFig 图像 - XFig 影像 + XFig 图像 + XFig 影像 - + XPM image + XPM-beeld صورة XPM - Vyjava XPM + Vyjava XPM Изображение — XPM imatge XPM obrázek XPM @@ -29971,13 +31041,14 @@ XPM-billede XPM-Bild Εικόνα XPM - XPM image + XPM image XPM-bildo imagen XPM XPM irudia XPM-kuva XPM mynd image XPM + imagjin XPM íomhá XPM imaxe XPM תמונת XPM @@ -29997,7 +31068,7 @@ imatge XPM Obraz XPM imagem XPM - Imagem XPM + Imagem XPM Imagine XPM Изображение XPM Obrázok XPM @@ -30008,21 +31079,22 @@ XPM görüntüsü зображення XPM Ảnh XPM - XPM 图像 - XPM 影像 + XPM 图像 + XPM 影像 XPM X PixMap - + X window image + X window-beeld صورة X window X window rəsmi - Vyjava vakna X + Vyjava vakna X Изображение — X Window imatge de X window obrázek X window @@ -30030,13 +31102,14 @@ X-billede X-Window-Bild Εικόνα περιβάλλοντος X - X window image + X window image bildo de X window imagen de ventana de X X window irudia X-ikkunakuva X vindeyga mynd image X window + imagjin X window íomhá X-windows imaxe de X Window תמונת חלון של X @@ -30057,7 +31130,7 @@ imatge X window Obraz X Window imagem de janela X - Imagem de janela do X + Imagem de janela do X Imagine X window Изображение X window Obrázok X window @@ -30068,28 +31141,30 @@ X pencere görüntüsü зображення X window Ảnh cửa sổ X - X Window 图像 - X window 影像 + X Window 图像 + X window 影像 block device + bloktoestel جهاز كتلي preséu de bloques - blokavaja pryłada + blokavaja pryłada Блоково устройство dispositiu de blocs blokové zařízení blokenhed Blockorientiertes Gerät Συσκευή block - block device + block device bloka disponaĵo dispositivo de bloques bloke-gailua laitetiedosto blokka tóleind périphérique de blocs + dispositîf a blocs gléas bloc dispositivo de bloque התקן בלוק @@ -30110,7 +31185,7 @@ periferic de blòts Urządzenie blokowe dispositivo de bloco - Dispositivo de bloco + Dispositivo de bloco dispozitiv bloc Блочное устройство Blokové zariadenie @@ -30121,27 +31196,29 @@ blok aygıtı блоковий пристрій thiết bị khối - 块设备 - 區塊裝置 + 块设备 + 區塊裝置 character device + karaktertoestel جهاز حرفي preséu de caráuteres - znakavaja pryłada + znakavaja pryłada Символно устройство dispositiu de caràcters znakové zařízení tegnenhed Zeichenorientiertes Gerät Συσκευή χαρακτήρων - character device + character device signa disponaĵo dispositivo de caracteres karaktereen gailua merkkilaite stavatóleind périphérique de caractères + dispositîf a caratars gléas carachtar dispositivo de caracter התקן תכונה @@ -30162,7 +31239,7 @@ periferic de caractèrs Urządzenie znakowe dispositivo de caracteres - Dispositivo de caractere + Dispositivo de caractere dispozitiv caracter Символьное устройство Znakové zariadenie @@ -30173,27 +31250,29 @@ karakter aygıtı символьний пристрій thiết bị ký tự - 字符设备 - 字元裝置 + 字符设备 + 字元裝置 folder + gids مجلّد carpeta - kataloh + kataloh Папка carpeta složka mappe Ordner Φάκελος - folder + folder dosierujo carpeta karpeta kansio mappa dossier + cartele fillteán cartafol תיקייה @@ -30214,7 +31293,7 @@ dorsièr Katalog pasta - Pasta + Pasta dosar Папка Priečinok @@ -30225,28 +31304,30 @@ dizin тека thư mục - 文件夹 - 資料夾 + 文件夹 + 資料夾 pipe + pyp إنبوب - kanvejer + kanvejer Конвейер conducte roura datakanal Pipe Διοχέτευση - pipe + pipe dukto - tubería + canalización kanalizazioa putki rør tube + condot píopa tubería צינור @@ -30267,7 +31348,7 @@ tub Potok canal - Pipe + Pipe canal pipe Канал Rúra @@ -30278,27 +31359,29 @@ boru канал ống dẫn - 管道 - 管線 + 管道 + 管線 mount point + hegpunt نقطة الوصْل puntu de montaxe - punkt mantavańnia + punkt mantavańnia Точка на монтиране punt de muntatge přípojné místo monteringspunkt Einhängepunkt Σημείο προσάρτησης - mount point + mount point surmetingo punto de montaje muntatze-puntua liitospiste ísetingarpunkt point d'accès + pont di montaç pointe feistithe punto de montaxe נקודת עיגון @@ -30319,7 +31402,7 @@ punt d'accès Punkt montowania ponto de montagem - Ponto de montagem + Ponto de montagem loc montare Точка монтирования Miesto pripojenia @@ -30330,27 +31413,29 @@ bağlama noktası точка монтування điểm lắp - 挂载点 - 掛載點 + 挂载点 + 掛載點 socket + sok مقبس - sokiet + sokiet Гнездо sòcol socket sokkel Socket Υποδοχή - socket + socket kontaktoskatolo socket socketa pistoke sokkul connecteur réseau + socket soicéad socket נקודת חיבור @@ -30371,7 +31456,7 @@ connector ret Gniazdo tomada - Socket + Socket socket Сокет Soket @@ -30382,15 +31467,16 @@ soket сокет ổ cắm - 套接字 - socket + 套接字 + socket symbolic link + simboliese skakel وصلة رمزية enllaz simbólicu simvolik körpü - symbalnaja spasyłka + symbalnaja spasyłka Символна връзка enllaç simbòlic symbolický odkaz @@ -30398,13 +31484,14 @@ symbolsk henvisning Symbolische Verknüpfung Συμβολικός σύνδεσμος - symbolic link + symbolic link simbola ligilo enlace simbólico esteka sinbolikoa symbolinen linkki tykislig leinkja lien symbolique + colegament simbolic nasc siombalach ligazón simbólica קישור סימבולי @@ -30426,7 +31513,7 @@ ligam simbolic Dowiązanie symboliczne ligação simbólica - Ligação simbólica + Ligação simbólica legătură simbolică Символьная ссылка Symbolický odkaz @@ -30434,17 +31521,18 @@ Lidhje simbolike симболичка веза symbolisk länk - sembolik bağlantı + simgesel bağlantı символічне посилання liên kết tượng trưng - 符号链接 - 符號鏈結 + 符号链接 + 符號連結 mail delivery report + posafleweringverslag تقرير تسليم البريد poçt yollama raportu - rapart ab dastaŭcy pošty + rapart ab dastaŭcy pošty Отчет за пристигналата поща informe de lliurament de correu zpráva o doručení pošty @@ -30452,13 +31540,14 @@ postleveringsrapport E-Mail-Zustellungsbericht Αναφορά παράδοσης μηνύματος - mail delivery report + mail delivery report raporto pri transdono de retpoŝto informe de entrega de correo posta banaketako txostena viestin jakeluilmoitus post útberingarfrásøgn rapport de livraison de courriels + rapuart di consegne pueste tuairisc sheachadta r-phoist informe de entrega de correo דוח העברת דואר @@ -30479,7 +31568,7 @@ rapòrt de liurason de corrièrs electronics Raport z dostarczenia poczty relatório de entrega de email - Relatório de entrega de correspondência + Relatório de entrega de correspondência raport de trimitere email Отчёт о доставке сообщения Správa o doručení pošty @@ -30490,8 +31579,8 @@ posta iletim raporu звіт про доставку пошти thông báo phát thư - 邮件投递报告 - 郵件寄送回報 + 邮件投递报告 + 郵件寄送回報 @@ -30499,7 +31588,7 @@ mail disposition report تقرير ترتيب البريد poçt qayıtma raportu - rapart ab raźmiaščeńni pošty + rapart ab raźmiaščeńni pošty Отчет за състоянието на пощата informe de disposició de correu zpráva o předání pošty @@ -30507,13 +31596,14 @@ postdisponeringsrapport E-Mail-Übertragungsbericht Αναφορά διάθεσης μηνύματος - mail disposition report + mail disposition report raporto pri dispono de retpoŝto informe de disposición de correo posta joerako txostena viestin kuittausilmoitus post avhendingarfrásøgn rapport de disposition de courriels + rapuart di disposizion pueste tuairisc chóirithe r-phoist informe de disposición de correo דוח אספקת דואר @@ -30534,7 +31624,7 @@ rapòrt de disposicion de corrièrs electronics Raport z wysyłania poczty relatório de disposição de email - Relatório de disposição de correspondência + Relatório de disposição de correspondência confirmare primire email Отчёт о перемещении почты Správa o odovzdaní pošty @@ -30545,16 +31635,17 @@ posta silinme raporu звіт про розташування пошти thông báo chuyển nhượng thư - 邮件接收报告 - 郵件處置回報 + 邮件接收报告 + 郵件處置回報 reference to remote file + verwysing na afgeleë lêer مرجع إلى ملف بعيد uzaq fayla göstəriş - spasyłka da addalenaha fajłu + spasyłka da addalenaha fajłu Препратка към отдалечен файл referència a fitxer remot odkaz na vzdálený soubor @@ -30562,13 +31653,14 @@ reference til fjern fil Verweis auf entfernte Datei Αναφορά σε απομακρυσμένο αρχείο - reference to remote file + reference to remote file referenco al fora dosiero referencia a un archivo remoto erreferentzia urruneko fitxategiari viittaus etätiedostoon tilvísing til fjarfílu référence au fichier distant + riferiment a file rimot tagairt do chomhad cianda referencia a un ficheiro remoto התיחסות לקובץ מרוחק @@ -30589,7 +31681,7 @@ referéncia al fichièr distant Odwołanie do pliku zdalnego referência a um ficheiro remoto - Referência para arquivo remoto + Referência para arquivo remoto referință fișier la distanță Ссылка на удалённый файл Odkaz na vzdialený súbor @@ -30597,32 +31689,34 @@ Referim për tek file në distancë упута на удаљену датотеку referens till fjärrfil - uzaktaki dosyaya başvuru + uzaktaki dosyaya atıf посилання на віддалений файл tham chiếu đến tập tin ở xa - 到远程文件的引用 - 遠端檔案的參照 + 到远程文件的引用 + 遠端檔案的參照 Usenet news message + Usenet-nuusboodskap رسالة أخبار Usenet Usenet xəbərlər ismarışı - Navina Usenet + Navina Usenet Съобщение — Usenet missatge de notícies Usenet příspěvek do diskusních skupin Usenet Neges newyddion Usenet - Usenetnyhedsmeddelelse + Usenet-nyhedsmeddelelse Usenet-News-Nachricht Μήνυμα ομάδων συζητήσεων Usenet - Usenet news message + Usenet news message novaĵmesaĝo de Usenet mensaje de noticias de Usenet Usenet berrien mezua nyyssiviesti Usenet news boð message de groupe d'échange Usenet + messaç gnovis Usenet teachtaireacht nuachta Usenet mensaxes de noticias de Usenet הודעת חדשות של Usenet @@ -30643,7 +31737,7 @@ messatge de grop d'escambi Usenet Wiadomość grupy dyskusyjnej mensagem de notícias Usenet - Mensagem de notícias da Usenet + Mensagem de notícias da Usenet Mesaj Usenet de știri Новостное сообщение Usenet Príspevok do diskusných skupín Usenet @@ -30654,21 +31748,22 @@ Usenet haber iletisi повідомлення новин Usenet Thông điệp tin tức USENET - Usenet 新闻信 - Usenet 新聞訊息 + Usenet 新闻信 + Usenet 新聞訊息 - - - + + + partial email message + gedeeltelike e-posboodskap رسالة البريد الإلكتروني الجزئية qismi poçt ismarışı - niapoŭny list email + niapoŭny list email Част от електронно писмо missatge de correu electrònic parcial částečná e-mailová zpráva @@ -30676,12 +31771,13 @@ delvis postmeddelelse E-Mail-Nachrichtenfragment Τμηματικό ηλ. μήνυμα - partial email message + partial email message parta retpoŝta mesaĝo mensaje de correo electrónico parcial posta mezu partziala osittainen sähköpostiviesti message partiel de courriel + messaç e-mail parziâl teachtaireacht ríomhphoist neamhiomlán mensaxe de correo electrónico parcial מסר דוא״ל חלקי @@ -30702,7 +31798,7 @@ messatge parcial de corrièr electronic Częściowa wiadomość e-mail mensagem parcial de email - Mensagem de e-mail parcial + Mensagem de e-mail parcial mesaj de email parțial Фрагмент сообщения электронной почты Čiastočná e-mailová správa @@ -30713,28 +31809,30 @@ kısmi eposta iletisi часткове поштове повідомлення thư điện tử riêng phần - 部分电子邮件 - 部份電子郵件訊息 + 部分电子邮件 + 部份電子郵件訊息 email message + e-posboodskap رسالة البريد الإلكتروني - list email + list email Съобщение по електронната поща missatge de correu electrònic e-mailová zpráva postmeddelelse E-Mail-Nachricht Ηλ. μήνυμα - email message + email message retpoŝta mesaĝo mensaje de correo electrónico helbide elektronikoen mezua sähköpostiviesti t-post boð message de courriel + messaç e-mail teachtaireacht ríomhphoist mensaxe de correo electrónico הודעת דואר אלקטרוני @@ -30755,7 +31853,7 @@ messatge de corrièr electronic Wiadomość e-mail mensagem de email - Mensagem de e-mail + Mensagem de e-mail mesaj email Почтовое сообщение E-mailová správa @@ -30766,29 +31864,30 @@ eposta iletisi повідомлення email thư điện tử - 电子邮件 - 電子郵件內容 + 电子邮件 + 電子郵件內容 - - - - - - - - - - + + + + + + + + + + GNU mail message + GNU-posboodskap رسالة بريد جنو GNU poçt ismarışı - List GNU + List GNU Съобщение — GNU mail missatge de GNU mail zpráva GNU mail @@ -30796,13 +31895,14 @@ GNU-postmeddelelse GNU-Mail-Nachricht Μήνυμα αλληλογραφίας GNU - GNU mail message + GNU mail message mesaĝo de GNU mail mensaje de correo de GNU GNU posta mezua GNU-postiviesti GNU mail boð message de courriel GNU + messaç di pueste GNU teachtaireacht r-phoist GNU mensaxe de correo electrónico de GNU הודעת דואר של GNU @@ -30824,7 +31924,7 @@ messatge de corrièr electronic GNU Wiadomość pocztowa GNU mensagem de email GNU - Mensagem de e-mail GNU + Mensagem de e-mail GNU Mesaj GNU mail Почтовое сообщение GNU Správa GNU mail @@ -30835,58 +31935,63 @@ GNU posta iletisi поштове повідомлення GNU Thư điện tử của GNU - GNU mail 信件 - GNU 郵件訊息 + GNU mail 信件 + GNU 郵件訊息 IGES document + IGES-dokument Documentu IGES + Документ — IGES document IGES dokument IGES IGES-dokument IGES-Dokument - IGES document + IGES document documento IGES IGES dokumentua IGES-asiakirja document IGES + document IGES cáipéis IGES מסמך IGES IGES dokument IGES dokumentum - dokumen IGES + Dokumen IGES Documento IGES IGES құжаты IGES 문서 Dokument IGES - Documento IGES + Documento IGES Документ IGES Dokument IGES + Dokument IGES ИГЕС документ IGES-dokument IGES belgesi документ IGES - IGES 文档 - IGES 文件 + IGES 文档 + IGES 文件 IGES Initial Graphics Exchange Specification - - + + VRML document + VRML-dokument مستند VRML Documentu VRML VRML sənədi - Dakument VRML + Dakument VRML Документ — VRML document VRML dokument VRML @@ -30894,13 +31999,14 @@ VRML-dokument VRML-Dokument Έγγραφο VRML - VRML document + VRML document VRML-dokumento documento VRML VRML dokumentua VRML-asiakirja VRML skjal document VRML + document VRML cáipéis VRML documento VRML מסמך VRML @@ -30921,7 +32027,7 @@ document VRML Dokument VRML documento VRML - Documento VRML + Documento VRML Document VRML Документ VRML Dokument VRML @@ -30932,14 +32038,14 @@ VRML belgesi документ VRML Tài liệu VRML - VRML 文档 - VRML 文件 + VRML 文档 + VRML 文件 VRML Virtual Reality Modeling Language - + @@ -30947,9 +32053,10 @@ message in several formats + boodskap in verskeie formate رسالة في عدة صيغ verici formatlarında ismarış - paviedamleńnie ŭ niekalkich farmatach + paviedamleńnie ŭ niekalkich farmatach Съобщение в няколко формата missatge en diversos formats zpráva v několika formátech @@ -30957,13 +32064,14 @@ meddelelse i flere formater Nachricht in mehreren Formaten Μήνυμα σε διάφορες μορφές - message in several formats + message in several formats mesaĝo en pluraj formatoj mensaje en varios formatos hainbat formatuko mezua viesti useissa muodoissa boð í fleiri sniðum message en formats divers + messaç in diviers formâts teachtaireacht i bhformáidí éagsúla mensaxe en varios formatos הודעה במספר תבניות @@ -30974,7 +32082,7 @@ Messaggio in diversi formati いくつかの形式でのメッセージ бірнеше пішімдегі мәлімдеме - 여러가지 형식의 메시지 + 여러 가지 형식의 메시지 laiškas keletu formatų ziņojums dažādos formātos Mesej dalam beberapa format @@ -30984,7 +32092,7 @@ messatge en formats divèrses Wiadomość w wielu formatach mensagem em vários formatos - Mensagem em vários formatos + Mensagem em vários formatos mesaj în diferite formate Сообщение в нескольких форматах Správa v niekoľkých formátoch @@ -30995,14 +32103,15 @@ farklı biçimlerde ileti повідомлення у кількох форматах thông điệp có vài định dạng - 各种格式的信件 - 多種格式的訊息 + 各种格式的信件 + 多種格式的訊息 Macintosh AppleDouble-encoded file + Macintosh AppleDouble-geënkodeerde lêer ملف Macintosh AppleDouble مشفر Macintosh AppleDouble-kodlanmış fayl - Fajł Macintosh, AppleDouble-zakadavany + Fajł Macintosh, AppleDouble-zakadavany Файл — кодиран с Macintosh AppleDouble fitxer codificat AppleDouble de Macintosh soubor kódovaný pomocí Macintosh AppleDouble @@ -31010,17 +32119,18 @@ Macintosh AppleDouble-kodet fil Macintosh-Datei (AppleDouble-kodiert) Αρχείο Macintosh κωδικοποίησης AppleDouble - Macintosh AppleDouble-encoded file + Macintosh AppleDouble-encoded file dosiero kodigita laŭ Macintosh AppleDouble archivo Macintosh codificado con AppleDouble Macintosh AppleDouble-rekin kodetutako fitxategia Macintosh AppleDouble -koodattu tiedosto Macintosh AppleDouble-bronglað fíla fichier codé Macintosh AppleDouble + file codificât in Macintosh AppleDouble comhad ionchódaithe le Macintosh AppleDouble ficheiro de Macintosh codificado con AppleDouble קובץ מסוג Macintosh AppleDouble-encoded - Macintosh AppleDouble-kodirana datoteka + Macintosh AppleDouble-kôdirana datoteka Macintosh AppleDouble kódolású fájl File codificate in AppleDouble de Macintosh Berkas tersandi Macintosh AppleDouble @@ -31037,7 +32147,7 @@ fichièr encodat Macintosh AppleDouble Zakodowany w AppleDouble plik Macintosh ficheiro codificado em AppleDouble de Macintosh - Arquivo do Macintosh codificado com AppleDouble + Arquivo do Macintosh codificado com AppleDouble Fișier codat Macintosh AppleDouble Файл, закодированный Macintosh AppleDouble Súbor kódovaný pomocou Macintosh AppleDouble @@ -31048,14 +32158,14 @@ Macintosh AppleDouble-şifreli dosyası файл закодований Macintosh AppleDouble Tập tin đã mã hoá Apple-Double của Macintosh - Macintosh AppleDouble 编码的文件 - Macintosh AppleDouble 編碼檔 + Macintosh AppleDouble 编码的文件 + Macintosh AppleDouble 編碼檔 message digest خلاصة الرسالة ismarış daycesti - digest paviedamleńniaŭ + digest paviedamleńniaŭ Извадка от съобщение recopilació de missatges přehled zpráv @@ -31063,13 +32173,14 @@ meddelelsessammendrag Nachrichtensammlung Περίληψη μηνύματος - message digest + message digest mesaĝaro recopilación de mensajes mezu laburra viestikokoelma boð samandráttur condensé de message + sunt di messaç achoimre theachtaireachtaí recompilación de mensaxe תקציר ההודעה @@ -31090,7 +32201,7 @@ condensé de messatge Wiadomość przetwarzania grupo de mensagens - Resumo de mensagem + Resumo de mensagem colecție mesaje email Дайджест сообщения Prehľad správ @@ -31098,17 +32209,18 @@ Shpërndarje mesazhesh гомила порука meddelandesamling - mesaj özeti + ileti özeti збірка повідомлень bản tóm tắt thông điệp - 信件摘要 - 訊息摘要 + 信件摘要 + 訊息摘要 encrypted message + geënkripteerde boodskap رسالة مشفرة şifrələnmiş ismarış - zašyfravanaje paviedamleńnie + zašyfravanaje paviedamleńnie Шифрирано съобщение missatge xifrat zašifrovaná zpráva @@ -31116,13 +32228,14 @@ krypteret meddelelse Verschlüsselte Nachricht Κρυπτογραφημένο μήνυμα - encrypted message + encrypted message ĉifrita mesaĝo mensaje cifrado - mezu enkriptatua + zifratutako mezua salattu viesti bronglað boð message chiffré + messaç cifrât teachtaireacht chriptithe mensaxe cifrado הודעה מוצפנת @@ -31143,7 +32256,7 @@ messatge chifrat Wiadomość zaszyfrowana mensagem encriptada - Mensagem criptografada + Mensagem criptografada mesaj criptat Зашифрованное сообщение Zašifrovaná správa @@ -31151,30 +32264,32 @@ Mesazh i kriptuar шифрована порука krypterat meddelande - şifrelenmiş mesaj + şifrelenmiş ileti шифроване повідомлення thông điệp đã mật mã - 加密信件 - 加密訊息 + 加密信件 + 加密訊息 compound documents + saamgestelde dokumente مستندات مركبة documentos compuestos - składanyja dakumenty + składanyja dakumenty Съставни документи documents compostos složené dokumenty sammensatte dokumenter Verbunddokumente Σύνθετα έγγραφα - compound documents + compound documents parentezaj dokumentoj documentos compuestos konposatutako dokumentuak yhdisteasiakirjat samansett skjøl documents composés + documents composcj cáipéisí comhshuite documentos compostos מסמכים מורכבים @@ -31195,7 +32310,7 @@ documents compausats Dokumenty złożone documentos compostos - Documentos compostos + Documentos compostos documente compuse Составные документы Zložené dokumenty @@ -31203,18 +32318,19 @@ dokumente të përbërë сједињени документи sammansatta dokument - birleşik belgeleri + bileşik belgeler складні документи tài liệu ghép - 组合文档 - 複合文件 + 组合文档 + 複合文件 compound document + saamgestelde dokument مستند مركب documentu compuestu birləşik sənəd - składany dakument + składany dakument Съставен документ document compost složený dokument @@ -31222,13 +32338,14 @@ sammensat dokument Verbunddokument Σύνθετο έγγραφο - compound document + compound document parenteza dokumento documento compuesto konposatutako dokumentua yhdisteasiakirja samansett skjal document composé + document compost cáipéis comhshuite documento composto מסמך מורכב @@ -31249,7 +32366,7 @@ document compausat Dokument złożony documento composto - Documento composto + Documento composto document compus Составной документ Zložený dokument @@ -31260,14 +32377,14 @@ bileşik belge складний документ tài liệu ghép - 组合文档 - 複合文件 + 组合文档 + 複合文件 mail system report تقرير نظام البريد poçt sistemi raportu - rapart paštovaj systemy + rapart paštovaj systemy Отчет за пощенската система informe de sistema de correu zpráva poštovního systému @@ -31275,13 +32392,14 @@ postsystemrapport E-Mail-Systembericht Αναφορά συστήματος ηλ. ταχυδρομείου - mail system report + mail system report raporto de retpoŝta sistemo informe del sistema de correo posta sistemako txostena viestijärjestelmän ilmoitus postkervisfrásøgn rapport système de courriels + rapuart di sisteme de pueste tuairisc chórais r-phoist informe do sistema de correo דו״ח של מערכת הדואר @@ -31302,7 +32420,7 @@ rapòrt sistèma de corrièrs electronics Raport systemu pocztowego relatório de sistema de email - Relatório do sistema de correspondência + Relatório do sistema de correspondência raport sistem email Отчёт почтовой системы Správa poštového systému @@ -31313,14 +32431,15 @@ posta sistem raporu звіт поштової системи thông báo hệ thống thư - 邮件系统报告 - 郵件系統回報 + 邮件系统报告 + 郵件系統回報 signed message + getekende boodskap رسالة موقّعة imzalanmış ismarış - padpisanaje paviedamleńnie + padpisanaje paviedamleńnie Подписано съобщение missatge signat podepsaná zpráva @@ -31328,13 +32447,14 @@ signeret meddelelse Signierte Nachricht Υπογεγραμμένο μήνυμα - signed message + signed message pruvita mesaĝo mensaje firmado sinatutako mezua allekirjoitettu viesti undirskrivað boð message signé + messaç firmât teachtaireacht sínithe mensaxe firmado הודעה חתומה @@ -31355,7 +32475,7 @@ messatge signat Podpisana wiadomość mensagem assinada - Mensagem assinada + Mensagem assinada mesaj semnat Подписанное сообщение Podpísaná správa @@ -31366,26 +32486,27 @@ imzalı ileti підписане повідомлення thông điệp đã ký - 签名信件 - 簽署的訊息 + 签名信件 + 已簽署的訊息 stream of data (server push) دفق بيانات (دفع خادم) - płyń źviestak (ad servera) - Поток от данни, от страна на сървър + płyń źviestak (ad servera) + Поток от данни — пратени от сървър flux de dades (enviat pel servidor) proud dat (posílaný serverem) datastrøm (serverskubbet) Datenstrom (Server-Push) Ροή δεδομένων (στελλόμενα από διακομιστή) - stream of data (server push) + stream of data (server push) datumstrio (puŝata per servilo) flujo de datos (por iniciativa del servidor) datu-korrontea (zerbitzari igortzailea) tietovirta (palvelin työntää) streymur av dáta (ambætara skump) flux de données (émis par le serveur) + flus di dâts (pe iniziative dal servidôr) sruth sonraí (brú freastalaí) fluxo de datos (por iniciativa do servidor) מידע בזרימה (דחיפה ע״י השרת) @@ -31406,7 +32527,7 @@ flux de donadas (emés pel servidor) Strumień danych (wymuszenie serwera) fluxo de dados (empurrados pelo servidor) - Fluxo de dados (por iniciativa do servidor) + Fluxo de dados (por iniciativa do servidor) flux de date (de la server) Поток данных (server push) Prúd dát (posielaný serverom) @@ -31417,26 +32538,28 @@ veri akışı (sunucudan gönderilen) потік даних (від сервера) luồng dữ liệu (trình phục vụ đẩy) - 数据流(服务器推送) - 資料串流 (server push) + 数据流(服务器推送) + 資料串流 (server push) VCS/ICS calendar + VCS/ICS-kalender سجل VCS/ICS - Kalandar VCS/ICS + Kalandar VCS/ICS Календар — VCS/ICS calendari VCS/ICS kalendář VCS/ICS VCS/ICS-kalender VCS/ICS-Kalender Ημερολόγιο VCS/ICS - VCS/ICS calendar + VCS/ICS calendar VCS/ICS-kalendaro calendario VCS/ICS VCS/ICS egutegia VCS/ICS-kalenteri VCS/ICS kalendari calendrier VCS/ICS + calendari VCS/ICS féilire VCS/ICS Calendario VCS/ICS לוח שנה VCS/ICS @@ -31456,7 +32579,7 @@ calendièr VCS/ICS Kalendarz VCS/ICS calendário VCS/ICS - Calendário VCS/ICS + Calendário VCS/ICS Calendar VCS/ICS Календарь VCS/ICS Kalendár VCS/ICS @@ -31467,37 +32590,39 @@ VCS/ICS takvimi календар VCS/ICS Lịch VCS/ICS - VCS/ICS 日历 - VCS/ICS 行事曆 + VCS/ICS 日历 + VCS/ICS 行事曆 VCS/ICS vCalendar/iCalendar - - + + CSS stylesheet + CSS-stylblad نمط CSS - Arkuš stylaŭ CSS + Arkuš stylaŭ CSS Стилове — CSS llista d'estil CSS stylopis CSS CSS-stilark CSS-Stilvorlage Φύλλο στυλ CSS - CSS stylesheet + CSS stylesheet CSS-stilfolio hoja de estilos CSS CSS estilo-orria CSS-tyylitiedosto CSS sniðark feuille de style CSS + sfuei di stîl CSS stílbhileog CSS folla de estilos CSS גליון עיצוב CSS @@ -31518,7 +32643,7 @@ fuèlh d'estil CSS Arkusz stylów CSS folha de estilos CSS - Folha de estilo CSS + Folha de estilo CSS Pagină de stil CSS Таблица стилей CSS Štýly CSS @@ -31529,8 +32654,8 @@ CSS stil kağıdı таблиця стилів CSS Tờ kiểu dáng CSS - CSS 样式表 - CSS 樣式表 + CSS 样式表 + CSS 樣式表 CSS Cascading Style Sheets @@ -31538,21 +32663,23 @@ electronic business card + elektroniese beskigheidskaartjie بطاقة أعمال إلكترونية - elektronnaja biznes-kartka + elektronnaja biznes-kartka Електронна визитна картичка targeta de visita electrònica elektronická navštívenka elektronisk visitkort Elektronische Visitenkarte Ηλεκτρονική επαγγελματική κάρτα - electronic business card + electronic business card elektronika vizitkarto tarjeta de visita electrónica enpresako txartel elektronikoa sähköinen käyntikortti elektroniskt handilskort carte de visite électronique + biliet di visite eletronic cárta gnó leictreonach tarxeta de negocio electrónica כרטיס ביקור אלקטרוני @@ -31571,7 +32698,7 @@ carta de visita electronica Wizytówka elektroniczna cartão de visita eletrónico - Cartão de visitas eletrônico + Cartão de visitas eletrônico carte de vizită electronică Электронная визитная карточка Elektronická vizitka @@ -31582,14 +32709,14 @@ elektronik iş kartı електронна бізнес-картка danh thiếp điện tử - 电子商务卡 - 電子商務名片 + 电子商务卡 + 電子商務名片 - - + + @@ -31598,17 +32725,20 @@ Turtle document + Turtle-dokument Documentu Turtle + Документ — Turtle document Turtle dokument Turtle Turtle-dokument Turtle-Dokument Έγγραφο Turtle - Turtle document + Turtle document documento de Turtle Turtle dokumentua Turtle-asiakirja document Turtle + document Turtle cáipéis Turtle מסמך Turtle Turtle dokument @@ -31621,43 +32751,46 @@ document Turtle Dokument Turtle documento Turtle - Documento Turtle + Documento Turtle Документ Turtle Dokument Turtle + Dokument Turtle Тартл документ Turtle-dokument Turtle belgesi документ Turtle - Turtle 文档 - Turtle 文件 + Turtle 文档 + Turtle 文件 txt2tags document + txt2tags-dokument مستند txt2tags Documentu txt2tags - dakument txt2tags + dakument txt2tags Документ — txt2tags document txt2tags dokument txt2tags txt2tags-dokument txt2tags-Dokument Έγγραφο txt2tags - txt2tags document + txt2tags document txt2tags-dokumento documento txt2tags txt2tags dokumentua txt2tags-asiakirja txt2tags skjal document txt2tags + document txt2tags cáipéis txt2tags documento txt2tags מסמך txt2tags txt2tags dokument txt2tags dokumentum Documento txt2tags - Dokumen txt2tags + dokumen txt2tags Documento txt2tags txt2tags ドキュメント txt2tags დოკუმენტი @@ -31671,7 +32804,7 @@ document txt2tags Dokument txt2tags documento txt2tags - Documento do txt2tags + Documento do txt2tags document txt2tags Документ txt2tags Dokument txt2tags @@ -31682,29 +32815,31 @@ txt2tags belgesi документ txt2tags tài liệu txt2tags - txt2tags 文档 - txt2tags 文件 + txt2tags 文档 + txt2tags 文件 - - + + Verilog source code + Verilog-bronkode Изходен код — Verilog codi font en Verilog zdrojový kód v jazyce Verilog Verilog-kildekode Verilog-Quelltext Πηγαίος κώδικας Verilog - Verilog source code + Verilog source code Verilog-fontkodo código fuente en Verilog Verilog iturburu-kodea Verilog-lähdekoodi code source Verilog + codiç sorzint Verilog cód foinseach Verilog código fonte en Verilog קוד מקור של @@ -31721,7 +32856,7 @@ còde font Verilog Kod źródłowy Verilog código origem Verilog - Código-fonte Verilog + Código-fonte Verilog Исходный код Verilog Zdrojový kód Verilog Datoteka izvorne kode Verilog @@ -31729,24 +32864,25 @@ Verilog-källkod Verilog kaynak kodu вихідний код мовою Verilog - Verilog 源代码 - Verilog 源碼 + Verilog 源代码 + Verilog 源碼 SystemVerilog header Заглавен файл — SystemVerilog - capçalera de SystemVerilog + capçalera en SystemVerilog záhlaví SystemVerilog SystemVerilog-teksthoved SystemVerilog-Header Κεφαλίδα SystemVerilog - SystemVerilog header + SystemVerilog header cabeceras de SystemVerilog SystemVerilog goiburua SystemVerilog-otsake en-tête + intestazion SystemVerilog ceanntásc SystemVerilog Cabeceiras de SystemVerilog כותרת SystemVerilog @@ -31763,7 +32899,7 @@ entèsta SystemVerilog Nagłówek SystemVerilog cabeçalho SystemVerilog - Cabeçalho de SystemVerilog + Cabeçalho de SystemVerilog Заголовочный файл SystemVerilog Hlavičky SystemVerilog Datoteka glave SystemVerilog @@ -31771,24 +32907,26 @@ SystemVerilog-headerfil SystemVerilog başlığı заголовки SystemVerilog - SystemVerilog 头文件 - SystemVerilog 標頭 + SystemVerilog 头文件 + SystemVerilog 標頭 SystemVerilog source code + SystemVerilog-bronkode Изходен код — SystemVerilog codi font en SystemVerilog zdrojový kód SystemVerilog SystemVerilog-kildekode SystemVerilog-Quelltext Πηγαίος κώδικας SystemVerilog - SystemVerilog source code + SystemVerilog source code código fuente en SystemVerilog SystemVerilog iturburu-kodea SystemVerilog-lähdekoodi code source + codiç sorzint SystemVerilog cód foinseach SystemVerilog código fonte en SystemVerilog קוד מקור של SystemVerilog @@ -31805,7 +32943,7 @@ còde font SystemVerilog Kod źródłowy SystemVerilog código origem SystemVerilog - Código-fonte de SystemVerilog + Código-fonte de SystemVerilog Исходный код SystemVerilog Zdrojový kód SystemVerilog Datoteka izvorne kode SystemVerilog @@ -31813,25 +32951,27 @@ SystemVerilog-källkod SystemVerilog kaynak kodu вихідний файл мовою SystemVerilog - SystemVerilog 源代码 - SystemVerilog 源碼 + SystemVerilog 源代码 + SystemVerilog 源碼 VHDL source code + VHDL-bronkode Изходен код — VHDL codi font en VHDL zdrojový kód v jazyce VHDL VHDL-kildekode VHDL-Quelltext Πηγαίος κώδικας VHDL - VHDL source code + VHDL source code VHDL-fontkodo código fuente en VHDL VHDL iturburu-kodea VHDL-lähdekoodi code source VHDL + codiç sorzint VHDL cód foinseach VHDL código fonte en VHDL קוד מקור של VHDL @@ -31848,7 +32988,7 @@ còde font VHDL Kod źródłowy VHDL código origem VHDL - Código-fonte VHDL + Código-fonte VHDL Исходный код VHDL Zdrojový kód VHDL Datoteka izvorne kode VHDL @@ -31856,8 +32996,8 @@ VHDL-källkod VHDL kaynak kodu вихідний код мовою VHDL - VHDL 源代码 - VHDL 源碼 + VHDL 源代码 + VHDL 源碼 VHDL Very-High-Speed Integrated Circuit Hardware Description Language @@ -31866,10 +33006,11 @@ enriched text document + verrykte teksdokument مستند نصي مغنى documentu de testu arriquecíu zəngin mətn sənədi - azdobleny tekstavy dakument + azdobleny tekstavy dakument Документ с обогатен текст document de text enriquit rozšířený textový dokument @@ -31877,13 +33018,14 @@ beriget tekstdokument Angereichertes Textdokument Έγγραφο εμπλουτισμένου κειμένου - enriched text document + enriched text document riĉigita teksta dokumento documento de texto enriquecido aberastutako testu dokumentua rikastettu tekstiasiakirja ríkað tekstskjal document texte enrichi + document di test inricjît cáipéis téacs saibhrithe documento de texto enriquecido מסמך טקסט מועשר @@ -31904,7 +33046,7 @@ document tèxte enriquit Wzbogacony dokument tekstowy documento de texto rico - Documento de texto enriquecido + Documento de texto enriquecido document text îmbogățit Форматированный текстовый документ Rozšírený textový dokument @@ -31915,15 +33057,16 @@ zenginleştirilmiş metin belgesi форматований текстовий документ tài liệu văn bản có kiểu dáng - 浓缩文本文档 (ETF) - 豐富化文字文件 + 浓缩文本文档 (ETF) + 豐富化文字文件 help page + hulpbladsy صفحة المساعدة yardım səhifəsi - staronka dapamohi + staronka dapamohi Страница от помощта pàgina d'ajuda stránka nápovědy @@ -31931,13 +33074,14 @@ hjælpeside Hilfeseite Σελίδα βοήθειας - help page + help page help-paĝo página de ayuda laguntzako orria ohjesivu hjálparsíða page d'aide + pagjine di jutori leathanach cabhrach páxina de axuda דף עזרה @@ -31958,7 +33102,7 @@ pagina d'ajuda Strona pomocy página de ajuda - Página de ajuda + Página de ajuda pagină de ajutor Страница справки Stránka Pomocníka @@ -31969,27 +33113,29 @@ yardım sayfası сторінка довідки trang trợ giúp - 帮助页面 - 求助頁面 + 帮助页面 + 求助頁面 plain text document + skoonteksdokument مستند نصي مجرد documentu de testu planu - prosty tekstavy dakument + prosty tekstavy dakument Документ с неформатиран текст document de text pla prostý textový dokument rent tekstdokument Einfaches Textdokument Έγγραφο απλού κειμένου - plain text document + plain text document plata teksta dokumento documento de texto sencillo testu soileko dokumentua perustekstiasiakirja document texte brut + document di test sempliç cáipéis ghnáth-théacs documento de texto sinxelo מסמך טקסט פשוט @@ -32010,7 +33156,7 @@ document tèxte brut Zwykły dokument tekstowy documento em texto simples - Documento de Texto + Documento de Texto document text simplu Текстовый документ Obyčajný textový dokument @@ -32021,11 +33167,11 @@ düz metin belgesi звичайний текстовий документ tài liệu nhập thô - 纯文本文档 - 純文字文件 + 纯文本文档 + 純文字文件 - - + + @@ -32033,21 +33179,23 @@ RDF file + RDF-lêer ملف RDF - Fajł RDF + Fajł RDF Файл — RDF fitxer RDF soubor RDF RDF-fil RDF-Datei Αρχείο RDF - RDF file + RDF file RDF-dosiero archivo RDF RDF fitxategia RDF-tiedosto RDF fíla fichier RDF + file RDF comhad RDF ficheiro RDF קובץ RDF @@ -32067,7 +33215,7 @@ fichièr RDF Plik RDF ficheiro RDF - Arquivo RDF + Arquivo RDF Fișier RDF Файл RDF Súbor RDF @@ -32078,8 +33226,8 @@ RDF dosyası файл RDF Tập tin RDF - RDF 文件 - RDF 檔 + RDF 文件 + RDF 檔 RDF Resource Description Framework @@ -32089,17 +33237,55 @@ + + reStructuredText document + reStructuredText-dokument + Документ — reStructuredText + document reStructuredText + dokument reStructuredText + reStructuredText-dokument + reStructuredText-Dokument + reStructuredText document + documento en reStructuredText + reStructuredText document + reStructuredText-asiakirja + document reStructuredText + document reStructuredText + cáipéis reStructuredText + reStructuredText dokument + reStructuredText dokumentum + dokumen reStructuredText + Documento reStructuredText + reStructuredText құжаты + reStructuredText 문서 + Dokument reStructuredText + Documento reStructuredText + Документ reStructuredText + Dokument reStructuredText + Dokument reStructuredText + reStructuredText-dokument + reStructuredText belgesi + документ reStructuredText + reStructuredText 文档 + reStructuredText 文件 + + + OWL XML file + OWL XML-lêer + Файл — OWL XML fitxer XML OWL soubor OWL XML OWL XML-fil OWL-XML-Datei Αρχείο OWL XML - OWL XML file + OWL XML file archivo en XML OWL OWL XML fitxategia + OWL XML -tiedosto fichier XML OWL + file OWL XML comhad XML OWL OWL XML datoteka OWL XML-fájl @@ -32111,21 +33297,22 @@ fichièr OWL XML Plik XML OWL ficheiro OWL XML - Arquivo OWL XML + Arquivo OWL XML Файл XML OWL Súbor XML OWL + Datoteka OWL XML ОВЛ ИксМЛ датотека OWL XML-fil OWL XML dosyası файл XML OWL - OWL XML 文件 - OWL XML 檔案 + OWL XML 文件 + OWL XML 檔案 OWL Web Ontology Language - + @@ -32133,7 +33320,7 @@ email headers ترويسة البريد الإلكتروني epoçt başlıqları - paštovyja zahałoŭki + paštovyja zahałoŭki Заглавни части на електронни писма capçaleres de correu electrònic záhlaví e-mailu @@ -32141,13 +33328,14 @@ posthoveder E-Mail-Kopfzeilen Κεφαλίδες ηλ. μηνυμάτων - email headers + email headers retpoŝtaj ĉapoj cabeceras de correo electrónico helbide elektronikoen goiburuak sähköpostiotsakkeet t-post tekshøvd en-têtes de courriel + intestazions e-mail ceanntásca ríomhphoist cabeceiras de correo electrónico כותרת דוא״ל @@ -32168,7 +33356,7 @@ entèstas de corrièr electronic Nagłówki wiadomości e-mail cabeçalhos de email - Cabeçalhos de e-mail + Cabeçalhos de e-mail antete email Почтовые заголовки Hlavičky e-mailu @@ -32179,16 +33367,17 @@ eposta başlığı заголовки email dòng đầu thư điện tử - 电子邮件头 - 電子郵件標頭 + 电子邮件头 + 電子郵件標頭 rich text document + rykteksdokument مستند نصي غني documentu de testu ricu zəngin mətn sənədi - azdobleny tekstavy dakument + azdobleny tekstavy dakument Документ — rich text document de text enriquit textový dokument RTF @@ -32196,12 +33385,13 @@ richtekstdokument RTF-Textdokument Έγγραφο εμπλουτισμένου κειμένου (RTF) - rich text document + rich text document riĉteksta dokumento documento de texto enriquecido aberastutako testu formatua RTF-asiakirja document « rich text » + document rich text cáipéis mhéith-théacs documento do texto enriquecido מסמך טקסט עשיר @@ -32222,7 +33412,7 @@ document « rich text » Dokument Rich Text documento em texto rico - Documento rich text + Documento rich text document text îmbogățit Документ с форматированным текстом Textový dokument RTF @@ -32233,27 +33423,29 @@ zengin metin belgesi форматований текстовий документ tài liệu văn bản có kiểu dáng (RTF) - 富文本文档 (RTF) - 豐富文字文件 + 富文本文档 (RTF) + 豐富文字文件 (RTF) RSS summary + RSS-opsomming ملخص RSS - Karotki ahlad RSS + Karotki ahlad RSS Обобщение за сайтове — RSS resum RSS souhrn RSS RSS-sammendrag RSS-Zusammenfassung Σύνοψη RSS - RSS summary - resumen de RSS + RSS summary + suministro RSS RSS laburpena RSS-tiivistelmä RSS samandráttur résumé RSS + somari RSS achoimre RSS Resumo RSS תקציר RSS @@ -32273,7 +33465,7 @@ resumit RSS Podsumowanie RSS resumo RSS - Resumo RSS + Resumo RSS Rezumat RSS Сводка RSS Súhrn RSS @@ -32284,8 +33476,8 @@ RSS özeti зведення сайту RSS Bản tóm tắt RSS - RSS 摘要 - RSS 摘要 + RSS 摘要 + RSS 摘要 RSS RDF Site Summary @@ -32293,25 +33485,26 @@ - - + + Atom syndication feed مروج تغذية Atom - Syndykacyjny kanał navinaŭ Atom + Syndykacyjny kanał navinaŭ Atom Емисия — Atom canal de sindicació Atom kanál Atom - Atom syndication-feed + Atom-syndikeringsfeed Atom-Nachrichtenquelle Τροφοδοσία διανομής Atom - Atom syndication feed - canal de noticias Atom + Atom syndication feed + suministro de sindicación Atom Atom harpidetze-iturria Atom-yhdistevirta fil de syndication Atom + canâl di notiziis Atom fotha sindeacáitithe Atom fonte de sindicación Atom הזנה דרך הרשת של Atom @@ -32331,7 +33524,7 @@ fial de sindicacion Atom Kanał Atom feed Atom - Fonte de notícias Atom + Fonte de notícias Atom Flux agregare Atom Лента новостей Atom Kanál Atom @@ -32342,31 +33535,32 @@ Atom besleme kaynağı трансляція подач Atom Nguồn tin tức Atom - Atom 聚合种子 - Atom 聯合供稿饋流 + Atom 聚合种子 + Atom 聯合供稿饋流 - + OPML syndication feed مروج تغذية OPML - Syndykacyjny kanał OPML + Syndykacyjny kanał OPML Емисия — OPML canal de sindicació OPML kanál OPML OPML-syndikeringsfeed OPML-Nachrichtenquelle Τροφοδοσία OPML - OPML syndication feed - canal de noticias OPML + OPML syndication feed + suministro de sindicación OPML OPML harpidetze-iturria OPML-yhdistevirta fil de syndication OPML + canâl di notiziis OPML fotha sindeacáitithe OPML fonte de sindicación OPML הזנה דרך הרשת OPML @@ -32386,7 +33580,7 @@ fial de sindicacion OPML Kanał OPML feed OPML - Fonte de notícias OPML + Fonte de notícias OPML Flux OPML syndication Лента новостей OPML Kanál OPML @@ -32397,21 +33591,22 @@ OPML besleme kaynağı трансляція подач OPML Nguồn tin tức OPML - OPML 聚合种子 - OPML 聯合供稿饋流 + OPML 聚合种子 + OPML 聯合供稿饋流 - + SGML document + SGML-dokument مستند SGML Documentu SGML - Dakument SGML + Dakument SGML Документ — SGML document SGML dokument SGML @@ -32419,13 +33614,14 @@ SGML-dokument SGML-Dokument Έγγραφο SGML - SGML document + SGML document SGML-dokumento documento SGML SGML dokumentua SGML-asiakirja SGML skjal document SGML + document SGML cáipéis SGML documento SGML מסמך SGML @@ -32446,7 +33642,7 @@ document SGML Dokument SGML documento SGML - Documento SGML + Documento SGML Document SGML Документ SGML Dokument SGML @@ -32457,8 +33653,8 @@ SGML belgesi документ SGML Tài liệu SGML - SGML 文档 - SGML 文件 + SGML 文档 + SGML 文件 SGML Standard Generalized Markup Language @@ -32469,19 +33665,20 @@ spreadsheet interchange document مستند تبادل الجدول documentu d'intercambéu de fueyes de cálculu - dakument dla abmienu raźlikovymi arkušami - Документ за обмяна между програми за електронни таблици + dakument dla abmienu raźlikovymi arkušami + Документ — обмяна между електронни таблици document d'intercanvi de full de càlcul sešitový výměnný dokument regnearksudvekslingsdokument Tabellenkalkulations-Austauschdokument Έγγραφο ανταλλαγής λογιστικού φύλλου - spreadsheet interchange document - documento de intercambio de hojas de cálculo + spreadsheet interchange document + documento de intercambio de hoja de cálculo kalkulu-orriak trukatzeko dokumentua taulukkovälitysasiakirja rokniarks umbýtisskjal document d'échange de feuilles de calcul + document di interscambi par sfuei di calcul cáipéis idirmhalartaithe scarbhileog documento de intercambio de follas de cálculo מסמך גליון נתונים מתחלף @@ -32501,7 +33698,7 @@ document d'escambi de fuèlhs de calcul Dokument wymiany arkuszy kalkulacyjnych documento de troca interna de folhas de cálculo - Documento de intercâmbio de planilhas + Documento de intercâmbio de planilhas document schimb filă de calcul Документ Spreadsheet Interchange Zošitový prenosový dokument @@ -32509,35 +33706,37 @@ Dokument shkëmbimi për fletë llogaritje документ размене табеле spreadsheet interchange-dokument - hesap tablosu değişim belgesi + hesap çizelgesi değişim belgesi документ обміну ел. таблицями tài liệu hoán đổi bảng tính - 电子表格交换文档 - 試算表交換文件 + 电子表格交换文档 + 試算表交換文件 - + TSV document + TSV-dokument مستند TSV Documentu TSV - Dakument TSV + Dakument TSV Документ — TSV document TSV dokument TSV TSV-dokument TSV-Dokument Έγγραφο TSV - TSV document + TSV document documento TSV TSV dokumentua TSV-asiakirja TSV skjal document TSV + document TSV cáipéis TSV documento TSV מסמך TSV @@ -32557,7 +33756,7 @@ document TSV Dokument TSV documento TSV - Documento TSV + Documento TSV Document TSV Документ TSV Dokument TSV @@ -32568,8 +33767,8 @@ TSV belgesi документ TSV Tài liệu TSV - TSV 文档 - TSV 文件 + TSV 文档 + TSV 文件 TSV Tab Separated Values @@ -32577,6 +33776,7 @@ Graphviz DOT graph + Graphviz DOT-grafiek مبيان Graphviz DOT Граф — Graphviz DOT gràfic Graphviz DOT @@ -32584,12 +33784,13 @@ Graphviz DOT-graf Graphviz-DOT-Graph Γράφημα Graphviz DOT - Graphviz DOT graph + Graphviz DOT graph gráfico de Graphviz DOT Graphviz DOT grafikoa Graphviz DOT -graafi Graphviz DOT ritmynd graphe Graphviz DOT + grafic Graphviz DOT graf DOT Graphviz gráfica DOT de Graphviz תרשים של Graphviz DOT @@ -32607,7 +33808,7 @@ graf Graphviz DOT Wykres DOT Graphviz gráfico Graphviz DOT - Gráfico do Graphviz DOT + Gráfico do Graphviz DOT Grafic Graphviz DOT Диаграмма Graphviz DOT Graf Graphviz DOT @@ -32617,36 +33818,38 @@ Graphviz DOT grafiği граф DOT Graphviz Biểu đồ DOT Graphviz - Graphviz DOT 图形 - Graphviz DOT 圖 + Graphviz DOT 图形 + Graphviz DOT 圖表 - - - - + + + + JAD document + JAD-dokument مستند JAD Documentu JAD - Dakument JAD + Dakument JAD Документ — JAD document JAD dokument JAD JAD-dokument JAD-Dokument Έγγραφο JAD - JAD document + JAD document JAD-dokumento documento JAD JAD dokumentua JAD-asiakirja JAD skjal document JAD + document JAD cáipéis JAD documento JAD מסמך JAD @@ -32666,7 +33869,7 @@ document JAD Dokument JAD documento JAD - Documento JAD + Documento JAD Document JAD Документ JAD Dokument JAD @@ -32677,21 +33880,22 @@ JAD belgesi документ JAD Tài liệu JAD - JAD 文档 - JAD 文件 + JAD 文档 + JAD 文件 JAD Java Application Descriptor - + WML document + WML-dokument مستند WML Documentu WML WML sənədi - Dakument WML + Dakument WML Документ — WML document WML dokument WML @@ -32699,13 +33903,14 @@ WML-dokument WML-Dokument Έγγραφο WML - WML document + WML document WML-dokumento documento WML WML dokumentua WML-asiakirja WML skjal document WML + document WML cáipéis WML documento WML מסמך WML @@ -32726,7 +33931,7 @@ document WML Dokument WML documento WML - Documento WML + Documento WML Document WML Документ WML Dokument WML @@ -32737,8 +33942,8 @@ WML belgesi документ WML Tài liệu WML - WML 文档 - WML 文件 + WML 文档 + WML 文件 WML Wireless Markup Language @@ -32746,20 +33951,22 @@ WMLScript program + WMLScript-program برنامج WMLScript - Prahrama WMLScript + Prahrama WMLScript Програма — WMLScript programa WMLScript program WMLScript WMLScript-program WMLScript-Programm Πρόγραμμα WMLScript - WMLScript program + WMLScript program programa en WMLScript WMLScript programa WMLScript-ohjelma WMLScript forrit programme WMLScript + program WMLScript ríomhchlár WMLScript programa en WMLScript תכנית של WMLScript @@ -32779,7 +33986,7 @@ programa WMLEscript Pogram WMLScript programa WMLScript - Programa WMLScript + Programa WMLScript Program WMLScript Программа WMLScript Program WMLScript @@ -32790,27 +33997,60 @@ WMLScript programı програма мовою WMLScript Chương trình WMLScript - WMLScript 程序 - WMLScript 程式 + WMLScript 程序 + WMLScript 程式 + + WarpScript source code + Изходен код — WarpScript + codi font en WarpScript + zdrojový kód v jazyce WarpScript + WarpScript-kildekode + WarpScript-Quelltext + WarpScript source code + código fuente en WarpScript + WarpScript iturburu-kodea + WarpScript-lähdekoodi + code source WarpScript + codiç sorzint WarpScript + WarpScript izvorni kôd + WarpScript forráskód + Kode sumber WarpScript + Codice sorgente WarpScript + WarpScript бастапқы коды + WarpScript 소스 코드 + Kod źródłowy WarpScript + Código-fonte WarpScript + Исходный код WarpScript + Izvorna koda WarpScript + WarpScript-källkod + WarpScript kaynak kodu + вихідний код мовою WarpScript + WarpScript 源代码 + WarpScript 原始碼 + + + ACE archive + ACE-argief أرشيف ACE - Archiŭ ACE + Archiŭ ACE Архив — ACE arxiu ACE archiv ACE ACE-arkiv ACE-Archiv Συμπιεσμένο αρχείο ACE - ACE archive + ACE archive ACE-arkivo archivador ACE ACE artxiboa ACE-arkisto ACE skjalasavn archive ACE + archivi ACE cartlann ACE arquivo ACE ארכיון ACE @@ -32831,7 +34071,7 @@ archiu ACE Archiwum ACE arquivo ACE - Pacote ACE + Pacote ACE Arhivă ACE Архив ACE Archív ACE @@ -32842,31 +34082,33 @@ ACE arşivi архів ACE Kho nén ACE - ACE 归档文件 - ACE 封存檔 + ACE 归档文件 + ACE 封存檔 - + Ada source code + Ada-bronkode شفرة مصدر Ada - Kryničny kod Ada + Kryničny kod Ada Изходен код — Ada codi font en Ada zdrojový kód v jazyce Ada Ada-kildekode Ada-Quelltext Πηγαίος κώδικας Ada - Ada source code + Ada source code Ada-fontkodo código fuente en Ada Ada iturburu-kodea Ada-lähdekoodi Ada keldukota code source Ada + codiç sorzint Ada cód foinseach Ada código fonte en Ada קוד מקור Ada @@ -32888,7 +34130,7 @@ còde font Ada Kod źródłowy Ada código origem Ada - Código-fonte Ada + Código-fonte Ada Cod sursă Ada Исходный код Ada Zdrojový kód jazyka Ada @@ -32899,29 +34141,31 @@ Ada kaynak kodu вихідний код мовою Ada Mã nguồn Ada - Ada 源代码 - Ada 源碼 + Ada 源代码 + Ada 源碼 author list + outeurlys لائحة المؤلف - śpis aŭtaraŭ + śpis aŭtaraŭ Списък на авторите llista d'autors seznam autorů forfatterliste Autorenliste Κατάλογος συγγραφέων - author list + author list listo de aŭtoroj lista de autores egile-zerrenda tekijäluettelo høvundalisti liste d'auteurs + liste di autôrs liosta údar lista de autores רשימת יוצרים @@ -32942,7 +34186,7 @@ lista d'autors Lista autorów lista de autores - Lista de autores + Lista de autores listă autori Список авторов Zoznam autorov @@ -32953,29 +34197,31 @@ yazar listesi перелік авторів danh sách tác giả - 作者列表 - 作者清單 + 作者列表 + 作者清單 BibTeX document + BibTeX-dokument مستند BibTeX Documentu de BibTeX - Dakument BibTeX + Dakument BibTeX Документ — BibTeX document BibTeX dokument BibTeX BibTeX-dokument BibTeX-Dokument Έγγραφο BibTeX - BibTeX document + BibTeX document BibTeX-dokumento documento BibTeX BibTeX dokumentua BibTeX-asiakirja BibTeX skjal document BibTeX + document BibTeX cáipéis BibTeX documento BibTex מסמך BibTeX @@ -32996,7 +34242,7 @@ document BibTeX Dokument BibTeX documento BibTeX - Documento BibTeX + Documento BibTeX Document BibTeX Документ BibTeX Dokument BibTeX @@ -33007,30 +34253,31 @@ BibTeX belgesi документ BibTeX Tài liệu BibTeX - BibTeX 文档 - BibTeX 文件 + BibTeX 文档 + BibTeX 文件 - + C++ header ترويسة سي++ - Zahałoŭny fajł C++ + Zahałoŭny fajł C++ Заглавен файл — C++ capçalera en C++ hlavičkový soubor C++ C++-posthoved C++-Header Κεφαλίδα C++ - C++ header + C++ header cabecera de código fuente en C++ C++ goiburua C++-otsake C++ tekshøvd en-tête C++ + intestazion C++ ceanntásc C++ cabeceira de código fonte en C++ כותר C++‎ @@ -33051,7 +34298,7 @@ entèsta C++ Plik nagłówkowy C++ cabeçalho C++ - Cabeçalho C++ + Cabeçalho C++ Antet C++ Заголовочный файл C++ Hlavičky jazyka C++ @@ -33062,8 +34309,8 @@ C++ başlığı файл заголовків мовою C++ Phần đầu mã nguồn C++ - C++ 头文件 - C++ 標頭檔 + C++ 头文件 + C++ 標頭檔 @@ -33073,21 +34320,23 @@ C++ source code + C++-bronkode شفرة مصدر سي++ - Kryničny kod C++ + Kryničny kod C++ Изходен код — C++ codi font en C++ zdrojový kód v jazyce C++ C++-kildekode C++-Quelltext Πηγαίος κώδικας C++ - C++ source code + C++ source code C++-fontkodo código fuente en C++ C++ iturburu-kodea C++-lähdekoodi C++ keldukota code source C++ + codiç sorzint C++ cód foinseach C++ código fonte de C++ קוד מקור של C++‎ @@ -33109,7 +34358,7 @@ còde font C++ Kod źródłowy C++ código origem C++ - Código-fonte C++ + Código-fonte C++ Cod sursă C++ Исходный код C++ Zdrojový kód jazyka C++ @@ -33120,8 +34369,8 @@ C++ kaynak kodu вихідний код мовою C++ Mã nguồn C++ - C++ 源代码 - C++ 源碼 + C++ 源代码 + C++ 源碼 @@ -33131,21 +34380,23 @@ ChangeLog document + ChangeLog-dokument مستند ChangeLog Documentu de rexistru de cambeos - Dakument zafiksavanych źmienaŭ ChangeLog + Dakument zafiksavanych źmienaŭ ChangeLog Дневник за промени — ChangeLog document de registre de canvis dokument ChangeLog ChangeLot-dokument Änderungsprotokoll-Dokument Έγγραφο ChangeLog - ChangeLog document + ChangeLog document documento de registro de cambios ChangeLog dokumentua Muutoslokiasiakirja ChangeLog skjal document ChangeLog + document ChangeLog cáipéis ChangeLog documento Changelog מסמך של ChangeLog @@ -33166,7 +34417,7 @@ document ChangeLog Dokument zmian (ChangeLog) documento ChangeLog - Documento ChangeLog + Documento ChangeLog Document ChangeLog Протокол изменений Dokument ChangeLog @@ -33174,30 +34425,31 @@ Dokument ChangeLog документ дневника измена Ändringsloggsdokument - Değişim Günlüğü belgesi + ChangeLog belgesi документ ChangeLog Tài liệu ChangeLog (ghi lưu thay đổi) - 变更日志文档 - ChangeLog 文件 + 变更日志文档 + ChangeLog 文件 C header ترويسة C - Zahałoŭny fajł C + Zahałoŭny fajł C Заглавен файл — C capçalera en C hlavičkový soubor C C-posthoved C-Header Κεφαλίδα C - C header + C header cabecera de código fuente en C C goiburua C-otsake C tekshøvd en-tête C + intestazion C ceanntásc C cabeceira de códifo fonte de C כותר C @@ -33218,7 +34470,7 @@ entèsta C Plik nagłówkowy C cabeçalho C - Cabeçalho C + Cabeçalho C Antet C Заголовочный файл C Hlavičky jazyka C @@ -33229,28 +34481,30 @@ C başlığı файл заголовків мовою C Phần đầu mã nguồn C - C 程序头文件 - C 標頭檔 + C 程序头文件 + C 標頭檔 CMake source code + CMake-bronkode شفرة مصدر CMake - Kryničny kod CMake + Kryničny kod CMake Изходен код — CMake codi font en CMake zdrojový kód CMake CMake-kildekode CMake-Quelltext Πηγαίος κώδικας CMake - CMake source code + CMake source code CMake-fontkodo código fuente en CMake CMake iturburu-kodea CMake-lähdekoodi CMake keldukota code source CMake + codiç sorzint CMake cód foinseach CMake código fonte de CMake קוד מקור של CMake @@ -33271,7 +34525,7 @@ còde font CMake Kod źródłowy CMake código origem CMake - Código-fonte CMake + Código-fonte CMake Cod sursă CMake Исходный код CMake Zdrojový kód CMake @@ -33282,30 +34536,55 @@ CMake kaynak kodu вихідний код CMake Mã nguồn CMake - CMake 源代码 - CMake 源碼 + CMake 源代码 + CMake 源碼 + + Common Lisp source code + codi font en Common Lisp + Common Lisp-kildekode + Common-Lisp-Quelltext + Common Lisp source code + código fuente en Common Lisp + Yleinen Lisp-lähdekoodi + code source Common Lisp + Common Lisp izvorni kôd + Codice sorgente Common Lisp + Kod źródłowy Common Lisp + Código-fonte Common Lisp + Common Lisp-källkod + вихідний код мовою Common Lisp + Common Lisp 源代码 + Common Lisp 源碼 + + + + + + CSV document + CSV-dokument مستند CSV Documentu CVS - Dakument CSV + Dakument CSV Документ — CSV document CSV dokument CSV CSV-dokument CSV-Dokument Έγγραφο CSV - CSV document + CSV document CSV-dokumento documento CSV CSV dokumentua CSV-asiakirja CSV skjal document CSV + document CSV cáipéis CSV documento CSV מסמך CSV @@ -33326,7 +34605,7 @@ document CSV Dokument CSV documento CSV - Documento CSV + Documento CSV Document CSV Документ CSV Dokument CSV @@ -33337,8 +34616,8 @@ CSV belgesi документ CSV Tài liệu CSV - CSV 文档 - CSV 文件 + CSV 文档 + CSV 文件 CSV Comma Separated Values @@ -33348,15 +34627,19 @@ CSV Schema document + CSV Schema-dokument Documentu d'esquema CSV + Документ — схема на CSV document Schema de CSV dokument schématu CSV CSV Schema-dokument CSV-Schemadokument - CSV Schema document + CSV Schema document documento esquemático CSV CSV Schema dokumentua + CSV Schema asiakirja document schéma CSV + document scheme CSV cáipéis scéimre CSV מסמך פריסת CSV CSV Shema dokument @@ -33368,15 +34651,16 @@ CSV 스키마 문서 Dokument schematu CSV documento CSV Schema - Documento CSV Schema + Documento CSV Schema Документ CSV Schema Dokument schémy CSV + Dokument CSV Schema документ ЦСВ шеме CSV Schema-dokument CSV Şeması belgesi документ Schema у форматі CSV - CSV 架构文档 - CSV Schema 文件 + CSV 架构文档 + CSV Schema 文件 CSV Comma Separated Values @@ -33384,21 +34668,23 @@ license terms + lisensievoorwaardes شروط الترخيص términos de llicencia - licenzijnyja ŭmovy + licenzijnyja ŭmovy Лицензни условия condicions de llicència licenční podmínky licensbetingelser Lizenzbedingungen Όροι άδειας - licence terms + licence terms términos de licencia lizentzia baldintzak lisenssiehdot loyvistreytir termes de licence + tiermins di licence téarmaí ceadúnais termos de licenza תנאי רישיון @@ -33418,7 +34704,7 @@ tèrmes de licéncia Warunki licencji termos de licença - Termos de licença + Termos de licença termeni de licență Лицензионное соглашение Licenčné podmienky @@ -33429,27 +34715,30 @@ lisans koşulları ліцензійні умови điều kiện giấy phép - 软件许可条款 - 授權條款 + 软件许可条款 + 授權條款 author credits + outeurerkenning شكر وتقدير المؤلف creitos del autor - zasłuhi aŭtara + zasłuhi aŭtara Благодарности към авторите atribucions d'autor autorské zásluhy bidragydere Autorendanksagung Μνεία συγγραφέων - author credits + author credits reconocimiento de autoría + egile-kredituak tekijöiden kiitokset høvundaheiður remerciements + ricognossiments autôrs admhálacha údar créditos de autor קרדיטים של היוצר @@ -33469,7 +34758,7 @@ mercejaments Podziękowania autorów programu créditos de autor - Créditos do autor + Créditos do autor mulțumiri autori Авторы программы Autorské zásluhy @@ -33480,28 +34769,30 @@ yazar bilgileri подяки авторам програми công trạng tác giả - 软件作者致谢 - 作者致謝名單 + 软件作者致谢 + 作者致謝名單 C source code + C-bronkode شفرة مصدر سي - Kryničny kod C + Kryničny kod C Изходен код — C codi font en C zdrojový kód v jazyce C C-kildekode C-Quelltext Πηγαίος κώδικας C - C source code + C source code C-fontkodo código fuente en C C iturburu-kodea C-lähdekoodi C keldukota code source C + codiç sorzint C cód foinseach C código fonte en C קוד מקור של C @@ -33523,7 +34814,7 @@ còde font C Kod źródłowy C código origem C - Código-fonte C + Código-fonte C Cod sursă C Исходный код C Zdrojový kód jazyka C @@ -33534,34 +34825,36 @@ C kaynak kodu вихідний код мовою C Mã nguồn C - C 源代码 - C 源碼 + C 源代码 + C 源碼 - - - + + + C# source code + C#-bronkode شفرة مصدر سي# - Kryničny kod C# + Kryničny kod C# Изходен код — C# codi font en C# zdrojový kód v jazyce C# C#-kildekode C#-Quelltext Πηγαίος κώδικας C# - C# source code + C# source code C#-fontkodo código fuente en C# C# iturburu-kodea C#-lähdekoodi C# keldukota code source C# + codiç sorzint C# cód foinseach C# código fonte en C# קוד מקור של C#‎ @@ -33583,7 +34876,7 @@ còde font C# Kod źródłowy C# código origem C# - Código-fonte C# + Código-fonte C# Cod sursă C# Исходный код C# Zdrojový kód jazyka C# @@ -33594,28 +34887,30 @@ C# kaynak kodu вихідний код мовою C# Mã nguồn C# - C# 源代码 - C# 源碼 + C# 源代码 + C# 源碼 Vala source code + Vala-bronkode شفرة مصدر Vala - Kryničny kod Vala + Kryničny kod Vala Изходен код — Vala codi font en Vala zdrojový kód v jazyce Vala - Valakildekode + Vala-kildekode Vala-Quelltext Πηγαίος κώδικας Vala - Vala source code + Vala source code Vala-fontkodo código fuente en Vala Vala iturburu-kodea Vala-lähdekoodi Vala keldukota code source Vala + codiç sorzint Vala cód foinseach Vala código fonte en Vala קוד מקור של Vala @@ -33635,7 +34930,7 @@ còde font Vala Kod źródłowy Vala código origem Vala - Código-fonte Vala + Código-fonte Vala Cod sursă Vala Исходный код Vala Zdrojový kód Vala @@ -33646,26 +34941,28 @@ Vala kaynak kodu вихідний код мовою Vala Mã nguồn Vala - Vala 源代码 - Vala 源碼 + Vala 源代码 + Vala 源碼 OOC source code + OOC-bronkode Изходен код — OOC codi font en OOC zdrojový kód OOC OOC-kildekode OOC-Quelltext Πηγαίος κώδικας OOC - OOC source code + OOC source code OOC-fontkodo código fuente en OOC OOC iturburu-kodea OOC-lähdekoodi source code OOC + codiç sorzint OOC cód foinseach OOC código fonte de OOC קוד מקור של OOC @@ -33683,7 +34980,7 @@ font còde OOC Kod źródłowy OOC código origem OOC - Código-fonte OOC + Código-fonte OOC Исходный код OOC Zdrojový kód OOC Izvorna koda OOC @@ -33691,8 +34988,8 @@ OOC-källkod OOC kaynak kodu вихідний код мовою OOC - OOC 源代码 - OOC 源碼 + OOC 源代码 + OOC 源碼 OOC Out Of Class @@ -33700,9 +34997,10 @@ DCL script + DCL-skrip سكربت DCL DCL skripti - Skrypt DCL + Skrypt DCL Скрипт — DCL script DCL skript DCL @@ -33710,13 +35008,14 @@ DCL-program DCL-Skript Δέσμη ενεργειών DCL - DCL script + DCL script DCL-skripto secuencia de órdenes en DCL DCL script-a DCL-komentotiedosto DCL boðrøð script DCL + script DCL script DCL script de DCL תסריט DCL @@ -33738,7 +35037,7 @@ escript DCL Skrypt DCL script DCL - Script DCL + Script DCL Script DCL Сценарий DCL Skript DCL @@ -33749,8 +35048,8 @@ DCL betiği скрипт DCL Văn lệnh DCL - DCL 脚本 - DCL 指令稿 + DCL 脚本 + DCL 指令稿 DCL Data Conversion Laboratory @@ -33758,10 +35057,11 @@ DSSSL document + DSSSL-dokument مستند DSSSL Documentu DSSSL DSSSL sənədi - Dakument DSSSL + Dakument DSSSL Документ — DSSSL document DSSSL dokument DSSSL @@ -33769,13 +35069,14 @@ DSSSL-dokument DSSSL-Dokument Έγγραφο DSSSL - DSSSL document + DSSSL document DSSSL-dokumento documento DSSSL DSSSL dokumentua DSSSL-asiakirja DSSSL skjal document DSSSL + document DSSSL cáipéis DSSSL documento DSSSL מסמך DSSSL @@ -33797,7 +35098,7 @@ document DSSSL Dokument DSSSL documento DSSSL - Documento DSSSL + Documento DSSSL Document DSSSL Документ DSSSL Dokument DSSSL @@ -33808,8 +35109,8 @@ DSSSL belgesi документ DSSSL Tài liệu DSSSL - DSSSL 文档 - DSSSL 文件 + DSSSL 文档 + DSSSL 文件 DSSSL Document Style Semantics and Specification Language @@ -33817,21 +35118,23 @@ D source code + D-bronkode شفرة مصدر D - Kryničny kod D + Kryničny kod D Изходен код — D codi font en D zdrojový kód v jazyce D D-kildekode D-Quelltext Πηγαίος κώδικας D - D source code + D source code D-fontkodo código fuente en D D iturburu-kodea D-lähdekoodi D keldukota code source D + codiç sorzint D cód foinseach D código fonte de D קוד מקור לשפת D @@ -33852,7 +35155,7 @@ còde font D Kod źródłowy D código origem D - Código-fonte D + Código-fonte D Cod sursă D Исходный код D Zdrojový kód jazyka D @@ -33863,29 +35166,31 @@ D kaynak kodu вихідний код мовою D Mã nguồn D - D 源代码 - D 源碼 + D 源代码 + D 源碼 DTD file + DTD-lêer ملف DTD - Fajł DTD + Fajł DTD Документ — DTD fitxer DTD soubor DTD DTD-fil DTD-Datei Αρχείο DTD - DTD file + DTD file DTD-dosiero archivo DTD DTD fitxategia DTD-tiedosto DTD fíla fichier DTD + file DTD comhad DTD ficheiro DTD מסמך DTD @@ -33906,7 +35211,7 @@ fichièr DTD Plik DTD ficheiro DTD - Arquivo DTD + Arquivo DTD Fișier DTD Файл DTD Súbor DTD @@ -33917,8 +35222,8 @@ DTD dosyası файл DTD Tập tin DTD - DTD 文件 - DTD 檔 + DTD 文件 + DTD 檔 DTD Document Type Definition @@ -33928,21 +35233,23 @@ Eiffel source code + Eiffel-bronkode شفرة مصدر Eiffel - Kryničny kod Eiffel + Kryničny kod Eiffel Изходен код — Eiffel codi font en Eiffel zdrojový kód v jazyce Eiffel - Eiffelkildekode + Eiffel-kildekode Eiffel-Quelltext Πηγαίος κώδικας Eiffel - Eiffel source code + Eiffel source code Eiffel-fontkodo código fuente en Eiffel Eiffel iturburu-kodea Eiffel-lähdekoodi Eiffel keldukota code source Eiffel + codiç sorzint Eiffel cód foinseach Eiffel código fone de Eiffel קוד מקור של Eiffel @@ -33963,7 +35270,7 @@ còde font Eiffel Kod źródłowy Eiffel código origem Eiffel - Código-fonte Eiffel + Código-fonte Eiffel Cod sursă Eiffel Исходный код Eiffel Zdrojový kód Eiffel @@ -33974,17 +35281,18 @@ Eiffel kaynak kodu вихідний код мовою Eiffel Mã nguồn Eiffel - Eiffel 源代码 - Eiffel 源碼 + Eiffel 源代码 + Eiffel 源碼 Emacs Lisp source code + Emacs Lisp-bronkode شفرة مصدر Emacs Lisp Emacs Lisp mənbə kodu - Kryničny kod Emacs Lisp + Kryničny kod Emacs Lisp Изходен код — Emacs Lisp codi font en Emacs Lisp zdrojový kód Emacs Lisp @@ -33992,13 +35300,14 @@ Emacs Lisp-kildekode Emacs-Lisp-Quelltext Πηγαίος κώδικας Emacs Lisp - Emacs Lisp source code + Emacs Lisp source code fontkodo en Emacs Lisp código fuente en Lisp de Emacs Emacs Lisp iturburu-kodea Emacs Lisp -lähdekoodi Emacs Lisp keldukota code source Emacs Lisp + codiç sorzint Emacs Lisp cód foinseach Emacs Lisp código fonte de Emacs Lisp קוד מקור של Emcas Lisp @@ -34018,9 +35327,9 @@ Emacs Lisp-broncode Emacs Lisp kjeldekode còde font Emacs Lisp - Plik źródłowy Emacs Lisp + Kod źródłowy Emacs Lisp código origem Emacs Lisp - Código-fonte Lisp do Emacs + Código-fonte Lisp do Emacs Cod sursă Emacs Lisp Исходный код Emacs Lisp Zdrojový kód Emacs Lisp @@ -34031,32 +35340,34 @@ Emacs Lisp kaynak kodu вихідний код мовою Emacs Lisp Mã nguồn Lisp Emacs - Emacs Lisp 源代码 - Emacs Lisp 源碼 + Emacs Lisp 源代码 + Emacs Lisp 源碼 - - + + Erlang source code + Erlang-bronkode شفرة مصدر Erlang - Kryničny kod Erlang + Kryničny kod Erlang Изходен код — Erlang codi font en Erlang zdrojový kód v jazyce Erlang - Erlangkildekode + Erlang-kildekode Erlang-Quelltext Πηγαίος κώδικας Erlang - Erlang source code + Erlang source code Erlang-fontkodo código fuente en Erlang Erlang iturburu-kodea Erlang-lähdekoodi Erlang keldukota code source Erlang + codiç sorzint Erlang cód foinseach Erlang código fonte de Erlang קוד מקור של Erlang @@ -34077,7 +35388,7 @@ còde font Erlang Kod źródłowy Erlang código origem Erlang - Código-fonte Erlang + Código-fonte Erlang Cod sursă Erlang Исходный код Erlang Zdrojový kód Erlang @@ -34088,30 +35399,32 @@ Erlang kaynak kodu вихідний код мовою Erlang Mã nguồn Erlang - Erlang 源代码 - Erlang 源碼 + Erlang 源代码 + Erlang 源碼 Fortran source code + Fortran-bronkode شفرة مصدر Fortran Fortran mənbə kodu - Kryničny kod Fortran + Kryničny kod Fortran Изходен код — Fortran codi font en Fortran zdrojový kód v jazyce Fortran Ffynhonnell rhaglen FORTRAN - Fortrankildekode + Fortran-kildekode Fortran-Quelltext Πηγαίος κώδικας Fortran - Fortran source code + Fortran source code Fotran-fontkodo código fuente en Fortran Fortran-en iturburu-kodea Fortran-lähdekoodi Fortran keldukota code source Fortran + codiç sorzint Fortran cód foinseach Fortran código fonte de Fortran קוד מקור של Fortran @@ -34133,7 +35446,7 @@ còde font Fortran Kod źródłowy Fortran código origem Fortran - Código-fonte Fortran + Código-fonte Fortran Cod sursă Fortran Исходный код Fortran Zdrojový kód Fortran @@ -34144,8 +35457,8 @@ Fortran kaynak kodu вихідний код мовою Fortran Mã nguồn Fortran - Fortran 源代码 - Fortran 源碼 + Fortran 源代码 + Fortran 源碼 @@ -34154,16 +35467,19 @@ Genie source code - codi font de Genius + Genie-bronkode + Изходен код — Genie + codi font en Genie zdrojový kód v jazyce Genie Genie-kildekode Genie-Quelltext Πηγαίος κώδικας Genie - Genie source code + Genie source code código fuente en Genie Genie iturburu-kodea Genie-lähdekoodi code source Genie + codiç sorzint Genie cód foinseach Genie קוד מקור של Genie Genie izvorni kôd @@ -34176,7 +35492,7 @@ còde font Genie Kod źródłowy Genie código origem Genie - Código-fonte Genie + Código-fonte Genie Исходный код Genie Zdrojový kód Genie Izvorna koda Genie @@ -34184,30 +35500,32 @@ Genie-källkod Genie kaynak kodu вихідний код мовою Genie - Genie 源代码 - Genie 源碼 + Genie 源代码 + Genie 源碼 translation file + vertaallêer ملف الترجمة ficheru de traducción - fajł pierakładu + fajł pierakładu Превод fitxer de traducció soubor překladu oversættelsesfil Übersetzungsdatei Αρχείο μετάφρασης - translation file + translation file tradukad-dosiero archivo de traducción itzulpen-fitxategia käännöstiedosto týðingarfíla fichier de traduction + file di traduzion comhad aistriúcháin ficheiro de tradución קובץ תרגום @@ -34228,7 +35546,7 @@ fichièr de traduccion Plik tłumaczenia ficheiro de tradução - Arquivo de tradução + Arquivo de tradução fișier traducere Файл переводов Súbor prekladu @@ -34239,8 +35557,8 @@ çeviri dosyası файл перекладу tập tin dịch - 翻译文件 - 翻譯檔 + 翻译文件 + 翻譯檔 @@ -34248,22 +35566,24 @@ translation template + vertaalsjabloon قالب الترجمة plantía de traducción - šablon dla pierakładu + šablon dla pierakładu Шаблон за преводи plantilla de traducció šablona překladu oversættelsesskabelon Übersetzungsvorlage Πρότυπο μετάφρασης - translation template + translation template tradukad-ŝablono plantilla de traducción itzulpenen txantiloia käännösmalli týðingarformur modèle de traduction + model di traduzion teimpléad aistriúcháin plantilla de tradución תבנית תרגום @@ -34284,7 +35604,7 @@ modèl de traduccion Szablon tłumaczenia modelo de tradução - Modelo de tradução + Modelo de tradução șablon de traducere Шаблон переводов Šablóna prekladu @@ -34295,63 +35615,65 @@ çeviri şablonu шаблон перекладу mẫu dịch - 翻译模板 - 翻譯模版 + 翻译模板 + 翻譯模版 - + - feature specification in Gherkin format - especificació de funcionalitat en format Gherkin - specifikace vlastností ve formátu Gherkin - funktionspecifikation i Gherkin-format - Funktionsspezifikation im Gherkin-Format - feature specification in Gherkin format - especificación de funcionalidad en formato Gherkin - spécification fonctionnelle au format Gherkin - sonraíocht gnéithe i bhformáid Gherkin - פירוט תכונות בתבנית Gherkin - opis značajke u Gherkin formatu - funkcióleírás Gherkin formátumban - spesifikasi fitur dalam format Gherkin - Specifica di funzionalità in formato Gherkin - Gherkin пішіміндегі функционалды анықтамалар - Gherkin 형식의 기능 명세 - Specyfikacja funkcji w formacie Gherkin - Especificação de recurso no formato Gherkin - Функциональные определения в формате Gherkin - Špecifikácia funkcie vo formáte Gherkin - одредба функције у запису Геркина - egenskapsspecifikation i Gherkin-format - Gherkin biçiminde özellik belirtimi - специфікація можливості у форматі Gherkin - Gherkin 格式中的功能规范 - Gherkin 格式的特徵規格 + Gherkin document + Документ — Gherkin + document Gherkin + Gherkin-dokument + Gherkin-Dokument + Gherkin document + documento de Gherkin + Gherkin dokumentua + Gherkin-asiakirja + document Gherkin + Gherkin dokument + Gherkin dokumentum + Dokumen Gherkin + Documento Gherkin + Gherkin құжаты + 게르킨 문서 + Dokument Gherkin + Documento Gherkin + Документ Gherkin + Dokument Gherkin + Dokument Gherkin + Gherkin-dokument + Gherkin belgesi + документ Gherkin + Gherkin 文档 + Gherkin 文件 HTML document + HTML-dokument مستند HTML Documentu HTML - Dakument HTML + Dakument HTML Документ — HTML document HTML dokument HTML HTML-dokument HTML-Dokument Έγγραφο HTML - HTML document + HTML document HTML-dokumento documento HTML HTML dokumentua HTML-asiakirja HTML skjal document HTML + document HTML cáipéis HTML documento HTML מסמך HTML @@ -34371,7 +35693,7 @@ document HTML Dokument HTML documento HTML - Documento HTML + Documento HTML Document HTML Документ HTML Dokument HTML @@ -34382,161 +35704,122 @@ HTML belgesi документ HTML Tài liệu HTML - HTML 文档 - HTML 文件 + HTML 文档 + HTML 文件 HTML HyperText Markup Language - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + + + + + + - Web application cache manifest - قائمة التخزين الموقت لتطبيق الويب - Манифест за кеша на уеб приложение - manifest de memòria cau d'aplicació Web - manifest mezipaměti webové aplikace - Manifest for internetprogrammellemlager - Webanwendungscache-Manifest - Δηλωτικό λανθάνουσας μνήμης εφαρμογής Ιστού - Web application cache manifest - manifiesto de antememoria de aplicación web - Web aplikazioaren cache-aren agiria - Net nýtsluskipanarkova manifest - manifeste de cache d'application Web - lastliosta taisce d'fheidhmchlár Gréasáin - manifesto de caché de aplicativo web - הצהרה של מטמון של תוכנית ברשת - Web aplikacija prikaza predmemorije - Webalkalmazás gyorsítótár-összefoglalója - Manifesto de cache de application web - Manifes singgahan aplikasi web - Manifesto cache applicazione Web - Web アプリケーションキャッシュ manifest - Веб қолданбасының кэш манифесті - 웹 애플리케이션 캐시 정의 - Žiniatinklio programos podėlio manifestas - Tīmekļa lietotņu keša manifests - Webapplicatie cache manifest - manifèste d'escondedor d'aplicacion Web - Manifest pamięci podręcznej aplikacji WWW - manifesto de cache de aplicação web - Manifest de cache de aplicação web - Manifest de cache pentru aplicații web - Манифест кэша веб-приложения - Manifest vyrovnávacej pamäte webovej aplikácie - Predpomnilnik spletnega programa - проглас оставе Веб програма - Cachemanifest för webbapplikation - Web uygulama önbelleği bildirimi - маніфест кешу веб-програми - 网络应用程序缓存清单 - 網頁應用程式快取聲明 + Web application cache file + Кеш — уеб приложение + fitxer de memòria cau d'aplicació Web + Webprogrammellemlagerfil + Webanwendungscache-Datei + Web application cache file + archivo de antememoria de aplicación web + Web-aplikazio katxe fitxategia + Web-sovelluksen välimuistitiedosto + fichier de cache d'application Web + Web aplikacija datoteka predmemorije + Webalkalmazás gyorsítótárfájl + Berkas singgahan aplikasi web + File cache applicazione Web + Веб қолданбасының кэш файлы + 웹 애플리케이션 캐시 파일 + Plik pamięci podręcznej aplikacji WWW + Arquivo de cache de aplicativo Web + Файл кэша веб-приложения + Webbapplikation cachefil + Web uygulama önbellek dosyası + файл кешу вебпрограми + Web 应用缓存文件 - - - - - + + + + + - Google Video Pointer - مؤشر فيديو جوجل - Google Video Pointer - Pakazalnik Google Video - Документ-указател към видео на Google - apuntador a vídeo de Google - Google Video Pointer - Google Video-peger - Google Video-Zeiger - Google Video Pointer - Google Video Pointer - lista de reproducción de Google Video (GVP) - Google Video-ren erreprodukzio-zerrenda - Google-video-osoitin - Google Video Pointer - pointeur vidéo Google - pointeoir Google Video - punteiro de vídeo de Google - מצביע וידאו של Google - Google Video pretraživač - Google Video Pointer - Punctator Google Video - Google Video Pointer - Puntatore Google Video - Google ビデオポインター - Google Video Pointer - Google 동영상 포인터 - Google Video Pointer - Google Video Pointer - Peker til Google Video - Google-videoverwijzing - Google Video-peikar - puntador vidèo Google - Lista odtwarzania Google Video - Ponteiro Google Video - Ponteiro do Google Vídeo - Indicator Google Video - Google Video Pointer - Google Video Pointer - Kazalec Google Video - Puntues Google Video - Гуглов видео показивач - Google Video-pekare - Google Video İşaretçisi - вказівник відео Google - Con trỏ ảnh động Google - Google 视频指向 - Google Video Pointer - - - + Google Video Pointer shortcut + Отметка — Google Video + drecera d'apuntador a vídeo de Google + Google Video Pointer-genvej + Google-Video-Zeigerverweis + Google Video Pointer shortcut + atajo de Google Video Pointer + Google Video Pointer lasterbidea + Google Video Pointer -pikakuvake + raccourci de pointeur vidéo Google + Google Video pretraživač prečac + Google Video Pointer parancsikon + Pintasan Google Video Pointer + Scorciatoia Google Video Pointer + Google Video Pointer жарлығы + 구글 동영상 포인터 바로 가기 + Skrót listy odtwarzania Google Video + Atalho do Google Video Pointer + Ссылка Google Video Pointer + Google Video Pointer-genväg + Google Video Pointer kısayolu + скорочення вказівника відео Google + Google Video Pointer 快捷方式 + + + Haskell source code + Haskell-bronkode شفرة مصدر Haskell Haskell mənbə kodu - Kryničny kod Haskell - Изходен код на Haskell + Kryničny kod Haskell + Изходен код — Haskell codi font en Haskell zdrojový kód v jazyce Haskell Ffynhonnell rhaglen Haskell - Haskellkildekode + Haskell-kildekode Haskell-Quelltext Πηγαίος κώδικας Haskell - Haskell source code + Haskell source code Haskell-fontkodo código fuente en Haskell Haskell iturburu-kodea Haskell-lähdekoodi Haskell keldukota code source Haskell + codiç sorzint Haskell cód foinseach Haskell código fonte de Haskell קוד מקור של Haskell @@ -34557,7 +35840,7 @@ còde font Haskell Kod źródłowy Haskell código origem Haskell - Código-fonte Haskell + Código-fonte Haskell Cod sursă Haskell Исходный код Haskell Zdrojový kód Haskell @@ -34568,17 +35851,18 @@ Haskell kaynak kodu вихідний код мовою Haskell Mã nguồn Haskell - Haskell 源代码 - Haskell 源碼 + Haskell 源代码 + Haskell 源碼 IDL document + IDL-dokument مستند IDL Documentu IDL IDL sənədi - Dakument IDL + Dakument IDL Документ — IDL document IDL dokument IDL @@ -34586,13 +35870,14 @@ IDL-dokument IDL-Dokument Έγγραφο IDL - IDL document + IDL document IDL-dokumento documento IDL IDL dokumentua IDL-asiakirja IDL skjal document IDL + document IDL cáipéis IDL documento IDL מסמך IDL @@ -34613,7 +35898,7 @@ document IDL Dokument IDL documento IDL - Documento IDL + Documento IDL Document IDL Документ IDL Dokument IDL @@ -34624,8 +35909,8 @@ IDL belgesi документ IDL Tài liệu IDL - IDL 文档 - IDL 文件 + IDL 文档 + IDL 文件 IDL Interface Definition Language @@ -34633,21 +35918,23 @@ installation instructions + installasie-instruksies تعليمات التثبيت instrucciones d'instalación - instrukcyja dla instalavańnia + instrukcyja dla instalavańnia Инструкции за инсталация instruccions d'instal·lació návod k instalaci installationsinstruktioner Installationsanleitung Οδηγίες εγκατάστασης - installation instructions + installation instructions instrucciones de instalación instalazioaren instrukzioak asennusohjeet innleggingar vegleiðing instructions d'installation + istruzions di instalazion treoracha suiteála instrucións de instalación הוראות התקנה @@ -34667,7 +35954,7 @@ instructions d'installacion Instrukcje instalacji instruções de instalação - Instruções de instalação + Instruções de instalação instrucțiuni de instalare Инструкции по установке Návod na inštaláciu @@ -34678,28 +35965,30 @@ kurulum yönergeleri інструкції з встановлення hướng dẫn cài đặt - 软件安装指南 - 安裝指引 + 软件安装指南 + 安裝指引 Java source code + Java-bronkode شفرة مصدر Java - Kryničny kod Java - Изходен код на Java + Kryničny kod Java + Изходен код — Java codi font en Java zdrojový kód v jazyce Java - Javakildekode + Java-kildekode Java-Quelltext Πηγαίος κώδικας Java - Java source code + Java source code Java-fontkodo código fuente en Java Java iturburu-kodea Java-lähdekoodi Java keldukota code source Java + codiç sorzint Java cód foinseach Java código fonte de Java קוד מקור ב־Java @@ -34720,7 +36009,7 @@ còde font Java Kod źródłowy Java código origem Java - Código-fonte Java + Código-fonte Java Cod sursă Java Исходный код Java Zdrojový kód Java @@ -34731,28 +36020,30 @@ Java kaynak kodu вихідний код мовою Java Mã nguồn Java - Java 源代码 - Java 源碼 + Java 源代码 + Java 源碼 LDIF address book + LDIF-adresboek دفتر عناوين LDIF - Adrasnaja kniha LDIF + Adrasnaja kniha LDIF Адресна книга — LDIF llibreta d'adreces LDIF adresář LDIF LDIF-adressebog LDIF-Adressbuch Βιβλίο διευθύνσεων LDIF - LDIF address book + LDIF address book LDIF-adresaro libreta de direcciones LDIF LDIF helbide-liburua LDIF-osoitekirja LDIF adressubók carnet d'adresses LDIF + rubriche LDIF leabhar seoltaí LDIF lista de enderezos LDIF ספר כתובות של LDIF @@ -34772,7 +36063,7 @@ quasernet d'adreças LDIF Książka adresowa LDIF livro de endereços LDIF - Livro de endereços LDIF + Livro de endereços LDIF Agendă LDIF Адресная книга LDIF Adresár LDIF @@ -34783,33 +36074,35 @@ LDIF adres defteri адресна книга LDIF Sổ địa chỉ LDIF - LDIF 地址簿 - LDIF 通訊錄 + LDIF 地址簿 + LDIF 通訊錄 LDIF LDAP Data Interchange Format - - + + Lilypond music sheet + Lilypond-musiekblad صفحة موسيقى Lilypond - Muzyčny arkuš Lilypond + Muzyčny arkuš Lilypond Нотация на Lilypond full de música Lilypond notový papír Lilypond Lilypondmusikkort Lilypond-Notenblatt Παρτιτούρα Lilypond - Lilypond music sheet + Lilypond music sheet partitura de LilyPond Lilypond musika-orria Lilypond-nuotit Lilypond tónleika ark partition musicale Lilypond + spartît Lilypond bileog cheoil Lilypond folla de música de Lilypond דף מוזיקה של Lilypond @@ -34828,7 +36121,7 @@ particion musicala Lilypond Plik partytury Lilypond folha de música Lilypond - Partitura do Lilypond + Partitura do Lilypond Fișă muzică Lilypond Список музыки Lilypond Notový papier Lilypond @@ -34839,28 +36132,30 @@ Lilypond müzik sayfası нотний запис Lilypond Bản nhạc Lilypond - Lilypond 乐谱 - Lilypond 樂譜 + Lilypond 乐谱 + Lilypond 樂譜 LHS source code + LHS-bronkode شفرة مصدر LHS - Kryničny kod LHS - Изходен код на LHS + Kryničny kod LHS + Изходен код — LHS codi font en LHS zdrojový kód LHS LHS-kildekode LHS-Quelltext Πηγαίος κώδικας LHS - LHS source code + LHS source code LHS-fontkodo código fuente en LHS LHS iturburu-kodea LHS-lähdekoodi LHS keld code source LHS + codiç sorzint LHS cód foinseach LHS código fonte en LHS קוד מקור של LHS @@ -34880,7 +36175,7 @@ còde font LHS Kod źródłowy LHS código origem LHS - Código-fonte LHS + Código-fonte LHS Cod sursă LHS Исходный код LHS Zdrojový kód LHS @@ -34891,8 +36186,8 @@ LHS kaynak kodu вихідний код LHS Mã nguồn LHS - LHS 源代码 - LHS 源碼 + LHS 源代码 + LHS 源碼 LHS Literate Haskell source code @@ -34902,20 +36197,21 @@ application log سجل التطبيق rexistru d'aplicación - časopis aplikacyi - Файл-дневник на приложение + časopis aplikacyi + Журнал със съобщения registre d'aplicació záznam aplikace programlog Anwendungsprotokoll Καταγραφή εφαρμογή - application log + application log protokolo de aplikaĵo registro de aplicación aplikazio egunkaria sovelluksen lokitiedosto nýtsluskipan logg journal d'application + regjistri aplicazion logchomhad feidhmchláir rexistro de aplicativo יומן יישום @@ -34936,7 +36232,7 @@ jornal d'aplicacion Dziennik programu diário de aplicação - Registro de aplicativo + Registro de aplicativo înregistrare aplicație Журнал сообщений Záznam aplikácie @@ -34947,64 +36243,36 @@ uygulama günlüğü журнал програми bản ghi ứng dụng - 应用程序日志 - 程式紀錄檔 + 应用程序日志 + 程式紀錄檔 - Makefile - ملف Makefile - İnşa faylı - Makefile - Файл — make - Makefile - Makefile - Ffeil "make" - Bygningsfil - Makefile - Makefile - Makefile - Muntodosiero - Makefile - Makefile - Makefile - Makefile - makefile - Makefile - Makefile - Makefile - Makefile - Makefile - Makefile - Makefile - Makefile - Makefile - Makefile - Makefile (жинау файлы) - Makefile - Makefile - Makefile - Makefile - Makefile - Makefile - Makefile - makefile - Plik make - Makefile - Makefile (arquivo do make) - Makefile - Файл Makefile - Makefile - Datoteka Makefile - Makefile - датотека стварања - Makefil - Makefile - файл проекту make - Tập tin tạo ứng dụng (Makefile) - Makefile - Makefile + Makefile build file + Проект — Makefile + fitxer de construcció Makefile + Makefile build-fil + Makefile Build-Datei + Makefile build file + archivo de generación Makefile + Makefile build fitxategia + Makefile rakennustiedosto + fichier de construction Makefile + Makefile datoteka izgradnje + Makefile összeállítási fájl + Berkas build Makefile + File compilazione Makefile + Makefile құрастыру файлы + Makefile 빌드 파일 + Plik budowania Makefile + Arquivo de compilação Makefile + Сборочный файл Makefile + Súbor zostavenia Makefile + Makefile-byggfil + Makefile derleme dosyası + файл збирання Makefile + Makefile 构建文件 @@ -35012,12 +36280,13 @@ - - + + Markdown document + Markdown-dokument Documentu Markdown Документ — Markdown document Markdown @@ -35025,11 +36294,12 @@ Markdown-dokument Markdown-Dokument Έγγραφο Markdown - Markdown document + Markdown document documento Markdown Markdown dokumentua Markdown-asiakirja document Markdown + document Markdown cáipéis Markdown documento de Markdown מסמך Markdown @@ -35046,7 +36316,7 @@ document Markdown Dokument Markdown documento Markdown - Documento Markdown + Documento Markdown Документ Markdown Dokument Markdown Dokument Markdown @@ -35054,8 +36324,8 @@ Markdown-dokument Markdown belgesi документ Markdown - Markdown 文档 - Markdown 文件 + Markdown 文档 + Markdown 文件 @@ -35065,19 +36335,20 @@ Qt MOC file ملف Qt MOC - Fajł Qt MOC + Fajł Qt MOC Файл — Qt MOC fitxer MOC de Qt soubor Qt MOC Qt MOC-fil Qt-MOC-Datei Αρχείο Qt MOC - Qt MOC file + Qt MOC file archivo MOC Qt Qt MOC fitxategia Qt MOC -tiedosto Qt MOC fíla fichier Qt MOC + file Qt MOC comhad MOC Qt ficheiro MOC Qt קובץ Qt MOC @@ -35097,7 +36368,7 @@ fichièr Qt MOC Plik Qt MOC ficheiro Qt MOC - Arquivo Qt MOC + Arquivo Qt MOC Fișier Qt MOC Файл Qt MOC Súbor Qt MOC @@ -35108,8 +36379,8 @@ Qt MOC dosyası файл-метаоб'єкт Qt Tập tin MOC của Qt - Qt 元对象编译器文件 - Qt MOC 檔 + Qt 元对象编译器文件 + Qt MOC 檔 Qt MOC Qt Meta Object Compiler @@ -35117,20 +36388,22 @@ Windows Registry extract + Windows-registerlêeruittreksel استخراج مسجل ويندوز - Element rehistru Windows + Element rehistru Windows Извадка от регистъра на Windows extracte de Windows Registry výtah registru Windows - Windows Registy-udtrækning + Windows registreringsdatabase-udtrækning Windows-Registry-Auszug Αποσυμπίεση Windows Registry - Windows Registry extract + Windows Registry extract extracto del registro de Windows Windows-eko erregistro erauzlea Windows-rekisteritietue Windows Registry úrdráttur extrait de registre Windows + estrat dal regjistri di Windows sliocht as Clárlann Windows Extracto do rexistro de Windows קובץ רשומות מערכת של Windows @@ -35150,7 +36423,7 @@ extrait de registre Windows Wycinek rejestru Windows extrato do registo do Windows - Extrator de registro do Windows + Extrator de registro do Windows Extras al registrului Windows Фрагмент Windows Registry Časť registrov Windows @@ -35161,138 +36434,99 @@ Windows Kayıt Defteri özü частина реєстру Windows Bản trích Registry Windows - Windows 注册表提取 - Windows Registry 抽出 + Windows 注册表提取 + Windows Registry 抽出 - - - + + + - Managed Object Format - صيغة كائن مدار - Farmat Managed Object - Управлявани обекти — MOF - format d'objecte gestionat - Managed Object Format - Håndteret objektformat - Managed Object Format - Μορφή διαχειριζόμενου αντικειμένου - Managed Object Format - formato de objeto gestionado - Kudeatutako objektu formatua - Managed Object Format - format Managed Object - formáid réada bainistithe - formato de obxecto xestionado - תבנית פריט מנוהל - Managed Object Format - Felügyelt objektum (MO) formátum - File in formato Managed Object - Managed Object Format - Managed Object Format - 管理オブジェクトフォーマット - Басқарылатын объект пішімі - 관리되는 객체 형식 - Sutvarkytų objektų formatas - Pārvaldītu objektu formāts - Managed Object Format - Managed Object Format - Managed Object Format - format Managed Object - Plik Managed Object Format - formato Managed Object - Formato de objeto gerenciado - Managed Object Format - Формат управляемого объекта - Formát Managed Object - Datoteka Managed Object - Managed Object Format - запис управљаног објекта - Managed Object Format - Yönetilen Nesne Biçimi - формат керування об’єктами - Định dạng Đối tượng đã Quản lý - 托管对象格式 - Managed Object Format + MOF file + Модел — MOF + fitxer MOF + MOF-fil + MOF-Datei + MOF file + archivo MOF + MOF fitxategia + MOF-tiedosto + fichier MOF + MOF datoteka + MOF fájl + Berkas MOF + File MOF + MOF файлы + MOF 파일 + Plik MOF + Arquivo MOF + Файл MOF + Súbor MOF + Datoteka MOF + MOF-fil + MOF dosyası + файл MOF + MOF 文件 + MOF 檔 + MOF + Windows Managed Object File - Mup publication - منشور Mup - Publikacyja Mup - Издание — Mup - publicació Mup - publikace Mup - Mupudgivelse - Mup-Veröffentlichung - Δημοσίευση Mup - Mup publication - publicación Mup - Mup publikazioa - Mup-julkaisu - Mup útgáva - publication Mup - foilseachán Mup - publicación Mup - פרסום של Mup - Mup publikacija - Mup publikáció - Publication Mup - Publikasi Mup - Pubblicazione Mup - Mup 出版ファイル - Mup жариялымы - Mup 출판물 - Mup leidinys - Mup publikācija - Mup publikasjon - Mup-publicatie - Mup-publikasjon - publication Mup - Publikacja Mup - publicação Mup - Publicação do Mup - Publicație Mup - Публикация Mup - Publikácie Mup - Datoteka objave Mup - Publikim Mup - Муп објава - Mup-publicering - Mup uygulaması - публікація Mup - Bản xuất Mup - Mup 应用程序 - Mup 出版品 + Mup musical composition document + Музикална композиция — Mup + document de composició musical Mup + Mup-musiksamling-dokument + Mup-Musikkompositions-Dokument + Mup musical composition document + documento de composición musical de Mup + Mup konposizio musikal dokumentua + Mup-sävellysdokumentti + document de composition musicale Mup + Mup dokument glazbene kompozicije + Mup zenei kompozíciós dokumentum + Dokumen komposisi musik Mup + Documento composizione musicale Mup + Mup музыкалық композиция құжаты + mup 작곡 문서 + Dokument kompozycji muzycznej Mup + Documento de composição musical Mup + Dokument hudobnej kompozície Mup + Mup musikkompositionsdokument + Mup musical composition belgesi + документ музичного запису твору Mup + Mup 乐曲文档 + Mup 音樂組合文件 - + Objective-C source code + Objective-C-bronkode شفرة مصدر الهدف-C - Kryničny kod Objective-C + Kryničny kod Objective-C Изходен код — Objective C codi font en Objective-C zdrojový kód v jazyce Objective-C Objektiv C-kildekode Objective-C-Quelltext Πηγαίος κώδικας Objective-C - Objective-C source code + Objective-C source code fontkodo en Objective-C código fuente en Objective-C Objective-C iturburu-kodea Objective-C-lähdekoodi Objective-C keldukota code source Objective-C + codiç sorzint Objective-C cód foinseach Objective-C código fonte de Objective-C קוד מקור של Objective-C @@ -35314,7 +36548,7 @@ còde font Objective-C Kod źródłowy Objective-C código origem Objective-C - Código-fonte Objective-C + Código-fonte Objective-C Cod sursă Objective-C Исходный код Objective-C Zdrojový kód Objective-C @@ -35325,31 +36559,33 @@ Objective-C kaynak kodu вихідний код мовою Objective-C Mã nguồn Objective-C - Objective-C 源代码 - Objective-C 源碼 + Objective-C 源代码 + Objective-C 源碼 - + OCaml source code + OCaml-bronkode شفرة مصدر OCaml - Kryničny kod OCaml + Kryničny kod OCaml Изходен код — OCaml codi font en OCaml zdrojový kód v jazyce OCaml OCaml-kildekode OCaml-Quelltext Πηγαίος κώδικας OCaml - OCaml source code + OCaml source code OCaml-fontkodo código fuente en OCaml OCaml iturburu-kodea OCaml-lähdekoodi OCaml keldukota code source OCaml + codiç sorzint OCaml cód foinseach OCaml código fonte de OCaml קוד מקור של OCaml @@ -35369,7 +36605,7 @@ còde font OCaml Kod źródłowy OCaml código origem OCaml - Código-fonte OCaml + Código-fonte OCaml Cod sursă OCaml Исходный код OCaml Zdrojový kód OCaml @@ -35380,19 +36616,26 @@ OCaml kaynak kodu первинний код мовою OCaml Mã nguồn OCaml - OCaml 源代码 - OCaml 源碼 + OCaml 源代码 + OCaml 源碼 OpenCL source code + OpenCL-bronkode + Изходен код — OpenCL codi font en OpenCL zdrojový kód v jazyce OpenCL + OpenCL-kildekode OpenCL-Quelltext - OpenCL source code + OpenCL source code código fuente en OpenCL + OpenCL iturburu-kodea OpenCL-lähdekoodi + code source OpenCL + codiç sorzint OpenCL + cód foinseach OpenCL OpenCL izvorni kôd OpenCL forráskód Kode sumber OpenCL @@ -35400,91 +36643,75 @@ OpenCL бастапқы коды OpenCL 소스 코드 Kod źródłowy OpenCL - Código-fonte do OpenCL + Código-fonte OpenCL Исходный код OpenGL Zdrojový kód OpenCL + Izvorna koda OpenCL OpenCL-källkod + OpenCL kaynak kodu вихідний код мовою OpenCL - OpenCL 源代码 - OpenCL 源碼 + OpenCL 源代码 + OpenCL 源碼 OpenCL Open Computing Language - MATLAB script/function - سكربت/وظيفة MATLAB - Skrypt/funkcyja MATLAB - Скрипт/функция — MATLAB - script/funció MATLAB - skript/funkce MATLAB - MATLAB-program/-funktion - MATLAB-Skript/-Funktion - Δέσμη ενεργειών/συνάρτηση MATLAB - MATLAB script/function - secuencia de órdenes/función de MATLAB - MATLAB script/funtzioa - MATLAB-komentotiedosto/funktio - MATLAB boðrøð/funka - script/fonction MATLAB - script/feidhm MATLAB - función/script de MATLAB - תסריט/פונקציית MATLAB - MATLAB skripta/funkcija - MATLAB parancsfájl/funkció - Script/function MATLAB - Skrip/fungsi MATLAB - Script/Funzione MATLAB - MATLAB スクリプト/関数 - MATLAB сценарий/функциясы - MATLAB 스크립트/함수 - MATLAB scenarijus / funkcija - MATLAB skripts/funkcija - Skript/funksjon for MATLAB - MATLAB-script/functie - MATLAB-skript/funksjon - escript/fonction MATLAB - Skrypt/funkcja MATLAB - script/função MATLAB - Script/função do MATLAB - Funcție/script MATLAB - Сценарий/функция MATLAB - Skript/funkcia MATLAB - Skriptna datoteka MATLAB - Script/Funksion MATLAB - скрипта/функција МАТЛАБ-а - MATLAB-skript/funktion - MATLAB betiği/fonksiyonu - скрипт/функція MATLAB - Văn lệnh/chức năng MATLAB - MATLAB 脚本/函数 - MATLAB 指令稿/函式 + MATLAB file + Файл — MATLAB + fitxer MATLAB + MATLAB-fil + MATLAB-Datei + MATLAB file + archivo de MATLAB + MATLAB fitxategia + MATLAB-tiedosto + fichier MATLAB + MATLAB datoteka + MATLAB fájl + Berkas MATLAB + File MATLAB + MATLAB файлы + MATLAB 파일 + Plik MATLAB + Arquivo do MATLAB + Файл MATLAB + Súbor MATLAB + Datoteka MATLAB + MATLAB-fil + MATLAB dosyası + файл MATLAB + MATLAB 文件 + MATLAB 檔 - + - + - + Meson source code + Meson-bronkode + Изходен код — Meson codi font en Meson zdrojový kód Meson Meson-kildekode Meson-Quelltext Πηγαίος κώδικας Meson - Meson source code + Meson source code código fuente en Meson Meson iturburu-kodea Meson-lähdekoodi code source Meson + codiç sorzint Meson cód foinseach Meson קוד מקור Meson Meson izvorni kôd @@ -35497,31 +36724,35 @@ còde font Meson Kod źródłowy Meson código origem Meson - Código-fonte Meson + Código-fonte Meson Исходный код Meson Zdrojový kód Meson + Izvorna koda Meson Месон изворни ко̂д Meson-källkod Meson kaynak kodu вихідний код мовою Meson - Meson 源代码 - Meson 源碼 + Meson 源代码 + Meson 源碼 Modelica model + Modelica-model + Модел — Modelica model de Modelica model Modelica Modelica-model Modelica-Modell Μοντέλο Modelica - Modelica model + Modelica model modelo de Modelica Modelica modeloa Modelica-malli modèle Modelica + model Modelica samhail Modelica Modelo de Modelica דגם של Modelica @@ -35537,7 +36768,7 @@ modèl Modelica Model Modelica modelo Modelica - Modelo da Modelica + Modelo da Modelica Модель Modelica Model Modelica Model Modelica @@ -35545,43 +36776,45 @@ Modelica-modell Modelica modeli модель Modelica - Modelica 模型 - Modelica 模型 + Modelica 模型 + Modelica 模型 - + - + - + - + - + Pascal source code + Pascal-bronkode شفرة مصدر باسكال - Kryničny kod Pascal + Kryničny kod Pascal Изходен код — Pascal codi font en Pascal zdrojový kód v jazyce Pascal - Pascalkildekode + Pascal-kildekode Pascal-Quelltext Πηγαίος κώδικας Pascal - Pascal source code + Pascal source code Pascal-fontkodo código fuente en Pascal Pascal iturburu-kodea Pascal-lähdekoodi Pascal keldukota code source Pascal + codiç sorzint Pascal cód foinseach Pascal código fonte en Pascal קוד מקור של Pascal @@ -35602,7 +36835,7 @@ còde font Pascal Kod źródłowy Pascal código origem Pascal - Código-fonte Pascal + Código-fonte Pascal Cod sursă Pascal Исходный код Pascal Zdrojový kód Pascal @@ -35613,29 +36846,31 @@ Pascal kaynak kodu вихідний код мовою Pascal Mã nguồn Pascal - Pascal 源代码 - Pascal 源碼 + Pascal 源代码 + Pascal 源碼 differences between files + verskille tussen lêers الاختلافات بين الملفات - adroźnieńni pamiž fajłami + adroźnieńni pamiž fajłami Разлики между файлове diferències entre fitxers rozdíly mezi soubory forskel mellem filer Unterschiede zwischen Dateien Διαφορές μεταξύ αρχείων - differences between files + differences between files diferencoj inter dosieroj diferencias entre archivos fitxategien arteko ezberdintasunak tiedostojen väliset erot munur millum fílur différences entre fichiers + diferencis tra file difríochtaí idir chomhaid diferenzas entre ficheiros הבדל בין קבצים @@ -35656,7 +36891,7 @@ différences entre fichièrs Różnica pomiędzy plikami diferenças entre ficheiros - Diferenças entre arquivos + Diferenças entre arquivos diferențe între fișiere Различия между файлами Rozdiely medzi súbormi @@ -35667,39 +36902,41 @@ dosyalar arasındaki fark різниця між файлами khác biệt giữa các tập tin - 文件的区别 - 檔案內容差異 + 文件的区别 + 檔案內容差異 - - - - - - - - - - + + + + + + + + + + Go source code + Go-bronkode Изходен код — Go codi font en Go zdrojový kód v jazyce Go Go-kildekode Go-Quelltext Πηγαίος κώδικας Go - Go source code + Go source code Go-fontkodo código fuente en Go Go iturburu-kodea Go-lähdekoodi code source Go + codiç sorzint Go cód foinseach Go código fonte de Go קוד מקור של Go @@ -35717,7 +36954,7 @@ còde font Go Kod źródłowy Go cigo origem Go - Código-fonte Go + Código-fonte Go Исходный код Go Zdrojový kód Go Izvorna koda Go @@ -35725,23 +36962,26 @@ Go-källkod Go kaynak kodu вихідний код мовою Go - Go 源代码 - Go 源碼 + Go 源代码 + Go 源碼 SCons configuration file + SCons-opstellingslêer + Настройки — SCons fitxer de configuració de SCons konfigurační soubor SCons SCons-konfigurationsfil SCons-Konfigurationsdatei Αρχείο ρυθμίσεων SCons - SCons configuration file + SCons configuration file archivo de configuración de SCons SCons konfigurazio-fitxategia SCons-asetustiedosto fichier de configuration SCons + file di configurazion SCons comhad cumraíochta SCons קובץ תצורה של SCons SCons datoteka podešavanja @@ -35754,7 +36994,7 @@ fichièr de configuracion SCons Plik konfiguracji SCons ficheiro de configuração SCons - Arquivo de configuração do SCons + Arquivo de configuração do SCons Файл настроек SCons Konfiguračný súbor SCons Prilagoditvena datoteka SCons @@ -35762,8 +37002,8 @@ SCons-konfigurationsfil SCons yapılandırma dosyası файл налаштувань SCons - SCons 配置文件 - SCons 組態檔 + SCons 配置文件 + SCons 組態檔 @@ -35771,12 +37011,19 @@ Python 3 script + Python 3-skrip + Скрипт — Python 3 script Python 3 skript v jazyce Python 3 + Python 3-program Python-3-Skript - Python 3 script + Python 3 script secuencia de órdenes en Python 3 + Python 3 script-a Python 3 -skripti + script Python 3 + script Python 3 + script Python 3 Python3 skripta Python 3 parancsfájl Skrip Python 3 @@ -35784,47 +37031,51 @@ Python 3 скрипті 파이썬 3 스크립트 Skrypt Python 3 - Script Python 3 + Script Python 3 Сценарий Python 3 Skript Python 3 + Skript Python 3 Python 3-skript + Python 3 betiği скрипт мовою Python 3 - Python 3 脚本 - Python 3 指令稿 - - - - - - - - - - - - - - - - + Python 3 脚本 + Python 3 指令稿 + + + + + + + + + + + + + + + + Python script + Python-skrip سكربت بايثون - Skrypt Python + Skrypt Python Скрипт — Python script Python skript v jazyce Python - Pythonprogram + Python-program Python-Skript Δέσμη ενεργειών Python - Python script + Python script Python-skripto secuencia de órdenes en Python Python script-a Python-komentotiedosto Python boðrøð script Python + script Python script Python Script en Python תסריט Python @@ -35845,7 +37096,7 @@ escript Python Skrypt Python script Python - Script Python + Script Python Script Python Сценарий Python Skript Python @@ -35856,43 +37107,56 @@ Python betiği скрипт мовою Python Văn lệnh Python - Python 脚本 - Python 指令稿 - + Python 脚本 + Python 指令稿 + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + SageMath script + script SageMath + SageMath skripti + Script SageMath + Skrypt SageMath + Script SageMath + скрипт SageMath + + Lua script + Lua-skrip سكربت Lua - Skrypt Lua + Skrypt Lua Скрипт на Lua script Lua skript v jazyce Lua - Luaprogram + Lua-program Lua-Skript Δέσμη ενεργειών Lua - Lua script + Lua script Lua-skripto secuencia de órdenes en Lua Lua script-a Lua-komentotiedosto Lua boðrøð script Lua + script Lua script Lua script de Lua תסריט Lua @@ -35912,7 +37176,7 @@ escript Lua Skrypt Lua script Lua - Script Lua + Script Lua Script Lua Сценарий Lua Skript Lua @@ -35923,24 +37187,25 @@ Lua betiği скрипт Lua Văn lệnh Lua - Lua 脚本 - Lua 指令稿 - + Lua 脚本 + Lua 指令稿 + - - - - + + + + README document + README-dokument مستند README Documentu LLEIME README sənədi - Dakument README + Dakument README Документ — „Да се прочете“ document README dokument README @@ -35948,13 +37213,14 @@ README-dokument README-Dokument Έγγραφο README - README document + README document README-dokumento documento README README dokumentua LUEMINUT-asiakirja README skjal document LISEZ-MOI + document README cáipéis README documento README מסמך README @@ -35975,7 +37241,7 @@ document LISEZ-MOI Dokument README documento LEIA-ME - Documento README + Documento README Document README Документ README Dokument README @@ -35983,32 +37249,34 @@ Dokument README документ ПРОЧИТАЈМЕ README-dokument - BENİOKU belgesi + README belgesi документ README Tài liệu Đọc Đi (README) - README 文档 - README 說明文件 + README 文档 + README 說明文件 NFO document + NFO-dokument مستند NFO Documentu NFO - Dakument NFO + Dakument NFO Документ — NFO document NFO dokument NFO NFO-dokument NFO-Dokument Έγγραφο NFO - NFO document + NFO document NFO-dokumento documento NFO NFO dokumentua NFO-asiakirja NFO skjal document NFO + document NFO cáipéis NFO documento NFO מסמך NFO @@ -36028,7 +37296,7 @@ document NFO Dokument NFO documento NFO - Documento NFO + Documento NFO Document NFO Документ NFO Dokument NFO @@ -36039,27 +37307,29 @@ NFO belgesi документ NFO Tài liệu NFO - NFO 文档 - NFO 文件 + NFO 文档 + NFO 文件 RPM spec file + RPM-spesifikasielêer ملف مواصفات RPM - Specyfikacyjny fajł RPM + Specyfikacyjny fajł RPM Файл — спецификация за RPM fitxer spec RPM soubor specifikace RPM RPM spec-fil RPM-Spezifikationsdatei Αρχείο spec RPM - RPM spec file + RPM spec file archivo de especificaciones RPM RPM espezifikazio fitxategia RPM spec -tiedosto RPM tøknilýsingarfíla fichier de spécification RPM + file di specifiche RPM comhad spec RPM ficheiro de especificacións RPM קובץ מפרט RPM @@ -36079,7 +37349,7 @@ fichièr d'especificacion RPM Plik spec RPM ficheiro de especificações RPM - Arquivo de especificação RPM + Arquivo de especificação RPM Fișier RPM spec Файл описания RPM Súbor RPM spec @@ -36090,61 +37360,70 @@ RPM spec dosyası spec-файл RPM Tập tin đặc tả RPM - RPM spec 文件 - RPM spec 規格檔 + RPM spec 文件 + RPM spec 規格檔 RPM Red Hat Package Manager - - + + Sass CSS pre-processor file + Sass CSS-voorverwerkerlêer + Директиви за препроцесора — Sass CSS fitxer preprocessador CSS Sass soubor preprocesoru Sass CSS - Sass CSS-forbrænderfil + Sass CSS pre-processor-fil Sass-CSS-Präprozessordatei - Sass CSS pre-processor file + Sass CSS pre-processor file archivo de preprocesador de CSS Sass + Sass CSS fitxategi prozesatu gabea + Sass CSS pre-processor -tiedosto fichier de prétraitement CSS Sass + file di pre-elaborazion di CSS Sass comhad réamhphróiseálaí CSS Sass קובץ קדם עיבוד Sass CSS Sass CSS datoteka predobrade Sass CSS előfeldolgozó fájl - berkas pre-processor Sass CSS + Berkas pre-processor Sass CSS File CSS Sass Sass CSS препроцессор файлы Sass CSS 전처리기 파일 Plik preprocesora CSS Sass - Arquivo de pré-processamento Sass CSS + Arquivo de pré-processamento Sass CSS Файл препроцессора Sass CSS Súbor Sass CSS pre-procesora датотека Сас ЦСС пре-процесора Sass CSS-preprocessorfil Sass CSS önişlemci dosyası файл препроцесора CSS Sass - Sass CSS 预处理器文件 - Sass CSS 處理器前檔案 + Sass CSS 预处理器文件 + Sass CSS 處理器前檔案 + Sass + Syntactically Awesome Style Sheets Scala source code + Scala-bronkode Изходен код — Scala codi font en Scala zdrojový kód Scala Scala-kildekode Scala-Quelltext Πηγαίος κώδικας Scala - Scala source code + Scala source code código fuente en Scala Scala iturburu-kodea Scala-lähdekoodi code source Scala + codiç sorzint Scala cód foinseach Scala código fnote en Scala קוד מקור של Scala @@ -36162,7 +37441,7 @@ còde font Scala Kod źródłowy Scala código origem Scala - Código-fonte Scala + Código-fonte Scala Исходный код Scala Zdrojový kód Scala Izvorna koda Scala @@ -36170,30 +37449,32 @@ Scala-källkod Scala kaynak kodu вихідний код мовою Scala - Scala 源代码 - Scala 源碼 + Scala 源代码 + Scala 源碼 Scheme source code + Scheme-bronkode شفرة مصدر Scheme Sxem mənbə kodu - Kryničny kod Scheme + Kryničny kod Scheme Изходен код — Scheme codi font en Scheme zdrojový kód Scheme Ffynhonnell Rhaglen Scheme - Schemekildekode + Scheme-kildekode Scheme-Quelltext Πηγαίος κώδικας Scheme - Scheme source code + Scheme source code Scheme-fontkodo código fuente en Scheme Scheme iturburu-kodea Scheme-lähdekoodi Scheme keldukota code source Scheme + codiç sorzint Scheme cód foinseach Scheme código fonte en Scheme קוד מקור של Scheme @@ -36214,7 +37495,7 @@ còde font Scheme Kod źródłowy Scheme código origem Scheme - Código-fonte Scheme + Código-fonte Scheme Cod sursă Scheme Исходный код Scheme Zdrojový kód Scheme @@ -36225,49 +37506,50 @@ Scheme kaynak kodu вихідний файл мовою Scheme Mã nguồn Scheme - Scheme 源代码 - Scheme 源碼 + Scheme 源代码 + Scheme 源碼 - Sass CSS pre-processor file - fitxer preprocessador CSS Sass - soubor preprocesoru Sass CSS - Sass CSS-forbrænderfil - Sass-CSS-Präprozessordatei - Sass CSS pre-processor file - archivo de preprocesador de CSS Sass - fichier de prétraitement CSS Sass - comhad réamhphróiseálaí CSS Sass - קובץ קדם עיבוד Sass CSS - Sass CSS datoteka predobrade - Sass CSS előfeldolgozó fájl - berkas pre-processor Sass CSS - File CSS Sass - Sass CSS препроцессор файлы - Sass CSS 전처리기 파일 - Plik preprocesora CSS Sass - Arquivo de pré-processamento Sass CSS - Файл препроцессора Sass CSS - Súbor Sass CSS pre-procesora - датотека Сас ЦСС пре-процесора - Sass CSS-preprocessorfil - Sass CSS önişlemci dosyası - файл препроцесора CSS Sass - Sass CSS 预处理器文件 - Sass CSS 處理器前檔案 + SCSS pre-processor file + Директиви за препроцесора — SCSS + fitxer preprocessador SCSS + SCSS pre-processor-fil + SCSS-Präprozessordatei + SCSS pre-processor file + archivo de preprocesador SCSS + SCSS fitxategi prozesatu gabea + SCSS pre-processor -tiedosto + fichier de prétraitement SCSS + SCSS datoteka predobrade + SCSS előfeldolgozófájl + Berkas preprosesor SCSS + File SCSS + SCSS препроцессор файлы + SCSS 전처리 파일 + Plik preprocesora SCSS + Arquivo de pré-processamento SCSS + Файл препроцессора SCSS + SCSS förprocessorfil + SCSS ön işleyici dosyası + файл засобу попередньої обробки SCSS + SCSS 预处理文件 + SCSS 前處理器檔 + SCSS + Sassy CSS Setext document + Setext-dokument مستند Setext Documentu Setext Setext sənədi - Dakument Setext + Dakument Setext Документ — Setext document Setext dokument Setext @@ -36275,13 +37557,14 @@ Setextdokument Setext-Dokument Έγγραφο Setext - Setext document + Setext document Setext-dokumento documento Setext Setext dokumentua Setext-asiakirja Setext skjal document Setext + document Setext cáipéis Setext documento Settext מסמך של Setext @@ -36302,7 +37585,7 @@ document Setext Dokument Setext documento Setext - Documento Setext + Documento Setext Document Setext Документ Setext Dokument Setext @@ -36313,16 +37596,17 @@ Setext belgesi документ Setext Tài liệu Setext - Setext 文档 - Setext 文件 + Setext 文档 + Setext 文件 SQL code + SQL-kode شفرة SQL SQL kodu - Kod SQL + Kod SQL Код — SQL codi en SQL kód SQL @@ -36330,13 +37614,14 @@ SQL-kode SQL-Befehle Κώδικας SQL - SQL code + SQL code SQL-kodo código SQL SQL kodea SQL-koodi SQL kota code SQL + codiç SQL cód SQL código SQL קוד SQL @@ -36357,7 +37642,7 @@ còde SQL Kod SQL código SQL - Código SQL + Código SQL Cod SQL Код SQL Kód SQL @@ -36368,29 +37653,31 @@ SQL kodu код SQL Mã SQL - SQL 代码 - SQL 程式碼 + SQL 代码 + SQL 程式碼 - + Tcl script + Tcl-skrip سكربت Tcl - Skrypt Tcl + Skrypt Tcl Скрипт — Tcl script Tcl skript Tcl Tcl-program Tcl-Skript Δέσμη ενεργειών Tcl - Tcl script + Tcl script Tcl-skripto secuencia de órdenes en Tcl Tcl script-a Tcl-komentotiedosto Tcl boðrøð script Tcl + script Tcl script Tcl Script en Tcl תסריט Tcl @@ -36411,7 +37698,7 @@ escript Tcl Skrypt Tcl script Tcl - Script Tcl + Script Tcl Script Tcl Сценарий Tcl Skript Tcl @@ -36422,17 +37709,19 @@ Tcl betiği скрипт Tcl Văn lệnh Tcl - Tcl 脚本 - Tcl 描述語言檔 + Tcl 脚本 + Tcl 描述語言檔 + TeX document + TeX-dokument مستند TeX Documentu TeX - Dakument TeX + Dakument TeX Документ — TeX document TeX dokument TeX @@ -36440,13 +37729,14 @@ TeX-dokument TeX-Dokument Έγγραφο TeX - TeX document + TeX document TeX-dokumento documento de TeX TeX dokumentua TeX-asiakirja TeX skjal document TeX + document TeX cáipéis TeX documenton TeX מסמך TeX @@ -36467,7 +37757,7 @@ document TeX Dokument TeX documento TeX - Documento TeX + Documento TeX Document TeX Документ TeX Dokument TeX @@ -36478,8 +37768,8 @@ TeX belgesi документ TeX Tài liệu TeX - TeX 文档 - TeX 文件 + TeX 文档 + TeX 文件 @@ -36490,18 +37780,19 @@ - + - + TeXInfo document + TeXInfo-dokument مستند TeXInfo Documentu TeXInfo TeXInfo sənədi - Dakument TeXInfo + Dakument TeXInfo Документ — TeXInfo document TeXInfo dokument TeXInfo @@ -36509,13 +37800,14 @@ TeXInfo-dokument TeXInfo-Dokument Έγγραφο TeXInfo - TeXInfo document + TeXInfo document TeXInfo-dokumento documento de TeXInfo TeXInfo dokumentua TeXInfo-asiakirja TeXInfo skjal document TeXInfo + document TeXInfo cáipéis TeXInfo documento TeXInfo מסמך של TeXInfo @@ -36536,7 +37828,7 @@ document TeXInfo Dokument TeXInfo documento TeXInfo - Documento TeXInfo + Documento TeXInfo Document TexInfo Документ TeXInfo Dokument TeXInfo @@ -36547,30 +37839,32 @@ TeXInfo belgesi документ TeXInfo Tài liệu TeXInfo - TeXInfo 文档 - TeXInfo 文件 + TeXInfo 文档 + TeXInfo 文件 Troff ME input document + Troff ME-toevoerdokument مستند Troff ME input Documentu d'entrada de Troff ME - Uvodny dakument Troff ME + Uvodny dakument Troff ME Изходен документ — Troff ME document d'entrada Troff ME vstupní dokument Troff ME Troff ME inddata-dokument Troff-ME-Eingabedokument Έγγραφο εντολών troff ME - Troff ME input document + Troff ME input document eniga dokumento de Troff ME documento de entrada Troff ME Troff ME sarrerako dokumentua Troff ME -syöteasiakirja Troff ME inntaksskjal document d'entrée Troff ME + document di jentrade Troff ME cáipéis ionchurtha Troff ME documento de entrada Troff ME מסמך קלט של Troff ME @@ -36591,7 +37885,7 @@ document d'entrada Troff ME Dokument wejściowy Troff ME documento origem Troff ME - Documento de entrada Troff ME + Documento de entrada Troff ME Document intrare Troff ME Входной документ Troff ME Vstupný dokument Troff ME @@ -36602,29 +37896,31 @@ Troff ME girdi belgesi вхідний документ Troff ME Tài liệu nhập ME Troff - Troff ME 输入文档 - Troff ME 輸入文件 + Troff ME 输入文档 + Troff ME 輸入文件 Troff MM input document + Troff MM-toevoerdokument مستند Troff MM input Documentu d'entrada de Troff MM - Uvodny dakument Troff MM + Uvodny dakument Troff MM Изходен документ — Troff MM document d'entrada Troff MM vstupní dokument Troff MM Troff MM inddata-dokument Troff-MM-Eingabedokument Έγγραφο εντολών troff MM - Troff MM input document + Troff MM input document eniga dokumento de Troff MM documento de entrada Troff MM Troff MM sarrerako dokumentua Troff MM -syöteasiakirja Troff MM inntaksskjal document d'entrée Troff MM + document di jentrade Troff MM cáipéis ionchurtha Troff MM documento de entrada Troff MM מסמך קלט של Troff MM @@ -36645,7 +37941,7 @@ document d'entrada Troff MM Dokument wejściowy Troff MM documento origem Troff MM - Documento de entrada Troff MM + Documento de entrada Troff MM Document intrare Troff MM Входной документ Troff MM Vstupný dokument Troff MM @@ -36656,29 +37952,31 @@ Troff MM girdi belgesi вхідний документ Troff MM Tài liệu nhập MM Troff - Troff MM 输入文档 - Troff MM 輸入文件 + Troff MM 输入文档 + Troff MM 輸入文件 Troff MS input document + Troff MS-toevoerdokument مستند Troff MS input Documentu d'entrada de Troff MS - Uvodny dakument Troff MS + Uvodny dakument Troff MS Изходен документ — Troff MS document d'entrada Troff MS vstupní dokument Troff MS Troff MS inddata-dokument Troff-MS-Eingabedokument Έγγραφο εντολών troff MS - Troff MS input document + Troff MS input document eniga dokumento de Troff MS documento de entrada Troff MS Troff MS sarrerako dokumentua Troff MS -syöteasiakirja Troff MS inntaksskjal document d'entrée Troff MS + document di jentrade Troff MS cáipéis ionchurtha Troff MS documento de entrada Troff MS מסמך קלט של Troff MS @@ -36699,7 +37997,7 @@ document d'entrada Troff MS Dokument wejściowy Troff MS documento origem Troff MS - Documento de entrada Troff MS + Documento de entrada Troff MS Document intrare Troff MS Входной документ Troff MS Vstupný dokument Troff MS @@ -36710,59 +38008,65 @@ Troff MS girdi belgesi вхідний документ Troff MS Tài liệu nhập MS Troff - Troff MS 输入文档 - Troff MS 輸入文件 + Troff MS 输入文档 + Troff MS 輸入文件 Twig template + Twig-sjabloon + Шаблон — Twig plantilla Twig šablona Twig Twig-skabelon Twig-Vorlage - Twig template + Twig template plantilla de Twig Twig txantiloia + Twig-malli modèle Twig + model Twig teimpléad Twig תבנית Twig Twig predložak Twig-sablon - templat Twig + Templat Twig Modello twig Twig үлгісі Twig 문서 서식 Szablon Twig - Modelo Twig + Modelo Twig Шаблон Twig Šablóna Twig Твиг шаблон Twig-mall Twig şablonu шаблон twig - Twig 模板 - Twig 範本 + Twig 模板 + Twig 範本 X-Motif UIL table + X-Motif UIL-tabel جدول X-Motif UIL - Tablica X-Motif UIL + Tablica X-Motif UIL Таблица — X-Motif UIL taula UIL de X-Motif tabulka X-Motif UIL X-Motif UIL-tabel X-Motif-UIL-Tabelle Πίνακας X-Motif UIL - X-Motif UIL table + X-Motif UIL table tabla de X-Motif UIL X-Motif UIL taula X-Motif UIL -taulukko X-Motif UIL talva table X-Motif UIL + tabele X-Motif UIL tábla X-Motif UIL Táboa de X-Motif UIL טבלה של X-Motif UIL @@ -36783,7 +38087,7 @@ taula X-Motif UIL Tabela UIL X-Motif tabela UIL do X-Motif - Tabela UIL do X-Motif + Tabela UIL do X-Motif Tabel X-Motif UIL Таблица UIL X-Motif Tabuľka X-Motif UIL @@ -36794,28 +38098,29 @@ X-Motif UIL tablosu таблиця X-Motif UIL Bảng UIL X-Motif - X-Motif UIL 表 - X-Motif UIL 表格 + X-Motif UIL 表 + X-Motif UIL 表格 resource location موقع المورد - pałažeńnie resursu + pałažeńnie resursu Местоположение на ресурс localització de recurs umístění prostředku resurseplacering Ressourcenort Τοποθεσία πόρου - resource location + resource location loko de risurco ubicación del recurso baliabidearen kokalekua resurssisijainti tilfeingisstaður localisation de ressource + posizion risorse suíomh acmhainne localización do recurso מיקום של משאב @@ -36836,7 +38141,7 @@ localizacion de ressorsa Położenie zasobu localização de recurso - Localização de recurso + Localização de recurso locație de resursă Расположение ресурса Umiestnenie zdroja @@ -36847,29 +38152,33 @@ kaynak ayırma розташування ресурсу địa điểm tài nguyên - 资源位置 - 資源位置 + 资源位置 + 資源位置 - + uuencoded file + uu-geënkodeerde lêer + Файл — кодиран с uuencode fitxer uuencoded soubor kódovaný pomocí uuencoding uuencodede-fil Datei im uuencode-Format Αρχείο κωδικοποιημένο unix σε unix (uuencoded) - uuencoded file + uuencoded file archivo codificado con uuencode uuencode-aturiko fitxategia + uuencoded tiedosto fichier uuencodé + file codificât cun uuencode comhad uuencoded Ficheiro uuencoded קובץ בקידוד uu uuencoded datoteka uuencode-olt fájl File in uuencode - Berkas ter-uuencode + berkas ter-uuencode File uuencoded 未エンコードファイル uuencode кодталған файлы @@ -36878,7 +38187,7 @@ fichièr uuencodat Plik zakodowany za pomocą uuencode ficheiro uuencoded - Arquivo codificado UUE + Arquivo codificado UUE Файл, кодированный uuencode Súbor v kódovaní uuencode Datoteka uuencode @@ -36886,32 +38195,56 @@ uuencode-fil uuencoded dosyası файл даних у форматі UUE - Uuencode 文件 - uuencoded 檔 + Uuencode 文件 + uuencoded 檔 - + + + VBScript program + programa VBScript + VBScript-program + VBScript-Programm + VBScript program + programa en VBScript + VBScript-ohjelma + programme VBScript + VBScript program + Programma VBScript + Pogram VBScript + Programa VBScript + VBScript-program + програма мовою VBScript + VBScript 程序 + VBScript 程式 + + + + + XMI file + XMI-lêer ملف XMI - Fajł XMI + Fajł XMI Файл — XMI fitxer XMI soubor XMI XMI-fil XMI-Datei Αρχείο XML - XMI file + XMI file XMI-dosiero archivo XMI XMI fitxategia XMI-tiedosto XMI fíla fichier XMI + file XMI comhad XMI ficheiro XMI קובץ XMI @@ -36931,7 +38264,7 @@ fichièr XMI Plik XMI ficheiro XMI - Arquivo XMI + Arquivo XMI Fișier XMI Файл XMI Súbor XMI @@ -36942,8 +38275,8 @@ XMI dosyası файл XMI Tập tin XMI - XMI 文件 - XMI 檔 + XMI 文件 + XMI 檔 XMI XML Metadata Interchange @@ -36953,21 +38286,23 @@ XSL FO file + XSL FO-lêer ملف XSL FO - Fajł XSL FO + Fajł XSL FO Форматиращ файл — XSL FO fitxer FO XSL soubor XSL FO XML FO-fil XSL-FO-Datei Αρχείο XSL FO - XSL FO file + XSL FO file XSL-FO-dosiero archivo XSL FO XSL FO fitxategia XSL FO -tiedosto XSL FO fíla fichier XSL FO + file XSL FO comhad XSL FO ficheiro XSL FO קובץ XSL FO @@ -36987,7 +38322,7 @@ fichièr XSL FO Plik XSL FO ficheiro XSL FO - Arquivo XSL FO + Arquivo XSL FO Fișier XSL FO Файл XSL FO Súbor XSL FO @@ -36998,8 +38333,8 @@ XSL FO dosyası файл XSL FO Tập tin FO của XSL (XFO) - XSL 格式化对象文件 - XSL FO 檔 + XSL 格式化对象文件 + XSL FO 檔 XSL FO XSL Formatting Objects @@ -37009,21 +38344,23 @@ iptables configuration file + iptables-opstellingslêer ملف تضبيط iptables ficheru de configuración d'iptables - kanfihuracyjny fajł iptables + kanfihuracyjny fajł iptables Настройки за iptables fitxer de configuració d'iptables soubor nastavení iptables iptableskonfigurationsfil iptables-Konfigurationsdatei Αρχείο ρυθμίσεων iptables - iptables configuration file + iptables configuration file archivo de configuración de iptables iptables konfigurazio-fitxategia iptables-asetustiedosto iptables samansetingarfíla fichier de configuration iptables + file di configurazion di iptables comhad cumraíochta iptables ficheiro de configuración de iptables קובץ הגדרה של iptables @@ -37043,7 +38380,7 @@ fichièr de configuracion iptables Plik konfiguracji iptables ficheiro de configuração iptables - Arquivo de configuração do iptables + Arquivo de configuração do iptables fișier configurare iptables Файл настроек iptables Súbor nastavení iptables @@ -37054,26 +38391,26 @@ iptables yapılandırma dosyası файл налаштувань iptables tập tin cấu hình iptables - iptables 防火墙配置文件 - iptables 組態檔 + iptables 防火墙配置文件 + iptables 組態檔 - - - - - + + + + + - - - + + + - - - + + + @@ -37081,49 +38418,57 @@ D-Bus service file + D-Bus-dienslêer + Услуга — D-Bus fitxer de servei de D-Bus soubor služby D-Bus + D-Bus-tjenestefil D-Bus-Dienstdatei - D-Bus service file + D-Bus service file archivo de servicio de D-Bus D-Bus zerbitzu fitxategia D-Bus-palvelutiedosto fichier de service D-Bus + file di servizi D-Bus comhad seirbhíse D-Bus Datoteka D-Bus usluge D-Bus szolgáltatás fájl - berkas layanan D-Bus + Berkas layanan D-Bus File servizio D-Bus D-Bus қызметтік файлы D-Bus 서비스 파일 Plik usługi D-Bus - Arquivo de serviço do D-Bus + Arquivo de serviço do D-Bus Файл службы D-Bus Súbor služby D-Bus датотека услуге Д-сабирнице D-BUS-tjänstfil D-Bus hizmeti dosyası файл служби D-Bus - D-Bus 服务文件 - D-Bus 服務檔 + D-Bus 服务文件 + D-Bus 服務檔 - - + + systemd unit file + systemd-eenheidlêer ficheru d'unidaes de systemd + Елемент — systemd fitxer d'unitat de systemd jednotkový soubor systemd + systemd unit-fil systemd-Einheitsdatei - systemd unit file + systemd unit file archivo de unidad de systemd systemd unitate fitxategia systemd-yksikkötiedosto fichier d'unité systemd + file unitât di systemd comhad aonaid systemd Datoteka systemd jedinice systemd egység fájl @@ -37132,44 +38477,44 @@ systemd юнит файлы systemd 유닛 파일 Plik jednostki systemd - Arquivo de unit do systemd + Arquivo de unit do systemd Модульный файл Systemd Súbor jednotky systemd датотека јединице системд-а systemd-enhetsfil systemd birim dosyası файл модуля systemd - systemd 单元文件 - systemd 單位檔 + systemd 单元文件 + systemd 單位檔 - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + @@ -37185,21 +38530,23 @@ XSLT stylesheet + XSLT-stylblad نمط XSLT - Arkuš stylaŭ XSLT + Arkuš stylaŭ XSLT Стилове — XSLT full d'estil XSLT stylopis XSLT XSLT-stilark XSLT-Stylesheet Φύλλο στυλ XSLT - XSLT stylesheet + XSLT stylesheet XSLT-stilfolio hoja de estilos XSLT XSLT estilo-orria XSLT-tyylitiedosto XSLT sniðark feuille de style XSLT + sfuei di calcul XSLT stílbhileog XSLT folla de estilo XSLT גליון סגנון XSLT @@ -37220,7 +38567,7 @@ fuèlh d'estil XSLT Arkusz stylów XSLT folha de estilos XSLT - Folha de estilo XSLT + Folha de estilo XSLT Fișă de stil XSLT Таблица стилей XSLT Štýl XSLT @@ -37231,35 +38578,72 @@ XSLT çalışma sayfası таблиця стилів XSLT Tờ kiểu dáng XSLT - XSLT 样式表 - XSLT 樣式表 + XSLT 样式表 + XSLT 樣式表 XSLT eXtensible Stylesheet Language Transformation - + + + Maven description file + Maven-beskrywingslêer + Модел — Maven + fitxer de descripció Maven + popisný soubor Maven + Maven-beskrivelsesfil + Maven-Beschreibungsdatei + Maven description file + archivo de descripción de Maven + Maven azalpen fitxategia + Maven-kuvaustiedosto + fichier de description Maven + file di descrizion Maven + cur síos Maven + Maven datoteka opisa + Maven leírófájl + Berkas deskripsi Maven + File descrizione Mave + Maven сипаттама файлы + Maven 설명 파일 + Plik opisu Maven + Arquivo de descrição Maven + Файл описания Maven + Súbor popisu Maven + Maven-beskrivningsfil + Maven açıklama dosyası + файл опису Maven + Maven 描述文件 + Maven 描述檔 + + + + + XMCD CD database + XMCD CD-databasis قاعدة بيانات XMCD CD - Baza źviestak ab dyskach XMCD + Baza źviestak ab dyskach XMCD База от данни за CD-та — XMCD base de dades de CD XMCD databáze XMCD CD XMCD-cd-database XMCD-CD-Datenbank Βάση δεδομένων CD XMCD - XMCD CD database + XMCD CD database base de datos de CD XMCD XMCD CD datu-basea XMCD CD -tietokanta XMCD fløgu dátustovnur base de données de CD XMCD + base di dâts XMCD CD bunachar sonraí XMCD CD base de datos de CD XMCD מסד נתונים XMCD CD @@ -37279,7 +38663,7 @@ banca de donadas de CD XMCD Baza danych CD XMCD base de dados XMCD CD - Banco de dados de CD XMCD + Banco de dados de CD XMCD Bază de date XMCD CD База данных компакт-дисков XMCD Databáza XMCD CD @@ -37287,34 +38671,36 @@ Bazë me të dhëna XMCD CD ИксМЦД ЦД база података XMCD cd-databas - XMCD CD veritabanı + XMCD CD veri tabanı база даних XMCD CD Cơ sở dữ liệu CD XMCD - XMCD CD 数据库 - XMCD CD 資料庫 + XMCD CD 数据库 + XMCD CD 資料庫 - + XML document + XML-dokument مستند XML Documentu XML - Dakument XML + Dakument XML Документ — XML document XML dokument XML XML-dokument XML-Dokument Έγγραφο XML - XML document + XML document XML-dokumento documento XML XML dokumentua XML-asiakirja XML skjal document XML + document XML cáipéis XML documento XML מסמך XML @@ -37334,7 +38720,7 @@ document XML Dokument XML documento XML - Documento XML + Documento XML Document XML Документ XML Dokument XML @@ -37345,15 +38731,14 @@ XML belgesi документ XML Tài liệu XML - XML 文档 - XML 文件 + XML 文档 + XML 文件 XML eXtensible Markup Language - - + @@ -37363,21 +38748,23 @@ XML entities document + XML-entiteitedokument مستند كيانات XML Documentu d'entidaes XML - Dakument elementaŭ XML + Dakument elementaŭ XML Документ — заместващи последователности в XML document d'entitats XML dokument entit XML XML-enhedsdokument XML-Dokument-Entitäten Έγγραφο οντοτήτων XML - XML entities document + XML entities document documento de entidades XML XML entitateen dokumentua XML-entiteettiasiakirja XML einindisskjal document d'entités XML + document entitâts XML cáipéis aonán XML documento de entidades XML מסמך ישויות XML @@ -37397,7 +38784,7 @@ document d'entitats XML Dokument jednostek XML documento de entidades XML - Documento de entidades XML + Documento de entidades XML Document entități XML Файл сущностей XML Dokument entít XML @@ -37408,8 +38795,8 @@ XML varlıklar belgesi документ об’єктів XML Tài liệu thực thể XML - XML 特征文档 - XML 實體文件 + XML 特征文档 + XML 實體文件 XML eXtensible Markup Language @@ -37419,22 +38806,24 @@ DV video + DV-video DV مرئي Videu en DV - Videa DV + Videa DV Видео — DV vídeo DV video DV DV-video DV-Video Βίντεο DV - DV video + DV video DV-video vídeo DV DV bideoa DV-video DV video vidéo DV + video DV físeán DV vídeo DV וידאו DV @@ -37455,7 +38844,7 @@ vidèo DV Plik wideo DV vídeo DV - Vídeo DV + Vídeo DV Video DV Видео DV Video DV @@ -37466,21 +38855,22 @@ DV video відеокліп DV Ảnh động DV - DV 视频 - DV 視訊 + DV 视频 + DV 視訊 DV Digital Video - + ISI video + ISI-video مرئي ISI Videu n'ISI ISI video faylı - Videa ISI + Videa ISI Видео — ISI vídeo ISI video ISI @@ -37488,13 +38878,14 @@ ISI-video ISI-Video Βίντεο ISI - ISI video + ISI video ISI-video vídeo ISI ISI bideoa ISI-video ISI video vidéo ISI + video ISI físeán ISI vídeo ISI וידאו ISI @@ -37515,7 +38906,7 @@ vidèo ISI Plik wideo ISI vídeo ISI - Vídeo ISI + Vídeo ISI Video ISI Видео ISI Video ISI @@ -37526,11 +38917,12 @@ ISI videosu відеокліп ISI Ảnh động ISI - ISI 视频 - ISI 視訊 + ISI 视频 + ISI 視訊 MPEG-2 transport stream + MPEG-2-vervoerstroom بث نقل MPEG-2 Поток — транспорт по MPEG-2 flux de transport MPEG-2 @@ -37538,12 +38930,13 @@ MPEG-2-transportstrøm MPEG-2-Transportstrom Ροή μεταφοράς MPEG-2 - MPEG-2 transport stream + MPEG-2 transport stream flujo de transporte MPEG-2 MPEG-2 korronte garraioa MPEG-2 -siirtobittivirta MPEG-2 flutningsstreymur flux de transport MPEG-2 + flus di traspuart MPEG-2 sruth aistrithe MPEG-2 fluxo de transporte MPEG-2 העברת זרימה של MPEG-2 @@ -37562,7 +38955,7 @@ flux de transpòrt MPEG-2 Strumień przesyłania MPEG-2 fluxo de transporte MPEG-2 - Fluxo de transporte de MPEG-2 + Fluxo de transporte de MPEG-2 Flux transport MPEG-2 Транспортный поток MPEG-2 MPEG-2 Transport Stream @@ -37571,25 +38964,25 @@ MPEG-2 transportström MPEG-2 aktarım akışı потік передавання даних MPEG-2 - MPEG-2 传输流 - MPEG-2 傳輸串流 + MPEG-2 传输流 + MPEG-2 傳輸串流 MPEG-2 TS Moving Picture Experts Group 2 Transport Stream - - - - - + + + + + - - - - - + + + + + @@ -37608,22 +39001,24 @@ MPEG video + MPEG-video MPEG مرئي Videu en MPEG - Videa MPEG + Videa MPEG Видео — MPEG vídeo MPEG video MPEG MPEG-video MPEG-Video Βίντεο MPEG - MPEG video + MPEG video MPEG-video vídeo MPEG MPEG bideoa MPEG-video MPEG video vidéo MPEG + video MPEG físeán MPEG vídeo MPEG וידאו MPEG @@ -37645,7 +39040,7 @@ vidèo MPEG Plik wideo MPEG vídeo MPEG - Vídeo MPEG + Vídeo MPEG Video MPEG Видео MPEG Video MPEG @@ -37656,8 +39051,8 @@ MPEG videosu відеокліп MPEG Ảnh động MPEG - MPEG 视频 - MPEG 視訊 + MPEG 视频 + MPEG 視訊 MPEG Moving Picture Experts Group @@ -37665,9 +39060,9 @@ - - - + + + @@ -37677,50 +39072,11 @@ - MPEG video (streamed) - Videu en MPEG (tresmitíu) - Видео — MPEG, поточно - vídeo MPEG (flux) - video MPEG (proud) - MPEG-video (streamet) - MPEG-Video (Datenstrom) - Βίντεο MPEG (εκπεμπόμενο) - MPEG video (streamed) - vídeo MPEG (transmisión) - MPEG bideoa (korronte bidez) - MPEG-video (virtaus) - vidéo MPEG (flux) - físeán MPEG (sruthaithe) - vídeo MPEG (en stream) - קובץ MPEG (בהזרמה) - MPEG video snimka (strujanje) - MPEG videó (szórt) - Video MPEG (in fluxo) - Video MPEG (di-stream-kan) - Video MPEG (streamed) - MPEG ビデオ(ストリーム) - MPEG ვიდეო (ნაკადი) - MPEG видео (ағымдық) - MPEG 동영상(스트리밍) - MPEG video (straumēts) - MPEG video (streamed) - vidèo MPEG (flux) - Plik wideo MPEG (strumień) - vídeo MPEG (em fluxo) - Vídeo MPEG (fluxo) - Видео MPEG (потоковое) - MPEG video (streamované) - MPEG-video (pretočni) - МПЕГ видео (проточни) - MPEG-video (strömmad) - MPEG videosu (akış) - відеокліп MPEG (потоковий) - MPEG 视频流媒体 - MPEG 視訊 (串流) + Video playlist - + @@ -37728,22 +39084,24 @@ QuickTime video + QuickTime-video QuickTime مرئي Videu en QuickTime - Videa QuickTime + Videa QuickTime Видео — QuickTime vídeo QuickTime video QuickTime QuickTime-video QuickTime-Video Βίντεο QuickTime - QuickTime video + QuickTime video QuickTime-video vídeo QuickTime QuickTime bideoa QuickTime-video QuickTime video vidéo QuickTime + video QuickTime físeán QuickTime vídeo QuickTime וידאו של QuickTime @@ -37764,7 +39122,7 @@ vidèo QuickTime Plik wideo QuickTime vídeo QuickTime - Vídeo do QuickTime + Vídeo do QuickTime Video QuickTime Видео QuickTime Video QuickTime @@ -37775,13 +39133,13 @@ QuickTime videosu відеокліп QuickTime Ảnh động QuickTime - QuickTime 视频 - QuickTime 視訊 + QuickTime 视频 + QuickTime 視訊 - - - - + + + + @@ -37790,21 +39148,23 @@ QuickTime image + QuickTime-beeld صورة QuickTime - Vyjava QuickTime + Vyjava QuickTime Изображение — QuickTime imatge QuickTime obrázek QuickTime QuickTime-billede QuickTime-Bild Εικόνα QuickTime - QuickTime image + QuickTime image QuickTime-bildo imagen de QuickTime QuickTime irudia QuickTime-kuva QuickTime mynd image QuickTime + imagjin QuickTime íomhá QuickTime imaxe QuickTime תמונה של QuickTime @@ -37824,7 +39184,7 @@ imatge QuickTime Obraz QuickTime imagem QuickTime - Imagem do QuickTime + Imagem do QuickTime Imagine QuickTime Изображение QuickTime Obrázok QuickTime @@ -37835,54 +39195,116 @@ QuickTime görüntüsü зображення QuickTime Ảnh QuickTime - QuickTime 图像 - QuickTime 影像 + QuickTime 图像 + QuickTime 影像 - + Khronos texture image + Khronos-tekstuurbeeld + Изображение — текстура за Khronos imatge de textura de Khronos obrázek s texturou Khronos + Khronos-strukturbillede Khronos-Texturbild - Khronos texture image + Khronos texture image imagen de textura de Khronos + Khronos testura irudia + Khronos-tekstuurikuva image de texture Khronos + imagjin di struture/texture Khronos íomhá uigeachta Khronos Khronos tekstura slika Khronos textúra kép - citra tekstur Khronos + Citra tekstur Khronos Immagine texture Khronos Khronos текстура суреті 크로노스 텍스처 파일 Obraz tekstury Khronos - Imagem de textura do Khronos + Imagem de textura do Khronos Изображение текстуры Khronos Obrázok textúry Khronos слика Кронос текстуре Khronos-texturbild Khronos kaplama görüntüsü зображення текстури Khronos - Khronos 纹理图像 - Khronos 紋理影像 + Khronos 纹理图像 + Khronos 紋理影像 - - - + + + + + Khronos texture image + Khronos-tekstuurbeeld + Изображение — текстура за Khronos + imatge de textura de Khronos + obrázek s texturou Khronos + Khronos-strukturbillede + Khronos-Texturbild + Khronos texture image + imagen de textura de Khronos + Khronos testura irudia + Khronos-tekstuurikuva + image de texture Khronos + imagjin di struture/texture Khronos + íomhá uigeachta Khronos + Khronos tekstura slika + Khronos textúra kép + Citra tekstur Khronos + Immagine texture Khronos + Khronos текстура суреті + 크로노스 텍스처 파일 + Obraz tekstury Khronos + Imagem de textura do Khronos + Изображение текстуры Khronos + Obrázok textúry Khronos + слика Кронос текстуре + Khronos-texturbild + Khronos kaplama görüntüsü + зображення текстури Khronos + Khronos 纹理图像 + Khronos 紋理影像 + + + + + + + + + + + ASTC texture + textura ASTC + ASTC tekstuuri + Texture ASTC + Tekstura ASTC + Textura ASTC + текстура ASTC + ASTC + Advanced Scalable Texture Compression + + + + + Vivo video + Vivo-video Vivo مرئي Videu en Vivo Vivo video faylı - Videa Vivo + Videa Vivo Видео — Vivo vídeo Vivo video Vivo @@ -37890,13 +39312,14 @@ Vivo-video Vivo-Video Βίντεο Vivo - Vivo video + Vivo video Vivo-video vídeo Vivo Vivo bideoa Vivo-video Vivo video vidéo Vivo + video Vivo físeán Vivo vídeo Vivo וידאו של Vivo @@ -37917,7 +39340,7 @@ vidèo Vivo Plik wideo Vivo vídeo Vivo - Vídeo Vivo + Vídeo Vivo Video Vivo Видео Vivo Video Vivo @@ -37928,32 +39351,34 @@ Vivo videosu відео Vivo Ảnh động Vivo - Vivo 视频 - Vivo 視訊 + Vivo 视频 + Vivo 視訊 Wavelet video + Wavelet-video Wavelet مرئي Videu en Wavelet Wavelet video faylı - Videa Wavelet + Videa Wavelet Видео — Wavelet vídeo Wavelet video Wavelet Fideo Wavelet - Waveletvideo + Wavelet-video Wavelet-Video Βίντεο Wavelet - Wavelet video + Wavelet video Wavelet-video vídeo Wavelet Wavelet bideoa Wavelet-video Wavelet video vidéo Wavelet + video Wavelet físeán Wavelet vídeo Wavelet וידאו של Wavelet @@ -37974,7 +39399,7 @@ vidèo Wavelet Plik wideo Wavelet vídeo Wavelet - Vídeo Wavelet + Vídeo Wavelet Video Wavelet Видео Wavelet Video Wavelet @@ -37985,14 +39410,15 @@ Wavelet videosu відеокліп Wavelet Ảnh động Wavelet - Wavelet 视频 - Wavelet 視訊 + Wavelet 视频 + Wavelet 視訊 ANIM animation + ANIM-animasie تحريكة ANIM ANIM animasiyası - Animacyja ANIM + Animacyja ANIM Анимация — ANIM animació ANIM animace ANIM @@ -38000,13 +39426,14 @@ ANIM-animation ANIM-Animation Κινούμενο σχέδιο ANIM - ANIM animation + ANIM animation ANIM-animacio animación ANIM ANIM animazioa ANIM-animaatio ANIM teknmyndagerð animation ANIM + animazion ANIM beochan ANIM animación ANIM הנפשת ANIM @@ -38028,7 +39455,7 @@ animacion ANIM Plik animacji ANIM animação ANIM - Animação ANIM + Animação ANIM Animație ANIM Анимация ANIM Animácia ANIM @@ -38039,26 +39466,28 @@ ANIM canlandırması анімація ANIM Hoạt ảnh ANIM - ANIM 动画 - ANIM 動畫 + ANIM 动画 + ANIM 動畫 FLIC animation + FLIC-animasie تحريكة FLIC - Animacyja FLIC + Animacyja FLIC Анимация — FLIC animació FLIC animace FLIC FLIC-animation FLIC-Animation Κινούμενο σχέδιο FLIC - FLIC animation + FLIC animation animación FLIC FLIC animazioa FLIC-animaatio FLIC teknimyndagerð animation FLIC + animazion FLIC beochan FLIC animación FLIC הנפשת FLIC @@ -38079,7 +39508,7 @@ animacion FLIC Plik animacji FLIC animação FLIC - Animação FLIC + Animação FLIC Animație FLIC Анимация FLIC Animácia FLIC @@ -38090,34 +39519,36 @@ FLIC animasyonu анімація FLIC Hoạt ảnh FLIC - FLIC 动画 - FLIC 動畫 + FLIC 动画 + FLIC 動畫 - - + + Haansoft Hangul document + Haansoft Hangul-dokument مستند Haansoft Hangul Documentu de Haansoft Hangul - Dakument Haansoft Hangul + Dakument Haansoft Hangul Документ — Haansoft Hangul document d'Haansoft Hangul dokument Haansoft Hangul Haansoft Hangul-dokument Haansoft-Hangul-Dokument Έγγραφο Haansoft Hangul - Haansoft Hangul document + Haansoft Hangul document documento de Haansoft Hangul Haansoft Hangul dokumentua Haansoft Hangul -asiakirja Haansoft Hangul skjal document Haansoft Hangul + document Haansoft Hangul cáipéis Haansoft Hangul documento de Haansoft Hangul מסמך Haansoft Hangul @@ -38137,7 +39568,7 @@ document Haansoft Hangul Dokument Haansoft Hangul documento Haansoft Hangul - Documento do Haansoft Hangul + Documento do Haansoft Hangul Document Haansoft Hangul Документ Haansoft Hangul Dokument Haansoft Hangul @@ -38148,32 +39579,34 @@ Haansoft Hangul belgesi документ Haansoft Hangul Tài liệu Hangul Haansoft - Haansoft Hangul 文档 - Haansoft 韓文文件 + Haansoft Hangul 文档 + Haansoft 韓文文件 - + Haansoft Hangul document template + Haansoft Hangul-dokumentsjabloon قالب مستند Haansoft Hangul Plantía de documentu de Haansoft Hangul - Šablon dakumentu Haansoft Hangul + Šablon dakumentu Haansoft Hangul Шаблон за документи — Haansoft Hangul plantilla de document d'Haansoft Hangul šablona dokumentu Haansoft Hangul Haansoft Hangul-dokumentskabelon Haansoft-Hangul-Dokumentvorlage Πρότυπο εγγράφου Haansoft Hangul - Haansoft Hangul document template + Haansoft Hangul document template plantilla de documento de Haansoft Hangul Haansoft Hangul dokumentuaren txantiloia Haansoft Hangul -asiakirjamalli Haansoft Hangul skjalaformur modèle de document Haansoft Hangul + model document Haansoft Hangul teimpléad cháipéis Haansoft Hangul modelo de documento de Haansoft Hangul תבנית מסמך של Haansoft Hangul @@ -38193,7 +39626,7 @@ modèl de document Haansoft Hangul Szablon dokumentu Haansoft Hangul modelo de documento Haansoft Hangul - Modelo de documento do Haansoft Hangul + Modelo de documento do Haansoft Hangul Document șablon Haansoft Hangul Шаблон документа Haansoft Hangul Šablóna dokumentu Haansoft Hangul @@ -38204,29 +39637,31 @@ Haansoft Hangul belge şablonu шаблон документа Haansoft Hangul Mẫu tài liệu Hangul Haansoft - Haansoft Hangul 文档模板 - Haansoft 韓文文件範本 + Haansoft Hangul 文档模板 + Haansoft 韓文文件範本 MNG animation + MNG-animasie تحريكة MNG - Animacyja MNG + Animacyja MNG Анимация — MNG animació MNG animace MNG MNG-animation MNG-Animation Κινούμενο σχέδιο MNG - MNG animation + MNG animation MNG-animacio animación MNG MNG animazioa MNG-animaatio MNG teknimyndagerð animation MNG + animazion MNG beochan MNG animación MNG הנפשת MNG @@ -38247,7 +39682,7 @@ animacion MNG Animacja MNG animação MNG - Animação MNG + Animação MNG Animație MNG Анимация MNG Animácia MNG @@ -38258,33 +39693,35 @@ MNG canlandırması анімація MNG Hoạt ảnh MNG - MNG 动画 - MNG 動畫 + MNG 动画 + MNG 動畫 MNG Multiple-Image Network Graphics - + ASF video + ASF-video ASF مرئي Videu n'ASF - Videa ASF + Videa ASF Видео — ASF vídeo ASF video ASF ASF-video ASF-Video Βίντεο ASF - ASF video + ASF video ASF-video vídeo ASF ASF bideoa ASF-video ASF video vidéo ASF + video ASF físeán ASF vídeo ASF וידאו ASF @@ -38305,7 +39742,7 @@ vidèo ASF Plik wideo ASF vídeo ASF - Vídeo ASF + Vídeo ASF Video ASF Видео ASF Video ASF @@ -38316,8 +39753,8 @@ ASF videosu відеокліп ASF Ảnh động ASF - ASF 视频 - ASF 視訊 + ASF 视频 + ASF 視訊 ASF Advanced Streaming Format @@ -38325,26 +39762,28 @@ - - + + Windows Media Station file + Windows Media Station-lêer ملف محطة Windows Media - Fajł Windows Media Station + Fajł Windows Media Station Файл — Windows Media Station fitxer de Windows Media Station soubor Windows Media Station Windows Media Station-fil Windows-Media-Streamingbeschreibung Αρχείο Windows Media Station - Windows Media Station file + Windows Media Station file archivo de emisora de Windows Media Windows Media Station fitxategia Windows Media Station-tiedosto Windows Media Station fíla fichier Windows Media Station + file Windows Media Station comhad Windows Media Station ficheiro de emisora de Windows Media קובץ תחנה של Windows Media @@ -38364,7 +39803,7 @@ fichièr Windows Media Station Plik Windows Media Station ficheiro Windows Media Station - Arquivo de estação do Windows Media + Arquivo de estação do Windows Media Fișier Windows Media Station Файл Windows Media Station Súbor Windows Media Station @@ -38375,32 +39814,34 @@ Windows Media Station dosyası файл Windows Media Station Tập tin Windows Media Station - Windows 媒体工作站文件 - Windows Media Station 檔 + Windows 媒体工作站文件 + Windows Media Station 檔 - + Windows Media video + Windows Media-video Windows Media مرئي Videu de Windows Media - Videa Windows Media + Videa Windows Media Видео — Windows Media vídeo de Windows Media video Windows Media Windows Medie-video Windows-Media-Video Βίντεο Windows Media - Windows Media video + Windows Media video vídeo de Windows Media Windows Media bideoa Windows Media -video Windows Media video vidéo Windows Media + video Windows Media físeán Windows Media vídeo de Windows Media וידאו של Windows Media @@ -38420,7 +39861,7 @@ vidèo Windows Media Plik wideo Windows Media vídeo Windows Media - Vídeo do Windows Media + Vídeo do Windows Media Video Windows Media Видео Windows Media Video Windows Media @@ -38431,17 +39872,18 @@ Windows Media videosu відеокліп Windows Media Ảnh động Windows Media - Windows Media 视频 - Windows Media 視訊 + Windows Media 视频 + Windows Media 視訊 AVI video + AVI-video AVI مرئي Videu n'AVI AVI video faylı - Videa AVI + Videa AVI Видео — AVI vídeo AVI video AVI @@ -38449,13 +39891,14 @@ AVI-video AVI-Video Βίντεο AVI - AVI video + AVI video AVI-video vídeo AVI AVI bideoa AVI-video AVI video vidéo AVI + video AVI físeán AVI vídeo AVI וידאו AVI @@ -38477,7 +39920,7 @@ vidèo AVI Plik wideo AVI vídeo AVI - Vídeo AVI + Vídeo AVI Video AVI Видео AVI Video AVI @@ -38488,8 +39931,8 @@ AVI videosu відеокліп AVI Ảnh động AVI - AVI 视频 - AVI 視訊 + AVI 视频 + AVI 視訊 AVI Audio Video Interleave @@ -38498,11 +39941,11 @@ - - + + - - + + @@ -38511,22 +39954,24 @@ NullSoft video + NullSoft-video NullSoft مرئي Videu de NullSoft - Videa NullSoft + Videa NullSoft Видео — NullSoft vídeo NullSoft video NullSoft NullSoft-video NullSoft-Video Βίντεο Nullsoft - NullSoft video + NullSoft video NullSoft-video vídeo NullSoft NullSoft bideoa NullSoft-video NullSoft video vidéo NullSoft + video NullSoft físeán NullSoft vídeo de NullSoft וידאו של NullSot @@ -38546,7 +39991,7 @@ vidèo NullSoft Plik wideo NullSoft vídeo NullSoft - Vídeo do NullSoft + Vídeo do NullSoft Video NullSoft Видео Nullsoft Video NullSoft @@ -38557,29 +40002,30 @@ Nullsoft videosu відеокліп NullSoft Ảnh động NullSoft - NullSoft 视频 - NullSoft 視訊 + NullSoft 视频 + NullSoft 視訊 - + SDP multicast stream file ملف دفق متعدد البث SDP - Šmatadrasny płynievy fajł SDP - Файл за поток — SDP multicast + Šmatadrasny płynievy fajł SDP + Поток — SDP multicast fitxer de flux de multidifusió SDP soubor vícesměrového vysílání proudu SDP SDP multicast-strømfil SDP-Multicast-Datenstromdatei Αρχείο ροής πολλαπλής αναμετάδοσης SDP - SDP multicast stream file + SDP multicast stream file archivo de flujo multicast SDP SDP multicast korrontearen fitxategia SDP-monilähetysvirran tiedosto SDP margvarpað streymafíla fichier de flux multidiffusion SDP + file di flus a trasmission multiple SDP comhad shruth ilchraolacháin SDP ficheiro de fluxo multicast SDP קובץ שידור בזרימה SDP @@ -38599,7 +40045,7 @@ fichièr de flux multidifusion SDP Plik strumienia multicast SDP ficheiro de fluxo SDP multicast - Arquivo de canal multicast SDP + Arquivo de canal multicast SDP Fișier flux multicast SDP Файл мультикаст-потока SDP Súbor viacsmerového vysielania prúdu SDP @@ -38610,8 +40056,8 @@ SDP çoklu yayın akışı dosyası файл потокової трансляції SDP Tập tin luồng truyền một-nhiều SDP - SDP 多播流文件 - SDP multicast 串流檔 + SDP 多播流文件 + SDP multicast 串流檔 SDP Session Description Protocol @@ -38619,18 +40065,19 @@ - - + + SGI video + SGI-video SGI مرئي Videu en SGI SGI video faylı - Videa SGI + Videa SGI Видео — SGI vídeo SGI video SGI @@ -38638,13 +40085,14 @@ SGI-video SGI-Video Βίντεο SGI - SGI video + SGI video SGI-video vídeo SGI SGI bideoa SGI-video SGI video vidéo SGI + video SGI físeán SGI vídeo SGI וידאו SGI @@ -38665,7 +40113,7 @@ vidèo SGI Plik wideo SGI vídeo SGI - Vídeo SGI + Vídeo SGI Video SGI Видео SGI Video SGI @@ -38676,29 +40124,31 @@ SGI videosu відеокліп SGI Ảnh động SGI - SGI 视频 - SGI 視訊 + SGI 视频 + SGI 視訊 - + eMusic download package + eMusic-aflaaipakket حزمة تنزيل eMusic - pakunak zahruzki eMusic + pakunak zahruzki eMusic Пакет за сваляне — eMusic - paquet de descàrrega eMusic + paquet de baixades d'eMusic balíček stahování eMusic - eMusic-hentpakke + eMusic-downloadpakke eMusic-Download-Paket Πακέτο λήψης eMusic - eMusic download package + eMusic download package paquete de descarga eMusic eMusic deskargaren paketea eMusic-imurointipaketti eMusic niðurtøkupakki paquet de téléchargement eMusic + pachet di discjariament eMusic pacáiste íosluchtú eMusic paquete de descarga de eMusic חבילת הורדה של eMusic @@ -38718,7 +40168,7 @@ paquet de telecargament eMusic Pobrany pakiet eMusic pacote transferido eMusic - Pacote de download do eMusic + Pacote de download do eMusic pachet descărcare eMusic Пакет загрузок eMusic Balíček sťahovania eMusic @@ -38729,16 +40179,17 @@ eMusic indirme paketi пакунок завантаження eMusic gói nhạc tải xuống eMusic - eMusic 下载包 - eMusic 下載包 + eMusic 下载包 + eMusic 下載包 - + KML geographic data + KML geografiese data بيانات جغرافية KML Географски данни — KML dades geogràfiques KML @@ -38746,12 +40197,13 @@ Geografiske data i KML-format KML geographische Daten Γεωγραφικά δεδομένα KML - KML geographic data + KML geographic data datos geográficos KML KML datu geografikoak KML-paikkatieto KML landafrøðilig dáta données géographiques KML + dâts gjeografics KML sonraí geografacha KML datos xeográficos KML מידע גאוגרפי KML @@ -38769,7 +40221,7 @@ donadas geograficas KML Dane geograficzne KML dados geográficos KML - Dados geográficos KML + Dados geográficos KML Date geografice KML Географические данные KML Zemepisné údaje KML @@ -38778,8 +40230,8 @@ KML geografisk data KML coğrafi verisi географічні дані KML - KML 地理数据 - KML 地理資料 + KML 地理数据 + KML 地理資料 KML Keyhole Markup Language @@ -38788,6 +40240,7 @@ KML geographic compressed data + KML saamgepersde geografiese data بيانات جغرافية مضغوطة KML Географски данни — KML, компресирани dades geogràfiques KML amb compressió @@ -38795,12 +40248,13 @@ KML-geografiske komprimerede data KML geographische komprimierte Daten Γεωγραφικά συμπιεσμένα δεδομένα KML - KML geographic compressed data + KML geographic compressed data datos geográficos comprimidos KML KML datu geografiko konprimituak Pakattu KML-paikkatieto KML landafrøðilig stappað dáta données géographiques KML compressées + dâts gjeografics KML comprimûts sonraí comhbhrúite geografacha KML datos xeográficos KML comprimidos מידע גאוגרפי דחוס KML @@ -38818,7 +40272,7 @@ donadas geograficas KML compressats Skompresowane dane geograficzne KML dados geográficos comprimidos KML - Dados geográficos KML compactados + Dados geográficos KML compactados Date geografice comprimate KML Сжатые географические данные KML Komprimované zemepisné údaje KML @@ -38827,8 +40281,8 @@ KML geografiskt komprimerat data KML sıkıştırılmış coğrafi verisi стиснуті географічні дані KML - KML 地理压缩数据 - KML 地理壓縮資料 + KML 地理压缩数据 + KML 地理壓縮資料 KML Keyhole Markup Language @@ -38836,13 +40290,18 @@ GeoJSON geospatial data + GeoJSON georuimtelike data + Географски данни — GeoJSON dades geomàtiques GeoJSON geoprostorová data GeoJSON GEoJSON-geospatiale data GeoJSON raumbezogene Daten - GeoJSON geospatial data + GeoJSON geospatial data datos geoespaciales en GeoJSON + GeoJSON geomatika datua + GeoJSON-paikkatiedot données géospatiales GeoJSON + dâts gjeo-spaziâls GeoJSON sonraí geospásúla GeoJSON GeoJSON geoprostorni podaci GeoJSON téradatok @@ -38851,15 +40310,15 @@ GeoJSON геокеңістіктік деректері GeoJSON 지리 정보 데이터 Dane geoprzestrzenne GeoJSON - Dados geoespaciais GeoJSON + Dados geoespaciais GeoJSON Геопространственные данные GeoJSON Geopriestorové údaje GeoJSON ГеоЈСОН геопросторни подаци Geospatialt GeoJSON-data - GeoJSON coğrafi veriler + GeoJSON coğrafi verileri геопросторові дані GeoJSON - GeoJSON 地理空间数据 - GeoJSON 地理空間資料 + GeoJSON 地理空间数据 + GeoJSON 地理空間資料 @@ -38867,15 +40326,18 @@ GPX geographic data + GPX geografiese data + Географски данни — GPX dades geogràfiques GPX geografická data GPX GPX-geografiske data GPX geographische Daten - GPX geographic data + GPX geographic data datos geográficos en GPX GPX datu geografikoak GPX-paikkatieto données géographiques GPX + dâts gjeografics GPX sonraí geografacha GPX נתונים גאוגרפיים GPX GPX geografski podaci @@ -38886,15 +40348,15 @@ GPX 지리 공간정보 데이터 Donadas geograficas GPX Dane geograficzne GPX - Dados geográficos GPX + Dados geográficos GPX Географические данные GPX Zemepisné údaje GPX ГПИкс географски подаци GPX geografisk data GPX coğrafi verileri географічні дані GPX - GPX 地理数据 - GPX 地理資料 + GPX 地理数据 + GPX 地理資料 GPX GPS Exchange Format @@ -38907,20 +40369,22 @@ Citrix ICA settings file + Citrix ICA-instellingslêer ملف إعدادات Citrix ICA - Fajł naładaŭ Citrix ICA + Fajł naładaŭ Citrix ICA Настройки — Citrix ICA fitxer d'ajusts de Citrix ICA soubor nastavení Citrix ICA Citrix ICA-opsætningsfil Citrix-ICA-Einstellungsdatei Αρχείο ρυθμίσεων Citrix ICA - Citrix ICA settings file + Citrix ICA settings file archivo de configuración de Citrix ICA Citrix ICA ezarpenen fitxategia Citrix ICA -asetustiedosto Citrix ICA stillingarfíla fichier de paramètres ICA Citrix + file impostazions Citrix ICA comhad socruithe Citrix ICA ficheiro de configuracións de Citrix ICA קובץ הגדרות של Citrix ICA @@ -38941,7 +40405,7 @@ fichièr de paramètres ICA Citrix Plik ustawień Citrix ICA ficheiro de definições Citrix ICA - Arquivo de configuração do Citrix ICA + Arquivo de configuração do Citrix ICA Fișier de configurări Citrix ICA Файл настроек Citrix ICA Súbor nastavení Citrix ICA @@ -38952,8 +40416,8 @@ Citrix ICA ayar dosyası файл параметрів ICA Citrix Tập tin thiết lập ICA Citrix - Citrix ICA 设置文件 - Citrix ICA 設定值檔案 + Citrix ICA 设置文件 + Citrix ICA 設定值檔案 ICA Independent Computing Architecture @@ -38962,21 +40426,23 @@ XUL interface document + XUL-koppelvlakdokument مستند واجهة XUL Documentu d'interfaz XUL - Interfejsny dakument XUL - Документ — интерфейс за XUL + Interfejsny dakument XUL + Документ — интерфейс, XUL document d'interfície XUL dokument rozhraní XUL XUL-grænsefladedokument XUL-Oberflächendokument Έγγραφο διεπαφής XUL - XUL interface document + XUL interface document documento de interfaz XUL XUL interfazearen dokumentua XUL-käyttöliittymäasiakirja XUL markamótsskjal document d'interface XUL + document di interface XUL cáipéis chomhéadan XUL documento de interface XUL מסמך ממשק XUL @@ -38996,7 +40462,7 @@ document d'interfàcia XUL Dokument interfejsu XUL documento de ambiente XUL - Documento de interface XUL + Documento de interface XUL Document interfață XUL Документ интерфейса XUL Dokument rozhrania XUL @@ -39007,8 +40473,8 @@ XUL arayüz belgesi документ інтерфейсу XUL Tài liệu giao diện XUL - XUL 界面文档 - XUL 介面文件 + XUL 界面文档 + XUL 介面文件 XUL XML User interface markup Language @@ -39018,6 +40484,7 @@ XPInstall installer module + XPInstall-installasiemodule وحدة مثبت XPInstall Пакет — инсталация XPInstall mòdul de l'instal·lador XPinstall @@ -39025,12 +40492,13 @@ XPInstall-installationsmodul XPInstall-Installationsmodul Άρθρωμα εγκατάστασης XPInstall - XPInstall installer module + XPInstall installer module módulo del instalador XPInstall XPInstall instalatzailearen modulua XPInstall-asennuspaketti XPInstall innleggjaramótul module d'installation XPInstall + modul instaladôr XPInstall modúl suiteála XPInstall Módulo do instalador XPInstall מודול התקנה של XPInstall @@ -39048,7 +40516,7 @@ modul d'installacion XPInstall Moduł instalatora XPInstall módulo de instalador XPInstall - Módulo de instalador XPInstall + Módulo de instalador XPInstall Modul de instalare XPInstall Модуль установщика XPInstall Modul inštalátora XPInstall @@ -39057,13 +40525,14 @@ XPInstall-installeringsmodul XPInstall kurulum modülü модуль засобу встановлення XPInstall - XPInstall 安装工具模块 - XPInstall 安裝程式模組 + XPInstall 安装工具模块 + XPInstall 安裝程式模組 Word 2007 document + Word 2007-dokument مستند Word 2007 Documentu de Word 2007 Документ — Word 2007 @@ -39072,12 +40541,13 @@ Word 2007-dokument Word-2007-Dokument Έγγραφο Word 2007 - Word 2007 document + Word 2007 document documento de Word 2007 Word 2007 dokumentua Word 2007 -asiakirja Word 2007 skjal document Word 2007 + document Word 2007 cáipéis Word 2007 documento de Word 2007 מסמך Word 2007 @@ -39095,7 +40565,7 @@ document Word 2007 Dokument Word 2007 documento Word 2007 - Documento do Word 2007 + Documento do Word 2007 Document Word 2007 Документ Word 2007 Dokument Word 2007 @@ -39105,14 +40575,15 @@ Word 2007 belgesi документ Word 2007 Tài liệu Word 2007 - Word 2007 文档 - Word 2007 文件 + Word 2007 文档 + Word 2007 文件 Word 2007 document template + Word 2007-dokumentsjabloon Plantía de documentu de Word 2007 Шаблон за документи — Word 2007 plantilla de document de Word 2007 @@ -39120,11 +40591,12 @@ Word 2007-dokumentskabelon Word-2007-Dokumentvorlage Πρότυπο έγγραφο Word 2007 - Word 2007 document template + Word 2007 document template plantilla de documento de Word 2007 Word 2007 dokumentuaren txantiloia Word 2007 -asiakirjamalli modèle de document Word 2007 + model document Word 2007 teimpléad cháipéis Word 2007 Plantilla de documento de Word 2007 תבנית מסמך של Word 2007 @@ -39142,7 +40614,7 @@ modèl de document Word 2007 Szablon dokumentu Word 2007 modelo de documento Word 2007 - Modelo de documento do Word 2007 + Modelo de documento do Word 2007 Шаблон документа Word 2007 Šablóna dokumentu Word 2007 Predloga dokumenta Word 2007 @@ -39150,14 +40622,15 @@ Word 2007-dokumentmall Word 2007 belge şablonu шаблон документа Word 2007 - Word 2007 文档模板 - Word 2007 文件範本 + Word 2007 文档模板 + Word 2007 文件範本 PowerPoint 2007 presentation + PowerPoint 2007-voorlegging عرض تقديمي PowerPoint 2007 Презентация — PowerPoint 2007 presentació de PowerPoint 2007 @@ -39165,12 +40638,13 @@ PowerPoint 2007-præsentation PowerPoint-2007-Präsentation Παρουσίαση PowerPoint 2007 - PowerPoint 2007 presentation + PowerPoint 2007 presentation presentación de PowerPoint 2007 PowerPoint 2007 aurkezpena PowerPoint 2007 -esitys PowerPoint 2007 framløga présentation PowerPoint 2007 + presentazion PowerPoint 2007 láithreoireacht PowerPoint 2007 presentación de PowerPoint 2007 מצגת של PowerPoint 2007 @@ -39188,7 +40662,7 @@ presentacion PowerPoint 2007 Prezentacja PowerPoint 2007 apresentação PowerPoint 2007 - Apresentação do PowerPoint 2007 + Apresentação do PowerPoint 2007 Prezentare PowerPoint 2007 Презентация PowerPoint 2007 Prezentácia PowerPoint 2007 @@ -39198,25 +40672,27 @@ PowerPoint 2007 sunumu презентація PowerPoint 2007 Trình diễn PowerPoint 2007 - PowerPoint 2007 演示文稿 - PowerPoint 2007 簡報 + PowerPoint 2007 演示文稿 + PowerPoint 2007 簡報 PowerPoint 2007 slide + PowerPoint 2007-skyfie Кадър — PoerPoint 2007 dispositiva de PowerPoint 2007 snímek PowerPoint 2007 PowerPoint 2007-slide PowerPoint 2007-Folie Διαφάνεια PowerPoint 2007 - PowerPoint 2007 slide + PowerPoint 2007 slide diapositiva de PowerPoint 2007 PowerPoint 2007 diapositiba PowerPoint 2007 -dia diapositive PowerPoint 2007 + diapositive PowerPoint 2007 sleamhnán PowerPoint 2007 Diaporama de PowerPoint 2007 שקופית של PowerPoint 2007 @@ -39234,7 +40710,7 @@ diapositive PowerPoint 2007 Slajd PowerPoint 2007 diapositivo PowerPoint 2007 - Slide do PowerPoint 2007 + Slide do PowerPoint 2007 Слайд PowerPoint 2007 Snímka PowerPoint 2007 Prosojnica PowerPoint 2007 @@ -39242,14 +40718,15 @@ PowerPoint 2007-bildspel PowerPoint 2007 slaytı слайд PowerPoint 2007 - PowerPoint 2007 幻灯片 - PowerPoint 2007 投影片 + PowerPoint 2007 幻灯片 + PowerPoint 2007 投影片 PowerPoint 2007 show + PowerPoint 2007-vertoning عرض PowerPoint 2007 Презентация-шоу — PowerPoint 2007 exposició de PowerPoint 2007 @@ -39257,12 +40734,13 @@ PowerPoint 2007-dias PowerPoint-2007-Präsentation Παρουσίαση PowerPoint 2007 - PowerPoint 2007 show + PowerPoint 2007 show presentación autoejecutable de PowerPoint 2007 PowerPoint 2007 ikuskizuna PowerPoint 2007 -diaesitys PowerPoint 2007 framsýning diaporama PowerPoint 2007 + esecuzion presentazion PowerPoint 2007 taispeántas PowerPoint 2007 Exposición de PowerPoint 2007 תצוגה של PowerPoint 2007 @@ -39280,7 +40758,7 @@ diaporama PowerPoint 2007 Pokaz PowerPoint 2007 espetáculo PowerPoint 2007 - Apresentação do PowerPoint 2007 + Apresentação do PowerPoint 2007 Prezentare PowerPoint 2007 Презентация PowerPoint 2007 Ukážka PowerPoint 2007 @@ -39289,25 +40767,27 @@ PowerPoint 2007-visning PowerPoint 2007 gösterisi показ слайдів PowerPoint 2007 - PowerPoint 2007 放映 - PowerPoint 2007 展示 + PowerPoint 2007 放映 + PowerPoint 2007 展示 PowerPoint 2007 presentation template + PowerPoint 2007-voorleggingsjabloon Шаблон за презентации — PowerPoint 2007 plantilla de presentació de PowerPoint 2007 šablona prezentace PowerPoint 2007 PowerPoint 2007-præsentationsskabelon PowerPoint 2007-Präsentationsvorlage Πρότυπο παρουσίασης PowerPoint 2007 - PowerPoint 2007 presentation template + PowerPoint 2007 presentation template plantilla de presentación de PowerPoint 2007 PowerPoint 2007 aurkezpen txantiloia PowerPoint 2007 -esitysmalli modèle de présentation PowerPoint 2007 + model presentazion PowerPoint 2007 teimpléad láithreoireachta PowerPoint 2007 modelo de presentación de PowerPoint 2007 תבנית למצגת של PowerPoint 2007 @@ -39325,7 +40805,7 @@ modèl de presentacion PowerPoint 2007 Szablon prezentacji PowerPoint 2007 modelo de apresentação PowerPoint 2007 - Modelo de apresentação do PowerPoint 2007 + Modelo de apresentação do PowerPoint 2007 Шаблон презентации PowerPoint 2007 Šablóna prezentácie PowerPoint 2007 Predloga predstavitve PowerPoint 2007 @@ -39333,14 +40813,15 @@ PowerPoint 2007-presentationsmall PowerPoint 2007 sunum şablonu шаблон презентації PowerPoint 2007 - PowerPoint 2007 演示文稿模板 - PowerPoint 2007 簡報範本 + PowerPoint 2007 演示文稿模板 + PowerPoint 2007 簡報範本 Excel 2007 spreadsheet + Excel 2007-sigblad جدول Excel 2007 Таблица — Excel 2007 full de càlcul d'Excel 2007 @@ -39348,12 +40829,13 @@ Excel 2007-regneark Excel-2007-Tabelle Λογιστικό φύλλο Excel 2007 - Excel 2007 spreadsheet + Excel 2007 spreadsheet hoja de cálculo de Excel 2007 Excel 2007 kalkulu-orria Excel 2007 -taulukko Excel 2007 rokniark feuille de calcul Excel 2007 + sfuei di calcul Excel 2007 scarbhileog Excel 2007 folla de cálculo de Excel 2007 גליון נתונים של Excel 2007 @@ -39372,35 +40854,37 @@ fuèlh de calcul Excel 2007 Arkusz Excel 2007 folha de cálculo Excel 2007 - Planilha do Excel 2007 + Planilha do Excel 2007 Foaie de calcul Excel 2007 Электронная таблица Excel 2007 Zošit Excel 2007 Razpredelnica Microsoft Excel 2007 табела Ексела 2007 Excel 2007-kalkylblad - Excel 2007 çalışma sayfası + Excel 2007 hesap çizelgesi sayfası ел. таблиця Excel 2007 Bảng tính Excel 2007 - Excel 2007 电子表格 - Excel 2007 試算表 + Excel 2007 电子表格 + Excel 2007 試算表 Excel 2007 spreadsheet template + Excel 2007-sigbladsjabloon Шаблон за таблици — Excel 2007 plantilla de full de càlcul d'Excel 2007 šablona sešitu Excel 2007 Excel 2007-regnearksskabelon Excel 2007-Tabellenvorlage Πρότυπο λογιστικού φύλλου Excel 2007 - Excel 2007 spreadsheet template + Excel 2007 spreadsheet template plantilla de hoja de cálculo de Excel 2007 Excel 2007 kalkulu-orri txantiloia Excel 2007 -taulukkomalli modèle de feuille de calcul Excel 2007 + model sfuei di calcul Excel 2007 teimpléad scarbhileoige Excel 2007 modelo de folla de cálculo Excel 2007 תבנית של גיליון נתונים של Excel 2007 @@ -39418,38 +40902,40 @@ modèl de fuèlh de calcul Excel 2007 Szablon arkusza Excel 2007 modelo de folha de cálculo Excel 2007 - Modelo de planilha do Excel 2007 + Modelo de planilha do Excel 2007 Шаблон электронной таблицы Excel 2007 Šablóna zošitu Excel 2007 Predloga razpredelnice Excel 2007 шаблон табеле Ексела 2007 Excel 2007-kalkylarksmall - Excel 2007 çalışma sayfası şablonu + Excel 2007 hesap çizelgesi şablonu шаблон електронної таблиці Excel 2007 - Excel 2007 电子表格模板 - Excel 2007 試算表範本 + Excel 2007 电子表格模板 + Excel 2007 試算表範本 T602 document + T602-dokument مستند T602 Documentu T602 - Dakument T602 + Dakument T602 Документ — T602 document T602 dokument T602 T602-dokument T602-Dokument Έγγραφο T602 - T602 document + T602 document T602-dokumento documento T602 T602 dokumentua T602-asiakirja T602 skjal document T602 + document T602 cáipéis T602 documento T602 מסמך T602 @@ -39469,7 +40955,7 @@ document T602 Dokument T602 documento T602 - Documento T602 + Documento T602 Document T602 Документ T602 Dokument T602 @@ -39480,75 +40966,54 @@ T602 belgesi документ T602 Tài liệu T602 - T602 文档 - T602 文件 + T602 文档 + T602 文件 - - - + + + - Cisco VPN Settings - إعدادات Cisco VPN - Nałady Cisco VPN + Cisco VPN settings Настройки — ВЧМ на Cisco ajusts VPN de Cisco - nastavení Cisco VPN - Cisco VPN-opsætning + Cisco VPN-indstillinger Cisco-VPN-Einstellungen - Ρυθμίσεις Cisco VPN - Cisco VPN Settings - configuración de VPN de Cisco + Cisco VPN settings + configuración de Cisco VPN Cisco VPN ezarpenak - Cisco VPN -asetukset - Cisco VPN stillingar + Ciscon VPN-asetukset paramètres VPN Cisco - socruithe VPN Cisco - configuracións de VPN de Cisco - הגדרות של Cisco VPN Cisco VPN postavke Cisco VPN beállítások - Configuration VPN Cisco - Penataan Cisco VPN + Pengaturan VPN Cisco Impostazioni VPN Cisco - Cisco VPN 設定 - Cisco VPN-ის პარამეტრები Cisco VPN баптаулары - Cisco VPN 설정 - Cisco VPN parametrai - Cisco VPN iestatījumi - Cisco VPN-innstillinger - Cisco VPN-instellingen - Cisco VPN-innstillingar - paramètres VPN Cisco + 시스코 VPN 설정 Ustawienia VPN Cisco - definições de Cisco VPN - Configurações de VPN da Cisco - Configurări VPN Cisco + Configurações de VPN da Cisco Файл настроек Cisco VPN Nastavenia Cisco VPN - Datoteka nastavitev Cisco VPN - Rregullime VPN Cisco - подешавања Циско ВПН-а + Nastavitve Cisco VPN Cisco VPN-inställningar - Cisco VPN Ayarları + Cisco VPN ayarları параметри VPN Cisco - Thiết lập VPN Cisco - Cisco VPN 设置 - Cisco VPN 設定值 + Cisco VPN 设置 + Cisco VPN 設定 - - + + ICC profile + ICC-profiel تشكيلة OCL Perfil ICC Цветови профил — OCL @@ -39557,13 +41022,14 @@ ICC-profil ICC-Profil Προφίλ ICC - ICC profile + ICC profile ICC-profilo perfil ICC ICC profila ICC-profiili ICC umhvarv profil ICC + profîl ICC próifíl ICC perfíl ICC פרופיל ICC @@ -39581,7 +41047,7 @@ perfil ICC Profil ICC perfil ICC - Perfil ICC + Perfil ICC Profil ICC Профиль ICC Profil farieb ICC @@ -39590,10 +41056,10 @@ ICC-profil ICC profili профіль ICC - ICC 配置文件 - ICC 設定檔 + ICC 配置文件 + ICC 設定組合 - + @@ -39601,18 +41067,19 @@ IT 8.7 color calibration file ملف ضبط ألوان IT 8.7 - Файл за цветово калибриране — IT 8.7 + Цветово калибриране — IT 8.7 fitxer de calibratge de color IT 8.7 soubor kalibrace barev IT 8.7 IT 8.7 farvekalibreringsfil IT 8.7-Farbkalibrierungsdatei Αρχείο βαθμονόμησης χρώματος ΙΤ 8.7 - IT 8.7 color calibration file + IT 8.7 color calibration file archivo de calibración de color IT 8.7 IT 8.7 kolore-kalibrazioaren fitxategia IT 8.7 -värikalibrointitiedosto IT 8.7 litstillingarfíla fichier de calibration couleur IT 8.7 + file calibradure colôr IT 8.7 comhad calabraithe dathanna IT 8.7 ficheiro de calibración de cor IT 8.7 קובץ כיול צבע IT 8.7 @@ -39630,7 +41097,7 @@ fichièr de calibracion color IT 8.7 Plik kalibracji kolorów IT 8.7 ficheiro de calibração de cor IT 8.7 - Arquivo de calibração de cor IT 8.7 + Arquivo de calibração de cor IT 8.7 Fișier de calibrare a culorii IT 8.7 Файл калибровки цвета IT 8.7 Súbor kalibrácie farieb IT 8.7 @@ -39639,10 +41106,10 @@ IT 8.7-färgkalibreringsfil IT 8.7 renk kalibrasyon dosyası файл калібрування кольорів IT 8.7 - IT 8.7 色彩校准文件 - IT 8.7 色彩校正檔 + IT 8.7 色彩校准文件 + IT 8.7 色彩校正檔 - + @@ -39650,16 +41117,18 @@ CCMX color correction file + Цветови поправки — CCMX fitxer de correcció de color CCMX soubor korekce barev CCMX CCMX-farvekorrektionsfil CCMX-Farbkorrekturdatei Αρχείο διόρθωσης χρωμάτων CCMX - CCMX colour correction file + CCMX colour correction file archivo de corrección de color CCMX CCMX kolore-kalibrazioaren fitxategia CCMX-värikorjaustiedosto fichier de correction colorimétrique CCMX + file corezion colôr CCMX comhad ceartúchán dathanna CCMX Ficheiro de corrección de cor CCMX קובץ תיקון צבע מסוג CCMX @@ -39675,7 +41144,7 @@ fichièr de correccion colorimetrica CCMX Plik korekcji kolorów CCMX ficheiro de correção de cor CCMX - Arquivo de correção de cor CCMX + Arquivo de correção de cor CCMX Файл цветовой коррекции CCMX Súbor korekcie farieb CCMX Datoteka barvne poprave CCMX @@ -39683,10 +41152,10 @@ CCMX-färgkorrigeringsfil CCMX renk düzeltme dosyası файл даних виправлення кольорів CCMX - CCMX 色彩校准文件 - CCMX 色彩校正檔 + CCMX 色彩校准文件 + CCMX 色彩校正檔 - + @@ -39694,16 +41163,19 @@ WinHelp help file + WinHelp-hulplêer + Помощен файл — WinHelp fitxer d'ajuda WinHelp soubor nápovědy WinHelp WinHelp-hjælpefil WinHelp-Hilfedatei Αρχείο βοήθειας WinHelp - WinHelp help file + WinHelp help file archivo de ayuda de WinHelp WinHelp laguntza fitxategia WinHelp-ohjetiedosto fichier d'aide WinHelp + file di jutori WinHelp comhad cabhrach WinHelp Ficheiro de axuda WinHelp קובץ עזרה מסוג WinHelp @@ -39719,7 +41191,7 @@ fichièr d'ajuda WinHelp Plik pomocy WinHelp ficheiro de ajuda WinHelp - Arquivo de ajuda WinHelp + Arquivo de ajuda WinHelp Файл справки WinHelp Súbor Pomocníka WinHelp Datoteka pomoči WinHelp @@ -39727,24 +41199,27 @@ WinHelp-hjälpfil WinHelp yardım dosyası файл довідки WinHelp - WinHelp 帮助文件 - WinHelp 說明檔 + WinHelp 帮助文件 + WinHelp 說明檔 - + binary differences between files + двоична разлика между файлове diferencies binàries entre fitxers binární rozdíl mezi soubory binære forskelle mellem filer binäre Unterschiede zwischen Dateien - binary differences between files + binary differences between files diferencias entre archivos binarios fitxategi binarioen arteko ezberdinstasunak + binaariset erot tiedostojen välillä différences binaires entre fichiers + diferencis binariis tra file difríochtaí dénártha idir comhaid הבדלים בינריים בין קבצים Binarne razlike između datoteka @@ -39754,40 +41229,42 @@ файлдар арасындағы бинарлық айырмашылықтар 바이너리 차이 비교 파일 Binarna różnica pomiędzy plikami - Diferenças binárias entre arquivos + Diferenças binárias entre arquivos Двоичные различия между файлами Binárne rozdiely medzi súbormi бинарне разлике датотека binära skillnader mellan filer dosyalar arasındaki ikilik farklar двійкова різниця між файлами - 文件的二进制区别 - 檔案間的二進位差異 + 文件的二进制区别 + 檔案間的二進位差異 - - + + - + - + digital photos + digitale foto’s الصور الرقمية - ličbavyja zdymki + ličbavyja zdymki Цифрови фотографии fotos digitals digitální fotografie digitale billeder Digitale Fotos Ψηφιακές φωτογραφίες - digital photos + digital photos fotos digitales argazki digitalak digivalokuvia talgildar myndir photos numériques + fotos digjitâls grianghraif dhigiteacha fotos dixitais תמונות דיגיטליות @@ -39806,7 +41283,7 @@ fòtos numericas Zdjęcia cyfrowe fotografias digitais - Fotos digitais + Fotos digitais fotografii digitale Цифровые фотографии Digitálne fotografie @@ -39817,32 +41294,36 @@ sayısal fotoğraflar цифрові фотографії ảnh chụp số - 数字化图像 - 數位相片 + 数字化图像 + 數位相片 - + - + Video CD + Video-CD Video CD CD de videu - Videa CD + Videa CD CD — видео Video CD Video CD Video-cd Video-CD Video CD - Video CD + Video CD Video-KD Video CD Bideo CDa Video CD Video CD CD vidéo + Video CD dlúthdhiosca físe Video CD תקליטור וידאו @@ -39861,7 +41342,7 @@ CD vidèo Video CD Video CD - CD de vídeo + CD de vídeo CD video Видео CD Video CD @@ -39872,32 +41353,36 @@ Video CD Video CD Đĩa CD ảnh động - VCD - Video CD + VCD + Video CD - + - + Super Video CD + Super Video-CD Super Video CD CD de Super Video - Super Video CD + Super Video CD CD — супер видео Super Video CD Super Video CD Super Video-cd Super-Video-CD Super Video CD - Super Video CD + Super Video CD Super-Video-KD Super Video CD Super Bideo CDa Super Video CD Super Video CD Super VCD + Super Video CD dlúthdhiosca Super Video Super vídeo CD Super Video CD @@ -39916,7 +41401,7 @@ Super VCD Super Video CD Super Video CD - CD de Super Vídeo (SVCD) + CD de Super Vídeo (SVCD) Super Video CD Super Video CD Super Video CD @@ -39927,32 +41412,34 @@ Super Video CD Super Video CD Đĩa CD siêu ảnh động - SVCD - Super Video CD + SVCD + Super Video CD - + - + video DVD + video-DVD DVD مرئي DVD de videu - videa DVD + videa DVD DVD — видео - DVD-Video + DVD de video videodisk DVD video-dvd Video-DVD Βίντεο DVD - video DVD + video DVD video-DVD DVD de vídeo bideo DVDa video-DVD video DVD DVD vidéo + DVD video DVD físe DVD de vídeo DVD וידאו @@ -39972,7 +41459,7 @@ DVD vidèo DVD-Video DVD vídeo - DVD de vídeo + DVD de vídeo DVD video Видео DVD DVD-Video @@ -39983,34 +41470,36 @@ video DVD відео-DVD đĩa DVD ảnh động - 视频 DVD - 視訊 DVD + 视频 DVD + 視訊 DVD - - - - + + + + - + audio CD + oudio-CD CD سمعي - aŭdyjo CD + aŭdyjo CD CD — аудио CD d'àudio zvukové CD lyd-cd Audio-CD CD ήχου - audio CD + audio CD Son-KD - CD de sonido + CD de audio Audio CDa ääni-CD audio CD CD audio + CD audio dlúthdhiosca fuaime CD de son תקליטור שמע @@ -40029,7 +41518,7 @@ CD àudio CD-Audio CD áudio - CD de áudio + CD de áudio CD audio Аудио CD Zvukové CD @@ -40037,30 +41526,32 @@ CD audio звучни ЦД ljud-cd - Müzik CD'si + ses CD'si звуковий CD đĩa CD âm thanh - 音频 CD - 音訊 CD + 音频 CD + 音訊 CD - + blank CD disc + skoon CD-skyf قرص CD فارغ - čysty dysk CD + čysty dysk CD CD — празно disc CD en blanc prázdný disk CD tom cd-disk Leere CD Κενό CD - blank CD disc + blank CD disc disco CD en blanco CD disko hutsa tyhjä CD-levy blonk fløga CD vierge + disc CD vueit dlúthdhiosca folamh disco de CD en brancho תקליטור ריק @@ -40079,7 +41570,7 @@ CD verge Pusta płyta CD CD vazio - Disco CD vazio + Disco CD vazio disc gol CD Чистый диск CD Prázdny disk CD @@ -40090,27 +41581,29 @@ boş CD diski порожній компакт-диск đĩa CD trống - 空 CD 光盘 - 空白 CD 光碟 + 空 CD 光盘 + 空白 CD 光碟 - + blank DVD disc + skoon DVD-skyf قرص DVD فارغ - čysty dysk DVD + čysty dysk DVD DVD — празно disc DVD en blanc prázdný disk DVD tom dvd-disk Leere DVD Κενό DVD - blank DVD disc + blank DVD disc disco DVD en blanco DVD disko hutsa tyhjä DVD-levy blonk margfløga DVD vierge + disc DVD vueit DVD folamh disco de DVD en branco תקליטור DVD ריק @@ -40129,7 +41622,7 @@ DVD verge Pusta płyta DVD DVD vazio - Disco DVD vazio + Disco DVD vazio disc gol DVD Чистый диск DVD Prázdny disk DVD @@ -40140,27 +41633,29 @@ boş DVD diski порожній диск DVD đĩa DVD trống - 空 DVD 光盘 - 空白 DVD 光碟 + 空 DVD 光盘 + 空白 DVD 光碟 - + blank Blu-ray disc + skoon Blu-ray-skyf قرص بلو-راي فارغ - čysty dysk Blu-ray + čysty dysk Blu-ray Blu-ray — празно disc Blu-Ray en blanc prázdný disk Blu-ray tom Blu-ray-disk Leere Blu-ray-Scheibe Κενό Blu-ray - blank Blu-ray disc + blank Blu-ray disc disco Blu-ray en blanco Blu-ray disko hutsa tyhjä Blu-ray-levy blankur Blu-ray diskur disque Blu-Ray vierge + disc Blu-ray vueit diosca folamh Blu-Ray disco Blu-ray en branco תקליטור בלו־ריי ריק @@ -40179,7 +41674,7 @@ disc Blu-Ray verge Pusta płyta Blu-ray Blu-Ray vazio - Disco Blu-ray vazio + Disco Blu-ray vazio disc gol Blu-ray Чистый диск Blu-ray Prázdny disk Blu-ray @@ -40187,30 +41682,32 @@ Disk bosh Blu-ray празан Блу-реј диск tom Blu-ray-skiva - boş Blue-ray diski + boş Blu-ray diski порожній диск Blu-ray đĩa Blu-ray trống - 空蓝光 DVD - 空白 Blu-ray 光碟 + 空蓝光 DVD + 空白 Blu-ray 光碟 - + blank HD DVD disc + skoon HD-DVD-skyf قرص HD DVD فارغ - čysty dysk HD DVD + čysty dysk HD DVD HD DVD — празно disc HD-DVD en blanc prázdný disk HD DVD tom HD dvd-disk Leere HD-DVD Κενό HD DVD - blank HD DVD disc + blank HD DVD disc disco HD DVD en blanco HD DVD disko hutsa tyhjä HD DVD -levy blankur HD DVD diskur disque HD-DVD vierge + disc HD DVD vueit HD DVD folamh disco de HD DVD en branco דיסק HD DVD ריק @@ -40229,7 +41726,7 @@ disc HD-DVD verge Pusta płyta HD DVD HD DVD vazio - Disco HD DVD vazio + Disco HD DVD vazio disc gol HD DVD Чистый диск HD DVD Prázdny disk HD DVD @@ -40240,28 +41737,30 @@ boş HD DVD diski порожній диск HD DVD đĩa DVD HD trống - 空 HD DVD 光盘 - 空白 HD DVD 光碟 + 空 HD DVD 光盘 + 空白 HD DVD 光碟 - + audio DVD + oudio-DVD DVD سمعي - aŭdyjo DVD + aŭdyjo DVD DVD — аудио DVD d'àudio zvukové DVD lyd-dvd Audio-DVD DVD ήχου - audio DVD + audio DVD Son-DVD - DVD de sonido + DVD de audio audio DVDa ääni-DVD Ljóð DVD DVD audio + DVD audio DVD fuaime DVD de son DVD שמע @@ -40280,7 +41779,7 @@ DVD àudio DVD-Audio DVD áudio - DVD de áudio + DVD de áudio DVD audio Аудио DVD Zvukové DVD @@ -40288,35 +41787,38 @@ DVD audio звучни ДВД ljud-dvd - Müzik DVD'si + ses DVD'si звуковий DVD đĩa DVD âm thanh - 音频 DVD - 音訊 DVD + 音频 DVD + 音訊 DVD - - + + - + Blu-ray video disc + Blu-ray-videoskyf قرص بلو-راي مرئي Discu Blu-ray de videu - Videadysk Blu-ray + Videadysk Blu-ray Blu-ray — видео disc de vídeo Blu-Ray videodisk Blu-ray - Blu-ray video-disk + Blu-ray-videodisk Blu-ray-Videoscheibe Δίσκος βίντεο Blu-ray - Blu-ray video disc + Blu-ray video disc disco de vídeo Blu-ray Blu-ray bideo-diskoa Blu-ray-videolevy Blu-ray diskur disque vidéo Blu-Ray + disc video Blu-ray diosca físe Blu-Ray disco de vídeo Blu-ray תקליטור וידאו מסוג בלו־ריי @@ -40336,7 +41838,7 @@ disc vidèo Blu-Ray Płyta wideo Blu-ray Blu-ray de vídeo - Disco de vídeo Blu-ray + Disco de vídeo Blu-ray Disc video Blu-ray Видеодиск Blu-ray Videodisk Blu-ray @@ -40347,32 +41849,35 @@ Blu-ray video diski відеодиск Blu-ray Đĩa ảnh động Blu-ray - 蓝光视频光盘 - Blu-ray 視訊光碟 + 蓝光视频光盘 + Blu-ray 視訊光碟 - - + + - + HD DVD video disc + HD-DVD-videoskyf قرص HD DVD مرئي Discu HD DVD de videu - Videadysk HD DVD + Videadysk HD DVD HD DVD — видео disc de vídeo HD-DVD Videodisk HD DVD HD DVD-videodisk HD-DVD-Videoscheibe Δίσκος βίντεο HD DVD - HD DVD video disc + HD DVD video disc disco de vídeo HD DVD HD DVD bideo-diskoa HD DVD -videolevy HD DVD video diskur disque vidéo HD DVD + disc video HD DVD diosca físe HD DVD disco de vídeo HD DVD תקליטור וידאו HD DVD @@ -40391,7 +41896,7 @@ disc vidèo HD DVD Płyta wideo HD DVD HD DVD de vídeo - Disco de vídeo HD DVD + Disco de vídeo HD DVD Disc video HD DVD Видеодиск HD DVD Videodisk HD DVD @@ -40402,36 +41907,38 @@ HD DVD vidyo diski відеодиск HD DVD Đĩa ảnh động DVD HD - HD DVD 视频光盘 - HD DVD 視訊光碟 + HD DVD 视频光盘 + HD DVD 視訊光碟 - - - + + + - + e-book reader + e-boekleser Четец на е-книги lector de llibres electrònics čtečka elektronických knih e-bogslæser E-Book-Leser Αναγνώστης ηλεκτρονικών βιβλίων - e-book reader + e-book reader lector de libros electrónicos e-book irakurlea e-kirjan lukulaite lecteur de livre numérique + letôr e-book léitheoir r-leabhair lector de libros electrónicos קורא ספרים אלקטרוניים Čitač e-knjiga e-könyvolvasó Lector de libro electronic - Pembaca e-book + pembaca e-book Lettore e-book 電子書籍リーダー электронды кітаптарды оқу құрылғысы @@ -40441,7 +41948,7 @@ lector de libre numeric Czytnik e-booków leitor de ebooks - Leitor de e-book + Leitor de e-book Устройство для чтения электронных книг Čítačka e-kníh Bralnik elektronskih knjig @@ -40449,31 +41956,35 @@ e-bokläsare e-kitap okuyucu пристрій для читання електронних книг - 电子书阅读器 - e-book 閱讀器 + 电子书阅读器 + e-book 閱讀器 - + - + Picture CD + Picture CD Picture CD - Picture CD - CD — изображения - Picture CD + Picture CD + Picture CD — изображения + CD d'imatges Picture CD Billedcd Picture CD CD εικόνων - Picture CD + Picture CD Picture CD Picture CD Picture CD Picture CD CD Picture + Picture CD dlúthdhiosca grianghraf Picture CD תקליטור תמונות @@ -40492,7 +42003,7 @@ CD Picture Picture CD Picture CD - CD de Fotos + CD de Fotos CD cu fotografii Picture CD Picture CD @@ -40503,30 +42014,32 @@ Resim CD'si CD з зображеннями Đĩa CD ảnh - 柯达 Picture CD - 圖片 CD + 柯达 Picture CD + 圖片 CD - + - + portable audio player + draagbare oudiospeler مشغل الملفات المسموعة المحمولة - pieranosny aŭdyjoplayer + pieranosny aŭdyjoplayer Преносим аудио плеър reproductor d'àudio portàtil přenosný zvukový přehrávač bærbar lydafspiller Portables Audio-Wiedergabegerät Φορητός αναπαραγωγέας μουσικής - portable audio player - dispositivo de sonido portátil + portable audio player + reproductor de audio portátil audio erreproduzigailu eramangarria siirrettävä äänisoitin leysur ljóðavspælari lecteur audio portable + riprodutôr audio portatil seinnteoir iniompartha fuaime dispositivo de son portábel נגן מוזיקה נייד @@ -40545,7 +42058,7 @@ lector àudio portable Przenośny odtwarzacz dźwięku reprodutor áudio portátil - Reprodutor de áudio portátil + Reprodutor de áudio portátil player audio portabil Портативный аудиопроигрыватель Prenosný hudobný prehrávač @@ -40556,27 +42069,62 @@ taşınabilir ses oynatıcısı портативний аудіопрогравач bộ phát nhạc di động - 便携式音频播放器 - 可攜式音訊播放程式 + 便携式音频播放器 + 可攜式音訊播放程式 + + + + + OSTree software updates + Обновление — OSTree + actualitzacions de programari OSTree + OSTree-softwareopdateringer + OSTree-Softwareaktualisierungen + OSTree software updates + actualizaciones de programas de OSTree + OSTree software eguneraketak + OSTree-ohjelmistopäivitykset + mises à jour logicielles OSTree + OSTree nadopune softvera + OSTree szoftverfrissítések + Pemutakhiran perangkat lunak OSTree + Aggiornamenti software OSTree + OSTree бағдарламалық қамтама жаңартулары + OSTree 소프트웨어 업데이트 + Aktualizacje oprogramowania OSTree + Atualizações de software OSTree + OSTree programvaruuppdateringar + OSTree yazılım güncellemeleri + оновлення програмного забезпечення OSTree + OSTree 软件更新 + OSTree 軟體更新 + + + + + - + software + sagteware برنامج - prahrama + prahrama Софтуер programari software software Software Λογισμικό - software + software software softwarea ohjelmisto ritbúnaður logiciel + software bogearraí software תכנה @@ -40596,7 +42144,7 @@ logicial Oprogramowanie programa - Aplicativo + Aplicativo software Программное обеспечение Softvér @@ -40607,26 +42155,29 @@ yazılım програмне забезпечення phần mềm - 软件 - 軟體 + 软件 + 軟體 - + UNIX software + UNIX-sagteware برنامج يونكس - Софтуер за UNIX + Софтуер — UNIX programari d'UNIX software systému UNIX UNIX-programmer UNIX-Software Λογισμικό UNIX - UNIX software + UNIX software software de UNIX UNIXeko softwarea UNIX-ohjelmisto UNIX ritbúnaður logiciel UNIX + software UNIX bogearraí UNIX Software de UNIX תכנה ל־UNIX @@ -40644,7 +42195,7 @@ logicial UNIX Oprogramowanie systemu UNIX programa UNIX - Aplicativo UNIX + Aplicativo UNIX Software UNIX Программа UNIX Softvér UNIX @@ -40653,19 +42204,21 @@ UNIX-programvara UNIX yazılımı програмне забезпечення UNIX - UNIX 软件 - UNIX 軟體 + UNIX 软件 + UNIX 軟體 - - - + + + - + Windows software + Windows-sagteware برنامج ويندوز Софтуер — Windows programari de Windows @@ -40673,12 +42226,13 @@ Windowsprogram Windows-Software Λογισμικό Windows - Windows software + Windows software software de Windows Windows-eko softwarea Windows-ohjelmisto Windows ritbúnaður logiciel Windows + software Windows bogearraí Windows Software de Windows תכנה ל־Windows @@ -40696,7 +42250,7 @@ logicial Windows Oprogramowanie systemu Windows programa Windows - Programa do Windows + Programa do Windows Software Windows Программа Windows Softvér Windows @@ -40705,28 +42259,31 @@ Windows-program Windows yazılımı програмне забезпечення Windows - Windows 软件 - Windows 軟體 + Windows 软件 + Windows 軟體 - - + + TriG RDF document + TriG RDF-dokument Documentu RDF TriG + Документ — TriG RDF document TriG RDF dokument Trig RDF TriG RDF-dokument TriG-RDF-Dokument Έγγραφο TriG RDF - TriG RDF document + TriG RDF document documento RDF de TriG TriG RDF dokumentua TriG RDF -asiakirja document RDF TriG + document TriG RDF cáipéis RDF TriG Documento RDF TriG מסמך RDF של TriG @@ -40740,7 +42297,7 @@ document RDF TriG Dokument RDF TriG documento TriG RDF - Documento RDF do TriG + Documento RDF do TriG Документ TriG RDF RDF dokument TriG Dokument TriG RDF @@ -40748,8 +42305,8 @@ TriG RDF-dokument TriG RDF belgesi документ RDF TriG - TriG RDF 文档 - TriG RDF 文件 + TriG RDF 文档 + TriG RDF 文件 TriG TriG RDF Graph Triple Language @@ -40757,18 +42314,21 @@ - + Apple Keynote 5 presentation - presentació Keynote 5 d'Apple + Apple Keynote 5-voorlegging + Презентация — Apple Keynote 5 + presentació d'Apple Keynote 5 prezentace Apple Keynote 5 Apple Keynote 5-præsentation Apple-Keynote-5-Präsentation Παρουσίαση Apple Keynote 5 - Apple Keynote 5 presentation + Apple Keynote 5 presentation presentación de Apple Keynote 5 Apple Keynote 5 aurkezpena Apple Keynote 5 -esitys présentation Apple Keynote 5 + presentazion Apple Keynote 5 láithreoireacht Apple Keynote 5 Presentación de Apple Keynote 5 מצגת Apple Keynote 5 @@ -40782,7 +42342,7 @@ presentacion Apple Keynote 5 Prezentacja Apple Keynote 5 apresentação Apple Keynote 5 - Apresentação do Apple Keynote 5 + Apresentação do Apple Keynote 5 Презентация Apple Keynote 5 Prezentácia Apple Keynote 5 Predstavitev Apple Keynote 5 @@ -40790,54 +42350,45 @@ Apple Keynote 5-presentation Apple Keynote 5 sunumu презентація Apple Keynote 5 - Apple Keynote 5 演示文稿 - Apple Keynote 5 簡報 + Apple Keynote 5 演示文稿 + Apple Keynote 5 簡報 - - + + - - + + - Adobe PageMaker - Adobe PageMaker - Adobe PageMaker - Adobe PageMaker - Adobe PageMaker - Adobe PageMaker - Adobe PageMaker - Adobe PageMaker - Adobe PageMaker - Adobe PageMaker - Adobe PageMaker - Adobe PageMaker - Adobe PageMaker - Adobe PageMaker - Adobe PageMaker - Adobe PageMaker - Adobe PageMaker - Adobe PageMaker - Adobe PageMaker - Adobe PageMaker - Adobe 페이지메이커 - Adobe PageMaker - Adobe PageMaker - Adobe PageMaker - Adobe PageMaker - Adobe PageMaker - Adobe PageMaker - Dokument Adobe PageMaker - Адобе Пејџ Мејкер - Adobe PageMaker - Adobe PageMaker - Adobe PageMaker - Adobe PageMaker - Adobe PageMaker + Adobe PageMaker document + Документ — Adobe PageMaker + document d'Adobe PageMaker + Adobe PageMaker-dokument + Adobe-PageMaker-Dokument + Adobe PageMaker document + documento de Adobe PageMaker + Adobe PageMaker dokumentua + Adobe PageMaker -asiakirja + document Adobe PageMaker + Adobe PageMaker dokument + Adobe PageMaker dokumentum + Dokume Adobe PageMaker + Documento Adobe PageMaker + Adobe PageMaker құжаты + 어도비 페이지메이커 문서 + Dokument Adobe PageMaker + Documento do Adobe PageMaker + Документ Adobe PageMaker + Dokument Adobe PageMaker + Adobe PageMaker-dokument + Adobe PageMaker belgesi + документ Adobe PageMaker + Adobe PageMaker 文档 + Adobe PageMaker 文件 @@ -40847,56 +42398,55 @@ - Doom WAD - WAD de Doom - datový balík WAD hry Doom - Doom WAD - Doom WAD - Doom WAD - WAD de Doom - Doom WAD - WAD Doom - WAD Doom - Doom WAD - Doom WAD - WAD pro Doom - WAD Doom - WAD Doom - Doom WAD - 둠 WAD + Doom WAD file + Ниво — Doom + fitxer WAD de Doom + Doom WAD-fil + Doom-WAD-Datei + Doom WAD file + archivo WAD de Doom + Doom WAD fitxategia + Doom WAD -tiedosto + fichier Doom WAD + Doom WAD datoteka + Doom WAD fájl + Berkas WAD Doom + File WAD Doom + Doom WAD файлы + 둠 WAD 파일 Plik WAD gry Doom - Doom WAD - Doom WAD - WAD Doom - Doom WAD - Дум ВАД - Doom-WAD - Doom WAD - WAD Doom - Doom WAD - Doom WAD + Arquivo Doom WAD + Файл Doom WAD + Doom WAD-fil + Doom WAD dosyası + файл WAD Doom + Doom WAD 文件 + Doom WAD 檔 WAD Where's All the Data - - + + - + Amiga disk image + Amiga-skyfbeeldlêer + Диск — Amiga imatge de disc d'Amiga obraz disku pro Amigu Amiga-diskaftryk Amiga-Datenträgerabbild Εικόνα δίσκου Amiga - Amiga disk image + Amiga disk image imagen de disco de Amiga Amiga disko irudia Amiga-levytiedosto image disque Amiga + imagjin disc Amiga íomhá diosca Amiga דמות כונן Amiga Amiga slika diska @@ -40909,54 +42459,57 @@ imatge disc Amiga Obraz dysku Amiga imagem de disco Amiga - Imagem de disco Amiga + Imagem de disco Amiga Образ диска Amiga Obraz disku Amiga слика диска Амиге Amiga-diskavbild - Amiga disk kalıbı + Amiga disk görüntüsü образ диска Amiga - Amiga 磁盘映像 - Amiga 磁碟映像檔 + Amiga 磁盘映像 + Amiga 磁碟映像檔 - + Flatpak application bundle + Flatpak-toepassingsbundel + Програмен пакет — Flatpak paquet d'aplicació Flatpak balíček Flatpak s aplikací Flatpak-programsamling Flatpak-Anwendungspaket - Flatpak application bundle + Flatpak application bundle paquete de aplicación Flatpak Flatpak aplikazio bilduma Flatpak-sovelluspaketti lot applicatif Flatpak + côl di aplicazions Flatpak burla feidhmchláir Flatpak חבילת יישומי Flatpak Flatpak paket aplikacije Flatpak alkalmazáscsomag - bundel aplikasi Flatpak + Bundel aplikasi Flatpak Bundle applicazione Flatpak Flatpak қолданбалар дестесі Flatpak 프로그램 번들 Pakiet programu Flatpak - Pacote de aplicativo Flatpak + Pacote de aplicativo Flatpak Пакет приложения Flatpak Balík aplikácií Flatpak скуп програма Флатпака Flatpak-programbunt Flatpak uygulama paketi пакунок із програмами Flatpak - Flatpak 应用组合包 - Flatpak 應用程式套組 + Flatpak 应用组合包 + Flatpak 應用程式套組 - - + + @@ -40965,142 +42518,148 @@ Flatpak repository description + Описание на хранилище — Flatpak descripció de dipòsit de Flatpak popis repozitáře Flatpak Flatpak-arkivbeskrivelse Flatpak-Repositoriumsbeschreibung - Flatpak repository description + Flatpak repository description descripción de repositorio de Flatpak Flatpak biltegi deskribapena Flatpak-ohjelmistolähdekuvaus description de dépôt Flatpak + descrizion dipuesit Flatpak cur síos ar stórlann Flatpak תיאור מאגר Flatpak Flatpak opis repozitorija Flatpak tárolóleírás - deskripsi repositori Flatpak + Deskripsi repositori Flatpak Descrizione repository Flatpack Flatpak репозиторийі сипаттамасы Flatpak 저장소 디스크립션 Opis repozytorium Flatpak - Descrição de repositório Flatpak + Descrição de repositório Flatpak Описание репозитория Flatpak Popis repozitára Flatpak опис ризнице Флатпака Flatpak-förrådsbeskrivning Flatpak depo açıklaması опис сховища Flatpak - Flatpak 软件库描述 - Flatpak 軟體庫描述 + Flatpak 软件库描述 + Flatpak 軟體庫描述 - + Flatpak repository reference + Указател към хранилище — Flatpak referència de dipòsit Flatpak odkaz na repozitář Flatpak + Flatpak-arkivreference Flatpak-Repositoriumsreferenz - Flatpak repository reference + Flatpak repository reference referencia a repositorio de Flatpak Flatpak biltegi erreferentzia Flatpak-ohjelmistolähdeviite référence de dépôt Flatpak + riferiment dipuesit Flatpak tagairt do stórlann Flatpak Flatpak preporučeni repozitorij Flatpak tárolóhivatkozás - acuan repositori Flatpak + Acuan repositori Flatpak Riferimento repository Flatpack Flatpak репозиторийіне сілтеме Flatpak 저장소 참조 Odwołanie do repozytorium Flatpak - Referência de repositório Flatpak + Referência de repositório Flatpak Ссылка на репозиторий Flatpak Referencia repozitára Flatpak упута ризнице Флатпака Flatpak-förrådsreferens - Flatpak depo başvurusu + Flatpak depo atfı посилання на сховище Flatpak - Flatpak 软件库引用 - Flatpak 軟體庫參照 + Flatpak 软件库引用 + Flatpak 軟體庫參照 - + - Squashfs filesystem - Sistema de fitxers Squashfs - souborový systém Squashfs - Squashfs-filsystem - Squashfs-Dateisystem - Squashfs filesystem - sistema de archivos Squashfs - Squashfs fitxategi sistema - Squashfs-tiedostojärjestelmä - système de fichiers Squashfs - córas comhad Squashfs - מערכת קבצים Squashfs - Squashfs datotečni sustav - Squashfs fájlrendszer - sistem berkas Squashfs - File system squashfs - Squashfs файлдық жүйесі - Squashfs 파일 시스템 - System plików SquashFS - Sistema de arquivos Squashfs - Файловая система Squashfs - Systém súborov Squashfs - систем датотека Сквошфс - Squashfs-filsystem - Squashfs dosya sistemi - файлова система squashfs - Squashfs 文件系统 - Squashfs 檔案系統 - - - + Squashfs filesystem image + Диск — Squashfs + imatge de sistema de fitxers Squashfs + Squashfs-filsystemaftryk + Squashfs-Dateisystemabbild + Squashfs filesystem image + imagen de sistema de archivos de Squashfs + Squashfs fitxategi sistema irudia + Squashfs-tiedostojärjestelmän levykuva + image de système de fichiers Squashfs + Squashfs slika datotečnog sustava + Squashfs fájlrenszerkép + Image sistem berkas Squashfs + Immagine file system squashfs + Squashfs файлдық жүйе бейнесі + Squashfs 파일 시스템 이미지 + Obraz systemu plików SquashFS + Imagem de sistema de arquivos Squashfs + Образ файловой системы Squashfs + Obraz systému súborov Squashfs + Squashfs filsystemsavbildning + Squashfs dosya sistemi görüntüsü + образ файлової системи squashfs + Squashfs 文件系统映像 + Squashfs 檔案系統映像 + + + - + AppImage application bundle + AppImage-toepassingsbundel + Програмен пакет — AppImage paquet d'aplicació AppImage balíček AppImage s aplikací - Applmage-programsamling + AppImage-programsamling AppImage-Anwendungspaket - AppImage application bundle + AppImage application bundle paquete de aplicación AppImage AppImage aplikazio bilduma AppImage-sovelluspaketti lot applicatif AppImage + côl di aplicazions AppImage burla feidhmchláir AppImage חבילת יישומי AppImage AppImage paket aplikacije AppImage alkalmazáscsomag - bundel aplikasi AppImage + Bundel aplikasi AppImage Bundle applicazione AppImage AppImage қолданбалар дестесі AppImage 프로그램 번들 Pakiet programu AppImage - Pacote de aplicativo AppImage + pacote de aplicação AppImage + Pacote de aplicativo AppImage Пакет приложения AppImage Balík aplikácií AppImage скуп програма Ап-слике AppImage-programbunt AppImage uygulama paketi пакунок із програмами AppImage - AppImage 应用组合包 - AppImage 應用程式套組 + AppImage 应用组合包 + AppImage 應用程式套組 @@ -41118,45 +42677,78 @@ Snap package - Paquet Snap + Snap-pakket + Пакет — Snap + paquet snap balíček Snap Snap-pakke Snap-Paket - Snap package + Snap package paquete Snap Snap paketea Snap-paketti paquet Snap + pachet Snap pacáiste Snap חבילת Snap Snap paket Snap-csomag - paket Snap + Paket Snap Pacchetto snap Snap дестесі Snap 패키지 Pakiet Snap - Pacote Snap + Pacote Snap Пакет Snap Balík Snap + Paket Snap Снап пакет Snap-paket Snap paketi пакунок snap - Snap 软件包 - Snap 軟體包 + Snap 软件包 + Snap 軟體包 - + STL 3D model + STL 3D-model + Модел — STL 3D + model 3D STL + 3D model STL + STL 3D-model + STL 3D-Modell + STL 3D model + modelo 3D de STL + STL 3D modeloa + STL 3D malli + modèle 3D STL + model STL 3D + samhail 3T STL + STL 3D model + STL 3D modell + Model 3D STL + Modello 3D STL + STL 3D моделі + STL 3D 모델 + Model 3D STL + Modelo 3D STL + 3D-модель STL + STL 3D model + Model STL 3D + STL-3D-modell + STL 3D modeli + просторова модель STL + STL 3D 模型 + STL 3D 模型 STL StereoLithography - - + + @@ -41165,31 +42757,35 @@ G-code file + Модел — G-code fitxer G-code soubor G-code + G-code-fil G-Code-Datei - G-code file + G-code file archivo G-code G-code fitxategia G-code-tiedosto fichier G-code + file G-code comhad G-code G-kôd datoteka G-code fájl - berkas G-code + Berkas G-code File G-code G-code файлы - 지-코드 파일 + G-code 파일 Plik G-code - Arquivo G-code + Arquivo G-code Файл G-code Súbor G-code + Datoteka G-code датотека Г-ко̂да G-code-fil G-code dosyası файл G-code - G-code 文件 - G-code 檔案 + G-code 文件 + G-code 檔案 @@ -41197,37 +42793,260 @@ Nintendo FDS disk image - Imatge de disc Nintendo FDS + Nintendo FDS-skyfbeeldlêer + Диск — Nintendo FDS + imatge de disc Nintendo FDS obraz disku pro Nintendo FDS + Nintendo FDS-diskaftryk Nintendo-FDS-Datenträgerabbild - Nintendo FDS disk image + Nintendo FDS disk image imagen de disco FDS de Nintendo Nintendo FDS disko irudia Nintendo FDS -levykuva image disque Nintendo FDS + imagjin disc Nintendo FDS íomhá diosca Nintendo FDS Nintendo FDS slika diska Nintendo FDS lemezkép - image disk Nintendo FDS + Image disk Nintendo FDS Immagine disco Nintendo FDS Nintendo FDS диск бейнесі 닌텐도 FDS 디스크 이미지 Obraz dysku Nintendo FDS - Imagem de disco Nintendo FDS + Imagem de disco Nintendo FDS Образ диска Nintendo FDS Obraz disku Nintendo FDS Нинтендо ФДС слика диска Nintendo FDS-diskavbild - Nintendo FDS disk kalıbı + Nintendo FDS disk görüntüsü образ диска FDS Nintendo - 任天堂 FDS 磁盘映像 - Nintendo FDS 磁碟映像檔 + 任天堂 FDS 磁盘映像 + Nintendo FDS 磁碟映像檔 FDS Famicom Disk System - + + + + + + QEMU QCOW disk image + imatge de disc QEMU QCOW + QEMU QCOW-diskaftryk + QEMU QCOW-Datenträgerabbild + QEMU QCOW disk image + imagen de disco QCOW de QEMU + QEMU QCOW -levykuva + image disque QEMU QCOW + QEMU QCOW slika diska + QEMU QCOW lemezkép + Image disk QCOW QEMU + Immagine disco QEMU QCOW + QEMU QCOW диск бейнесі + QEMU QCOW 디스크 이미지 + Obraz dysku QCOW QEMU + Imagem de disco QEMU QCOW + Образ диска QEMU QCOW + QEMU QCOW-diskavbildning + QEMU QCOW disk görüntüsü + образ диска QCOW QEMU + QEMU QCOW 磁盘映像 + QEMU QCOW 磁碟映像檔 + QCOW + QEMU Copy On Write + + + + + + + + + + + AppleWorks document + document AppleWorks + AppleWorks-dokument + AppleWorks-Dokument + AppleWorks document + documento de AppleWorks + AppleWorks-asiakirja + document AppleWorks + AppleWorks dokument + AppleWorks-dokumentum + Dokumen AppleWorks + Documento AppleWorks + AppleWorks құжаты + AppleWorks 문서 + Dokument AppleWorks + Documento AppleWorks + Документ AppleWorks + Dokument AppleWorks + AppleWorks-dokument + AppleWorks belgesi + документ AppleWorks + AppleWorks 文档 + AppleWorks 文件 + + + + + + BPS patch + pedaç de BPS + BPS-rettelse + BPS-Patch + BPS patch + parche BPS + BPS-korjaus + correctif BPS + BPS zakrpa + BPS javítócsomag + Patch BPS + Patch BPS + BPS өзгерісі + BPS 패치 + Łata BPS + Patch BPS + Патч BPS + BPS patch + BPS yaması + латка BPS + BPS 补丁 + BPS 修補檔 + BPS + Binary Patching System + + + + + + + + IPS patch + pedaç d'IPS + IPS-rettelse + IPS-Patch + IPS patch + parche IPS + IPS-korjaus + correctif IPS + IPS zakrpa + IPS javítócsomag + Patch IPS + Patch IPS + IPS өзгерісі + IPS 패치 + Łata IPS + Patch IPS + Патч IPS + IPS patch + IPS yaması + латка IPS + IPS 补丁 + IPS 修補檔 + IPS + International Patching System + + + + + + + + Pyspread spreadsheet + full de càlcul de Pyspread + Pyspread-regneark + Pyspread-Tabelle + Pyspread spreadsheet + hoja de cálculo de Pyspread + Pyspread-taulukko + feuille de calcul Pyspread + Pyspread proračunska tablica + Foglio di calcolo Pyspread + Arkusz pyspread + Planilha do Pyspread + Pyspread-kalkylblad + ел. таблиця Pyspread + Pyspread 电子表格 + Pyspread 試算表 + + + + + + + Pyspread spreadsheet (bzip-compressed) + full de càlcul de Pyspread (amb compressió bzip) + Pyspread-regneark (bzip-komprimeret) + Pyspread-Tabelle (bzip-komprimiert) + Pyspread spreadsheet (bzip-compressed) + hoja de cálculo de Pyspread (comprimida con bzip) + Pyspread-taulukko (bzip-pakattu) + feuille de calcul Pyspread (compressée bzip) + Pyspread proračunska tablica (bzip sažeta) + Foglio di calcolo Pyspread (compresso con bzip) + Arkusz pyspread (kompresja bzip) + Planilha do Pyspread (compactada com bzip) + Pyspread-kalkylblad (bzip-komprimerat) + ел. таблиця Pyspread (стиснена bzip) + Pyspread 电子表格(bzip 压缩) + Pyspread 試算表 (bzip 壓縮) + + + + + + + Kotlin source code + codi font en Kotlin + Kotlin-kildekode + Kotlin-Quelltext + Kotlin source code + código fuente en Kotlin + Kotlin-lähdekoodi + code source Kotlin + Kotlin izvorni kôd + Codice sorgente Kotlin + Kod źródłowy Kotlin + Código-fonte Kotlin + Kotlin-källkod + вихідний код мовою Kotlin + Kotlin 源代码 + Kotlin 源碼 + + + + AV1 Image File Format (AVIF) + format de fitxer d'imatge AV1 (AVIF) + AV1-billedfilformat (AVIF) + AV1-Bilddateiformat (AVIF) + AV1 Image File Format (AVIF) + formato de archivo de imagen AV1 (AVIF) + AV1-kuvatiedostomuoto (AVIF) + AV1 format datoteke slike (AVIF) + AV1 Image File Format (AVIF) + Format pliku obrazu AV1 (AVIF) + Formato de arquivo de imagem AV1 (AVIF) + AV1-bildfilformat (AVIF) + формат файлів зображень AV1 (AVIF) + AV1 图像文件格式(AVIF) + AV1 影像檔案格式 (AVIF) + + + + + + + + + + + + + diff --git a/qtbase/src/corelib/mimetypes/qmimedatabase.cpp b/qtbase/src/corelib/mimetypes/qmimedatabase.cpp index 9de22cef33..34591fc667 100644 --- a/qtbase/src/corelib/mimetypes/qmimedatabase.cpp +++ b/qtbase/src/corelib/mimetypes/qmimedatabase.cpp @@ -46,6 +46,9 @@ #include "qmimeprovider_p.h" #include "qmimetype_p.h" +#include +#include + #include #include #include @@ -389,20 +392,23 @@ QMimeType QMimeDatabasePrivate::mimeTypeForFileNameAndData(const QString &fileNa // Disambiguate conflicting extensions (if magic matching found something) if (candidateByData.isValid() && magicAccuracy > 0) { const QString sniffedMime = candidateByData.name(); - // If the sniffedMime matches a glob match, use it + // If the sniffedMime matches a highest-weight glob match, use it if (candidatesByName.m_matchingMimeTypes.contains(sniffedMime)) { *accuracyPtr = 100; return candidateByData; } - for (const QString &m : qAsConst(candidatesByName.m_matchingMimeTypes)) { + for (const QString &m : qAsConst(candidatesByName.m_allMatchingMimeTypes)) { if (inherits(m, sniffedMime)) { // We have magic + pattern pointing to this, so it's a pretty good match *accuracyPtr = 100; return mimeTypeForName(m); } } - *accuracyPtr = magicAccuracy; - return candidateByData; + if (candidatesByName.m_allMatchingMimeTypes.isEmpty()) { + // No glob, use magic + *accuracyPtr = magicAccuracy; + return candidateByData; + } } } @@ -428,6 +434,7 @@ QList QMimeDatabasePrivate::allMimeTypes() bool QMimeDatabasePrivate::inherits(const QString &mime, const QString &parent) { const QString resolvedParent = resolveAlias(parent); + QDuplicateTracker seen; std::stack toCheck; toCheck.push(mime); while (!toCheck.empty()) { @@ -436,8 +443,11 @@ bool QMimeDatabasePrivate::inherits(const QString &mime, const QString &parent) const QString mimeName = toCheck.top(); toCheck.pop(); const auto parentList = parents(mimeName); - for (const QString &par : parentList) - toCheck.push(resolveAlias(par)); + for (const QString &par : parentList) { + const QString resolvedPar = resolveAlias(par); + if (!seen.hasSeen(resolvedPar)) + toCheck.push(resolvedPar); + } } return false; } diff --git a/qtbase/src/corelib/mimetypes/qmimeglobpattern.cpp b/qtbase/src/corelib/mimetypes/qmimeglobpattern.cpp index b1de8907b2..fa8f4c545d 100644 --- a/qtbase/src/corelib/mimetypes/qmimeglobpattern.cpp +++ b/qtbase/src/corelib/mimetypes/qmimeglobpattern.cpp @@ -83,7 +83,10 @@ void QMimeGlobMatchResult::addMatch(const QString &mimeType, int weight, const Q } if (!m_matchingMimeTypes.contains(mimeType)) { m_matchingMimeTypes.append(mimeType); - m_allMatchingMimeTypes.append(mimeType); + if (replace) + m_allMatchingMimeTypes.prepend(mimeType); // highest-weight first + else + m_allMatchingMimeTypes.append(mimeType); m_knownSuffixLength = knownSuffixLength; } } diff --git a/qtbase/src/corelib/mimetypes/qmimeprovider.cpp b/qtbase/src/corelib/mimetypes/qmimeprovider.cpp index 258dddf8cb..5125704cf1 100644 --- a/qtbase/src/corelib/mimetypes/qmimeprovider.cpp +++ b/qtbase/src/corelib/mimetypes/qmimeprovider.cpp @@ -242,21 +242,28 @@ void QMimeBinaryProvider::addFileNameMatches(const QString &fileName, QMimeGlobM return; Q_ASSERT(m_cacheFile); const QString lowerFileName = fileName.toLower(); + int numMatches = 0; // Check literals (e.g. "Makefile") - matchGlobList(result, m_cacheFile, m_cacheFile->getUint32(PosLiteralListOffset), fileName); - // Check complex globs (e.g. "callgrind.out[0-9]*") - matchGlobList(result, m_cacheFile, m_cacheFile->getUint32(PosGlobListOffset), fileName); + numMatches = matchGlobList(result, m_cacheFile, m_cacheFile->getUint32(PosLiteralListOffset), fileName); // Check the very common *.txt cases with the suffix tree - const int reverseSuffixTreeOffset = m_cacheFile->getUint32(PosReverseSuffixTreeOffset); - const int numRoots = m_cacheFile->getUint32(reverseSuffixTreeOffset); - const int firstRootOffset = m_cacheFile->getUint32(reverseSuffixTreeOffset + 4); - matchSuffixTree(result, m_cacheFile, numRoots, firstRootOffset, lowerFileName, lowerFileName.length() - 1, false); - if (result.m_matchingMimeTypes.isEmpty()) - matchSuffixTree(result, m_cacheFile, numRoots, firstRootOffset, fileName, fileName.length() - 1, true); + if (numMatches == 0) { + const int reverseSuffixTreeOffset = m_cacheFile->getUint32(PosReverseSuffixTreeOffset); + const int numRoots = m_cacheFile->getUint32(reverseSuffixTreeOffset); + const int firstRootOffset = m_cacheFile->getUint32(reverseSuffixTreeOffset + 4); + if (matchSuffixTree(result, m_cacheFile, numRoots, firstRootOffset, lowerFileName, lowerFileName.length() - 1, false)) { + ++numMatches; + } else if (matchSuffixTree(result, m_cacheFile, numRoots, firstRootOffset, fileName, fileName.length() - 1, true)) { + ++numMatches; + } + } + // Check complex globs (e.g. "callgrind.out[0-9]*" or "README*") + if (numMatches == 0) + matchGlobList(result, m_cacheFile, m_cacheFile->getUint32(PosGlobListOffset), fileName); } -void QMimeBinaryProvider::matchGlobList(QMimeGlobMatchResult &result, CacheFile *cacheFile, int off, const QString &fileName) +int QMimeBinaryProvider::matchGlobList(QMimeGlobMatchResult &result, CacheFile *cacheFile, int off, const QString &fileName) { + int numMatches = 0; const int numGlobs = cacheFile->getUint32(off); //qDebug() << "Loading" << numGlobs << "globs from" << cacheFile->file.fileName() << "at offset" << cacheFile->globListOffset; for (int i = 0; i < numGlobs; ++i) { @@ -272,9 +279,12 @@ void QMimeBinaryProvider::matchGlobList(QMimeGlobMatchResult &result, CacheFile //qDebug() << pattern << mimeType << weight << caseSensitive; QMimeGlobPattern glob(pattern, QString() /*unused*/, weight, qtCaseSensitive); - if (glob.matchFileName(fileName)) + if (glob.matchFileName(fileName)) { result.addMatch(QLatin1String(mimeType), weight, pattern); + ++numMatches; + } } + return numMatches; } bool QMimeBinaryProvider::matchSuffixTree(QMimeGlobMatchResult &result, QMimeBinaryProvider::CacheFile *cacheFile, int numEntries, int firstOffset, const QString &fileName, int charPos, bool caseSensitiveCheck) diff --git a/qtbase/src/corelib/mimetypes/qmimeprovider_p.h b/qtbase/src/corelib/mimetypes/qmimeprovider_p.h index f9c8ef384c..5b328a7d5e 100644 --- a/qtbase/src/corelib/mimetypes/qmimeprovider_p.h +++ b/qtbase/src/corelib/mimetypes/qmimeprovider_p.h @@ -115,7 +115,7 @@ public: private: struct CacheFile; - void matchGlobList(QMimeGlobMatchResult &result, CacheFile *cacheFile, int offset, const QString &fileName); + int matchGlobList(QMimeGlobMatchResult &result, CacheFile *cacheFile, int offset, const QString &fileName); bool matchSuffixTree(QMimeGlobMatchResult &result, CacheFile *cacheFile, int numEntries, int firstOffset, const QString &fileName, int charPos, bool caseSensitiveCheck); bool matchMagicRule(CacheFile *cacheFile, int numMatchlets, int firstOffset, const QByteArray &data); QLatin1String iconForMime(CacheFile *cacheFile, int posListOffset, const QByteArray &inputMime); diff --git a/qtbase/src/corelib/mimetypes/qmimetype.cpp b/qtbase/src/corelib/mimetypes/qmimetype.cpp index 0c0de63961..d6a351262b 100644 --- a/qtbase/src/corelib/mimetypes/qmimetype.cpp +++ b/qtbase/src/corelib/mimetypes/qmimetype.cpp @@ -376,14 +376,17 @@ QStringList QMimeType::parentMimeTypes() const static void collectParentMimeTypes(const QString &mime, QStringList &allParents) { const QStringList parents = QMimeDatabasePrivate::instance()->mimeParents(mime); + QStringList newParents; for (const QString &parent : parents) { // I would use QSet, but since order matters I better not - if (!allParents.contains(parent)) + if (!allParents.contains(parent)) { allParents.append(parent); + newParents.append(parent); + } } // We want a breadth-first search, so that the least-specific parent (octet-stream) is last // This means iterating twice, unfortunately. - for (const QString &parent : parents) + for (const QString &parent : newParents) collectParentMimeTypes(parent, allParents); } diff --git a/qtbase/src/corelib/plugin/qlibrary.cpp b/qtbase/src/corelib/plugin/qlibrary.cpp index 5d2f024267..45b5a3fe27 100644 --- a/qtbase/src/corelib/plugin/qlibrary.cpp +++ b/qtbase/src/corelib/plugin/qlibrary.cpp @@ -526,7 +526,7 @@ void QLibraryPrivate::mergeLoadHints(QLibrary::LoadHints lh) if (pHnd.loadRelaxed()) return; - loadHintsInt.storeRelaxed(lh); + loadHintsInt.fetchAndOrRelaxed(lh); } QFunctionPointer QLibraryPrivate::resolve(const char *symbol) @@ -538,6 +538,13 @@ QFunctionPointer QLibraryPrivate::resolve(const char *symbol) void QLibraryPrivate::setLoadHints(QLibrary::LoadHints lh) { + // Set the load hints directly for a dummy if this object is not associated + // with a file. Such object is not shared between multiple instances. + if (fileName.isEmpty()) { + loadHintsInt.storeRelaxed(lh); + return; + } + // this locks a global mutex QMutexLocker lock(&qt_library_mutex); mergeLoadHints(lh); @@ -1166,6 +1173,10 @@ QString QLibrary::errorString() const lazy symbol resolution, and will not export external symbols for resolution in other dynamically-loaded libraries. + \note Hints can only be cleared when this object is not associated with a + file. Hints can only be added once the file name is set (\a hints will + be or'ed with the old hints). + \note Setting this property after the library has been loaded has no effect and loadHints() will not reflect those changes. diff --git a/qtbase/src/corelib/plugin/qpluginloader.cpp b/qtbase/src/corelib/plugin/qpluginloader.cpp index 0a63b93762..02b8c588be 100644 --- a/qtbase/src/corelib/plugin/qpluginloader.cpp +++ b/qtbase/src/corelib/plugin/qpluginloader.cpp @@ -105,6 +105,8 @@ QT_BEGIN_NAMESPACE \sa QLibrary, {Plug & Paint Example} */ +static constexpr QLibrary::LoadHints defaultLoadHints = QLibrary::PreventUnloadHint; + /*! \class QStaticPlugin \inmodule QtCore @@ -155,7 +157,7 @@ QPluginLoader::QPluginLoader(const QString &fileName, QObject *parent) : QObject(parent), d(nullptr), did_load(false) { setFileName(fileName); - setLoadHints(QLibrary::PreventUnloadHint); + setLoadHints(defaultLoadHints); } /*! @@ -357,7 +359,7 @@ static QString locatePlugin(const QString& fileName) void QPluginLoader::setFileName(const QString &fileName) { #if defined(QT_SHARED) - QLibrary::LoadHints lh = QLibrary::PreventUnloadHint; + QLibrary::LoadHints lh = defaultLoadHints; if (d) { lh = d->loadHints(); d->release(); @@ -414,15 +416,21 @@ QString QPluginLoader::errorString() const void QPluginLoader::setLoadHints(QLibrary::LoadHints loadHints) { if (!d) { - d = QLibraryPrivate::findOrCreate(QString()); // ugly, but we need a d-ptr + d = QLibraryPrivate::findOrCreate({}, {}, loadHints); // ugly, but we need a d-ptr d->errorString.clear(); + } else { + d->setLoadHints(loadHints); } - d->setLoadHints(loadHints); } QLibrary::LoadHints QPluginLoader::loadHints() const { - return d ? d->loadHints() : QLibrary::LoadHints(); + // Not having a d-pointer means that the user hasn't called + // setLoadHints() / setFileName() yet. In setFileName() we will + // then force defaultLoadHints on loading, so we must return them + // from here as well. + + return d ? d->loadHints() : defaultLoadHints; } #endif // QT_CONFIG(library) diff --git a/qtbase/src/corelib/serialization/qcborvalue.cpp b/qtbase/src/corelib/serialization/qcborvalue.cpp index 89a928d348..3a8c2cb9ec 100644 --- a/qtbase/src/corelib/serialization/qcborvalue.cpp +++ b/qtbase/src/corelib/serialization/qcborvalue.cpp @@ -2123,7 +2123,8 @@ QCborArray QCborValue::toArray(const QCborArray &defaultValue) const Q_ASSERT(n == -1 || container == nullptr); if (n < 0) dd = container; - return dd ? QCborArray(*dd) : defaultValue; + // return QCborArray(*dd); but that's UB if dd is nullptr + return dd ? QCborArray(*dd) : QCborArray(); } /*! @@ -2165,7 +2166,8 @@ QCborMap QCborValue::toMap(const QCborMap &defaultValue) const Q_ASSERT(n == -1 || container == nullptr); if (n < 0) dd = container; - return dd ? QCborMap(*dd) : defaultValue; + // return QCborMap(*dd); but that's UB if dd is nullptr + return dd ? QCborMap(*dd) : QCborMap(); } /*! diff --git a/qtbase/src/corelib/serialization/qxmlstream.cpp b/qtbase/src/corelib/serialization/qxmlstream.cpp index 0ac5548178..0d49cbac19 100644 --- a/qtbase/src/corelib/serialization/qxmlstream.cpp +++ b/qtbase/src/corelib/serialization/qxmlstream.cpp @@ -160,7 +160,7 @@ enum { StreamEOF = ~0U }; addData() or by waiting for it to arrive on the device(). \value UnexpectedElementError The parser encountered an element - that was different to those it expected. + or token that was different to those it expected. */ @@ -295,13 +295,34 @@ QXmlStreamEntityResolver *QXmlStreamReader::entityResolver() const QXmlStreamReader is a well-formed XML 1.0 parser that does \e not include external parsed entities. As long as no error occurs, the - application code can thus be assured that the data provided by the - stream reader satisfies the W3C's criteria for well-formed XML. For - example, you can be certain that all tags are indeed nested and - closed properly, that references to internal entities have been - replaced with the correct replacement text, and that attributes have - been normalized or added according to the internal subset of the - DTD. + application code can thus be assured, that + \list + \li the data provided by the stream reader satisfies the W3C's + criteria for well-formed XML, + \li tokens are provided in a valid order. + \endlist + + Unless QXmlStreamReader raises an error, it guarantees the following: + \list + \li All tags are nested and closed properly. + \li References to internal entities have been replaced with the + correct replacement text. + \li Attributes have been normalized or added according to the + internal subset of the \l DTD. + \li Tokens of type \l StartDocument happen before all others, + aside from comments and processing instructions. + \li At most one DOCTYPE element (a token of type \l DTD) is present. + \li If present, the DOCTYPE appears before all other elements, + aside from StartDocument, comments and processing instructions. + \endlist + + In particular, once any token of type \l StartElement, \l EndElement, + \l Characters, \l EntityReference or \l EndDocument is seen, no + tokens of type StartDocument or DTD will be seen. If one is present in + the input stream, out of order, an error is raised. + + \note The token types \l Comment and \l ProcessingInstruction may appear + anywhere in the stream. If an error occurs while parsing, atEnd() and hasError() return true, and error() returns the error that occurred. The functions @@ -620,6 +641,7 @@ QXmlStreamReader::TokenType QXmlStreamReader::readNext() d->token = -1; return readNext(); } + d->checkToken(); return d->type; } @@ -740,6 +762,14 @@ static const short QXmlStreamReader_tokenTypeString_indices[] = { }; +static const char QXmlStreamReader_XmlContextString[] = + "Prolog\0" + "Body\0"; + +static const short QXmlStreamReader_XmlContextString_indices[] = { + 0, 7 +}; + /*! \property QXmlStreamReader::namespaceProcessing The namespace-processing flag of the stream reader @@ -775,6 +805,16 @@ QString QXmlStreamReader::tokenString() const QXmlStreamReader_tokenTypeString_indices[d->type]); } +/*! + \internal + \return \param ctxt (Prolog/Body) as a string. + */ +QString contextString(QXmlStreamReaderPrivate::XmlContext ctxt) +{ + return QLatin1String(QXmlStreamReader_XmlContextString + + QXmlStreamReader_XmlContextString_indices[static_cast(ctxt)]); +} + #endif // QT_NO_XMLSTREAMREADER QXmlStreamPrivateTagStack::QXmlStreamPrivateTagStack() @@ -866,6 +906,8 @@ void QXmlStreamReaderPrivate::init() type = QXmlStreamReader::NoToken; error = QXmlStreamReader::NoError; + currentContext = XmlContext::Prolog; + foundDTD = false; } /* @@ -1302,15 +1344,18 @@ inline int QXmlStreamReaderPrivate::fastScanContentCharList() return n; } -inline int QXmlStreamReaderPrivate::fastScanName(int *prefix) +// Fast scan an XML attribute name (e.g. "xml:lang"). +inline QXmlStreamReaderPrivate::FastScanNameResult +QXmlStreamReaderPrivate::fastScanName(Value *val) { int n = 0; uint c; while ((c = getChar()) != StreamEOF) { if (n >= 4096) { // This is too long to be a sensible name, and - // can exhaust memory - return 0; + // can exhaust memory, or the range of decltype(*prefix) + raiseNamePrefixTooLongError(); + return {}; } switch (c) { case '\n': @@ -1339,23 +1384,23 @@ inline int QXmlStreamReaderPrivate::fastScanName(int *prefix) case '+': case '*': putChar(c); - if (prefix && *prefix == n+1) { - *prefix = 0; + if (val && val->prefix == n + 1) { + val->prefix = 0; putChar(':'); --n; } - return n; + return FastScanNameResult(n); case ':': - if (prefix) { - if (*prefix == 0) { - *prefix = n+2; + if (val) { + if (val->prefix == 0) { + val->prefix = n + 2; } else { // only one colon allowed according to the namespace spec. putChar(c); - return n; + return FastScanNameResult(n); } } else { putChar(c); - return n; + return FastScanNameResult(n); } Q_FALLTHROUGH(); default: @@ -1364,12 +1409,12 @@ inline int QXmlStreamReaderPrivate::fastScanName(int *prefix) } } - if (prefix) - *prefix = 0; + if (val) + val->prefix = 0; int pos = textBuffer.size() - n; putString(textBuffer, pos); textBuffer.resize(pos); - return 0; + return FastScanNameResult(0); } enum NameChar { NameBeginning, NameNotBeginning, NotName }; @@ -1878,6 +1923,14 @@ void QXmlStreamReaderPrivate::raiseWellFormedError(const QString &message) raiseError(QXmlStreamReader::NotWellFormedError, message); } +void QXmlStreamReaderPrivate::raiseNamePrefixTooLongError() +{ + // TODO: add a ImplementationLimitsExceededError and use it instead + raiseError(QXmlStreamReader::NotWellFormedError, + QXmlStream::tr("Length of XML attribute name exceeds implementation limits (4KiB " + "characters).")); +} + void QXmlStreamReaderPrivate::parseError() { @@ -4050,6 +4103,92 @@ void QXmlStreamWriter::writeCurrentToken(const QXmlStreamReader &reader) } } +static bool isTokenAllowedInContext(QXmlStreamReader::TokenType type, + QXmlStreamReaderPrivate::XmlContext loc) +{ + switch (type) { + case QXmlStreamReader::StartDocument: + case QXmlStreamReader::DTD: + return loc == QXmlStreamReaderPrivate::XmlContext::Prolog; + + case QXmlStreamReader::StartElement: + case QXmlStreamReader::EndElement: + case QXmlStreamReader::Characters: + case QXmlStreamReader::EntityReference: + case QXmlStreamReader::EndDocument: + return loc == QXmlStreamReaderPrivate::XmlContext::Body; + + case QXmlStreamReader::Comment: + case QXmlStreamReader::ProcessingInstruction: + return true; + + case QXmlStreamReader::NoToken: + case QXmlStreamReader::Invalid: + return false; + default: + return false; + } +} + +/*! + \internal + \brief QXmlStreamReader::isValidToken + \return \c true if \param type is a valid token type. + \return \c false if \param type is an unexpected token, + which indicates a non-well-formed or invalid XML stream. + */ +bool QXmlStreamReaderPrivate::isValidToken(QXmlStreamReader::TokenType type) +{ + // Don't change currentContext, if Invalid or NoToken occur in the prolog + if (type == QXmlStreamReader::Invalid || type == QXmlStreamReader::NoToken) + return false; + + // If a token type gets rejected in the body, there is no recovery + const bool result = isTokenAllowedInContext(type, currentContext); + if (result || currentContext == XmlContext::Body) + return result; + + // First non-Prolog token observed => switch context to body and check again. + currentContext = XmlContext::Body; + return isTokenAllowedInContext(type, currentContext); +} + +/*! + \internal + Checks token type and raises an error, if it is invalid + in the current context (prolog/body). + */ +void QXmlStreamReaderPrivate::checkToken() +{ + Q_Q(QXmlStreamReader); + + // The token type must be consumed, to keep track if the body has been reached. + const XmlContext context = currentContext; + const bool ok = isValidToken(type); + + // Do nothing if an error has been raised already (going along with an unexpected token) + if (error != QXmlStreamReader::Error::NoError) + return; + + if (!ok) { + raiseError(QXmlStreamReader::UnexpectedElementError, + QLatin1String("Unexpected token type %1 in %2.") + .arg(q->tokenString(), contextString(context))); + return; + } + + if (type != QXmlStreamReader::DTD) + return; + + // Raise error on multiple DTD tokens + if (foundDTD) { + raiseError(QXmlStreamReader::UnexpectedElementError, + QLatin1String("Found second DTD token in %1.").arg(contextString(context))); + } else { + foundDTD = true; + } +} + /*! \fn bool QXmlStreamAttributes::hasAttribute(const QString &qualifiedName) const \since 4.5 diff --git a/qtbase/src/corelib/serialization/qxmlstream.g b/qtbase/src/corelib/serialization/qxmlstream.g index 4321fed68a..8c6a1a5887 100644 --- a/qtbase/src/corelib/serialization/qxmlstream.g +++ b/qtbase/src/corelib/serialization/qxmlstream.g @@ -516,7 +516,16 @@ public: int fastScanLiteralContent(); int fastScanSpace(); int fastScanContentCharList(); - int fastScanName(int *prefix = nullptr); + + struct FastScanNameResult { + FastScanNameResult() : ok(false) {} + explicit FastScanNameResult(int len) : addToLen(len), ok(true) { } + operator bool() { return ok; } + int operator*() { Q_ASSERT(ok); return addToLen; } + int addToLen; + bool ok; + }; + FastScanNameResult fastScanName(Value *val = nullptr); inline int fastScanNMTOKEN(); @@ -525,6 +534,7 @@ public: void raiseError(QXmlStreamReader::Error error, const QString& message = QString()); void raiseWellFormedError(const QString &message); + void raiseNamePrefixTooLongError(); QXmlStreamEntityResolver *entityResolver; @@ -1811,7 +1821,12 @@ space_opt ::= space; qname ::= LETTER; /. case $rule_number: { - sym(1).len += fastScanName(&sym(1).prefix); + Value &val = sym(1); + if (auto res = fastScanName(&val)) + val.len += *res; + else + return false; + if (atEnd) { resume($rule_number); return false; @@ -1822,7 +1837,11 @@ qname ::= LETTER; name ::= LETTER; /. case $rule_number: - sym(1).len += fastScanName(); + if (auto res = fastScanName()) + sym(1).len += *res; + else + return false; + if (atEnd) { resume($rule_number); return false; diff --git a/qtbase/src/corelib/serialization/qxmlstream_p.h b/qtbase/src/corelib/serialization/qxmlstream_p.h index e5bde7b98e..be7b1fe665 100644 --- a/qtbase/src/corelib/serialization/qxmlstream_p.h +++ b/qtbase/src/corelib/serialization/qxmlstream_p.h @@ -804,6 +804,17 @@ public: #endif bool atEnd; + enum class XmlContext + { + Prolog, + Body, + }; + + XmlContext currentContext = XmlContext::Prolog; + bool foundDTD = false; + bool isValidToken(QXmlStreamReader::TokenType type); + void checkToken(); + /*! \sa setType() */ @@ -1005,7 +1016,16 @@ public: int fastScanLiteralContent(); int fastScanSpace(); int fastScanContentCharList(); - int fastScanName(int *prefix = nullptr); + + struct FastScanNameResult { + FastScanNameResult() : ok(false) {} + explicit FastScanNameResult(int len) : addToLen(len), ok(true) { } + operator bool() { return ok; } + int operator*() { Q_ASSERT(ok); return addToLen; } + int addToLen; + bool ok; + }; + FastScanNameResult fastScanName(Value *val = nullptr); inline int fastScanNMTOKEN(); @@ -1014,6 +1034,7 @@ public: void raiseError(QXmlStreamReader::Error error, const QString& message = QString()); void raiseWellFormedError(const QString &message); + void raiseNamePrefixTooLongError(); QXmlStreamEntityResolver *entityResolver; @@ -1939,7 +1960,12 @@ bool QXmlStreamReaderPrivate::parse() break; case 262: { - sym(1).len += fastScanName(&sym(1).prefix); + Value &val = sym(1); + if (auto res = fastScanName(&val)) + val.len += *res; + else + return false; + if (atEnd) { resume(262); return false; @@ -1947,7 +1973,11 @@ bool QXmlStreamReaderPrivate::parse() } break; case 263: - sym(1).len += fastScanName(); + if (auto res = fastScanName()) + sym(1).len += *res; + else + return false; + if (atEnd) { resume(263); return false; diff --git a/qtbase/src/corelib/text/qlocale_data_p.h b/qtbase/src/corelib/text/qlocale_data_p.h index c5e6a0d461..c613e4e537 100644 --- a/qtbase/src/corelib/text/qlocale_data_p.h +++ b/qtbase/src/corelib/text/qlocale_data_p.h @@ -1340,7 +1340,7 @@ static const QLocaleData locale_data[] = { { 25, 6, 126, 46, 44, 59, 37, 48, 45, 43, 101, 12300, 12301, 12302, 12303, 166,5 , 166,5 , 176,5 , 176,5 , 415,8 , 402,13 , 209,6 , 226,13 , 2022,21 , 1980,28 , 2008,14 , 2022,21 , 1980,28 , 2008,14 , 58,2 , 55,2 , 283,3 , 5,17 , 22,23 , {77,79,80}, 137,4 , 3174,13 , 4,4 , 13,6 , 589,4 , 602,9 , 2, 1, 7, 6, 7 }, // Chinese/Traditional Han/Macau { 25, 6, 208, 46, 44, 59, 37, 48, 45, 43, 101, 12300, 12301, 12302, 12303, 166,5 , 166,5 , 171,5 , 171,5 , 394,8 , 423,14 , 209,6 , 226,13 , 2022,21 , 1980,28 , 2008,14 , 2022,21 , 1980,28 , 2008,14 , 58,2 , 55,2 , 45,4 , 5,17 , 22,23 , {84,87,68}, 6,1 , 3187,13 , 4,4 , 13,6 , 589,4 , 611,2 , 2, 0, 7, 6, 7 }, // Chinese/Traditional Han/Taiwan { 26, 7, 74, 46, 44, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 0,6 , 0,6 , 53,10 , 63,17 , 37,5 , 8,10 , 0,28 , 0,28 , 85,14 , 0,28 , 0,28 , 85,14 , 0,2 , 0,2 , 45,4 , 5,17 , 22,23 , {69,85,82}, 14,1 , 0,7 , 8,5 , 4,0 , 0,0 , 0,0 , 2, 1, 1, 6, 7 }, // Corsican/Latin/France - { 27, 7, 54, 44, 46, 59, 37, 48, 8722, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 159,7 , 159,7 , 437,13 , 450,19 , 37,5 , 87,12 , 2043,28 , 2071,58 , 2129,14 , 2043,28 , 2071,58 , 2143,14 , 0,2 , 0,2 , 286,7 , 5,17 , 22,23 , {72,82,75}, 141,3 , 3200,60 , 19,5 , 4,0 , 613,8 , 621,8 , 2, 1, 1, 6, 7 }, // Croatian/Latin/Croatia + { 27, 7, 54, 44, 46, 59, 37, 48, 8722, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 159,7 , 159,7 , 437,13 , 450,19 , 37,5 , 87,12 , 2043,28 , 2071,58 , 2129,14 , 2043,28 , 2071,58 , 2143,14 , 0,2 , 0,2 , 286,7 , 5,17 , 22,23 , {69,85,82}, 14,1 , 3455,19 , 19,5 , 4,0 , 613,8 , 621,8 , 2, 1, 1, 6, 7 }, // Croatian/Latin/Croatia { 27, 7, 27, 44, 46, 59, 37, 48, 8722, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 159,7 , 159,7 , 469,9 , 450,19 , 37,5 , 87,12 , 2043,28 , 2071,58 , 2143,14 , 2043,28 , 2071,58 , 2143,14 , 0,2 , 0,2 , 286,7 , 5,17 , 22,23 , {66,65,77}, 144,2 , 3260,85 , 19,5 , 4,0 , 613,8 , 629,19 , 2, 1, 1, 6, 7 }, // Croatian/Latin/Bosnia And Herzegowina { 28, 7, 57, 44, 160, 59, 37, 48, 45, 43, 101, 8222, 8220, 8218, 8216, 0,6 , 0,6 , 181,7 , 181,7 , 156,8 , 478,17 , 55,4 , 59,9 , 2157,21 , 2178,49 , 2227,14 , 2157,21 , 2178,49 , 2227,14 , 60,4 , 57,4 , 293,5 , 5,17 , 22,23 , {67,90,75}, 146,2 , 3345,68 , 19,5 , 4,0 , 648,7 , 655,5 , 2, 0, 1, 6, 7 }, // Czech/Latin/Czech Republic { 29, 7, 58, 44, 46, 59, 37, 48, 45, 43, 101, 8220, 8221, 8216, 8217, 0,6 , 0,6 , 188,8 , 188,8 , 495,10 , 505,23 , 239,5 , 244,10 , 2241,28 , 2269,51 , 2320,14 , 2334,35 , 2269,51 , 2320,14 , 0,2 , 0,2 , 0,5 , 5,17 , 22,23 , {68,75,75}, 148,3 , 3413,42 , 19,5 , 4,0 , 660,5 , 665,7 , 2, 0, 1, 6, 7 }, // Danish/Latin/Denmark diff --git a/qtbase/src/corelib/text/qstringiterator_p.h b/qtbase/src/corelib/text/qstringiterator_p.h index b31c7673c2..731a241407 100644 --- a/qtbase/src/corelib/text/qstringiterator_p.h +++ b/qtbase/src/corelib/text/qstringiterator_p.h @@ -123,16 +123,20 @@ public: { Q_ASSERT_X(hasNext(), Q_FUNC_INFO, "iterator hasn't a next item"); - if (Q_UNLIKELY((pos++)->isHighSurrogate())) + if (Q_UNLIKELY((pos++)->isHighSurrogate())) { + Q_ASSERT(pos < e && pos->isLowSurrogate()); ++pos; + } } inline uint peekNextUnchecked() const { Q_ASSERT_X(hasNext(), Q_FUNC_INFO, "iterator hasn't a next item"); - if (Q_UNLIKELY(pos->isHighSurrogate())) + if (Q_UNLIKELY(pos->isHighSurrogate())) { + Q_ASSERT(pos + 1 < e && pos[1].isLowSurrogate()); return QChar::surrogateToUcs4(pos[0], pos[1]); + } return pos->unicode(); } @@ -158,8 +162,10 @@ public: Q_ASSERT_X(hasNext(), Q_FUNC_INFO, "iterator hasn't a next item"); const QChar cur = *pos++; - if (Q_UNLIKELY(cur.isHighSurrogate())) + if (Q_UNLIKELY(cur.isHighSurrogate())) { + Q_ASSERT(pos < e && pos->isLowSurrogate()); return QChar::surrogateToUcs4(cur, *pos++); + } return cur.unicode(); } @@ -199,16 +205,20 @@ public: { Q_ASSERT_X(hasPrevious(), Q_FUNC_INFO, "iterator hasn't a previous item"); - if (Q_UNLIKELY((--pos)->isLowSurrogate())) + if (Q_UNLIKELY((--pos)->isLowSurrogate())) { + Q_ASSERT(pos > i && pos[-1].isHighSurrogate()); --pos; + } } inline uint peekPreviousUnchecked() const { Q_ASSERT_X(hasPrevious(), Q_FUNC_INFO, "iterator hasn't a previous item"); - if (Q_UNLIKELY(pos[-1].isLowSurrogate())) + if (Q_UNLIKELY(pos[-1].isLowSurrogate())) { + Q_ASSERT(pos > i + 1 && pos[-2].isHighSurrogate()); return QChar::surrogateToUcs4(pos[-2], pos[-1]); + } return pos[-1].unicode(); } @@ -233,8 +243,10 @@ public: Q_ASSERT_X(hasPrevious(), Q_FUNC_INFO, "iterator hasn't a previous item"); const QChar cur = *--pos; - if (Q_UNLIKELY(cur.isLowSurrogate())) + if (Q_UNLIKELY(cur.isLowSurrogate())) { + Q_ASSERT(pos > i && pos[-1].isHighSurrogate()); return QChar::surrogateToUcs4(*--pos, cur); + } return cur.unicode(); } diff --git a/qtbase/src/corelib/thread/qfutex_p.h b/qtbase/src/corelib/thread/qfutex_p.h index f287b752d7..e294537787 100644 --- a/qtbase/src/corelib/thread/qfutex_p.h +++ b/qtbase/src/corelib/thread/qfutex_p.h @@ -52,6 +52,7 @@ // #include +#include QT_BEGIN_NAMESPACE @@ -106,16 +107,13 @@ namespace QtLinuxFutex { inline int _q_futex(int *addr, int op, int val, quintptr val2 = 0, int *addr2 = nullptr, int val3 = 0) noexcept { - // A futex call ensures total ordering on the futex words - // (in either success or failure of the call). Instruct TSAN accordingly, - // as TSAN does not understand the futex(2) syscall. - _q_tsan_release(addr, addr2); + QtTsan::futexRelease(addr, addr2); // we use __NR_futex because some libcs (like Android's bionic) don't // provide SYS_futex etc. int result = syscall(__NR_futex, addr, op | FUTEX_PRIVATE_FLAG, val, val2, addr2, val3); - _q_tsan_acquire(addr, addr2); + QtTsan::futexAcquire(addr, addr2); return result; } diff --git a/qtbase/src/corelib/thread/qmutex.cpp b/qtbase/src/corelib/thread/qmutex.cpp index 310d1cb14f..7097122d8e 100644 --- a/qtbase/src/corelib/thread/qmutex.cpp +++ b/qtbase/src/corelib/thread/qmutex.cpp @@ -152,6 +152,7 @@ public: /*! \enum QMutex::RecursionMode + \obsolete Use QRecursiveMutex to create a recursive mutex. \value Recursive In this mode, a thread can lock the same mutex multiple times and the mutex won't be unlocked @@ -173,6 +174,7 @@ public: /*! Constructs a new mutex. The mutex is created in an unlocked state. + \obsolete Use QRecursiveMutex to create a recursive mutex. If \a mode is QMutex::Recursive, a thread can lock the same mutex multiple times and the mutex won't be unlocked until a @@ -197,7 +199,7 @@ QMutex::QMutex(RecursionMode mode) QMutex::~QMutex() { QMutexData *d = d_ptr.loadRelaxed(); - if (isRecursive()) { + if (QBasicMutex::isRecursive()) { delete static_cast(d); } else if (d) { #ifndef QT_LINUX_FUTEX diff --git a/qtbase/src/corelib/thread/qmutex.h b/qtbase/src/corelib/thread/qmutex.h index 73c9e00663..1bae573a03 100644 --- a/qtbase/src/corelib/thread/qmutex.h +++ b/qtbase/src/corelib/thread/qmutex.h @@ -42,6 +42,7 @@ #include #include +#include #include #if __has_include() @@ -77,19 +78,37 @@ public: // BasicLockable concept inline void lock() QT_MUTEX_LOCK_NOEXCEPT { + QtTsan::mutexPreLock(this, 0u); + if (!fastTryLock()) lockInternal(); + + QtTsan::mutexPostLock(this, 0u, 0); } // BasicLockable concept inline void unlock() noexcept { Q_ASSERT(d_ptr.loadRelaxed()); //mutex must be locked + + QtTsan::mutexPreUnlock(this, 0u); + if (!fastTryUnlock()) unlockInternal(); + + QtTsan::mutexPostUnlock(this, 0u); } bool tryLock() noexcept { - return fastTryLock(); + unsigned tsanFlags = QtTsan::TryLock; + QtTsan::mutexPreLock(this, tsanFlags); + + const bool success = fastTryLock(); + + if (!success) + tsanFlags |= QtTsan::TryLockFailed; + QtTsan::mutexPostLock(this, tsanFlags, 0); + + return success; } // Lockable concept @@ -134,8 +153,16 @@ public: #else QMutex() { d_ptr.storeRelaxed(nullptr); } #endif +#if QT_DEPRECATED_SINCE(5,15) enum RecursionMode { NonRecursive, Recursive }; + QT_DEPRECATED_VERSION_X(5, 15, "Use QRecursiveMutex instead of a recursive QMutex") explicit QMutex(RecursionMode mode); + + QT_DEPRECATED_VERSION_X(5, 15, "Use QRecursiveMutex instead of a recursive QMutex") + bool isRecursive() const noexcept + { return QBasicMutex::isRecursive(); } +#endif + ~QMutex(); // BasicLockable concept @@ -166,9 +193,6 @@ public: } #endif - bool isRecursive() const noexcept - { return QBasicMutex::isRecursive(); } - private: Q_DISABLE_COPY(QMutex) friend class QMutexLocker; diff --git a/qtbase/src/corelib/thread/qtsan_impl.h b/qtbase/src/corelib/thread/qtsan_impl.h new file mode 100644 index 0000000000..580a738b91 --- /dev/null +++ b/qtbase/src/corelib/thread/qtsan_impl.h @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Intel Corporation. +** Copyright (C) 2022 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTSAN_IMPL_H +#define QTSAN_IMPL_H + +#include + +#if (__has_feature(thread_sanitizer) || defined(__SANITIZE_THREAD__)) && __has_include() +# define QT_BUILDING_UNDER_TSAN +# include +#endif + +QT_BEGIN_NAMESPACE + +namespace QtTsan { +#ifdef QT_BUILDING_UNDER_TSAN +inline void futexAcquire(void *addr, void *addr2 = nullptr) +{ + // A futex call ensures total ordering on the futex words + // (in either success or failure of the call). Instruct TSAN accordingly, + // as TSAN does not understand the futex(2) syscall (or equivalent). + ::__tsan_acquire(addr); + if (addr2) + ::__tsan_acquire(addr2); +} + +inline void futexRelease(void *addr, void *addr2 = nullptr) +{ + if (addr2) + ::__tsan_release(addr2); + ::__tsan_release(addr); +} + +inline void mutexPreLock(void *addr, unsigned flags) +{ + ::__tsan_mutex_pre_lock(addr, flags); +} + +inline void mutexPostLock(void *addr, unsigned flags, int recursion) +{ + ::__tsan_mutex_post_lock(addr, flags, recursion); +} + +inline void mutexPreUnlock(void *addr, unsigned flags) +{ + ::__tsan_mutex_pre_unlock(addr, flags); +} + +inline void mutexPostUnlock(void *addr, unsigned flags) +{ + ::__tsan_mutex_post_unlock(addr, flags); +} + +enum : unsigned { + MutexWriteReentrant = ::__tsan_mutex_write_reentrant, + TryLock = ::__tsan_mutex_try_lock, + TryLockFailed = ::__tsan_mutex_try_lock_failed, +}; +#else +inline void futexAcquire(void *, void * = nullptr) {} +inline void futexRelease(void *, void * = nullptr) {} + +enum : unsigned { + MutexWriteReentrant, + TryLock, + TryLockFailed, +}; +inline void mutexPreLock(void *, unsigned) {} +inline void mutexPostLock(void *, unsigned, int) {} +inline void mutexPreUnlock(void *, unsigned) {} +inline void mutexPostUnlock(void *, unsigned) {} +#endif // QT_BUILDING_UNDER_TSAN +} // namespace QtTsan + +QT_END_NAMESPACE + +#endif // QTSAN_IMPL_H diff --git a/qtbase/src/corelib/thread/qwaitcondition_unix.cpp b/qtbase/src/corelib/thread/qwaitcondition_unix.cpp index 88b058f410..0f1da4dc9b 100644 --- a/qtbase/src/corelib/thread/qwaitcondition_unix.cpp +++ b/qtbase/src/corelib/thread/qwaitcondition_unix.cpp @@ -213,7 +213,7 @@ bool QWaitCondition::wait(QMutex *mutex, QDeadlineTimer deadline) { if (! mutex) return false; - if (mutex->isRecursive()) { + if (static_cast(mutex)->isRecursive()) { qWarning("QWaitCondition: cannot wait on recursive mutexes"); return false; } diff --git a/qtbase/src/corelib/tools/qbitarray.h b/qtbase/src/corelib/tools/qbitarray.h index eaed17413d..7934b55164 100644 --- a/qtbase/src/corelib/tools/qbitarray.h +++ b/qtbase/src/corelib/tools/qbitarray.h @@ -84,9 +84,9 @@ public: bool toggleBit(int i); bool at(int i) const; - QBitRef operator[](int i); + inline QBitRef operator[](int i); bool operator[](int i) const; - QBitRef operator[](uint i); + inline QBitRef operator[](uint i); bool operator[](uint i) const; QBitArray& operator&=(const QBitArray &); @@ -156,9 +156,9 @@ public: QBitRef& operator=(bool val) { a.setBit(i, val); return *this; } }; -inline QBitRef QBitArray::operator[](int i) +QBitRef QBitArray::operator[](int i) { Q_ASSERT(i >= 0); return QBitRef(*this, i); } -inline QBitRef QBitArray::operator[](uint i) +QBitRef QBitArray::operator[](uint i) { return QBitRef(*this, i); } diff --git a/qtbase/src/dbus/qdbusintegrator.cpp b/qtbase/src/dbus/qdbusintegrator.cpp index a4cbfecc98..9ccbbbb37d 100644 --- a/qtbase/src/dbus/qdbusintegrator.cpp +++ b/qtbase/src/dbus/qdbusintegrator.cpp @@ -1135,7 +1135,13 @@ void QDBusConnectionPrivate::closeConnection() } } - qDeleteAll(pendingCalls); + for (auto it = pendingCalls.begin(); it != pendingCalls.end(); ++it) { + auto call = *it; + if (!call->ref.deref()) { + delete call; + } + } + pendingCalls.clear(); // Disconnect all signals from signal hooks and from the object tree to // avoid QObject::destroyed being sent to dbus daemon thread which has diff --git a/qtbase/src/gui/configure.json b/qtbase/src/gui/configure.json index 7b80162faa..95e8955b51 100644 --- a/qtbase/src/gui/configure.json +++ b/qtbase/src/gui/configure.json @@ -834,7 +834,8 @@ "// embedded devices, are not intended to be used together with X. EGL support", "// has to be disabled in plugins like xcb in this case since the native display,", "// window and pixmap types will be different than what an X-based platform", - "// plugin would expect." + "// plugin would expect.", + "#define USE_X11" ], "include": [ "EGL/egl.h", "X11/Xlib.h" ], "main": [ diff --git a/qtbase/src/gui/image/qbmphandler.cpp b/qtbase/src/gui/image/qbmphandler.cpp index 96f1e8cb1d..0e73bbbdb0 100644 --- a/qtbase/src/gui/image/qbmphandler.cpp +++ b/qtbase/src/gui/image/qbmphandler.cpp @@ -150,16 +150,42 @@ static QDataStream &operator<<(QDataStream &s, const BMP_INFOHDR &bi) return s; } -static int calc_shift(uint mask) +static uint calc_shift(uint mask) { - int result = 0; - while (mask && !(mask & 1)) { + uint result = 0; + while ((mask >= 0x100) || (!(mask & 1) && mask)) { result++; mask >>= 1; } return result; } +static uint calc_scale(uint low_mask) +{ + uint result = 8; + while (low_mask && result) { + result--; + low_mask >>= 1; + } + return result; +} + +static inline uint apply_scale(uint value, uint scale) +{ + if (!(scale & 0x07)) // return immediately if scale == 8 or 0 + return value; + + uint filled = 8 - scale; + uint result = value << scale; + + do { + result |= result >> filled; + filled <<= 1; + } while (filled < 8); + + return result; +} + static bool read_dib_fileheader(QDataStream &s, BMP_FILEHDR &bf) { // read BMP file header @@ -222,14 +248,14 @@ static bool read_dib_body(QDataStream &s, const BMP_INFOHDR &bi, qint64 offset, uint green_mask = 0; uint blue_mask = 0; uint alpha_mask = 0; - int red_shift = 0; - int green_shift = 0; - int blue_shift = 0; - int alpha_shift = 0; - int red_scale = 0; - int green_scale = 0; - int blue_scale = 0; - int alpha_scale = 0; + uint red_shift = 0; + uint green_shift = 0; + uint blue_shift = 0; + uint alpha_shift = 0; + uint red_scale = 0; + uint green_scale = 0; + uint blue_scale = 0; + uint alpha_scale = 0; if (!d->isSequential()) d->seek(startpos + BMP_FILEHDR_SIZE + bi.biSize); // goto start of colormap or masks @@ -308,19 +334,19 @@ static bool read_dib_body(QDataStream &s, const BMP_INFOHDR &bi, qint64 offset, red_shift = calc_shift(red_mask); if (((red_mask >> red_shift) + 1) == 0) return false; - red_scale = 256 / ((red_mask >> red_shift) + 1); + red_scale = calc_scale(red_mask >> red_shift); green_shift = calc_shift(green_mask); if (((green_mask >> green_shift) + 1) == 0) return false; - green_scale = 256 / ((green_mask >> green_shift) + 1); + green_scale = calc_scale(green_mask >> green_shift); blue_shift = calc_shift(blue_mask); if (((blue_mask >> blue_shift) + 1) == 0) return false; - blue_scale = 256 / ((blue_mask >> blue_shift) + 1); + blue_scale = calc_scale(blue_mask >> blue_shift); alpha_shift = calc_shift(alpha_mask); if (((alpha_mask >> alpha_shift) + 1) == 0) return false; - alpha_scale = 256 / ((alpha_mask >> alpha_shift) + 1); + alpha_scale = calc_scale(alpha_mask >> alpha_shift); } else if (comp == BMP_RGB && (nbits == 24 || nbits == 32)) { blue_mask = 0x000000ff; green_mask = 0x0000ff00; @@ -328,17 +354,15 @@ static bool read_dib_body(QDataStream &s, const BMP_INFOHDR &bi, qint64 offset, blue_shift = 0; green_shift = 8; red_shift = 16; - blue_scale = green_scale = red_scale = 1; + blue_scale = green_scale = red_scale = 0; } else if (comp == BMP_RGB && nbits == 16) { blue_mask = 0x001f; green_mask = 0x03e0; red_mask = 0x7c00; blue_shift = 0; - green_shift = 2; - red_shift = 7; - red_scale = 1; - green_scale = 1; - blue_scale = 8; + green_shift = 5; + red_shift = 10; + blue_scale = green_scale = red_scale = 3; } #if 0 @@ -544,10 +568,10 @@ static bool read_dib_body(QDataStream &s, const BMP_INFOHDR &bi, qint64 offset, c |= *(uchar*)(b+2)<<16; if (nbits > 24) c |= *(uchar*)(b+3)<<24; - *p++ = qRgba(((c & red_mask) >> red_shift) * red_scale, - ((c & green_mask) >> green_shift) * green_scale, - ((c & blue_mask) >> blue_shift) * blue_scale, - transp ? ((c & alpha_mask) >> alpha_shift) * alpha_scale : 0xff); + *p++ = qRgba(apply_scale((c & red_mask) >> red_shift, red_scale), + apply_scale((c & green_mask) >> green_shift, green_scale), + apply_scale((c & blue_mask) >> blue_shift, blue_scale), + transp ? apply_scale((c & alpha_mask) >> alpha_shift, alpha_scale) : 0xff); b += nbits/8; } } diff --git a/qtbase/src/gui/image/qpixmapcache.cpp b/qtbase/src/gui/image/qpixmapcache.cpp index b6e5e70f55..a4317a4eac 100644 --- a/qtbase/src/gui/image/qpixmapcache.cpp +++ b/qtbase/src/gui/image/qpixmapcache.cpp @@ -466,6 +466,7 @@ void QPMCache::clear() killTimer(theid); theid = 0; } + cacheKeys.clear(); } QPixmapCache::KeyData* QPMCache::getKeyData(QPixmapCache::Key *key) diff --git a/qtbase/src/gui/itemmodels/qstandarditemmodel.cpp b/qtbase/src/gui/itemmodels/qstandarditemmodel.cpp index fc9424763e..a3e0853fa8 100644 --- a/qtbase/src/gui/itemmodels/qstandarditemmodel.cpp +++ b/qtbase/src/gui/itemmodels/qstandarditemmodel.cpp @@ -3113,13 +3113,13 @@ QStringList QStandardItemModel::mimeTypes() const */ QMimeData *QStandardItemModel::mimeData(const QModelIndexList &indexes) const { - QMimeData *data = QAbstractItemModel::mimeData(indexes); - if(!data) + std::unique_ptr data(QAbstractItemModel::mimeData(indexes)); + if (!data) return nullptr; const QString format = qStandardItemModelDataListMimeType(); if (!mimeTypes().contains(format)) - return data; + return data.release(); QByteArray encoded; QDataStream stream(&encoded, QIODevice::WriteOnly); @@ -3172,7 +3172,7 @@ QMimeData *QStandardItemModel::mimeData(const QModelIndexList &indexes) const } data->setData(format, encoded); - return data; + return data.release(); } diff --git a/qtbase/src/gui/kernel/qhighdpiscaling.cpp b/qtbase/src/gui/kernel/qhighdpiscaling.cpp index 85ff58c14c..a433e94c22 100644 --- a/qtbase/src/gui/kernel/qhighdpiscaling.cpp +++ b/qtbase/src/gui/kernel/qhighdpiscaling.cpp @@ -580,9 +580,8 @@ void QHighDpiScaling::setScreenFactor(QScreen *screen, qreal factor) else qNamedScreenScaleFactors()->insert(name, factor); - // hack to force re-evaluation of screen geometry if (screen->handle()) - screen->d_func()->setPlatformScreen(screen->handle()); // updates geometries based on scale factor + screen->d_func()->updateLogicalDpi(); } QPoint QHighDpiScaling::mapPositionToNative(const QPoint &pos, const QPlatformScreen *platformScreen) diff --git a/qtbase/src/gui/kernel/qkeysequence.cpp b/qtbase/src/gui/kernel/qkeysequence.cpp index 56cd2d02bc..d448429f6c 100644 --- a/qtbase/src/gui/kernel/qkeysequence.cpp +++ b/qtbase/src/gui/kernel/qkeysequence.cpp @@ -701,6 +701,10 @@ static const struct { { Qt::Key_TouchpadToggle, QT_TRANSLATE_NOOP("QShortcut", "Touchpad Toggle") }, { Qt::Key_TouchpadOn, QT_TRANSLATE_NOOP("QShortcut", "Touchpad On") }, { Qt::Key_TouchpadOff, QT_TRANSLATE_NOOP("QShortcut", "Touchpad Off") }, + { Qt::Key_Shift, QT_TRANSLATE_NOOP("QShortcut", "Shift") }, + { Qt::Key_Control, QT_TRANSLATE_NOOP("QShortcut", "Control") }, + { Qt::Key_Alt, QT_TRANSLATE_NOOP("QShortcut", "Alt") }, + { Qt::Key_Meta, QT_TRANSLATE_NOOP("QShortcut", "Meta") }, }; static Q_CONSTEXPR int numKeyNames = sizeof keyname / sizeof *keyname; diff --git a/qtbase/src/gui/kernel/qplatformservices.cpp b/qtbase/src/gui/kernel/qplatformservices.cpp index fdc6a6c4aa..ac47f98c5d 100644 --- a/qtbase/src/gui/kernel/qplatformservices.cpp +++ b/qtbase/src/gui/kernel/qplatformservices.cpp @@ -55,6 +55,19 @@ QT_BEGIN_NAMESPACE \brief The QPlatformServices provides the backend for desktop-related functionality. */ +/*! + \enum QPlatformServices::Capability + + Capabilities are used to determine a specific platform service's availability. + + \value ColorPickingFromScreen The platform natively supports color picking from screen. + This capability indicates that the platform supports "opaque" color picking, where the + platform implements a complete user experience for color picking and outputs a color. + This is in contrast to the application implementing the color picking user experience + (taking care of showing a cross hair, instructing the platform integration to obtain + the color at a given pixel, etc.). The related service function is pickColor(). + */ + QPlatformServices::QPlatformServices() { } @@ -85,5 +98,16 @@ QByteArray QPlatformServices::desktopEnvironment() const return QByteArray("UNKNOWN"); } +QPlatformServiceColorPicker *QPlatformServices::colorPicker(QWindow *parent) +{ + Q_UNUSED(parent); + return nullptr; +} + +bool QPlatformServices::hasCapability(Capability capability) const +{ + Q_UNUSED(capability) + return false; +} QT_END_NAMESPACE diff --git a/qtbase/src/gui/kernel/qplatformservices.h b/qtbase/src/gui/kernel/qplatformservices.h index 5de96cfa7d..a8b2a4ce71 100644 --- a/qtbase/src/gui/kernel/qplatformservices.h +++ b/qtbase/src/gui/kernel/qplatformservices.h @@ -50,16 +50,32 @@ // #include +#include QT_BEGIN_NAMESPACE class QUrl; +class QWindow; + +class Q_GUI_EXPORT QPlatformServiceColorPicker : public QObject +{ + Q_OBJECT +public: + using QObject::QObject; + virtual void pickColor() = 0; +Q_SIGNALS: + void colorPicked(const QColor &color); +}; class Q_GUI_EXPORT QPlatformServices { public: Q_DISABLE_COPY_MOVE(QPlatformServices) + enum Capability { + ColorPicking, + }; + QPlatformServices(); virtual ~QPlatformServices() { } @@ -67,6 +83,10 @@ public: virtual bool openDocument(const QUrl &url); virtual QByteArray desktopEnvironment() const; + + virtual bool hasCapability(Capability capability) const; + + virtual QPlatformServiceColorPicker *colorPicker(QWindow *parent = nullptr); }; QT_END_NAMESPACE diff --git a/qtbase/src/gui/kernel/qplatformtheme.cpp b/qtbase/src/gui/kernel/qplatformtheme.cpp index 71521c0339..2325873245 100644 --- a/qtbase/src/gui/kernel/qplatformtheme.cpp +++ b/qtbase/src/gui/kernel/qplatformtheme.cpp @@ -163,6 +163,8 @@ QT_BEGIN_NAMESPACE \value ShowShortcutsInContextMenus (bool) Whether to display shortcut key sequences in context menus. + \value ButtonPressKeys (QList) A list of keys that can be used to press buttons via keyboard input. + \sa themeHint(), QStyle::pixelMetric() */ @@ -563,6 +565,8 @@ QVariant QPlatformTheme::defaultThemeHint(ThemeHint hint) } case MouseQuickSelectionThreshold: return QVariant(10); + case ButtonPressKeys: + return QVariant::fromValue(QList({ Qt::Key_Space, Qt::Key_Select })); } return QVariant(); } diff --git a/qtbase/src/gui/kernel/qplatformtheme.h b/qtbase/src/gui/kernel/qplatformtheme.h index 3185fc4541..7e6c9d5740 100644 --- a/qtbase/src/gui/kernel/qplatformtheme.h +++ b/qtbase/src/gui/kernel/qplatformtheme.h @@ -120,7 +120,8 @@ public: TouchDoubleTapDistance, ShowShortcutsInContextMenus, IconFallbackSearchPaths, - MouseQuickSelectionThreshold + MouseQuickSelectionThreshold, + ButtonPressKeys }; enum DialogType { diff --git a/qtbase/src/gui/kernel/qscreen.cpp b/qtbase/src/gui/kernel/qscreen.cpp index 990272b0c2..d371dd60ab 100644 --- a/qtbase/src/gui/kernel/qscreen.cpp +++ b/qtbase/src/gui/kernel/qscreen.cpp @@ -77,6 +77,12 @@ QScreen::QScreen(QPlatformScreen *screen) d->setPlatformScreen(screen); } +void QScreenPrivate::updateLogicalDpi() +{ + logicalDpi = QPlatformScreen::overrideDpi(platformScreen->logicalDpi()); + updateGeometriesWithSignals(); // updates geometries based on scale factor +} + void QScreenPrivate::updateGeometriesWithSignals() { const QRect oldGeometry = geometry; diff --git a/qtbase/src/gui/kernel/qscreen_p.h b/qtbase/src/gui/kernel/qscreen_p.h index 7da542c25e..e50fc3190b 100644 --- a/qtbase/src/gui/kernel/qscreen_p.h +++ b/qtbase/src/gui/kernel/qscreen_p.h @@ -70,6 +70,7 @@ public: geometry = platformScreen->deviceIndependentGeometry(); availableGeometry = QHighDpi::fromNative(platformScreen->availableGeometry(), QHighDpiScaling::factor(platformScreen), geometry.topLeft()); } + void updateLogicalDpi(); void updatePrimaryOrientation(); void updateGeometriesWithSignals(); diff --git a/qtbase/src/gui/kernel/qshapedpixmapdndwindow.cpp b/qtbase/src/gui/kernel/qshapedpixmapdndwindow.cpp index bb0d8e4ee7..b98fcc61e7 100644 --- a/qtbase/src/gui/kernel/qshapedpixmapdndwindow.cpp +++ b/qtbase/src/gui/kernel/qshapedpixmapdndwindow.cpp @@ -56,7 +56,7 @@ QShapedPixmapWindow::QShapedPixmapWindow(QScreen *screen) QSurfaceFormat format; format.setAlphaBufferSize(8); setFormat(format); - setFlags(Qt::ToolTip | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint + setFlags(Qt::FramelessWindowHint | Qt::BypassWindowManagerHint | Qt::WindowTransparentForInput | Qt::WindowDoesNotAcceptFocus); } diff --git a/qtbase/src/gui/kernel/qwindow.cpp b/qtbase/src/gui/kernel/qwindow.cpp index 639817257e..c2f7dc6776 100644 --- a/qtbase/src/gui/kernel/qwindow.cpp +++ b/qtbase/src/gui/kernel/qwindow.cpp @@ -644,7 +644,7 @@ bool QWindow::isVisible() const into an actual native surface. However, the window remains hidden until setVisible() is called. Note that it is not usually necessary to call this function directly, as it will be implicitly - called by show(), setVisible(), and other functions that require access to the platform + called by show(), setVisible(), winId(), and other functions that require access to the platform resources. Call destroy() to free the platform resources if necessary. @@ -660,6 +660,9 @@ void QWindow::create() /*! Returns the window's platform id. + \note This function will cause the platform window to be created if it is not already. + Returns 0, if the platform window creation failed. + For platforms where this id might be useful, the value returned will uniquely represent the window inside the corresponding screen. @@ -672,6 +675,9 @@ WId QWindow::winId() const if(!d->platformWindow) const_cast(this)->create(); + if (!d->platformWindow) + return 0; + return d->platformWindow->winId(); } diff --git a/qtbase/src/gui/opengl/qopengltexture.cpp b/qtbase/src/gui/opengl/qopengltexture.cpp index 5490ad8025..afd3d8dbe6 100644 --- a/qtbase/src/gui/opengl/qopengltexture.cpp +++ b/qtbase/src/gui/opengl/qopengltexture.cpp @@ -3725,6 +3725,12 @@ void QOpenGLTexture::setData(const QImage& image, MipMapGeneration genMipMaps) return; } + QImage glImage = image.convertToFormat(QImage::Format_RGBA8888); + if (glImage.isNull()) { + qWarning("QOpenGLTexture::setData() failed to convert image"); + return; + } + if (context->isOpenGLES() && context->format().majorVersion() < 3) setFormat(QOpenGLTexture::RGBAFormat); else @@ -3735,7 +3741,6 @@ void QOpenGLTexture::setData(const QImage& image, MipMapGeneration genMipMaps) allocateStorage(QOpenGLTexture::RGBA, QOpenGLTexture::UInt8); // Upload pixel data and generate mipmaps - QImage glImage = image.convertToFormat(QImage::Format_RGBA8888); QOpenGLPixelTransferOptions uploadOptions; uploadOptions.setAlignment(1); setData(0, QOpenGLTexture::RGBA, QOpenGLTexture::UInt8, glImage.constBits(), &uploadOptions); diff --git a/qtbase/src/gui/painting/qfixed_p.h b/qtbase/src/gui/painting/qfixed_p.h index 846592881c..57d750a4b3 100644 --- a/qtbase/src/gui/painting/qfixed_p.h +++ b/qtbase/src/gui/painting/qfixed_p.h @@ -54,6 +54,7 @@ #include #include "QtCore/qdebug.h" #include "QtCore/qpoint.h" +#include #include "QtCore/qsize.h" QT_BEGIN_NAMESPACE @@ -182,6 +183,14 @@ Q_DECL_CONSTEXPR inline bool operator<(int i, const QFixed &f) { return i * 64 < Q_DECL_CONSTEXPR inline bool operator>(const QFixed &f, int i) { return f.value() > i * 64; } Q_DECL_CONSTEXPR inline bool operator>(int i, const QFixed &f) { return i * 64 > f.value(); } +inline bool qAddOverflow(QFixed v1, QFixed v2, QFixed *r) +{ + int val; + bool result = add_overflow(v1.value(), v2.value(), &val); + r->setValue(val); + return result; +} + #ifndef QT_NO_DEBUG_STREAM inline QDebug &operator<<(QDebug &dbg, const QFixed &f) { return dbg << f.toReal(); } diff --git a/qtbase/src/gui/painting/qpaintengine_raster.cpp b/qtbase/src/gui/painting/qpaintengine_raster.cpp index 38bad9a6b0..a04160791b 100644 --- a/qtbase/src/gui/painting/qpaintengine_raster.cpp +++ b/qtbase/src/gui/painting/qpaintengine_raster.cpp @@ -3462,16 +3462,18 @@ void QRasterPaintEngine::drawBitmap(const QPointF &pos, const QImage &image, QSp // Boundaries int w = image.width(); int h = image.height(); - int ymax = qMin(qRound(pos.y() + h), d->rasterBuffer->height()); - int ymin = qMax(qRound(pos.y()), 0); - int xmax = qMin(qRound(pos.x() + w), d->rasterBuffer->width()); - int xmin = qMax(qRound(pos.x()), 0); + int px = qRound(pos.x()); + int py = qRound(pos.y()); + int ymax = qMin(py + h, d->rasterBuffer->height()); + int ymin = qMax(py, 0); + int xmax = qMin(px + w, d->rasterBuffer->width()); + int xmin = qMax(px, 0); - int x_offset = xmin - qRound(pos.x()); + int x_offset = xmin - px; QImage::Format format = image.format(); for (int y = ymin; y < ymax; ++y) { - const uchar *src = image.scanLine(y - qRound(pos.y())); + const uchar *src = image.scanLine(y - py); if (format == QImage::Format_MonoLSB) { for (int x = 0; x < xmax - xmin; ++x) { int src_x = x + x_offset; @@ -3860,7 +3862,7 @@ void QClipData::initialize() return; if (!m_clipLines) - m_clipLines = (ClipLine *)calloc(sizeof(ClipLine), clipSpanHeight); + m_clipLines = (ClipLine *)calloc(clipSpanHeight, sizeof(ClipLine)); Q_CHECK_PTR(m_clipLines); QT_TRY { diff --git a/qtbase/src/gui/painting/qpainterpath.cpp b/qtbase/src/gui/painting/qpainterpath.cpp index f9544a3241..d80fafeaf1 100644 --- a/qtbase/src/gui/painting/qpainterpath.cpp +++ b/qtbase/src/gui/painting/qpainterpath.cpp @@ -1253,7 +1253,7 @@ void QPainterPath::addText(const QPointF &point, const QFont &f, const QString & if (si.analysis.flags < QScriptAnalysis::TabOrObject) { QGlyphLayout glyphs = eng->shapedGlyphs(&si); - QFontEngine *fe = f.d->engineForScript(si.analysis.script); + QFontEngine *fe = eng->fontEngine(si); Q_ASSERT(fe); fe->addOutlineToPath(x, y, glyphs, this, si.analysis.bidiLevel % 2 diff --git a/qtbase/src/gui/painting/qpdf.cpp b/qtbase/src/gui/painting/qpdf.cpp index 3066744f1b..2c8d3c3b53 100644 --- a/qtbase/src/gui/painting/qpdf.cpp +++ b/qtbase/src/gui/painting/qpdf.cpp @@ -2760,6 +2760,8 @@ int QPdfEnginePrivate::addBrushPattern(const QTransform &m, bool *specifyColor, return gradientBrush(brush, matrix, gStateObject); } + matrix = brush.transform() * matrix; + if ((!brush.isOpaque() && brush.style() < Qt::LinearGradientPattern) || opacity != 1.0) *gStateObject = addConstantAlphaObject(qRound(brush.color().alpha() * opacity), qRound(pen.color().alpha() * opacity)); diff --git a/qtbase/src/gui/rhi/qshader_p_p.h b/qtbase/src/gui/rhi/qshader_p_p.h index ec9d25971f..4a5a7a6d51 100644 --- a/qtbase/src/gui/rhi/qshader_p_p.h +++ b/qtbase/src/gui/rhi/qshader_p_p.h @@ -68,13 +68,13 @@ struct Q_GUI_EXPORT QShaderPrivate { } - QShaderPrivate(const QShaderPrivate *other) + QShaderPrivate(const QShaderPrivate &other) : ref(1), - qsbVersion(other->qsbVersion), - stage(other->stage), - desc(other->desc), - shaders(other->shaders), - bindings(other->bindings) + qsbVersion(other.qsbVersion), + stage(other.stage), + desc(other.desc), + shaders(other.shaders), + bindings(other.bindings) { } diff --git a/qtbase/src/gui/rhi/qshaderdescription_p_p.h b/qtbase/src/gui/rhi/qshaderdescription_p_p.h index ec2b0b6b4c..3da33a8a2b 100644 --- a/qtbase/src/gui/rhi/qshaderdescription_p_p.h +++ b/qtbase/src/gui/rhi/qshaderdescription_p_p.h @@ -63,16 +63,16 @@ struct Q_GUI_EXPORT QShaderDescriptionPrivate localSize[0] = localSize[1] = localSize[2] = 0; } - QShaderDescriptionPrivate(const QShaderDescriptionPrivate *other) + QShaderDescriptionPrivate(const QShaderDescriptionPrivate &other) : ref(1), - inVars(other->inVars), - outVars(other->outVars), - uniformBlocks(other->uniformBlocks), - pushConstantBlocks(other->pushConstantBlocks), - storageBlocks(other->storageBlocks), - combinedImageSamplers(other->combinedImageSamplers), - storageImages(other->storageImages), - localSize(other->localSize) + inVars(other.inVars), + outVars(other.outVars), + uniformBlocks(other.uniformBlocks), + pushConstantBlocks(other.pushConstantBlocks), + storageBlocks(other.storageBlocks), + combinedImageSamplers(other.combinedImageSamplers), + storageImages(other.storageImages), + localSize(other.localSize) { } diff --git a/qtbase/src/gui/text/qfontdatabase.cpp b/qtbase/src/gui/text/qfontdatabase.cpp index 2011f935a9..7aa6228948 100644 --- a/qtbase/src/gui/text/qfontdatabase.cpp +++ b/qtbase/src/gui/text/qfontdatabase.cpp @@ -983,7 +983,7 @@ QFontEngine *loadSingleEngine(int script, if (style->key.stretch != 0 && request.stretch != 0 && (request.styleName.isEmpty() || request.styleName != style->styleName)) { def.stretch = (request.stretch * 100 + style->key.stretch / 2) / style->key.stretch; - } else { + } else if (request.stretch == QFont::AnyStretch) { def.stretch = 100; } diff --git a/qtbase/src/gui/text/qtextengine.cpp b/qtbase/src/gui/text/qtextengine.cpp index 6336fadf74..a6c66e5d2d 100644 --- a/qtbase/src/gui/text/qtextengine.cpp +++ b/qtbase/src/gui/text/qtextengine.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtGui module of the Qt Toolkit. diff --git a/qtbase/src/gui/text/qtextlayout.cpp b/qtbase/src/gui/text/qtextlayout.cpp index 30f07ba69b..f60597a076 100644 --- a/qtbase/src/gui/text/qtextlayout.cpp +++ b/qtbase/src/gui/text/qtextlayout.cpp @@ -1336,13 +1336,16 @@ void QTextLayout::drawCursor(QPainter *p, const QPointF &pos, int cursorPosition bool rightToLeft = d->isRightToLeft(); if (itm >= 0) { const QScriptItem &si = d->layoutData->items.at(itm); - if (si.ascent >= 0) - base = si.ascent; - if (si.descent >= 0) - descent = si.descent; + // objects need some special treatment as they can have special alignment or be floating + if (si.analysis.flags != QScriptAnalysis::Object) { + if (si.ascent > 0) + base = si.ascent; + if (si.descent > 0) + descent = si.descent; + } rightToLeft = si.analysis.bidiLevel % 2; } - qreal y = position.y() + (sl.y + sl.base() + sl.descent - base - descent).toReal(); + qreal y = position.y() + (sl.y + sl.base() - base).toReal(); bool toggleAntialiasing = !(p->renderHints() & QPainter::Antialiasing) && (p->transform().type() > QTransform::TxTranslate); if (toggleAntialiasing) @@ -2163,11 +2166,14 @@ found: eng->maxWidth = qMax(eng->maxWidth, line.textWidth); } else { eng->minWidth = qMax(eng->minWidth, lbh.minw); - eng->maxWidth += line.textWidth; + if (qAddOverflow(eng->maxWidth, line.textWidth, &eng->maxWidth)) + eng->maxWidth = QFIXED_MAX; } - if (line.textWidth > 0 && item < eng->layoutData->items.size()) - eng->maxWidth += lbh.spaceData.textWidth; + if (line.textWidth > 0 && item < eng->layoutData->items.size()) { + if (qAddOverflow(eng->maxWidth, lbh.spaceData.textWidth, &eng->maxWidth)) + eng->maxWidth = QFIXED_MAX; + } line.textWidth += trailingSpace; if (lbh.spaceData.length) { diff --git a/qtbase/src/gui/util/qktxhandler.cpp b/qtbase/src/gui/util/qktxhandler.cpp index 7eda4c46fb..2853e46c3d 100644 --- a/qtbase/src/gui/util/qktxhandler.cpp +++ b/qtbase/src/gui/util/qktxhandler.cpp @@ -73,7 +73,7 @@ struct KTXHeader { quint32 bytesOfKeyValueData; }; -static const quint32 headerSize = sizeof(KTXHeader); +static constexpr quint32 qktxh_headerSize = sizeof(KTXHeader); // Currently unused, declared for future reference struct KTXKeyValuePairItem { @@ -103,11 +103,36 @@ struct KTXMipmapLevel { */ }; -bool QKtxHandler::canRead(const QByteArray &suffix, const QByteArray &block) +static bool qAddOverflow(quint32 v1, quint32 v2, quint32 *r) { + // unsigned additions are well-defined + *r = v1 + v2; + return v1 > quint32(v1 + v2); +} + +// Returns the nearest multiple of 4 greater than or equal to 'value' +static bool nearestMultipleOf4(quint32 value, quint32 *result) +{ + constexpr quint32 rounding = 4; + *result = 0; + if (qAddOverflow(value, rounding - 1, result)) + return true; + *result &= ~(rounding - 1); + return false; +} + +// Returns a slice with prechecked bounds +static QByteArray safeSlice(const QByteArray& array, quint32 start, quint32 length) { - Q_UNUSED(suffix) + quint32 end = 0; + if (qAddOverflow(start, length, &end) || end > quint32(array.length())) + return {}; + return QByteArray(array.data() + start, length); +} - return (qstrncmp(block.constData(), ktxIdentifier, KTX_IDENTIFIER_LENGTH) == 0); +bool QKtxHandler::canRead(const QByteArray &suffix, const QByteArray &block) +{ + Q_UNUSED(suffix); + return block.startsWith(QByteArray::fromRawData(ktxIdentifier, KTX_IDENTIFIER_LENGTH)); } QTextureFileData QKtxHandler::read() @@ -115,42 +140,97 @@ QTextureFileData QKtxHandler::read() if (!device()) return QTextureFileData(); - QByteArray buf = device()->readAll(); - const quint32 dataSize = quint32(buf.size()); - if (dataSize < headerSize || !canRead(QByteArray(), buf)) { - qCDebug(lcQtGuiTextureIO, "Invalid KTX file %s", logName().constData()); + const QByteArray buf = device()->readAll(); + if (size_t(buf.size()) > std::numeric_limits::max()) { + qWarning(lcQtGuiTextureIO, "Too big KTX file %s", logName().constData()); + return QTextureFileData(); + } + + if (!canRead(QByteArray(), buf)) { + qWarning(lcQtGuiTextureIO, "Invalid KTX file %s", logName().constData()); + return QTextureFileData(); + } + + if (buf.size() < qsizetype(qktxh_headerSize)) { + qWarning(lcQtGuiTextureIO, "Invalid KTX header size in %s", logName().constData()); return QTextureFileData(); } - const KTXHeader *header = reinterpret_cast(buf.constData()); - if (!checkHeader(*header)) { - qCDebug(lcQtGuiTextureIO, "Unsupported KTX file format in %s", logName().constData()); + KTXHeader header; + memcpy(&header, buf.data(), qktxh_headerSize); + if (!checkHeader(header)) { + qWarning(lcQtGuiTextureIO, "Unsupported KTX file format in %s", logName().constData()); return QTextureFileData(); } QTextureFileData texData; texData.setData(buf); - texData.setSize(QSize(decode(header->pixelWidth), decode(header->pixelHeight))); - texData.setGLFormat(decode(header->glFormat)); - texData.setGLInternalFormat(decode(header->glInternalFormat)); - texData.setGLBaseInternalFormat(decode(header->glBaseInternalFormat)); - - texData.setNumLevels(decode(header->numberOfMipmapLevels)); - quint32 offset = headerSize + decode(header->bytesOfKeyValueData); - const int maxLevels = qMin(texData.numLevels(), 32); // Cap iterations in case of corrupt file. - for (int i = 0; i < maxLevels; i++) { - if (offset + sizeof(KTXMipmapLevel) > dataSize) // Corrupt file; avoid oob read - break; - const KTXMipmapLevel *level = reinterpret_cast(buf.constData() + offset); - quint32 levelLen = decode(level->imageSize); - texData.setDataOffset(offset + sizeof(KTXMipmapLevel::imageSize), i); - texData.setDataLength(levelLen, i); - offset += sizeof(KTXMipmapLevel::imageSize) + levelLen + (3 - ((levelLen + 3) % 4)); + texData.setSize(QSize(decode(header.pixelWidth), decode(header.pixelHeight))); + texData.setGLFormat(decode(header.glFormat)); + texData.setGLInternalFormat(decode(header.glInternalFormat)); + texData.setGLBaseInternalFormat(decode(header.glBaseInternalFormat)); + + texData.setNumLevels(decode(header.numberOfMipmapLevels)); + + const quint32 bytesOfKeyValueData = decode(header.bytesOfKeyValueData); + quint32 headerKeyValueSize; + if (qAddOverflow(qktxh_headerSize, bytesOfKeyValueData, &headerKeyValueSize)) { + qWarning(lcQtGuiTextureIO, "Overflow in size of key value data in header of KTX file %s", + logName().constData()); + return QTextureFileData(); + } + + if (headerKeyValueSize >= quint32(buf.size())) { + qWarning(lcQtGuiTextureIO, "OOB request in KTX file %s", logName().constData()); + return QTextureFileData(); + } + + // Technically, any number of levels is allowed but if the value is bigger than + // what is possible in KTX V2 (and what makes sense) we return an error. + // maxLevels = log2(max(width, height, depth)) + const int maxLevels = (sizeof(quint32) * 8) + - qCountLeadingZeroBits(std::max( + { header.pixelWidth, header.pixelHeight, header.pixelDepth })); + + if (texData.numLevels() > maxLevels) { + qWarning(lcQtGuiTextureIO, "Too many levels in KTX file %s", logName().constData()); + return QTextureFileData(); + } + + quint32 offset = headerKeyValueSize; + for (int level = 0; level < texData.numLevels(); level++) { + const auto imageSizeSlice = safeSlice(buf, offset, sizeof(quint32)); + if (imageSizeSlice.isEmpty()) { + qWarning(lcQtGuiTextureIO, "OOB request in KTX file %s", logName().constData()); + return QTextureFileData(); + } + + const quint32 imageSize = decode(qFromUnaligned(imageSizeSlice.data())); + offset += sizeof(quint32); // overflow checked indirectly above + + texData.setDataOffset(offset, level); + texData.setDataLength(imageSize, level); + + // Add image data and padding to offset + quint32 padded = 0; + if (nearestMultipleOf4(imageSize, &padded)) { + qWarning(lcQtGuiTextureIO, "Overflow in KTX file %s", logName().constData()); + return QTextureFileData(); + } + + quint32 offsetNext; + if (qAddOverflow(offset, padded, &offsetNext)) { + qWarning(lcQtGuiTextureIO, "OOB request in KTX file %s", logName().constData()); + return QTextureFileData(); + } + + offset = offsetNext; } if (!texData.isValid()) { - qCDebug(lcQtGuiTextureIO, "Invalid values in header of KTX file %s", logName().constData()); + qWarning(lcQtGuiTextureIO, "Invalid values in header of KTX file %s", + logName().constData()); return QTextureFileData(); } @@ -191,7 +271,7 @@ bool QKtxHandler::checkHeader(const KTXHeader &header) (decode(header.numberOfFaces) == 1)); } -quint32 QKtxHandler::decode(quint32 val) +quint32 QKtxHandler::decode(quint32 val) const { return inverseEndian ? qbswap(val) : val; } diff --git a/qtbase/src/gui/util/qktxhandler_p.h b/qtbase/src/gui/util/qktxhandler_p.h index 19f7b0e79a..8da990aaac 100644 --- a/qtbase/src/gui/util/qktxhandler_p.h +++ b/qtbase/src/gui/util/qktxhandler_p.h @@ -68,7 +68,7 @@ public: private: bool checkHeader(const KTXHeader &header); - quint32 decode(quint32 val); + quint32 decode(quint32 val) const; bool inverseEndian = false; }; diff --git a/qtbase/src/gui/util/qshadergenerator.cpp b/qtbase/src/gui/util/qshadergenerator.cpp index 1ec25ccd7b..20ed6abc3a 100644 --- a/qtbase/src/gui/util/qshadergenerator.cpp +++ b/qtbase/src/gui/util/qshadergenerator.cpp @@ -492,7 +492,7 @@ QByteArray QShaderGenerator::createShaderCode(const QStringList &enabledLayers) int end = begin + 1; char endChar = line.at(end); const int size = line.size(); - while (end < size && (std::isalnum(endChar) || endChar == '_')) { + while (end < size && (std::isalnum(uchar(endChar)) || endChar == '_')) { ++end; endChar = line.at(end); } diff --git a/qtbase/src/gui/util/qshaderlanguage.cpp b/qtbase/src/gui/util/qshaderlanguage.cpp index efd607ba60..9399d6efcc 100644 --- a/qtbase/src/gui/util/qshaderlanguage.cpp +++ b/qtbase/src/gui/util/qshaderlanguage.cpp @@ -52,3 +52,5 @@ void qt_register_ShaderLanguage_enums() } QT_END_NAMESPACE + +#include "moc_qshaderlanguage_p.cpp" diff --git a/qtbase/src/network/access/http2/hpacktable.cpp b/qtbase/src/network/access/http2/hpacktable.cpp index fddb5feca5..315f3e2344 100644 --- a/qtbase/src/network/access/http2/hpacktable.cpp +++ b/qtbase/src/network/access/http2/hpacktable.cpp @@ -40,6 +40,7 @@ #include "hpacktable_p.h" #include +#include #include #include @@ -62,8 +63,10 @@ HeaderSize entry_size(const QByteArray &name, const QByteArray &value) // for counting the number of references to the name and value would have // 32 octets of overhead." - const unsigned sum = unsigned(name.size() + value.size()); - if (std::numeric_limits::max() - 32 < sum) + size_t sum; + if (add_overflow(size_t(name.size()), size_t(value.size()), &sum)) + return HeaderSize(); + if (sum > (std::numeric_limits::max() - 32)) return HeaderSize(); return HeaderSize(true, quint32(sum + 32)); } diff --git a/qtbase/src/network/access/qhsts.cpp b/qtbase/src/network/access/qhsts.cpp index 0cef0ad3dc..be7ef7ff58 100644 --- a/qtbase/src/network/access/qhsts.cpp +++ b/qtbase/src/network/access/qhsts.cpp @@ -364,8 +364,8 @@ quoted-pair = "\" CHAR bool QHstsHeaderParser::parse(const QList> &headers) { for (const auto &h : headers) { - // We use '==' since header name was already 'trimmed' for us: - if (h.first == "Strict-Transport-Security") { + // We compare directly because header name was already 'trimmed' for us: + if (h.first.compare("Strict-Transport-Security", Qt::CaseInsensitive) == 0) { header = h.second; // RFC6797, 8.1: // diff --git a/qtbase/src/network/access/qhttp2protocolhandler.cpp b/qtbase/src/network/access/qhttp2protocolhandler.cpp index 39dd460881..ead88d781a 100644 --- a/qtbase/src/network/access/qhttp2protocolhandler.cpp +++ b/qtbase/src/network/access/qhttp2protocolhandler.cpp @@ -46,10 +46,12 @@ #include #include + #include #include #include #include +#include #include #include @@ -124,8 +126,10 @@ std::vector assemble_hpack_block(const std::vector &frames) std::vector hpackBlock; quint32 total = 0; - for (const auto &frame : frames) - total += frame.hpackBlockSize(); + for (const auto &frame : frames) { + if (add_overflow(total, frame.hpackBlockSize(), &total)) + return hpackBlock; + } if (!total) return hpackBlock; diff --git a/qtbase/src/network/access/qnetworkreplyfileimpl_p.h b/qtbase/src/network/access/qnetworkreplyfileimpl_p.h index 48d82abd3f..4bfbc3f7d1 100644 --- a/qtbase/src/network/access/qnetworkreplyfileimpl_p.h +++ b/qtbase/src/network/access/qnetworkreplyfileimpl_p.h @@ -37,8 +37,8 @@ ** ****************************************************************************/ -#ifndef QNETWORKREPLYFILEIMPL_H -#define QNETWORKREPLYFILEIMPL_H +#ifndef QNETWORKREPLYFILEIMPL_P_H +#define QNETWORKREPLYFILEIMPL_P_H // // W A R N I N G @@ -99,4 +99,4 @@ QT_END_NAMESPACE Q_DECLARE_METATYPE(QNetworkRequest::KnownHeaders) -#endif // QNETWORKREPLYFILEIMPL_H +#endif // QNETWORKREPLYFILEIMPL_P_H diff --git a/qtbase/src/network/configure.json b/qtbase/src/network/configure.json index 271ff164ac..ffba2d1eea 100644 --- a/qtbase/src/network/configure.json +++ b/qtbase/src/network/configure.json @@ -53,7 +53,7 @@ }, "headers": "proxy.h", "sources": [ - "-lproxy" + { "type": "pkgConfig", "args": "libproxy-1.0" } ] }, "openssl_headers": { diff --git a/qtbase/src/network/kernel/qdnslookup_unix.cpp b/qtbase/src/network/kernel/qdnslookup_unix.cpp index 12b40fc35d..99e999d436 100644 --- a/qtbase/src/network/kernel/qdnslookup_unix.cpp +++ b/qtbase/src/network/kernel/qdnslookup_unix.cpp @@ -227,7 +227,6 @@ void QDnsLookupRunnable::query(const int requestType, const QByteArray &requestN // responseLength in case of error, we still can extract the // exact error code from the response. HEADER *header = (HEADER*)response; - const int answerCount = ntohs(header->ancount); switch (header->rcode) { case NOERROR: break; @@ -260,18 +259,31 @@ void QDnsLookupRunnable::query(const int requestType, const QByteArray &requestN return; } - // Skip the query host, type (2 bytes) and class (2 bytes). char host[PACKETSZ], answer[PACKETSZ]; unsigned char *p = response + sizeof(HEADER); - int status = local_dn_expand(response, response + responseLength, p, host, sizeof(host)); - if (status < 0) { + int status; + + if (ntohs(header->qdcount) == 1) { + // Skip the query host, type (2 bytes) and class (2 bytes). + status = local_dn_expand(response, response + responseLength, p, host, sizeof(host)); + if (status < 0) { + reply->error = QDnsLookup::InvalidReplyError; + reply->errorString = tr("Could not expand domain name"); + return; + } + if ((p - response) + status + 4 >= responseLength) + header->qdcount = 0xffff; // invalid reply below + else + p += status + 4; + } + if (ntohs(header->qdcount) > 1) { reply->error = QDnsLookup::InvalidReplyError; - reply->errorString = tr("Could not expand domain name"); + reply->errorString = tr("Invalid reply received"); return; } - p += status + 4; // Extract results. + const int answerCount = ntohs(header->ancount); int answerIndex = 0; while ((p < response + responseLength) && (answerIndex < answerCount)) { status = local_dn_expand(response, response + responseLength, p, host, sizeof(host)); @@ -283,6 +295,11 @@ void QDnsLookupRunnable::query(const int requestType, const QByteArray &requestN const QString name = QUrl::fromAce(host); p += status; + + if ((p - response) + 10 > responseLength) { + // probably just a truncated reply, return what we have + return; + } const quint16 type = (p[0] << 8) | p[1]; p += 2; // RR type p += 2; // RR class @@ -290,6 +307,8 @@ void QDnsLookupRunnable::query(const int requestType, const QByteArray &requestN p += 4; const quint16 size = (p[0] << 8) | p[1]; p += 2; + if ((p - response) + size > responseLength) + return; // truncated if (type == QDnsLookup::A) { if (size != 4) { diff --git a/qtbase/src/network/kernel/qhostinfo.cpp b/qtbase/src/network/kernel/qhostinfo.cpp index 33fb629899..015963686c 100644 --- a/qtbase/src/network/kernel/qhostinfo.cpp +++ b/qtbase/src/network/kernel/qhostinfo.cpp @@ -181,7 +181,6 @@ bool QHostInfoResult::event(QEvent *event) // we didn't have a context object, or it's still alive if (!withContextObject || receiver) slotObj->call(const_cast(receiver.data()), args); - slotObj->destroyIfLastRef(); deleteLater(); return true; @@ -801,6 +800,8 @@ int QHostInfoPrivate::lookupHostImpl(const QString &name, if (!QAbstractEventDispatcher::instance(QThread::currentThread())) { qWarning("QHostInfo::lookupHost() called with no event dispatcher"); + if (slotObj) + slotObj->destroyIfLastRef(); return -1; } @@ -847,6 +848,8 @@ int QHostInfoPrivate::lookupHostImpl(const QString &name, QObject::connect(&runnable->resultEmitter, SIGNAL(resultsReady(QHostInfo)), receiver, member, Qt::QueuedConnection); manager->scheduleLookup(runnable); + } else if (slotObj) { + slotObj->destroyIfLastRef(); } return id; } diff --git a/qtbase/src/network/kernel/qhostinfo_p.h b/qtbase/src/network/kernel/qhostinfo_p.h index d7875a0673..452c095b6a 100644 --- a/qtbase/src/network/kernel/qhostinfo_p.h +++ b/qtbase/src/network/kernel/qhostinfo_p.h @@ -90,6 +90,12 @@ public: moveToThread(receiver->thread()); } + ~QHostInfoResult() + { + if (slotObj) + slotObj->destroyIfLastRef(); + } + void postResultsReady(const QHostInfo &info); Q_SIGNALS: @@ -103,6 +109,8 @@ private: : receiver(other->receiver), slotObj(other->slotObj), withContextObject(other->withContextObject) { + if (slotObj) + slotObj->ref(); // cleanup if the application terminates before results are delivered connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, this, &QObject::deleteLater); diff --git a/qtbase/src/network/ssl/qsslconfiguration.cpp b/qtbase/src/network/ssl/qsslconfiguration.cpp index f5ce02807f..84a9187334 100644 --- a/qtbase/src/network/ssl/qsslconfiguration.cpp +++ b/qtbase/src/network/ssl/qsslconfiguration.cpp @@ -929,7 +929,11 @@ void QSslConfiguration::setPreSharedKeyIdentityHint(const QByteArray &hint) Retrieves the current set of Diffie-Hellman parameters. If no Diffie-Hellman parameters have been set, the QSslConfiguration object - defaults to using the 1024-bit MODP group from RFC 2409. + defaults to using the 2048-bit MODP group from RFC 3526. + + \note The default parameters may change in future Qt versions. + Please check the documentation of the \e{exact Qt version} that you + are using in order to know what defaults that version uses. */ QSslDiffieHellmanParameters QSslConfiguration::diffieHellmanParameters() const { @@ -943,7 +947,11 @@ QSslDiffieHellmanParameters QSslConfiguration::diffieHellmanParameters() const a server to \a dhparams. If no Diffie-Hellman parameters have been set, the QSslConfiguration object - defaults to using the 1024-bit MODP group from RFC 2409. + defaults to using the 2048-bit MODP group from RFC 3526. + + \note The default parameters may change in future Qt versions. + Please check the documentation of the \e{exact Qt version} that you + are using in order to know what defaults that version uses. */ void QSslConfiguration::setDiffieHellmanParameters(const QSslDiffieHellmanParameters &dhparams) { diff --git a/qtbase/src/network/ssl/qsslcontext_openssl.cpp b/qtbase/src/network/ssl/qsslcontext_openssl.cpp index c30192a4eb..e4bb61ecb5 100644 --- a/qtbase/src/network/ssl/qsslcontext_openssl.cpp +++ b/qtbase/src/network/ssl/qsslcontext_openssl.cpp @@ -409,7 +409,7 @@ init_context: break; case QSsl::DtlsV1_0OrLater: minVersion = DTLS1_VERSION; - maxVersion = DTLS_MAX_VERSION; + maxVersion = 0; break; case QSsl::DtlsV1_2: minVersion = DTLS1_2_VERSION; @@ -417,7 +417,7 @@ init_context: break; case QSsl::DtlsV1_2OrLater: minVersion = DTLS1_2_VERSION; - maxVersion = DTLS_MAX_VERSION; + maxVersion = 0; break; case QSsl::TlsV1_3OrLater: #ifdef TLS1_3_VERSION diff --git a/qtbase/src/network/ssl/qssldiffiehellmanparameters.cpp b/qtbase/src/network/ssl/qssldiffiehellmanparameters.cpp index 7807afaa30..7c2505a0be 100644 --- a/qtbase/src/network/ssl/qssldiffiehellmanparameters.cpp +++ b/qtbase/src/network/ssl/qssldiffiehellmanparameters.cpp @@ -68,17 +68,18 @@ QT_BEGIN_NAMESPACE -// The 1024-bit MODP group from RFC 2459 (Second Oakley Group) +// The 2048-bit MODP group from RFC 3526 Q_AUTOTEST_EXPORT const char *qssl_dhparams_default_base64 = - "MIGHAoGBAP//////////yQ/aoiFowjTExmKLgNwc0SkCTgiKZ8x0Agu+pjsTmyJR" - "Sgh5jjQE3e+VGbPNOkMbMCsKbfJfFDdP4TVtbVHCReSFtXZiXn7G9ExC6aY37WsL" - "/1y29Aa37e44a/taiZ+lrp8kEXxLH+ZJKGZR7OZTgf//////////AgEC"; + "MIIBCAKCAQEA///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxObIlFKCHmO" + "NATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjftawv/XLb0Brft7jhr" + "+1qJn6WunyQRfEsf5kkoZlHs5Fs9wgB8uKFjvwWY2kg2HFXTmmkWP6j9JM9fg2VdI9yjrZYc" + "YvNWIIVSu57VKQdwlpZtZww1Tkq8mATxdGwIyhghfDKQXkYuNs474553LBgOhgObJ4Oi7Aei" + "j7XFXfBvTFLJ3ivL9pVYFxg5lUl86pVq5RXSJhiY+gUQFXKOWoqsqmj//////////wIBAg=="; /*! Returns the default QSslDiffieHellmanParameters used by QSslSocket. - This is currently the 1024-bit MODP group from RFC 2459, also - known as the Second Oakley Group. + This is currently the 2048-bit MODP group from RFC 3526. */ QSslDiffieHellmanParameters QSslDiffieHellmanParameters::defaultParameters() { diff --git a/qtbase/src/network/ssl/qssldiffiehellmanparameters_openssl.cpp b/qtbase/src/network/ssl/qssldiffiehellmanparameters_openssl.cpp index aaf8741130..93ad7fa728 100644 --- a/qtbase/src/network/ssl/qssldiffiehellmanparameters_openssl.cpp +++ b/qtbase/src/network/ssl/qssldiffiehellmanparameters_openssl.cpp @@ -59,57 +59,6 @@ QT_BEGIN_NAMESPACE -#ifdef OPENSSL_NO_DEPRECATED_3_0 - -static int q_DH_check(DH *dh, int *status) -{ - // DH_check was first deprecated in OpenSSL 3.0.0, as low-level - // API; the EVP_PKEY family of functions was advised as an alternative. - // As of now EVP_PKEY_params_check ends up calling ... DH_check, - // which is good enough. - - Q_ASSERT(dh); - Q_ASSERT(status); - - EVP_PKEY *key = q_EVP_PKEY_new(); - if (!key) { - qCWarning(lcSsl, "EVP_PKEY_new failed"); - QSslSocketBackendPrivate::logAndClearErrorQueue(); - return 0; - } - const auto keyDeleter = qScopeGuard([key](){ - q_EVP_PKEY_free(key); - }); - if (!q_EVP_PKEY_set1_DH(key, dh)) { - qCWarning(lcSsl, "EVP_PKEY_set1_DH failed"); - QSslSocketBackendPrivate::logAndClearErrorQueue(); - return 0; - } - - EVP_PKEY_CTX *keyCtx = q_EVP_PKEY_CTX_new(key, nullptr); - if (!keyCtx) { - qCWarning(lcSsl, "EVP_PKEY_CTX_new failed"); - QSslSocketBackendPrivate::logAndClearErrorQueue(); - return 0; - } - const auto ctxDeleter = qScopeGuard([keyCtx]{ - q_EVP_PKEY_CTX_free(keyCtx); - }); - - const int result = q_EVP_PKEY_param_check(keyCtx); - QSslSocketBackendPrivate::logAndClearErrorQueue(); - // Note: unlike DH_check, we cannot obtain the 'status', - // if the 'result' is 0 (actually the result is 1 only - // if this 'status' was 0). We could probably check the - // errors from the error queue, but it's not needed anyway - // - see the 'isSafeDH' below, how it returns immediately - // on 0. - Q_UNUSED(status) - - return result; -} -#endif // OPENSSL_NO_DEPRECATED_3_0 - static bool isSafeDH(DH *dh) { int status = 0; @@ -206,6 +155,7 @@ void QSslDiffieHellmanParametersPrivate::decodePem(const QByteArray &pem) if (isSafeDH(dh)) { char *buf = nullptr; int len = q_i2d_DHparams(dh, reinterpret_cast(&buf)); + auto freeBuf = qScopeGuard([&] { q_OPENSSL_free(buf); }); if (len > 0) derData = QByteArray(buf, len); else diff --git a/qtbase/src/network/ssl/qsslsocket.cpp b/qtbase/src/network/ssl/qsslsocket.cpp index 5bb6e7ee4a..2a0b3a4f1d 100644 --- a/qtbase/src/network/ssl/qsslsocket.cpp +++ b/qtbase/src/network/ssl/qsslsocket.cpp @@ -2221,6 +2221,10 @@ QSslSocketPrivate::QSslSocketPrivate() , flushTriggered(false) { QSslConfigurationPrivate::deepCopyDefaultConfiguration(&configuration); + // If the global configuration doesn't allow root certificates to be loaded + // on demand then we have to disable it for this socket as well. + if (!configuration.allowRootCertOnDemandLoading) + allowRootCertOnDemandLoading = false; } /*! @@ -2470,6 +2474,7 @@ void QSslConfigurationPrivate::deepCopyDefaultConfiguration(QSslConfigurationPri ptr->sessionProtocol = global->sessionProtocol; ptr->ciphers = global->ciphers; ptr->caCertificates = global->caCertificates; + ptr->allowRootCertOnDemandLoading = global->allowRootCertOnDemandLoading; ptr->protocol = global->protocol; ptr->peerVerifyMode = global->peerVerifyMode; ptr->peerVerifyDepth = global->peerVerifyDepth; diff --git a/qtbase/src/network/ssl/qsslsocket_mac.cpp b/qtbase/src/network/ssl/qsslsocket_mac.cpp index 77e847e972..e38a5e75de 100644 --- a/qtbase/src/network/ssl/qsslsocket_mac.cpp +++ b/qtbase/src/network/ssl/qsslsocket_mac.cpp @@ -468,6 +468,7 @@ void QSslSocketBackendPrivate::disconnectFromHost() if (context) { if (!shutdown) { SSLClose(context); + context.reset(nullptr); shutdown = true; } } diff --git a/qtbase/src/network/ssl/qsslsocket_openssl_symbols.cpp b/qtbase/src/network/ssl/qsslsocket_openssl_symbols.cpp index 0ace951c77..6a9a3ef3b3 100644 --- a/qtbase/src/network/ssl/qsslsocket_openssl_symbols.cpp +++ b/qtbase/src/network/ssl/qsslsocket_openssl_symbols.cpp @@ -499,9 +499,7 @@ DEFINEFUNC(DH *, DH_new, DUMMYARG, DUMMYARG, return nullptr, return) DEFINEFUNC(void, DH_free, DH *dh, dh, return, DUMMYARG) DEFINEFUNC3(DH *, d2i_DHparams, DH**a, a, const unsigned char **pp, pp, long length, length, return nullptr, return) DEFINEFUNC2(int, i2d_DHparams, DH *a, a, unsigned char **p, p, return -1, return) -#ifndef OPENSSL_NO_DEPRECATED_3_0 DEFINEFUNC2(int, DH_check, DH *dh, dh, int *codes, codes, return 0, return) -#endif // OPENSSL_NO_DEPRECATED_3_0 DEFINEFUNC3(BIGNUM *, BN_bin2bn, const unsigned char *s, s, int len, len, BIGNUM *ret, ret, return nullptr, return) #ifndef OPENSSL_NO_EC @@ -1220,9 +1218,7 @@ bool q_resolveOpenSslSymbols() RESOLVEFUNC(DH_free) RESOLVEFUNC(d2i_DHparams) RESOLVEFUNC(i2d_DHparams) -#ifndef OPENSSL_NO_DEPRECATED_3_0 RESOLVEFUNC(DH_check) -#endif // OPENSSL_NO_DEPRECATED_3_0 RESOLVEFUNC(BN_bin2bn) #ifndef OPENSSL_NO_EC diff --git a/qtbase/src/network/ssl/qsslsocket_openssl_symbols_p.h b/qtbase/src/network/ssl/qsslsocket_openssl_symbols_p.h index 5e9faae291..bf165f67ad 100644 --- a/qtbase/src/network/ssl/qsslsocket_openssl_symbols_p.h +++ b/qtbase/src/network/ssl/qsslsocket_openssl_symbols_p.h @@ -598,10 +598,7 @@ DH *q_DH_new(); void q_DH_free(DH *dh); DH *q_d2i_DHparams(DH **a, const unsigned char **pp, long length); int q_i2d_DHparams(DH *a, unsigned char **p); - -#ifndef OPENSSL_NO_DEPRECATED_3_0 int q_DH_check(DH *dh, int *codes); -#endif // OPENSSL_NO_DEPRECATED_3_0 BIGNUM *q_BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret); #define q_SSL_CTX_set_tmp_dh(ctx, dh) q_SSL_CTX_ctrl((ctx), SSL_CTRL_SET_TMP_DH, 0, (char *)dh) diff --git a/qtbase/src/network/ssl/qsslsocket_schannel.cpp b/qtbase/src/network/ssl/qsslsocket_schannel.cpp index c956ce3c2b..d1b23af29b 100644 --- a/qtbase/src/network/ssl/qsslsocket_schannel.cpp +++ b/qtbase/src/network/ssl/qsslsocket_schannel.cpp @@ -1880,6 +1880,28 @@ bool QSslSocketBackendPrivate::verifyCertContext(CERT_CONTEXT *certContext) if (configuration.peerVerifyDepth > 0 && DWORD(configuration.peerVerifyDepth) < verifyDepth) verifyDepth = DWORD(configuration.peerVerifyDepth); + const auto &caCertificates = q->sslConfiguration().caCertificates(); + + if (!rootCertOnDemandLoadingAllowed() + && !(chain->TrustStatus.dwErrorStatus & CERT_TRUST_IS_PARTIAL_CHAIN) + && (q->peerVerifyMode() == QSslSocket::VerifyPeer + || (isClient && q->peerVerifyMode() == QSslSocket::AutoVerifyPeer))) { + // When verifying a peer Windows "helpfully" builds a chain that + // may include roots from the system store. But we don't want that if + // the user has set their own CA certificates. + // Since Windows claims this is not a partial chain the root is included + // and we have to check that it is one of our configured CAs. + CERT_CHAIN_ELEMENT *element = chain->rgpElement[chain->cElement - 1]; + QSslCertificate certificate = getCertificateFromChainElement(element); + if (!caCertificates.contains(certificate)) { + auto error = QSslError(QSslError::CertificateUntrusted, certificate); + sslErrors += error; + emit q->peerVerifyError(error); + if (q->state() != QAbstractSocket::ConnectedState) + return false; + } + } + for (DWORD i = 0; i < verifyDepth; i++) { CERT_CHAIN_ELEMENT *element = chain->rgpElement[i]; QSslCertificate certificate = getCertificateFromChainElement(element); diff --git a/qtbase/src/platformsupport/eglconvenience/qt_egl_p.h b/qtbase/src/platformsupport/eglconvenience/qt_egl_p.h index bf37d07fd8..dbd42fb799 100644 --- a/qtbase/src/platformsupport/eglconvenience/qt_egl_p.h +++ b/qtbase/src/platformsupport/eglconvenience/qt_egl_p.h @@ -61,7 +61,11 @@ # if !defined(Q_OS_INTEGRITY) # define WIN_INTERFACE_CUSTOM // NV # endif // Q_OS_INTEGRITY -#endif // QT_EGL_NO_X11 +#else // QT_EGL_NO_X11 +// If one has an eglplatform.h with https://github.com/KhronosGroup/EGL-Registry/pull/130 +// that needs USE_X11 to be defined. +# define USE_X11 +#endif #ifdef QT_EGL_WAYLAND # define WAYLAND // NV diff --git a/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp index 159b490ce0..00aa80cd58 100644 --- a/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp +++ b/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp @@ -567,6 +567,8 @@ void QFontconfigDatabase::populateFontDatabase() fonts = FcFontList(nullptr, pattern, os); FcObjectSetDestroy(os); FcPatternDestroy(pattern); + if (!fonts) + return; } for (int i = 0; i < fonts->nfont; i++) diff --git a/qtbase/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp b/qtbase/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp index 09d2d916fe..0e6fe5eb84 100644 --- a/qtbase/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp +++ b/qtbase/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp @@ -1471,36 +1471,70 @@ QT_WARNING_POP return fontEngine; } -static QList getTrueTypeFontOffsets(const uchar *fontData) +static QList getTrueTypeFontOffsets(const uchar *fontData, const uchar *fileEndSentinel) { QList offsets; - const quint32 headerTag = *reinterpret_cast(fontData); + if (fileEndSentinel - fontData < 12) { + qCWarning(lcQpaFonts) << "Corrupted font data detected"; + return offsets; + } + + const quint32 headerTag = qFromUnaligned(fontData); if (headerTag != MAKE_TAG('t', 't', 'c', 'f')) { if (headerTag != MAKE_TAG(0, 1, 0, 0) && headerTag != MAKE_TAG('O', 'T', 'T', 'O') && headerTag != MAKE_TAG('t', 'r', 'u', 'e') - && headerTag != MAKE_TAG('t', 'y', 'p', '1')) + && headerTag != MAKE_TAG('t', 'y', 'p', '1')) { return offsets; + } offsets << 0; return offsets; } + + const quint32 maximumNumFonts = 0xffff; const quint32 numFonts = qFromBigEndian(fontData + 8); - for (uint i = 0; i < numFonts; ++i) { - offsets << qFromBigEndian(fontData + 12 + i * 4); + if (numFonts > maximumNumFonts) { + qCWarning(lcQpaFonts) << "Font collection of" << numFonts << "fonts is too large. Aborting."; + return offsets; } + + if (quintptr(fileEndSentinel - fontData) > 12 + (numFonts - 1) * 4) { + for (quint32 i = 0; i < numFonts; ++i) + offsets << qFromBigEndian(fontData + 12 + i * 4); + } else { + qCWarning(lcQpaFonts) << "Corrupted font data detected"; + } + return offsets; } -static void getFontTable(const uchar *fileBegin, const uchar *data, quint32 tag, const uchar **table, quint32 *length) +static void getFontTable(const uchar *fileBegin, const uchar *fileEndSentinel, const uchar *data, quint32 tag, const uchar **table, quint32 *length) { - const quint16 numTables = qFromBigEndian(data + 4); - for (uint i = 0; i < numTables; ++i) { - const quint32 offset = 12 + 16 * i; - if (*reinterpret_cast(data + offset) == tag) { - *table = fileBegin + qFromBigEndian(data + offset + 8); - *length = qFromBigEndian(data + offset + 12); - return; + if (fileEndSentinel - data >= 6) { + const quint16 numTables = qFromBigEndian(data + 4); + if (fileEndSentinel - data >= 28 + 16 * (numTables - 1)) { + for (quint32 i = 0; i < numTables; ++i) { + const quint32 offset = 12 + 16 * i; + if (qFromUnaligned(data + offset) == tag) { + const quint32 tableOffset = qFromBigEndian(data + offset + 8); + if (quintptr(fileEndSentinel - fileBegin) <= tableOffset) { + qCWarning(lcQpaFonts) << "Corrupted font data detected"; + break; + } + *table = fileBegin + tableOffset; + *length = qFromBigEndian(data + offset + 12); + if (quintptr(fileEndSentinel - *table) < *length) { + qCWarning(lcQpaFonts) << "Corrupted font data detected"; + break; + } + return; + } + } + } else { + qCWarning(lcQpaFonts) << "Corrupted font data detected"; } + } else { + qCWarning(lcQpaFonts) << "Corrupted font data detected"; } *table = 0; *length = 0; @@ -1513,8 +1547,9 @@ static void getFamiliesAndSignatures(const QByteArray &fontData, QVector *values) { const uchar *data = reinterpret_cast(fontData.constData()); + const uchar *dataEndSentinel = data + fontData.size(); - QList offsets = getTrueTypeFontOffsets(data); + QList offsets = getTrueTypeFontOffsets(data, dataEndSentinel); if (offsets.isEmpty()) return; @@ -1522,7 +1557,7 @@ static void getFamiliesAndSignatures(const QByteArray &fontData, const uchar *font = data + offsets.at(i); const uchar *table; quint32 length; - getFontTable(data, font, MAKE_TAG('n', 'a', 'm', 'e'), &table, &length); + getFontTable(data, dataEndSentinel, font, MAKE_TAG('n', 'a', 'm', 'e'), &table, &length); if (!table) continue; QFontNames names = qt_getCanonicalFontNames(table, length); @@ -1532,7 +1567,7 @@ static void getFamiliesAndSignatures(const QByteArray &fontData, families->append(std::move(names)); if (values || signatures) - getFontTable(data, font, MAKE_TAG('O', 'S', '/', '2'), &table, &length); + getFontTable(data, dataEndSentinel, font, MAKE_TAG('O', 'S', '/', '2'), &table, &length); if (values) { QFontValues fontValues; diff --git a/qtbase/src/platformsupport/input/xkbcommon/qxkbcommon.cpp b/qtbase/src/platformsupport/input/xkbcommon/qxkbcommon.cpp index 7bfacf4abe..1c7c15d5d7 100644 --- a/qtbase/src/platformsupport/input/xkbcommon/qxkbcommon.cpp +++ b/qtbase/src/platformsupport/input/xkbcommon/qxkbcommon.cpp @@ -95,6 +95,7 @@ static constexpr const auto KeyTbl = qMakeArray( Xkb2Qt, Xkb2Qt, Xkb2Qt, + Xkb2Qt, Xkb2Qt<0x1005FF60, Qt::Key_SysReq>, // hardcoded Sun SysReq Xkb2Qt<0x1007ff00, Qt::Key_SysReq>, // hardcoded X386 SysReq @@ -273,10 +274,14 @@ static constexpr const auto KeyTbl = qMakeArray( Xkb2Qt, Xkb2Qt, Xkb2Qt, +/* The following four XKB_KEY_dead keys got removed in libxkbcommon 1.6.0 + The define check is kind of version check here. */ +#ifdef XKB_KEY_dead_lowline Xkb2Qt, Xkb2Qt, Xkb2Qt, Xkb2Qt, +#endif // Special keys from X.org - This include multimedia keys, // wireless/bluetooth/uwb keys, special launcher keys, etc. @@ -754,6 +759,8 @@ xkb_keysym_t QXkbCommon::lookupLatinKeysym(xkb_state *state, xkb_keycode_t keyco { xkb_layout_index_t layout; xkb_keysym_t sym = XKB_KEY_NoSymbol; + if (!state) + return sym; xkb_keymap *keymap = xkb_state_get_keymap(state); const xkb_layout_index_t layoutCount = xkb_keymap_num_layouts_for_key(keymap, keycode); const xkb_layout_index_t currentLayout = xkb_state_key_get_layout(state, keycode); diff --git a/qtbase/src/platformsupport/input/xkbcommon/qxkbcommon_p.h b/qtbase/src/platformsupport/input/xkbcommon/qxkbcommon_p.h index 8389bd8f5a..55c46de8cd 100644 --- a/qtbase/src/platformsupport/input/xkbcommon/qxkbcommon_p.h +++ b/qtbase/src/platformsupport/input/xkbcommon/qxkbcommon_p.h @@ -98,7 +98,46 @@ public: return sym <= 0xff; } static bool isKeypad(xkb_keysym_t sym) { - return sym >= XKB_KEY_KP_Space && sym <= XKB_KEY_KP_9; + switch (sym) { + case XKB_KEY_KP_Space: + case XKB_KEY_KP_Tab: + case XKB_KEY_KP_Enter: + case XKB_KEY_KP_F1: + case XKB_KEY_KP_F2: + case XKB_KEY_KP_F3: + case XKB_KEY_KP_F4: + case XKB_KEY_KP_Home: + case XKB_KEY_KP_Left: + case XKB_KEY_KP_Up: + case XKB_KEY_KP_Right: + case XKB_KEY_KP_Down: + case XKB_KEY_KP_Prior: + case XKB_KEY_KP_Next: + case XKB_KEY_KP_End: + case XKB_KEY_KP_Begin: + case XKB_KEY_KP_Insert: + case XKB_KEY_KP_Delete: + case XKB_KEY_KP_Equal: + case XKB_KEY_KP_Multiply: + case XKB_KEY_KP_Add: + case XKB_KEY_KP_Separator: + case XKB_KEY_KP_Subtract: + case XKB_KEY_KP_Decimal: + case XKB_KEY_KP_Divide: + case XKB_KEY_KP_0: + case XKB_KEY_KP_1: + case XKB_KEY_KP_2: + case XKB_KEY_KP_3: + case XKB_KEY_KP_4: + case XKB_KEY_KP_5: + case XKB_KEY_KP_6: + case XKB_KEY_KP_7: + case XKB_KEY_KP_8: + case XKB_KEY_KP_9: + return true; + default: + return false; + } } static void setXkbContext(QPlatformInputContext *inputContext, struct xkb_context *context); diff --git a/qtbase/src/platformsupport/linuxaccessibility/atspiadaptor.cpp b/qtbase/src/platformsupport/linuxaccessibility/atspiadaptor.cpp index 9153fd20bb..26537ff892 100644 --- a/qtbase/src/platformsupport/linuxaccessibility/atspiadaptor.cpp +++ b/qtbase/src/platformsupport/linuxaccessibility/atspiadaptor.cpp @@ -194,6 +194,9 @@ QString AtSpiAdaptor::introspect(const QString &path) const " \n" " \n" " \n" + " \n" + " \n" + " \n" " \n" ); @@ -913,8 +916,17 @@ void AtSpiAdaptor::notify(QAccessibleEvent *event) } case QAccessible::NameChanged: { if (sendObject || sendObject_property_change || sendObject_property_change_accessible_name) { - QString path = pathForInterface(event->accessibleInterface()); - QVariantList args = packDBusSignalArguments(QLatin1String("accessible-name"), 0, 0, variantForPath(path)); + QAccessibleInterface *iface = event->accessibleInterface(); + if (!iface) { + qCDebug(lcAccessibilityAtspi, + "NameChanged event from invalid accessible."); + return; + } + + QString path = pathForInterface(iface); + QVariantList args = packDBusSignalArguments( + QLatin1String("accessible-name"), 0, 0, + QVariant::fromValue(QDBusVariant(iface->text(QAccessible::Name)))); sendDBusSignal(path, QLatin1String(ATSPI_DBUS_INTERFACE_EVENT_OBJECT), QLatin1String("PropertyChange"), args); } @@ -922,8 +934,17 @@ void AtSpiAdaptor::notify(QAccessibleEvent *event) } case QAccessible::DescriptionChanged: { if (sendObject || sendObject_property_change || sendObject_property_change_accessible_description) { - QString path = pathForInterface(event->accessibleInterface()); - QVariantList args = packDBusSignalArguments(QLatin1String("accessible-description"), 0, 0, variantForPath(path)); + QAccessibleInterface *iface = event->accessibleInterface(); + if (!iface) { + qCDebug(lcAccessibilityAtspi, + "DescriptionChanged event from invalid accessible."); + return; + } + + QString path = pathForInterface(iface); + QVariantList args = packDBusSignalArguments( + QLatin1String("accessible-description"), 0, 0, + QVariant::fromValue(QDBusVariant(iface->text(QAccessible::Description)))); sendDBusSignal(path, QLatin1String(ATSPI_DBUS_INTERFACE_EVENT_OBJECT), QLatin1String("PropertyChange"), args); } @@ -1038,7 +1059,9 @@ void AtSpiAdaptor::notify(QAccessibleEvent *event) // Combo Box with AT-SPI likes to be special // It requires a name-change to update caches and then selection-changed QString path = pathForInterface(iface); - QVariantList args1 = packDBusSignalArguments(QLatin1String("accessible-name"), 0, 0, variantForPath(path)); + QVariantList args1 = packDBusSignalArguments( + QLatin1String("accessible-name"), 0, 0, + QVariant::fromValue(QDBusVariant(iface->text(QAccessible::Name)))); sendDBusSignal(path, QLatin1String(ATSPI_DBUS_INTERFACE_EVENT_OBJECT), QLatin1String("PropertyChange"), args1); QVariantList args2 = packDBusSignalArguments(QString(), 0, 0, QVariant::fromValue(QDBusVariant(QVariant(0)))); @@ -1358,6 +1381,26 @@ void AtSpiAdaptor::registerApplication() delete registry; } +namespace { +QString accessibleIdForAccessible(QAccessibleInterface *accessible) +{ + QString result; + while (accessible) { + if (!result.isEmpty()) + result.prepend(QLatin1Char('.')); + if (auto obj = accessible->object()) { + const QString name = obj->objectName(); + if (!name.isEmpty()) + result.prepend(name); + else + result.prepend(QString::fromUtf8(obj->metaObject()->className())); + } + accessible = accessible->parent(); + } + return result; +} +} // namespace + // Accessible bool AtSpiAdaptor::accessibleInterface(QAccessibleInterface *interface, const QString &function, const QDBusMessage &message, const QDBusConnection &connection) { @@ -1441,6 +1484,9 @@ bool AtSpiAdaptor::accessibleInterface(QAccessibleInterface *interface, const QS children << ref; } connection.send(message.createReply(QVariant::fromValue(children))); + } else if (function == QLatin1String("GetAccessibleId")) { + sendReply(connection, message, + QVariant::fromValue(QDBusVariant(accessibleIdForAccessible(interface)))); } else { qCDebug(lcAccessibilityAtspi) << "WARNING: AtSpiAdaptor::accessibleInterface does not implement " << function << message.path(); return false; @@ -1560,11 +1606,12 @@ bool AtSpiAdaptor::inheritsQAction(QObject *object) // Component static QAccessibleInterface * getWindow(QAccessibleInterface * interface) { - if (interface->role() == QAccessible::Window) + if (interface->role() == QAccessible::Dialog || interface->role() == QAccessible::Window) return interface; QAccessibleInterface * parent = interface->parent(); - while (parent && parent->role() != QAccessible::Window) + while (parent && parent->role() != QAccessible::Dialog + && parent->role() != QAccessible::Window) parent = parent->parent(); return parent; @@ -1582,7 +1629,7 @@ static QRect getRelativeRect(QAccessibleInterface *interface) wr = window->rect(); cr.setX(cr.x() - wr.x()); - cr.setY(cr.x() - wr.y()); + cr.setY(cr.y() - wr.y()); } return cr; } @@ -1836,7 +1883,7 @@ bool AtSpiAdaptor::textInterface(QAccessibleInterface *interface, const QString uint coordType = message.arguments().at(2).toUInt(); if (coordType == ATSPI_COORD_TYPE_WINDOW) { QWindow *win = interface->window(); - point -= QPoint(win->x(), win->y()); + point += QPoint(win->x(), win->y()); } int offset = interface->textInterface()->offsetAtPoint(point); sendReply(connection, message, offset); diff --git a/qtbase/src/platformsupport/linuxaccessibility/bridge.cpp b/qtbase/src/platformsupport/linuxaccessibility/bridge.cpp index fdc8cd3198..b17e1749c8 100644 --- a/qtbase/src/platformsupport/linuxaccessibility/bridge.cpp +++ b/qtbase/src/platformsupport/linuxaccessibility/bridge.cpp @@ -229,7 +229,11 @@ static RoleMapping map[] = { //: Role of an accessible object { QAccessible::ButtonDropDown, ATSPI_ROLE_PUSH_BUTTON, QT_TRANSLATE_NOOP("QSpiAccessibleBridge", "button with drop down") }, //: Role of an accessible object +#if ATSPI_ROLE_COUNT > 130 + { QAccessible::ButtonMenu, ATSPI_ROLE_PUSH_BUTTON_MENU, QT_TRANSLATE_NOOP("QSpiAccessibleBridge", "button menu") }, +#else { QAccessible::ButtonMenu, ATSPI_ROLE_PUSH_BUTTON, QT_TRANSLATE_NOOP("QSpiAccessibleBridge", "button menu") }, +#endif //: Role of an accessible object - a button that expands a grid. { QAccessible::ButtonDropGrid, ATSPI_ROLE_PUSH_BUTTON, QT_TRANSLATE_NOOP("QSpiAccessibleBridge", "button with drop down grid") }, //: Role of an accessible object - blank space between other objects. diff --git a/qtbase/src/platformsupport/linuxaccessibility/dbusconnection.cpp b/qtbase/src/platformsupport/linuxaccessibility/dbusconnection.cpp index 45ddc8e496..cc734abc63 100644 --- a/qtbase/src/platformsupport/linuxaccessibility/dbusconnection.cpp +++ b/qtbase/src/platformsupport/linuxaccessibility/dbusconnection.cpp @@ -69,6 +69,21 @@ QT_BEGIN_NAMESPACE DBusConnection::DBusConnection(QObject *parent) : QObject(parent), m_a11yConnection(QString()), m_enabled(false) { + // If the bus is explicitly set via env var it overrides everything else. + QByteArray addressEnv = qgetenv("AT_SPI_BUS_ADDRESS"); + if (!addressEnv.isEmpty()) { + // Only connect on next loop run, connections to our enabled signal are + // only established after the ctor returns. + QMetaObject::invokeMethod( + this, + [this, addressEnv] { + m_enabled = true; + connectA11yBus(QString::fromLocal8Bit(addressEnv)); + }, + Qt::QueuedConnection); + return; + } + // Start monitoring if "org.a11y.Bus" is registered as DBus service. QDBusConnection c = QDBusConnection::sessionBus(); if (!c.isConnected()) { diff --git a/qtbase/src/platformsupport/services/genericunix/qgenericunixservices.cpp b/qtbase/src/platformsupport/services/genericunix/qgenericunixservices.cpp index f0d1722c95..47ef7d2b5c 100644 --- a/qtbase/src/platformsupport/services/genericunix/qgenericunixservices.cpp +++ b/qtbase/src/platformsupport/services/genericunix/qgenericunixservices.cpp @@ -51,6 +51,9 @@ #include #include +#include +#include + #if QT_CONFIG(dbus) // These QtCore includes are needed for xdg-desktop-portal support #include @@ -58,6 +61,8 @@ #include #include +#include + #include #include #include @@ -205,8 +210,7 @@ static inline QDBusMessage xdgDesktopPortalOpenFile(const QUrl &url) // handle_token (s) - A string that will be used as the last element of the @handle. // writable (b) - Whether to allow the chosen application to write to the file. -#ifdef O_PATH - const int fd = qt_safe_open(QFile::encodeName(url.toLocalFile()), O_PATH); + const int fd = qt_safe_open(QFile::encodeName(url.toLocalFile()), O_RDONLY); if (fd != -1) { QDBusMessage message = QDBusMessage::createMethodCall(QLatin1String("org.freedesktop.portal.Desktop"), QLatin1String("/org/freedesktop/portal/desktop"), @@ -216,16 +220,13 @@ static inline QDBusMessage xdgDesktopPortalOpenFile(const QUrl &url) QDBusUnixFileDescriptor descriptor; descriptor.giveFileDescriptor(fd); - const QVariantMap options = {{QLatin1String("writable"), true}}; + const QVariantMap options = {}; // FIXME parent_window_id message << QString() << QVariant::fromValue(descriptor) << options; return QDBusConnection::sessionBus().call(message); } -#else - Q_UNUSED(url) -#endif return QDBusMessage::createError(QDBusError::InternalError, qt_error_string()); } @@ -298,8 +299,135 @@ static inline QDBusMessage xdgDesktopPortalSendEmail(const QUrl &url) return QDBusConnection::sessionBus().call(message); } + +namespace { +struct XDGDesktopColor +{ + double r = 0; + double g = 0; + double b = 0; + + QColor toQColor() const + { + constexpr auto rgbMax = 255; + return { static_cast(r * rgbMax), static_cast(g * rgbMax), + static_cast(b * rgbMax) }; + } +}; + +const QDBusArgument &operator>>(const QDBusArgument &argument, XDGDesktopColor &myStruct) +{ + argument.beginStructure(); + argument >> myStruct.r >> myStruct.g >> myStruct.b; + argument.endStructure(); + return argument; +} + +class XdgDesktopPortalColorPicker : public QPlatformServiceColorPicker +{ + Q_OBJECT +public: + XdgDesktopPortalColorPicker(const QString &parentWindowId, QWindow *parent) + : QPlatformServiceColorPicker(parent), m_parentWindowId(parentWindowId) + { + } + + void pickColor() override + { + // DBus signature: + // PickColor (IN s parent_window, + // IN a{sv} options + // OUT o handle) + // Options: + // handle_token (s) - A string that will be used as the last element of the @handle. + + QDBusMessage message = QDBusMessage::createMethodCall( + QStringLiteral("org.freedesktop.portal.Desktop"), QStringLiteral("/org/freedesktop/portal/desktop"), + QStringLiteral("org.freedesktop.portal.Screenshot"), QStringLiteral("PickColor")); + message << m_parentWindowId << QVariantMap(); + + QDBusPendingCall pendingCall = QDBusConnection::sessionBus().asyncCall(message); + auto watcher = new QDBusPendingCallWatcher(pendingCall, this); + connect(watcher, &QDBusPendingCallWatcher::finished, this, + [this](QDBusPendingCallWatcher *watcher) { + watcher->deleteLater(); + QDBusPendingReply reply = *watcher; + if (reply.isError()) { + qWarning("DBus call to pick color failed: %s", + qPrintable(reply.error().message())); + Q_EMIT colorPicked({}); + } else { + QDBusConnection::sessionBus().connect( + QStringLiteral("org.freedesktop.portal.Desktop"), reply.value().path(), + QStringLiteral("org.freedesktop.portal.Request"), QStringLiteral("Response"), this, + // clang-format off + SLOT(gotColorResponse(uint,QVariantMap)) + // clang-format on + ); + } + }); + } + +private Q_SLOTS: + void gotColorResponse(uint result, const QVariantMap &map) + { + if (result != 0) + return; + XDGDesktopColor color{}; + map.value(QStringLiteral("color")).value() >> color; + Q_EMIT colorPicked(color.toQColor()); + deleteLater(); + } + +private: + const QString m_parentWindowId; +}; +} // namespace + #endif // QT_CONFIG(dbus) +QGenericUnixServices::QGenericUnixServices() +{ +#if QT_CONFIG(dbus) + if (qEnvironmentVariableIntValue("QT_NO_XDG_DESKTOP_PORTAL") > 0) { + return; + } + QDBusMessage message = QDBusMessage::createMethodCall( + QStringLiteral("org.freedesktop.portal.Desktop"), QStringLiteral("/org/freedesktop/portal/desktop"), + QStringLiteral("org.freedesktop.DBus.Properties"), QStringLiteral("Get")); + message << QStringLiteral("org.freedesktop.portal.Screenshot") + << QStringLiteral("version"); + + QDBusPendingCall pendingCall = QDBusConnection::sessionBus().asyncCall(message); + auto watcher = new QDBusPendingCallWatcher(pendingCall); + QObject::connect(watcher, &QDBusPendingCallWatcher::finished, watcher, + [this](QDBusPendingCallWatcher *watcher) { + watcher->deleteLater(); + QDBusPendingReply reply = *watcher; + if (!reply.isError() && reply.value().toUInt() >= 2) + m_hasScreenshotPortalWithColorPicking = true; + }); + +#endif +} + +QPlatformServiceColorPicker *QGenericUnixServices::colorPicker(QWindow *parent) +{ +#if QT_CONFIG(dbus) + // Make double sure that we are in a wayland environment. In particular check + // WAYLAND_DISPLAY so also XWayland apps benefit from portal-based color picking. + // Outside wayland we'll rather rely on other means than the XDG desktop portal. + if (!qEnvironmentVariableIsEmpty("WAYLAND_DISPLAY") + || QGuiApplication::platformName().startsWith(QLatin1String("wayland"))) { + return new XdgDesktopPortalColorPicker(portalWindowIdentifier(parent), parent); + } + return nullptr; +#else + Q_UNUSED(parent); + return nullptr; +#endif +} + QByteArray QGenericUnixServices::desktopEnvironment() const { static const QByteArray result = detectDesktopEnvironment(); @@ -354,6 +482,8 @@ bool QGenericUnixServices::openDocument(const QUrl &url) } #else +QGenericUnixServices::QGenericUnixServices() = default; + QByteArray QGenericUnixServices::desktopEnvironment() const { return QByteArrayLiteral("UNKNOWN"); @@ -373,6 +503,30 @@ bool QGenericUnixServices::openDocument(const QUrl &url) return false; } +QPlatformServiceColorPicker *QGenericUnixServices::colorPicker(QWindow *parent) +{ + Q_UNUSED(parent); + return nullptr; +} + #endif // QT_NO_MULTIPROCESS +QString QGenericUnixServices::portalWindowIdentifier(QWindow *window) +{ + if (QGuiApplication::platformName() == QLatin1String("xcb")) + return QStringLiteral("x11:") + QString::number(window->winId(), 16); + return QString(); +} + +bool QGenericUnixServices::hasCapability(Capability capability) const +{ + switch (capability) { + case Capability::ColorPicking: + return m_hasScreenshotPortalWithColorPicking; + } + return false; +} + QT_END_NAMESPACE + +#include "qgenericunixservices.moc" diff --git a/qtbase/src/platformsupport/services/genericunix/qgenericunixservices_p.h b/qtbase/src/platformsupport/services/genericunix/qgenericunixservices_p.h index 8ac3de6f03..30924e64bd 100644 --- a/qtbase/src/platformsupport/services/genericunix/qgenericunixservices_p.h +++ b/qtbase/src/platformsupport/services/genericunix/qgenericunixservices_p.h @@ -59,16 +59,21 @@ QT_BEGIN_NAMESPACE class QGenericUnixServices : public QPlatformServices { public: - QGenericUnixServices() {} + QGenericUnixServices(); QByteArray desktopEnvironment() const override; + bool hasCapability(Capability capability) const override; bool openUrl(const QUrl &url) override; bool openDocument(const QUrl &url) override; + QPlatformServiceColorPicker *colorPicker(QWindow *parent = nullptr) override; + + virtual QString portalWindowIdentifier(QWindow *window); private: QString m_webBrowser; QString m_documentLauncher; + bool m_hasScreenshotPortalWithColorPicking = false; }; QT_END_NAMESPACE diff --git a/qtbase/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection.cpp b/qtbase/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection.cpp index 09470bccc6..cc7c7d4d8a 100644 --- a/qtbase/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection.cpp +++ b/qtbase/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection.cpp @@ -69,6 +69,7 @@ const QString MenuBarPath = QLatin1String("/MenuBar"); */ QDBusMenuConnection::QDBusMenuConnection(QObject *parent, const QString &serviceName) : QObject(parent) + , m_serviceName(serviceName) , m_connection(serviceName.isNull() ? QDBusConnection::sessionBus() : QDBusConnection::connectToBus(QDBusConnection::SessionBus, serviceName)) , m_dbusWatcher(new QDBusServiceWatcher(StatusNotifierWatcherService, m_connection, QDBusServiceWatcher::WatchForRegistration, this)) @@ -83,6 +84,12 @@ QDBusMenuConnection::QDBusMenuConnection(QObject *parent, const QString &service #endif } +QDBusMenuConnection::~QDBusMenuConnection() +{ + if (!m_serviceName.isEmpty() && m_connection.isConnected()) + QDBusConnection::disconnectFromBus(m_serviceName); +} + void QDBusMenuConnection::dbusError(const QDBusError &error) { qWarning() << "QDBusTrayIcon encountered a D-Bus error:" << error; @@ -105,13 +112,7 @@ void QDBusMenuConnection::unregisterTrayIconMenu(QDBusTrayIcon *item) bool QDBusMenuConnection::registerTrayIcon(QDBusTrayIcon *item) { - bool success = connection().registerService(item->instanceId()); - if (!success) { - qWarning() << "failed to register service" << item->instanceId(); - return false; - } - - success = connection().registerObject(StatusNotifierItemPath, item); + bool success = connection().registerObject(StatusNotifierItemPath, item); if (!success) { unregisterTrayIcon(item); qWarning() << "failed to register" << item->instanceId() << StatusNotifierItemPath; @@ -126,21 +127,18 @@ bool QDBusMenuConnection::registerTrayIcon(QDBusTrayIcon *item) bool QDBusMenuConnection::registerTrayIconWithWatcher(QDBusTrayIcon *item) { + Q_UNUSED(item); QDBusMessage registerMethod = QDBusMessage::createMethodCall( StatusNotifierWatcherService, StatusNotifierWatcherPath, StatusNotifierWatcherService, QLatin1String("RegisterStatusNotifierItem")); - registerMethod.setArguments(QVariantList() << item->instanceId()); + registerMethod.setArguments(QVariantList() << m_connection.baseService()); return m_connection.callWithCallback(registerMethod, this, SIGNAL(trayIconRegistered()), SLOT(dbusError(QDBusError))); } -bool QDBusMenuConnection::unregisterTrayIcon(QDBusTrayIcon *item) +void QDBusMenuConnection::unregisterTrayIcon(QDBusTrayIcon *item) { unregisterTrayIconMenu(item); connection().unregisterObject(StatusNotifierItemPath); - bool success = connection().unregisterService(item->instanceId()); - if (!success) - qWarning() << "failed to unregister service" << item->instanceId(); - return success; } #endif // QT_NO_SYSTEMTRAYICON diff --git a/qtbase/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection_p.h b/qtbase/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection_p.h index f484795fbb..97bdfabb85 100644 --- a/qtbase/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection_p.h +++ b/qtbase/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection_p.h @@ -70,6 +70,7 @@ class QDBusMenuConnection : public QObject public: QDBusMenuConnection(QObject *parent = nullptr, const QString &serviceName = QString()); + ~QDBusMenuConnection(); QDBusConnection connection() const { return m_connection; } QDBusServiceWatcher *dbusWatcher() const { return m_dbusWatcher; } bool isStatusNotifierHostRegistered() const { return m_statusNotifierHostRegistered; } @@ -78,7 +79,7 @@ public: void unregisterTrayIconMenu(QDBusTrayIcon *item); bool registerTrayIcon(QDBusTrayIcon *item); bool registerTrayIconWithWatcher(QDBusTrayIcon *item); - bool unregisterTrayIcon(QDBusTrayIcon *item); + void unregisterTrayIcon(QDBusTrayIcon *item); #endif // QT_NO_SYSTEMTRAYICON Q_SIGNALS: @@ -90,6 +91,7 @@ private Q_SLOTS: void dbusError(const QDBusError &error); private: + QString m_serviceName; QDBusConnection m_connection; QDBusServiceWatcher *m_dbusWatcher; bool m_statusNotifierHostRegistered; diff --git a/qtbase/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp b/qtbase/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp index cb1b39db64..6e01af052c 100644 --- a/qtbase/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp +++ b/qtbase/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp @@ -755,6 +755,9 @@ QVariant QGnomeTheme::themeHint(QPlatformTheme::ThemeHint hint) const return QVariant(QChar(0x2022)); case QPlatformTheme::UiEffects: return QVariant(int(HoverEffect)); + case QPlatformTheme::ButtonPressKeys: + return QVariant::fromValue( + QList({ Qt::Key_Space, Qt::Key_Return, Qt::Key_Enter, Qt::Key_Select })); default: break; } diff --git a/qtbase/src/platformsupport/windowsuiautomation/qwindowsuiawrapper.cpp b/qtbase/src/platformsupport/windowsuiautomation/qwindowsuiawrapper.cpp index 8038e1a3c3..79541fe636 100644 --- a/qtbase/src/platformsupport/windowsuiautomation/qwindowsuiawrapper.cpp +++ b/qtbase/src/platformsupport/windowsuiautomation/qwindowsuiawrapper.cpp @@ -53,7 +53,6 @@ QWindowsUiaWrapper::QWindowsUiaWrapper() m_pUiaHostProviderFromHwnd = reinterpret_cast(uiaLib.resolve("UiaHostProviderFromHwnd")); m_pUiaRaiseAutomationPropertyChangedEvent = reinterpret_cast(uiaLib.resolve("UiaRaiseAutomationPropertyChangedEvent")); m_pUiaRaiseAutomationEvent = reinterpret_cast(uiaLib.resolve("UiaRaiseAutomationEvent")); - m_pUiaRaiseNotificationEvent = reinterpret_cast(uiaLib.resolve("UiaRaiseNotificationEvent")); m_pUiaClientsAreListening = reinterpret_cast(uiaLib.resolve("UiaClientsAreListening")); } } @@ -69,7 +68,7 @@ QWindowsUiaWrapper *QWindowsUiaWrapper::instance() return &wrapper; } -// True if most symbols resolved (UiaRaiseNotificationEvent is optional). +// True if all symbols resolved. BOOL QWindowsUiaWrapper::ready() { return m_pUiaReturnRawElementProvider @@ -114,12 +113,5 @@ HRESULT QWindowsUiaWrapper::raiseAutomationEvent(IRawElementProviderSimple *pPro return m_pUiaRaiseAutomationEvent(pProvider, id); } -HRESULT QWindowsUiaWrapper::raiseNotificationEvent(IRawElementProviderSimple *provider, NotificationKind notificationKind, NotificationProcessing notificationProcessing, BSTR displayString, BSTR activityId) -{ - if (!m_pUiaRaiseNotificationEvent) - return UIA_E_NOTSUPPORTED; - return m_pUiaRaiseNotificationEvent(provider, notificationKind, notificationProcessing, displayString, activityId); -} - QT_END_NAMESPACE diff --git a/qtbase/src/platformsupport/windowsuiautomation/qwindowsuiawrapper_p.h b/qtbase/src/platformsupport/windowsuiautomation/qwindowsuiawrapper_p.h index 9208acbc31..3ebc3008d3 100644 --- a/qtbase/src/platformsupport/windowsuiautomation/qwindowsuiawrapper_p.h +++ b/qtbase/src/platformsupport/windowsuiautomation/qwindowsuiawrapper_p.h @@ -80,20 +80,17 @@ public: HRESULT hostProviderFromHwnd(HWND hwnd, IRawElementProviderSimple **ppProvider); HRESULT raiseAutomationPropertyChangedEvent(IRawElementProviderSimple *pProvider, PROPERTYID id, VARIANT oldValue, VARIANT newValue); HRESULT raiseAutomationEvent(IRawElementProviderSimple *pProvider, EVENTID id); - HRESULT raiseNotificationEvent(IRawElementProviderSimple *provider, NotificationKind notificationKind, NotificationProcessing notificationProcessing, BSTR displayString, BSTR activityId); private: typedef LRESULT (WINAPI *PtrUiaReturnRawElementProvider)(HWND, WPARAM, LPARAM, IRawElementProviderSimple *); typedef HRESULT (WINAPI *PtrUiaHostProviderFromHwnd)(HWND, IRawElementProviderSimple **); typedef HRESULT (WINAPI *PtrUiaRaiseAutomationPropertyChangedEvent)(IRawElementProviderSimple *, PROPERTYID, VARIANT, VARIANT); typedef HRESULT (WINAPI *PtrUiaRaiseAutomationEvent)(IRawElementProviderSimple *, EVENTID); - typedef HRESULT (WINAPI *PtrUiaRaiseNotificationEvent)(IRawElementProviderSimple *, NotificationKind, NotificationProcessing, BSTR, BSTR); typedef BOOL (WINAPI *PtrUiaClientsAreListening)(); PtrUiaReturnRawElementProvider m_pUiaReturnRawElementProvider = nullptr; PtrUiaHostProviderFromHwnd m_pUiaHostProviderFromHwnd = nullptr; PtrUiaRaiseAutomationPropertyChangedEvent m_pUiaRaiseAutomationPropertyChangedEvent = nullptr; PtrUiaRaiseAutomationEvent m_pUiaRaiseAutomationEvent = nullptr; - PtrUiaRaiseNotificationEvent m_pUiaRaiseNotificationEvent = nullptr; PtrUiaClientsAreListening m_pUiaClientsAreListening = nullptr; }; diff --git a/qtbase/src/platformsupport/windowsuiautomation/uiatypes_p.h b/qtbase/src/platformsupport/windowsuiautomation/uiatypes_p.h index 0d2e1161e4..afbc957094 100644 --- a/qtbase/src/platformsupport/windowsuiautomation/uiatypes_p.h +++ b/qtbase/src/platformsupport/windowsuiautomation/uiatypes_p.h @@ -162,22 +162,6 @@ enum ExpandCollapseState { ExpandCollapseState_LeafNode = 3 }; -enum NotificationKind { - NotificationKind_ItemAdded = 0, - NotificationKind_ItemRemoved = 1, - NotificationKind_ActionCompleted = 2, - NotificationKind_ActionAborted = 3, - NotificationKind_Other = 4 -}; - -enum NotificationProcessing { - NotificationProcessing_ImportantAll = 0, - NotificationProcessing_ImportantMostRecent = 1, - NotificationProcessing_All = 2, - NotificationProcessing_MostRecent = 3, - NotificationProcessing_CurrentThenMostRecent = 4 -}; - struct UiaRect { double left; double top; diff --git a/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmseventreader.cpp b/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmseventreader.cpp index 645a0ae2e9..3e0e406f1a 100644 --- a/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmseventreader.cpp +++ b/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmseventreader.cpp @@ -179,7 +179,7 @@ void QEglFSKmsEventReader::create(QEglFSKmsDevice *device) m_device = device; - qCDebug(qLcEglfsKmsDebug, "Initalizing event reader for device %p fd %d", + qCDebug(qLcEglfsKmsDebug, "Initializing event reader for device %p fd %d", m_device, m_device->fd()); m_thread = new QEglFSKmsEventReaderThread(m_device->fd()); diff --git a/qtbase/src/plugins/platforms/offscreen/qoffscreenintegration.cpp b/qtbase/src/plugins/platforms/offscreen/qoffscreenintegration.cpp index 141fb68a23..d4294d425a 100644 --- a/qtbase/src/plugins/platforms/offscreen/qoffscreenintegration.cpp +++ b/qtbase/src/plugins/platforms/offscreen/qoffscreenintegration.cpp @@ -122,11 +122,13 @@ QOffscreenIntegration::QOffscreenIntegration() #endif m_services.reset(new QPlatformServices); - QWindowSystemInterface::handleScreenAdded(new QOffscreenScreen); + m_screen = new QOffscreenScreen; + QWindowSystemInterface::handleScreenAdded(m_screen); } QOffscreenIntegration::~QOffscreenIntegration() { + QWindowSystemInterface::handleScreenRemoved(m_screen); } void QOffscreenIntegration::initialize() diff --git a/qtbase/src/plugins/platforms/offscreen/qoffscreenintegration.h b/qtbase/src/plugins/platforms/offscreen/qoffscreenintegration.h index 0ea90f6c2f..fe00fde07c 100644 --- a/qtbase/src/plugins/platforms/offscreen/qoffscreenintegration.h +++ b/qtbase/src/plugins/platforms/offscreen/qoffscreenintegration.h @@ -84,6 +84,7 @@ protected: #endif QScopedPointer m_inputContext; QScopedPointer m_services; + QPlatformScreen *m_screen; mutable QScopedPointer m_nativeInterface; }; diff --git a/qtbase/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp b/qtbase/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp index a01104a8e3..6a4a7feb8a 100644 --- a/qtbase/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp +++ b/qtbase/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp @@ -172,27 +172,11 @@ void QWindowsUiaMainProvider::notifyValueChange(QAccessibleValueChangeEvent *eve } if (event->value().type() == QVariant::String) { if (QWindowsUiaMainProvider *provider = providerForAccessible(accessible)) { - - // Tries to notify the change using UiaRaiseNotificationEvent(), which is only available on - // Windows 10 version 1709 or newer. Otherwise uses UiaRaiseAutomationPropertyChangedEvent(). - - BSTR displayString = bStrFromQString(event->value().toString()); - BSTR activityId = bStrFromQString(QString()); - - HRESULT hr = QWindowsUiaWrapper::instance()->raiseNotificationEvent(provider, NotificationKind_Other, - NotificationProcessing_ImportantMostRecent, - displayString, activityId); - - ::SysFreeString(displayString); - ::SysFreeString(activityId); - - if (hr == static_cast(UIA_E_NOTSUPPORTED)) { - VARIANT oldVal, newVal; - clearVariant(&oldVal); - setVariantString(event->value().toString(), &newVal); - QWindowsUiaWrapper::instance()->raiseAutomationPropertyChangedEvent(provider, UIA_ValueValuePropertyId, oldVal, newVal); - ::SysFreeString(newVal.bstrVal); - } + // Notifies changes in string values. + VARIANT oldVal, newVal; + clearVariant(&oldVal); + setVariantString(event->value().toString(), &newVal); + QWindowsUiaWrapper::instance()->raiseAutomationPropertyChangedEvent(provider, UIA_ValueValuePropertyId, oldVal, newVal); } } else if (QAccessibleValueInterface *valueInterface = accessible->valueInterface()) { if (QWindowsUiaMainProvider *provider = providerForAccessible(accessible)) { diff --git a/qtbase/src/plugins/platforms/xcb/qxcbconnection.cpp b/qtbase/src/plugins/platforms/xcb/qxcbconnection.cpp index 013ca7369f..631ade2ec7 100644 --- a/qtbase/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/qtbase/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -706,6 +706,8 @@ void QXcbConnection::handleXcbEvent(xcb_generic_event_t *event) QXcbVirtualDesktop *virtualDesktop = virtualDesktopForRootWindow(propertyNotify->window); if (virtualDesktop) virtualDesktop->updateWorkArea(); + } else if (propertyNotify->atom == atom(QXcbAtom::_NET_SUPPORTED)) { + m_wmSupport->updateNetWMAtoms(); } else { HANDLE_PLATFORM_WINDOW_EVENT(xcb_property_notify_event_t, window, handlePropertyNotifyEvent); } diff --git a/qtbase/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp b/qtbase/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp index 1ced02f31d..5c8298a49d 100644 --- a/qtbase/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp +++ b/qtbase/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp @@ -1255,16 +1255,14 @@ void QXcbConnection::xi2ReportTabletEvent(const void *event, TabletData *tabletD if (Q_LIKELY(useValuators)) { const qreal value = scaleOneValuator(normalizedValue, physicalScreenArea.x(), physicalScreenArea.width()); global.setX(value); - // mapFromGlobal is ok for nested/embedded windows, but works only with whole-number QPoint; - // so map it first, then add back the sub-pixel position - local.setX(window->mapFromGlobal(QPoint(int(value), 0)).x() + (value - int(value))); + local.setX(xcbWindow->mapFromGlobal(QPoint(int(value), 0)).x() + (value - int(value))); } break; case QXcbAtom::AbsY: if (Q_LIKELY(useValuators)) { qreal value = scaleOneValuator(normalizedValue, physicalScreenArea.y(), physicalScreenArea.height()); global.setY(value); - local.setY(window->mapFromGlobal(QPoint(0, int(value))).y() + (value - int(value))); + local.setY(xcbWindow->mapFromGlobal(QPoint(0, int(value))).y() + (value - int(value))); } break; case QXcbAtom::AbsPressure: diff --git a/qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp b/qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp index 4210bf428e..0670b6ebce 100644 --- a/qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp +++ b/qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp @@ -300,7 +300,7 @@ QXcbCursorCacheKey::QXcbCursorCacheKey(const QCursor &c) #endif // !QT_NO_CURSOR QXcbCursor::QXcbCursor(QXcbConnection *conn, QXcbScreen *screen) - : QXcbObject(conn), m_screen(screen), m_gtkCursorThemeInitialized(false) + : QXcbObject(conn), m_screen(screen), m_gtkCursorThemeInitialized(false), m_callbackForPropertyRegistered(false) { #if QT_CONFIG(cursor) // see NUM_BITMAPS in libXcursor/src/xcursorint.h @@ -343,7 +343,7 @@ QXcbCursor::~QXcbCursor() { xcb_connection_t *conn = xcb_connection(); - if (m_gtkCursorThemeInitialized) { + if (m_callbackForPropertyRegistered) { m_screen->xSettings()->removeCallbackForHandle(this); } @@ -562,8 +562,10 @@ xcb_cursor_t QXcbCursor::createFontCursor(int cshape) xcb_cursor_t cursor = XCB_NONE; #if QT_CONFIG(xcb_xlib) && QT_CONFIG(library) - if (m_screen->xSettings()->initialized()) + if (m_screen->xSettings()->initialized()) { m_screen->xSettings()->registerCallbackForProperty("Gtk/CursorThemeName",cursorThemePropertyChanged,this); + m_callbackForPropertyRegistered = true; + } // Try Xcursor first if (cshape >= 0 && cshape <= Qt::LastCursor) { diff --git a/qtbase/src/plugins/platforms/xcb/qxcbcursor.h b/qtbase/src/plugins/platforms/xcb/qxcbcursor.h index 0b238823f0..82fb47e55d 100644 --- a/qtbase/src/plugins/platforms/xcb/qxcbcursor.h +++ b/qtbase/src/plugins/platforms/xcb/qxcbcursor.h @@ -122,6 +122,7 @@ private: void *handle); #endif bool m_gtkCursorThemeInitialized; + bool m_callbackForPropertyRegistered; }; QT_END_NAMESPACE diff --git a/qtbase/src/plugins/platforms/xcb/qxcbintegration.cpp b/qtbase/src/plugins/platforms/xcb/qxcbintegration.cpp index 76869ced60..02d2eebb56 100644 --- a/qtbase/src/plugins/platforms/xcb/qxcbintegration.cpp +++ b/qtbase/src/plugins/platforms/xcb/qxcbintegration.cpp @@ -274,8 +274,7 @@ QPlatformWindow *QXcbIntegration::createForeignWindow(QWindow *window, WId nativ #ifndef QT_NO_OPENGL QPlatformOpenGLContext *QXcbIntegration::createPlatformOpenGLContext(QOpenGLContext *context) const { - QXcbScreen *screen = static_cast(context->screen()->handle()); - QXcbGlIntegration *glIntegration = screen->connection()->glIntegration(); + QXcbGlIntegration *glIntegration = defaultConnection()->glIntegration(); if (!glIntegration) { qWarning("QXcbIntegration: Cannot create platform OpenGL context, neither GLX nor EGL are enabled"); return nullptr; diff --git a/qtbase/src/plugins/platforms/xcb/qxcbwindow.cpp b/qtbase/src/plugins/platforms/xcb/qxcbwindow.cpp index 45bac8ee85..e2e345e2a8 100644 --- a/qtbase/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/qtbase/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -539,6 +539,8 @@ void QXcbWindow::destroy() doFocusOut(); if (connection()->mouseGrabber() == this) connection()->setMouseGrabber(nullptr); + if (connection()->mousePressWindow() == this) + connection()->setMousePressWindow(nullptr); if (m_syncCounter && connection()->hasXSync()) xcb_sync_destroy_counter(xcb_connection(), m_syncCounter); @@ -1345,9 +1347,10 @@ void QXcbWindow::setWindowIcon(const QIcon &icon) if (!icon_data.isEmpty()) { // Ignore icon exceeding maximum xcb request length - if (size_t(icon_data.size()) > xcb_get_maximum_request_length(xcb_connection())) { - qWarning("Ignoring window icon: Size %d exceeds maximum xcb request length %u.", - icon_data.size(), xcb_get_maximum_request_length(xcb_connection())); + if (quint64(icon_data.size()) > quint64(xcb_get_maximum_request_length(xcb_connection()))) { + qWarning() << "Ignoring window icon" << icon_data.size() + << "exceeds maximum xcb request length" + << xcb_get_maximum_request_length(xcb_connection()); return; } xcb_change_property(xcb_connection(), diff --git a/qtbase/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog.cpp b/qtbase/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog.cpp index 2c72538387..8987e3efd0 100644 --- a/qtbase/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog.cpp +++ b/qtbase/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog.cpp @@ -102,15 +102,12 @@ const QDBusArgument &operator >>(const QDBusArgument &arg, QXdgDesktopPortalFile class QXdgDesktopPortalFileDialogPrivate { public: - QXdgDesktopPortalFileDialogPrivate(QPlatformFileDialogHelper *nativeFileDialog) + QXdgDesktopPortalFileDialogPrivate(QPlatformFileDialogHelper *nativeFileDialog, uint fileChooserPortalVersion) : nativeFileDialog(nativeFileDialog) + , fileChooserPortalVersion(fileChooserPortalVersion) { } - WId winId = 0; - bool directoryMode = false; - bool modal = false; - bool multipleFiles = false; - bool saveFile = false; + QEventLoop loop; QString acceptLabel; QString directory; QString title; @@ -122,11 +119,16 @@ public: QString selectedNameFilter; QStringList selectedFiles; std::unique_ptr nativeFileDialog; + uint fileChooserPortalVersion = 0; + bool failedToOpen = false; + bool directoryMode = false; + bool multipleFiles = false; + bool saveFile = false; }; -QXdgDesktopPortalFileDialog::QXdgDesktopPortalFileDialog(QPlatformFileDialogHelper *nativeFileDialog) +QXdgDesktopPortalFileDialog::QXdgDesktopPortalFileDialog(QPlatformFileDialogHelper *nativeFileDialog, uint fileChooserPortalVersion) : QPlatformFileDialogHelper() - , d_ptr(new QXdgDesktopPortalFileDialogPrivate(nativeFileDialog)) + , d_ptr(new QXdgDesktopPortalFileDialogPrivate(nativeFileDialog, fileChooserPortalVersion)) { Q_D(QXdgDesktopPortalFileDialog); @@ -134,6 +136,9 @@ QXdgDesktopPortalFileDialog::QXdgDesktopPortalFileDialog(QPlatformFileDialogHelp connect(d->nativeFileDialog.get(), SIGNAL(accept()), this, SIGNAL(accept())); connect(d->nativeFileDialog.get(), SIGNAL(reject()), this, SIGNAL(reject())); } + + d->loop.connect(this, SIGNAL(accept()), SLOT(quit())); + d->loop.connect(this, SIGNAL(reject()), SLOT(quit())); } QXdgDesktopPortalFileDialog::~QXdgDesktopPortalFileDialog() @@ -177,7 +182,7 @@ void QXdgDesktopPortalFileDialog::initializeDialog() setDirectory(options()->initialDirectory()); } -void QXdgDesktopPortalFileDialog::openPortal() +void QXdgDesktopPortalFileDialog::openPortal(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow *parent) { Q_D(QXdgDesktopPortalFileDialog); @@ -185,13 +190,13 @@ void QXdgDesktopPortalFileDialog::openPortal() QLatin1String("/org/freedesktop/portal/desktop"), QLatin1String("org.freedesktop.portal.FileChooser"), d->saveFile ? QLatin1String("SaveFile") : QLatin1String("OpenFile")); - QString parentWindowId = QLatin1String("x11:") + QString::number(d->winId, 16); + QString parentWindowId = QLatin1String("x11:") + QString::number(parent ? parent->winId() : 0, 16); QVariantMap options; if (!d->acceptLabel.isEmpty()) options.insert(QLatin1String("accept_label"), d->acceptLabel); - options.insert(QLatin1String("modal"), d->modal); + options.insert(QLatin1String("modal"), windowModality != Qt::NonModal); options.insert(QLatin1String("multiple"), d->multipleFiles); options.insert(QLatin1String("directory"), d->directoryMode); @@ -233,6 +238,9 @@ void QXdgDesktopPortalFileDialog::openPortal() filter.name = mimeType.comment(); filter.filterConditions = filterConditions; + if (filter.name.isEmpty()) + filter.name = mimeTypefilter; + filterList << filter; if (!d->selectedMimeTypeFilter.isEmpty() && d->selectedMimeTypeFilter == mimeTypefilter) @@ -290,10 +298,18 @@ void QXdgDesktopPortalFileDialog::openPortal() QDBusPendingCall pendingCall = QDBusConnection::sessionBus().asyncCall(message); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingCall); - connect(watcher, &QDBusPendingCallWatcher::finished, this, [this] (QDBusPendingCallWatcher *watcher) { + connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] (QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; - if (reply.isError()) { - Q_EMIT reject(); + // Any error means the dialog is not shown and we need to fallback + d->failedToOpen = reply.isError(); + if (d->failedToOpen) { + if (d->nativeFileDialog) { + d->nativeFileDialog->show(windowFlags, windowModality, parent); + if (d->loop.isRunning()) + d->nativeFileDialog->exec(); + } else { + Q_EMIT reject(); + } } else { QDBusConnection::sessionBus().connect(nullptr, reply.value().path(), @@ -327,7 +343,7 @@ QUrl QXdgDesktopPortalFileDialog::directory() const { Q_D(const QXdgDesktopPortalFileDialog); - if (d->nativeFileDialog && (options()->fileMode() == QFileDialogOptions::Directory || options()->fileMode() == QFileDialogOptions::DirectoryOnly)) + if (d->nativeFileDialog && useNativeFileDialog()) return d->nativeFileDialog->directory(); return d->directory; @@ -349,7 +365,7 @@ QList QXdgDesktopPortalFileDialog::selectedFiles() const { Q_D(const QXdgDesktopPortalFileDialog); - if (d->nativeFileDialog && (options()->fileMode() == QFileDialogOptions::Directory || options()->fileMode() == QFileDialogOptions::DirectoryOnly)) + if (d->nativeFileDialog && useNativeFileDialog()) return d->nativeFileDialog->selectedFiles(); QList files; @@ -404,16 +420,13 @@ void QXdgDesktopPortalFileDialog::exec() { Q_D(QXdgDesktopPortalFileDialog); - if (d->nativeFileDialog && (options()->fileMode() == QFileDialogOptions::Directory || options()->fileMode() == QFileDialogOptions::DirectoryOnly)) { + if (d->nativeFileDialog && useNativeFileDialog()) { d->nativeFileDialog->exec(); return; } // HACK we have to avoid returning until we emit that the dialog was accepted or rejected - QEventLoop loop; - loop.connect(this, SIGNAL(accept()), SLOT(quit())); - loop.connect(this, SIGNAL(reject()), SLOT(quit())); - loop.exec(); + d->loop.exec(); } void QXdgDesktopPortalFileDialog::hide() @@ -430,13 +443,10 @@ bool QXdgDesktopPortalFileDialog::show(Qt::WindowFlags windowFlags, Qt::WindowMo initializeDialog(); - d->modal = windowModality != Qt::NonModal; - d->winId = parent ? parent->winId() : 0; - - if (d->nativeFileDialog && (options()->fileMode() == QFileDialogOptions::Directory || options()->fileMode() == QFileDialogOptions::DirectoryOnly)) + if (d->nativeFileDialog && useNativeFileDialog(OpenFallback)) return d->nativeFileDialog->show(windowFlags, windowModality, parent); - openPortal(); + openPortal(windowFlags, windowModality, parent); return true; } @@ -466,6 +476,23 @@ void QXdgDesktopPortalFileDialog::gotResponse(uint response, const QVariantMap & } } +bool QXdgDesktopPortalFileDialog::useNativeFileDialog(QXdgDesktopPortalFileDialog::FallbackType fallbackType) const +{ + Q_D(const QXdgDesktopPortalFileDialog); + + if (d->failedToOpen && fallbackType != OpenFallback) + return true; + + if (d->fileChooserPortalVersion < 3) { + if (options()->fileMode() == QFileDialogOptions::Directory) + return true; + else if (options()->fileMode() == QFileDialogOptions::DirectoryOnly) + return true; + } + + return false; +} + QT_END_NAMESPACE #include "moc_qxdgdesktopportalfiledialog_p.cpp" diff --git a/qtbase/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog_p.h b/qtbase/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog_p.h index 4f4de96ecf..65e22a5cf2 100644 --- a/qtbase/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog_p.h +++ b/qtbase/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog_p.h @@ -51,6 +51,11 @@ class QXdgDesktopPortalFileDialog : public QPlatformFileDialogHelper Q_OBJECT Q_DECLARE_PRIVATE(QXdgDesktopPortalFileDialog) public: + enum FallbackType { + GenericFallback, + OpenFallback + }; + enum ConditionType : uint { GlobalPattern = 0, MimeType = 1 @@ -69,7 +74,7 @@ public: }; typedef QVector FilterList; - QXdgDesktopPortalFileDialog(QPlatformFileDialogHelper *nativeFileDialog = nullptr); + QXdgDesktopPortalFileDialog(QPlatformFileDialogHelper *nativeFileDialog = nullptr, uint fileChooserPortalVersion = 0); ~QXdgDesktopPortalFileDialog(); bool defaultNameFilterDisables() const override; @@ -92,7 +97,8 @@ private Q_SLOTS: private: void initializeDialog(); - void openPortal(); + void openPortal(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow *parent); + bool useNativeFileDialog(FallbackType fallbackType = GenericFallback) const; QScopedPointer d_ptr; }; diff --git a/qtbase/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportaltheme.cpp b/qtbase/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportaltheme.cpp index 2fc3167fd5..b809503122 100644 --- a/qtbase/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportaltheme.cpp +++ b/qtbase/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportaltheme.cpp @@ -153,11 +153,12 @@ QPlatformDialogHelper* QXdgDesktopPortalTheme::createPlatformDialogHelper(Dialog { Q_D(const QXdgDesktopPortalTheme); - if (type == FileDialog) { + if (type == FileDialog && d->fileChooserPortalVersion) { // Older versions of FileChooser portal don't support opening directories, therefore we fallback // to native file dialog opened inside the sandbox to open a directory. - if (d->fileChooserPortalVersion < 3 && d->baseTheme->usePlatformNativeDialog(type)) - return new QXdgDesktopPortalFileDialog(static_cast(d->baseTheme->createPlatformDialogHelper(type))); + if (d->baseTheme->usePlatformNativeDialog(type)) + return new QXdgDesktopPortalFileDialog(static_cast(d->baseTheme->createPlatformDialogHelper(type)), + d->fileChooserPortalVersion); return new QXdgDesktopPortalFileDialog; } diff --git a/qtbase/src/plugins/sqldrivers/mysql/qsql_mysql.cpp b/qtbase/src/plugins/sqldrivers/mysql/qsql_mysql.cpp index 6c522838df..353ea099d5 100644 --- a/qtbase/src/plugins/sqldrivers/mysql/qsql_mysql.cpp +++ b/qtbase/src/plugins/sqldrivers/mysql/qsql_mysql.cpp @@ -918,9 +918,9 @@ bool QMYSQLResult::prepare(const QString& query) return false; } - if (mysql_stmt_param_count(d->stmt) > 0) {// allocate memory for outvalues - d->outBinds = new MYSQL_BIND[mysql_stmt_param_count(d->stmt)]; - } + const auto paramCount = mysql_stmt_param_count(d->stmt); + if (paramCount > 0) // allocate memory for outvalues + d->outBinds = new MYSQL_BIND[paramCount](); setSelect(d->bindInValues()); d->preparedQuery = true; @@ -1365,20 +1365,20 @@ bool QMYSQLDriver::open(const QString& db, } #if MYSQL_VERSION_ID >= 50007 - if (mysql_get_client_version() >= 50503 && mysql_get_server_version(d->mysql) >= 50503) { - // force the communication to be utf8mb4 (only utf8mb4 supports 4-byte characters) - mysql_set_character_set(d->mysql, "utf8mb4"); + // force the communication to be utf8mb4 (only utf8mb4 supports 4-byte characters) + if (mysql_set_character_set(d->mysql, "utf8mb4")) { + // this failed, try forcing it to utf (BMP only) + if (mysql_set_character_set(d->mysql, "utf8")) + qWarning() << "MySQL: Unable to set the client character set to utf8."; #if QT_CONFIG(textcodec) - d->tc = QTextCodec::codecForName("UTF-8"); + else + d->tc = codec(d->mysql); #endif - } else - { - // force the communication to be utf8 - mysql_set_character_set(d->mysql, "utf8"); + } #if QT_CONFIG(textcodec) - d->tc = codec(d->mysql); + else + d->tc = QTextCodec::codecForName("UTF-8"); #endif - } #endif // MYSQL_VERSION_ID >= 50007 d->preparedQuerysEnabled = checkPreparedQueries(d->mysql); diff --git a/qtbase/src/plugins/sqldrivers/odbc/qsql_odbc.cpp b/qtbase/src/plugins/sqldrivers/odbc/qsql_odbc.cpp index c3296c79fd..8bcc819e42 100644 --- a/qtbase/src/plugins/sqldrivers/odbc/qsql_odbc.cpp +++ b/qtbase/src/plugins/sqldrivers/odbc/qsql_odbc.cpp @@ -125,7 +125,6 @@ inline static QVarLengthArray toSQLTCHAR(const QString &input) { QVarLengthArray result; toSQLTCHARImpl(result, input); - result.append(0); // make sure it's null terminated, doesn't matter if it already is, it does if it isn't. return result; } @@ -746,10 +745,15 @@ static QSqlField qMakeFieldInfo(const SQLHANDLE hStmt, int i, QString *errorMess f.setAutoValue(isAutoValue(hStmt, i)); QVarLengthArray tableName(TABLENAMESIZE); SQLSMALLINT tableNameLen; - r = SQLColAttribute(hStmt, i + 1, SQL_DESC_BASE_TABLE_NAME, tableName.data(), - TABLENAMESIZE, &tableNameLen, 0); + r = SQLColAttribute(hStmt, + i + 1, + SQL_DESC_BASE_TABLE_NAME, + tableName.data(), + SQLSMALLINT(tableName.size() * sizeof(SQLTCHAR)), // SQLColAttribute needs/returns size in bytes + &tableNameLen, + 0); if (r == SQL_SUCCESS) - f.setTableName(fromSQLTCHAR(tableName, tableNameLen)); + f.setTableName(fromSQLTCHAR(tableName, tableNameLen / sizeof(SQLTCHAR))); return f; } @@ -2111,7 +2115,8 @@ void QODBCDriverPrivate::checkUnicode() hDbc, &hStmt); - r = SQLExecDirect(hStmt, toSQLTCHAR(QLatin1String("select 'test'")).data(), SQL_NTS); + auto encoded = toSQLTCHAR(QLatin1String("select 'test'")); + r = SQLExecDirect(hStmt, encoded.data(), SQLINTEGER(encoded.size())); if(r == SQL_SUCCESS) { r = SQLFetch(hStmt); if(r == SQL_SUCCESS) { diff --git a/qtbase/src/printsupport/dialogs/images/print-24.png b/qtbase/src/printsupport/dialogs/images/printer-24.png similarity index 100% rename from src/printsupport/dialogs/images/print-24.png rename to src/printsupport/dialogs/images/printer-24.png diff --git a/qtbase/src/printsupport/dialogs/images/print-32.png b/qtbase/src/printsupport/dialogs/images/printer-32.png similarity index 100% rename from src/printsupport/dialogs/images/print-32.png rename to src/printsupport/dialogs/images/printer-32.png diff --git a/qtbase/src/printsupport/dialogs/images/view-page-sided-24.png b/qtbase/src/printsupport/dialogs/images/view-pages-facing-24.png similarity index 100% rename from src/printsupport/dialogs/images/view-page-sided-24.png rename to src/printsupport/dialogs/images/view-pages-facing-24.png diff --git a/qtbase/src/printsupport/dialogs/images/view-page-sided-32.png b/qtbase/src/printsupport/dialogs/images/view-pages-facing-32.png similarity index 100% rename from src/printsupport/dialogs/images/view-page-sided-32.png rename to src/printsupport/dialogs/images/view-pages-facing-32.png diff --git a/qtbase/src/printsupport/dialogs/images/view-page-multi-24.png b/qtbase/src/printsupport/dialogs/images/view-pages-overview-24.png similarity index 100% rename from src/printsupport/dialogs/images/view-page-multi-24.png rename to src/printsupport/dialogs/images/view-pages-overview-24.png diff --git a/qtbase/src/printsupport/dialogs/images/view-page-multi-32.png b/qtbase/src/printsupport/dialogs/images/view-pages-overview-32.png similarity index 100% rename from src/printsupport/dialogs/images/view-page-multi-32.png rename to src/printsupport/dialogs/images/view-pages-overview-32.png diff --git a/qtbase/src/printsupport/dialogs/images/view-page-one-24.png b/qtbase/src/printsupport/dialogs/images/view-pages-single-24.png similarity index 100% rename from src/printsupport/dialogs/images/view-page-one-24.png rename to src/printsupport/dialogs/images/view-pages-single-24.png diff --git a/qtbase/src/printsupport/dialogs/images/view-page-one-32.png b/qtbase/src/printsupport/dialogs/images/view-pages-single-32.png similarity index 100% rename from src/printsupport/dialogs/images/view-page-one-32.png rename to src/printsupport/dialogs/images/view-pages-single-32.png diff --git a/qtbase/src/printsupport/dialogs/images/fit-page-24.png b/qtbase/src/printsupport/dialogs/images/zoom-fit-page-24.png similarity index 100% rename from src/printsupport/dialogs/images/fit-page-24.png rename to src/printsupport/dialogs/images/zoom-fit-page-24.png diff --git a/qtbase/src/printsupport/dialogs/images/fit-page-32.png b/qtbase/src/printsupport/dialogs/images/zoom-fit-page-32.png similarity index 100% rename from src/printsupport/dialogs/images/fit-page-32.png rename to src/printsupport/dialogs/images/zoom-fit-page-32.png diff --git a/qtbase/src/printsupport/dialogs/images/fit-width-24.png b/qtbase/src/printsupport/dialogs/images/zoom-fit-width-24.png similarity index 100% rename from src/printsupport/dialogs/images/fit-width-24.png rename to src/printsupport/dialogs/images/zoom-fit-width-24.png diff --git a/qtbase/src/printsupport/dialogs/images/fit-width-32.png b/qtbase/src/printsupport/dialogs/images/zoom-fit-width-32.png similarity index 100% rename from src/printsupport/dialogs/images/fit-width-32.png rename to src/printsupport/dialogs/images/zoom-fit-width-32.png diff --git a/qtbase/src/printsupport/dialogs/qprintdialog.qrc b/qtbase/src/printsupport/dialogs/qprintdialog.qrc index 5a579baa55..10b8e1d341 100644 --- a/qtbase/src/printsupport/dialogs/qprintdialog.qrc +++ b/qtbase/src/printsupport/dialogs/qprintdialog.qrc @@ -1,9 +1,9 @@ -images/fit-page-24.png -images/fit-page-32.png -images/fit-width-24.png -images/fit-width-32.png +images/zoom-fit-page-24.png +images/zoom-fit-page-32.png +images/zoom-fit-width-24.png +images/zoom-fit-width-32.png images/go-first-24.png images/go-first-32.png images/go-last-24.png @@ -18,14 +18,14 @@ images/layout-portrait-32.png images/page-setup-24.png images/page-setup-32.png -images/print-24.png -images/print-32.png -images/view-page-multi-24.png -images/view-page-multi-32.png -images/view-page-one-24.png -images/view-page-one-32.png -images/view-page-sided-24.png -images/view-page-sided-32.png +images/printer-24.png +images/printer-32.png +images/view-pages-overview-24.png +images/view-pages-overview-32.png +images/view-pages-single-24.png +images/view-pages-single-32.png +images/view-pages-facing-24.png +images/view-pages-facing-32.png images/zoom-in-24.png images/zoom-in-32.png images/zoom-out-24.png diff --git a/qtbase/src/printsupport/dialogs/qprintpreviewdialog.cpp b/qtbase/src/printsupport/dialogs/qprintpreviewdialog.cpp index 39575d5f57..23b7e89538 100644 --- a/qtbase/src/printsupport/dialogs/qprintpreviewdialog.cpp +++ b/qtbase/src/printsupport/dialogs/qprintpreviewdialog.cpp @@ -352,7 +352,7 @@ void QPrintPreviewDialogPrivate::init(QPrinter *_printer) static inline void qt_setupActionIcon(QAction *action, QLatin1String name) { QLatin1String imagePrefix(":/qt-project.org/dialogs/qprintpreviewdialog/images/"); - QIcon icon; + QIcon icon = QIcon::fromTheme(name); icon.addFile(imagePrefix + name + QLatin1String("-24.png"), QSize(24, 24)); icon.addFile(imagePrefix + name + QLatin1String("-32.png"), QSize(32, 32)); action->setIcon(icon); @@ -383,8 +383,8 @@ void QPrintPreviewDialogPrivate::setupActions() fitPageAction->setObjectName(QLatin1String("fitPageAction")); fitWidthAction->setCheckable(true); fitPageAction->setCheckable(true); - qt_setupActionIcon(fitWidthAction, QLatin1String("fit-width")); - qt_setupActionIcon(fitPageAction, QLatin1String("fit-page")); + qt_setupActionIcon(fitWidthAction, QLatin1String("zoom-fit-width")); + qt_setupActionIcon(fitPageAction, QLatin1String("zoom-fit-page")); QObject::connect(fitGroup, SIGNAL(triggered(QAction*)), q, SLOT(_q_fit(QAction*))); // Zoom @@ -410,9 +410,9 @@ void QPrintPreviewDialogPrivate::setupActions() singleModeAction = modeGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Show single page")); facingModeAction = modeGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Show facing pages")); overviewModeAction = modeGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Show overview of all pages")); - qt_setupActionIcon(singleModeAction, QLatin1String("view-page-one")); - qt_setupActionIcon(facingModeAction, QLatin1String("view-page-sided")); - qt_setupActionIcon(overviewModeAction, QLatin1String("view-page-multi")); + qt_setupActionIcon(singleModeAction, QLatin1String("view-pages-single")); + qt_setupActionIcon(facingModeAction, QLatin1String("view-pages-facing")); + qt_setupActionIcon(overviewModeAction, QLatin1String("view-pages-overview")); singleModeAction->setObjectName(QLatin1String("singleModeAction")); facingModeAction->setObjectName(QLatin1String("facingModeAction")); overviewModeAction->setObjectName(QLatin1String("overviewModeAction")); @@ -426,7 +426,7 @@ void QPrintPreviewDialogPrivate::setupActions() printerGroup = new QActionGroup(q); printAction = printerGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Print")); pageSetupAction = printerGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Page setup")); - qt_setupActionIcon(printAction, QLatin1String("print")); + qt_setupActionIcon(printAction, QLatin1String("printer")); qt_setupActionIcon(pageSetupAction, QLatin1String("page-setup")); QObject::connect(printAction, SIGNAL(triggered(bool)), q, SLOT(_q_print())); QObject::connect(pageSetupAction, SIGNAL(triggered(bool)), q, SLOT(_q_pageSetup())); diff --git a/qtbase/src/testlib/qabstractitemmodeltester.cpp b/qtbase/src/testlib/qabstractitemmodeltester.cpp index 1cd18b98bb..41219a7e23 100644 --- a/qtbase/src/testlib/qabstractitemmodeltester.cpp +++ b/qtbase/src/testlib/qabstractitemmodeltester.cpp @@ -454,7 +454,7 @@ void QAbstractItemModelTesterPrivate::parent() // Common error test #2, make sure that a second level index has a parent // that is the first level index. - if (model->rowCount(topIndex) > 0) { + if (model->rowCount(topIndex) > 0 && model->columnCount(topIndex) > 0) { QModelIndex childIndex = model->index(0, 0, topIndex); MODELTESTER_VERIFY(childIndex.isValid()); MODELTESTER_COMPARE(model->parent(childIndex), topIndex); diff --git a/qtbase/src/testlib/qasciikey.cpp b/qtbase/src/testlib/qasciikey.cpp index 9a308da2bc..93498b256f 100644 --- a/qtbase/src/testlib/qasciikey.cpp +++ b/qtbase/src/testlib/qasciikey.cpp @@ -498,6 +498,11 @@ char QTest::keyToAscii(Qt::Key key) case Qt::Key_LaunchE : return 0; // = 0x10b0, case Qt::Key_LaunchF : return 0; // = 0x10b1, + // Keypad navigation keys + case Qt::Key_Select : return 0; // = 0x01010000 + case Qt::Key_Yes : return 0; // = 0x01010001 + case Qt::Key_No : return 0; // = 0x01010002 + default: QTEST_ASSERT(false); return 0; } } diff --git a/qtbase/src/widgets/accessible/qaccessiblewidgets.cpp b/qtbase/src/widgets/accessible/qaccessiblewidgets.cpp index 574be1f5ea..b499d5d620 100644 --- a/qtbase/src/widgets/accessible/qaccessiblewidgets.cpp +++ b/qtbase/src/widgets/accessible/qaccessiblewidgets.cpp @@ -900,7 +900,7 @@ QString QAccessibleTextWidget::attributes(int offset, int *startOffset, int *end underlineStyleValue = QStringLiteral("wave"); // this is not correct, but provides good approximation at least break; default: - qWarning() << "Unknown QTextCharFormat::​UnderlineStyle value " << underlineStyle << " could not be translated to IAccessible2 value"; + qWarning() << "Unknown QTextCharFormat::UnderlineStyle value " << underlineStyle << " could not be translated to IAccessible2 value"; break; } if (!underlineStyleValue.isNull()) { diff --git a/qtbase/src/widgets/dialogs/qcolordialog.cpp b/qtbase/src/widgets/dialogs/qcolordialog.cpp index 4247731275..30445fa069 100644 --- a/qtbase/src/widgets/dialogs/qcolordialog.cpp +++ b/qtbase/src/widgets/dialogs/qcolordialog.cpp @@ -78,7 +78,10 @@ #include "qwindow.h" #include "private/qdialog_p.h" +#include "private/qguiapplication_p.h" +#include +#include #include QT_BEGIN_NAMESPACE @@ -801,6 +804,10 @@ QColorLuminancePicker::~QColorLuminancePicker() void QColorLuminancePicker::mouseMoveEvent(QMouseEvent *m) { + if (m->buttons() == Qt::NoButton) { + m->ignore(); + return; + } setVal(y2val(m->y())); } void QColorLuminancePicker::mousePressEvent(QMouseEvent *m) @@ -935,6 +942,10 @@ void QColorPicker::setCol(int h, int s) void QColorPicker::mouseMoveEvent(QMouseEvent *m) { QPoint p = m->pos() - contentsRect().topLeft(); + if (m->buttons() == Qt::NoButton) { + m->ignore(); + return; + } setCol(p); emit newCol(hue, sat); } @@ -1611,6 +1622,20 @@ void QColorDialogPrivate::_q_newStandard(int r, int c) void QColorDialogPrivate::_q_pickScreenColor() { Q_Q(QColorDialog); + + auto *platformServices = QGuiApplicationPrivate::platformIntegration()->services(); + if (platformServices->hasCapability(QPlatformServices::Capability::ColorPicking)) { + if (auto *colorPicker = platformServices->colorPicker(q->windowHandle())) { + q->connect(colorPicker, &QPlatformServiceColorPicker::colorPicked, q, + [q, colorPicker](const QColor &color) { + colorPicker->deleteLater(); + q->setCurrentColor(color); + }); + colorPicker->pickColor(); + return; + } + } + if (!colorPickingEventFilter) colorPickingEventFilter = new QColorPickingEventFilter(this, q); q->installEventFilter(colorPickingEventFilter); diff --git a/qtbase/src/widgets/itemviews/qabstractitemdelegate.cpp b/qtbase/src/widgets/itemviews/qabstractitemdelegate.cpp index e120817edc..8ea36b5427 100644 --- a/qtbase/src/widgets/itemviews/qabstractitemdelegate.cpp +++ b/qtbase/src/widgets/itemviews/qabstractitemdelegate.cpp @@ -400,12 +400,7 @@ bool QAbstractItemDelegate::helpEvent(QHelpEvent *event, const QString tooltip = index.isValid() ? d->textForRole(Qt::ToolTipRole, index.data(Qt::ToolTipRole), option.locale, precision) : QString(); - QRect rect; - if (index.isValid()) { - const QRect r = view->visualRect(index); - rect = QRect(view->mapToGlobal(r.topLeft()), r.size()); - } - QToolTip::showText(he->globalPos(), tooltip, view, rect); + QToolTip::showText(he->globalPos(), tooltip, view->viewport(), option.rect); event->setAccepted(!tooltip.isEmpty()); break; } diff --git a/qtbase/src/widgets/itemviews/qlistview.cpp b/qtbase/src/widgets/itemviews/qlistview.cpp index 5a88f1b1ef..63f760269c 100644 --- a/qtbase/src/widgets/itemviews/qlistview.cpp +++ b/qtbase/src/widgets/itemviews/qlistview.cpp @@ -3388,6 +3388,7 @@ void QIconModeViewBase::updateContentsSize() */ void QListView::currentChanged(const QModelIndex ¤t, const QModelIndex &previous) { + QAbstractItemView::currentChanged(current, previous); #ifndef QT_NO_ACCESSIBILITY if (QAccessible::isActive()) { if (current.isValid()) { @@ -3398,7 +3399,6 @@ void QListView::currentChanged(const QModelIndex ¤t, const QModelIndex &pr } } #endif - QAbstractItemView::currentChanged(current, previous); } /*! diff --git a/qtbase/src/widgets/itemviews/qtableview.cpp b/qtbase/src/widgets/itemviews/qtableview.cpp index d120c41dc9..09d34005a7 100644 --- a/qtbase/src/widgets/itemviews/qtableview.cpp +++ b/qtbase/src/widgets/itemviews/qtableview.cpp @@ -1013,6 +1013,7 @@ void QTableViewPrivate::drawCell(QPainter *painter, const QStyleOptionViewItem & int QTableViewPrivate::widthHintForIndex(const QModelIndex &index, int hint, const QStyleOptionViewItem &option) const { Q_Q(const QTableView); + const int oldHint = hint; QWidget *editor = editorForIndex(index).widget.data(); if (editor && persistent.contains(editor)) { hint = qMax(hint, editor->sizeHint().width()); @@ -1021,6 +1022,17 @@ int QTableViewPrivate::widthHintForIndex(const QModelIndex &index, int hint, con hint = qBound(min, hint, max); } hint = qMax(hint, q->itemDelegate(index)->sizeHint(option, index).width()); + + if (hasSpans()) { + auto span = spans.spanAt(index.column(), index.row()); + if (span && span->m_left == index.column() && span->m_top == index.row()) { + // spans are screwed up when sections are moved + const auto left = logicalColumn(span->m_left); + for (int i = 1; i <= span->width(); ++i) + hint -= q->columnWidth(visualColumn(left + i)); + } + hint = std::max(hint, oldHint); + } return hint; } @@ -1053,6 +1065,11 @@ int QTableViewPrivate::heightHintForIndex(const QModelIndex &index, int hint, QS option.rect.setHeight(height); option.rect.setX(q->columnViewportPosition(index.column())); option.rect.setWidth(q->columnWidth(index.column())); + if (hasSpans()) { + auto span = spans.spanAt(index.column(), index.row()); + if (span && span->m_left == index.column() && span->m_top == index.row()) + option.rect.setWidth(std::max(option.rect.width(), visualSpanRect(*span).width())); + } // 1px less space when grid is shown (see drawCell) if (showGrid) option.rect.setWidth(option.rect.width() - 1); diff --git a/qtbase/src/widgets/kernel/qaction.h b/qtbase/src/widgets/kernel/qaction.h index 258a1ea0a0..737c1e8285 100644 --- a/qtbase/src/widgets/kernel/qaction.h +++ b/qtbase/src/widgets/kernel/qaction.h @@ -81,7 +81,7 @@ class Q_WIDGETS_EXPORT QAction : public QObject Q_PROPERTY(MenuRole menuRole READ menuRole WRITE setMenuRole NOTIFY changed) Q_PROPERTY(bool iconVisibleInMenu READ isIconVisibleInMenu WRITE setIconVisibleInMenu NOTIFY changed) Q_PROPERTY(bool shortcutVisibleInContextMenu READ isShortcutVisibleInContextMenu WRITE setShortcutVisibleInContextMenu NOTIFY changed) - Q_PROPERTY(Priority priority READ priority WRITE setPriority) + Q_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY changed) public: // note this is copied into qplatformmenu.h, which must stay in sync diff --git a/qtbase/src/widgets/kernel/qwidget.cpp b/qtbase/src/widgets/kernel/qwidget.cpp index e94520021e..d661114fc7 100644 --- a/qtbase/src/widgets/kernel/qwidget.cpp +++ b/qtbase/src/widgets/kernel/qwidget.cpp @@ -1272,7 +1272,6 @@ void QWidgetPrivate::create() win->setProperty("_q_showWithoutActivating", QVariant(true)); if (q->testAttribute(Qt::WA_MacAlwaysShowToolWindow)) win->setProperty("_q_macAlwaysShowToolWindow", QVariant(true)); - setNetWmWindowTypes(true); // do nothing if none of WA_X11NetWmWindowType* is set win->setFlags(flags); fixPosIncludesFrame(); if (q->testAttribute(Qt::WA_Moved) @@ -1345,6 +1344,7 @@ void QWidgetPrivate::create() Q_ASSERT(id != WId(0)); setWinId(id); } + setNetWmWindowTypes(true); // do nothing if none of WA_X11NetWmWindowType* is set // Check children and create windows for them if necessary q_createNativeChildrenAndSetParent(q); diff --git a/qtbase/src/widgets/styles/qfusionstyle.cpp b/qtbase/src/widgets/styles/qfusionstyle.cpp index a225d4b563..35e2769ac4 100644 --- a/qtbase/src/widgets/styles/qfusionstyle.cpp +++ b/qtbase/src/widgets/styles/qfusionstyle.cpp @@ -1772,14 +1772,6 @@ void QFusionStyle::drawControl(ControlElement element, const QStyleOption *optio proxy()->drawControl(CE_PushButtonLabel, &subopt, painter, widget); } break; - case CE_PushButtonLabel: - if (const QStyleOptionButton *button = qstyleoption_cast(option)) { - QStyleOptionButton b(*button); - // no PM_ButtonShiftHorizontal and PM_ButtonShiftVertical for fusion style - b.state &= ~(State_On | State_Sunken); - QCommonStyle::drawControl(element, &b, painter, widget); - } - break; case CE_MenuBarEmptyArea: painter->save(); { diff --git a/qtbase/src/widgets/util/qsystemtrayicon.cpp b/qtbase/src/widgets/util/qsystemtrayicon.cpp index 203fcbc443..e9b2724903 100644 --- a/qtbase/src/widgets/util/qsystemtrayicon.cpp +++ b/qtbase/src/widgets/util/qsystemtrayicon.cpp @@ -208,7 +208,7 @@ void QSystemTrayIcon::setContextMenu(QMenu *menu) if (oldMenu != menu && d->qpa_sys) { // Show the QMenu-based menu for QPA plugins that do not provide native menus if (oldMenu && !oldMenu->platformMenu()) - QObject::disconnect(d->qpa_sys, &QPlatformSystemTrayIcon::contextMenuRequested, menu, nullptr); + QObject::disconnect(d->qpa_sys, &QPlatformSystemTrayIcon::contextMenuRequested, oldMenu, nullptr); if (menu && !menu->platformMenu()) { QObject::connect(d->qpa_sys, &QPlatformSystemTrayIcon::contextMenuRequested, menu, diff --git a/qtbase/src/widgets/widgets/qabstractbutton.cpp b/qtbase/src/widgets/widgets/qabstractbutton.cpp index a128b23950..dc40bf62fb 100644 --- a/qtbase/src/widgets/widgets/qabstractbutton.cpp +++ b/qtbase/src/widgets/widgets/qabstractbutton.cpp @@ -56,6 +56,7 @@ #ifndef QT_NO_ACCESSIBILITY #include "qaccessible.h" #endif +#include #include @@ -1076,19 +1077,19 @@ void QAbstractButton::keyPressEvent(QKeyEvent *e) { Q_D(QAbstractButton); bool next = true; - switch (e->key()) { - case Qt::Key_Enter: - case Qt::Key_Return: - e->ignore(); - break; - case Qt::Key_Select: - case Qt::Key_Space: - if (!e->isAutoRepeat()) { - setDown(true); - repaint(); - d->emitPressed(); - } - break; + + const auto key = static_cast(e->key()); + const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme() + ->themeHint(QPlatformTheme::ButtonPressKeys) + .value>(); + if (buttonPressKeys.contains(key) && !e->isAutoRepeat()) { + setDown(true); + repaint(); + d->emitPressed(); + return; + } + + switch (key) { case Qt::Key_Up: next = false; Q_FALLTHROUGH(); @@ -1153,15 +1154,15 @@ void QAbstractButton::keyReleaseEvent(QKeyEvent *e) if (!e->isAutoRepeat()) d->repeatTimer.stop(); - switch (e->key()) { - case Qt::Key_Select: - case Qt::Key_Space: - if (!e->isAutoRepeat() && d->down) - d->click(); - break; - default: - e->ignore(); + const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme() + ->themeHint(QPlatformTheme::ButtonPressKeys) + .value>(); + if (buttonPressKeys.contains(static_cast(e->key())) && !e->isAutoRepeat() && d->down) { + d->click(); + return; } + + e->ignore(); } /*!\reimp diff --git a/qtbase/src/widgets/widgets/qcombobox.cpp b/qtbase/src/widgets/widgets/qcombobox.cpp index 7a496c27e0..0a3d96647b 100644 --- a/qtbase/src/widgets/widgets/qcombobox.cpp +++ b/qtbase/src/widgets/widgets/qcombobox.cpp @@ -3352,7 +3352,23 @@ void QComboBox::keyPressEvent(QKeyEvent *e) Move move = NoMove; int newIndex = currentIndex(); - switch (e->key()) { + + bool pressLikeButton = !d->lineEdit; +#ifdef QT_KEYPAD_NAVIGATION + pressLikeButton |= QApplicationPrivate::keypadNavigationEnabled() && !hasEditFocus(); +#endif + auto key = static_cast(e->key()); + if (pressLikeButton) { + const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme() + ->themeHint(QPlatformTheme::ButtonPressKeys) + .value>(); + if (buttonPressKeys.contains(key)) { + showPopup(); + return; + } + } + + switch (key) { case Qt::Key_Up: if (e->modifiers() & Qt::ControlModifier) break; // pass to line edit for auto completion @@ -3394,26 +3410,11 @@ void QComboBox::keyPressEvent(QKeyEvent *e) return; } break; - case Qt::Key_Space: - if (!d->lineEdit) { - showPopup(); - return; - } - break; - case Qt::Key_Enter: - case Qt::Key_Return: case Qt::Key_Escape: if (!d->lineEdit) e->ignore(); break; #ifdef QT_KEYPAD_NAVIGATION - case Qt::Key_Select: - if (QApplicationPrivate::keypadNavigationEnabled() - && (!hasEditFocus() || !d->lineEdit)) { - showPopup(); - return; - } - break; case Qt::Key_Left: case Qt::Key_Right: if (QApplicationPrivate::keypadNavigationEnabled() && !hasEditFocus()) diff --git a/qtbase/src/widgets/widgets/qdatetimeedit_p.h b/qtbase/src/widgets/widgets/qdatetimeedit_p.h index d36b6f8f9a..e0df5b5158 100644 --- a/qtbase/src/widgets/widgets/qdatetimeedit_p.h +++ b/qtbase/src/widgets/widgets/qdatetimeedit_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2018 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtWidgets module of the Qt Toolkit. diff --git a/qtbase/src/widgets/widgets/qdial.cpp b/qtbase/src/widgets/widgets/qdial.cpp index 8f774a3cc7..ec5cec0d82 100644 --- a/qtbase/src/widgets/widgets/qdial.cpp +++ b/qtbase/src/widgets/widgets/qdial.cpp @@ -94,6 +94,8 @@ int QDialPrivate::bound(int val) const if (wrapping) { if ((val >= minimum) && (val <= maximum)) return val; + if (minimum == maximum) + return minimum; val = minimum + ((val - minimum) % (maximum - minimum)); if (val < minimum) val += maximum - minimum; diff --git a/qtbase/src/widgets/widgets/qgroupbox.cpp b/qtbase/src/widgets/widgets/qgroupbox.cpp index 02a0bed325..3f3eccc370 100644 --- a/qtbase/src/widgets/widgets/qgroupbox.cpp +++ b/qtbase/src/widgets/widgets/qgroupbox.cpp @@ -54,6 +54,8 @@ #include "qaccessible.h" #endif #include +#include +#include #include "qdebug.h" @@ -360,7 +362,10 @@ bool QGroupBox::event(QEvent *e) return true; case QEvent::KeyPress: { QKeyEvent *k = static_cast(e); - if (!k->isAutoRepeat() && (k->key() == Qt::Key_Select || k->key() == Qt::Key_Space)) { + const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme() + ->themeHint(QPlatformTheme::ButtonPressKeys) + .value>(); + if (!k->isAutoRepeat() && buttonPressKeys.contains(static_cast(k->key()))) { d->pressedControl = QStyle::SC_GroupBoxCheckBox; update(style()->subControlRect(QStyle::CC_GroupBox, &box, QStyle::SC_GroupBoxCheckBox, this)); return true; @@ -369,7 +374,10 @@ bool QGroupBox::event(QEvent *e) } case QEvent::KeyRelease: { QKeyEvent *k = static_cast(e); - if (!k->isAutoRepeat() && (k->key() == Qt::Key_Select || k->key() == Qt::Key_Space)) { + const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme() + ->themeHint(QPlatformTheme::ButtonPressKeys) + .value>(); + if (!k->isAutoRepeat() && buttonPressKeys.contains(static_cast(k->key()))) { bool toggle = (d->pressedControl == QStyle::SC_GroupBoxLabel || d->pressedControl == QStyle::SC_GroupBoxCheckBox); d->pressedControl = QStyle::SC_None; diff --git a/qtbase/src/widgets/widgets/qlineedit_p.cpp b/qtbase/src/widgets/widgets/qlineedit_p.cpp index 80c9258da4..3fa0f29d28 100644 --- a/qtbase/src/widgets/widgets/qlineedit_p.cpp +++ b/qtbase/src/widgets/widgets/qlineedit_p.cpp @@ -434,7 +434,7 @@ void QLineEditIconButton::animateShow(bool visible) void QLineEditIconButton::startOpacityAnimation(qreal endValue) { - QPropertyAnimation *animation = new QPropertyAnimation(this, QByteArrayLiteral("opacity")); + QPropertyAnimation *animation = new QPropertyAnimation(this, QByteArrayLiteral("opacity"), this); connect(animation, &QPropertyAnimation::finished, this, &QLineEditIconButton::onAnimationFinished); animation->setDuration(160); diff --git a/qtbase/src/widgets/widgets/qtabbar.cpp b/qtbase/src/widgets/widgets/qtabbar.cpp index 9a382e96dd..7f80fcc250 100644 --- a/qtbase/src/widgets/widgets/qtabbar.cpp +++ b/qtbase/src/widgets/widgets/qtabbar.cpp @@ -2190,7 +2190,8 @@ void QTabBar::mouseMoveEvent(QMouseEvent *event) } } // Buttons needs to follow the dragged tab - d->layoutTab(d->pressedIndex); + if (d->pressedIndex != -1) + d->layoutTab(d->pressedIndex); update(); } diff --git a/qtbase/src/widgets/widgets/qtoolbutton.cpp b/qtbase/src/widgets/widgets/qtoolbutton.cpp index e380cb647b..9953db73af 100644 --- a/qtbase/src/widgets/widgets/qtoolbutton.cpp +++ b/qtbase/src/widgets/widgets/qtoolbutton.cpp @@ -982,7 +982,15 @@ QAction *QToolButton::defaultAction() const return d->defaultAction; } - +/*! + \reimp + */ +void QToolButton::checkStateSet() +{ + Q_D(QToolButton); + if (d->defaultAction && d->defaultAction->isCheckable()) + d->defaultAction->setChecked(isChecked()); +} /*! \reimp diff --git a/qtbase/src/widgets/widgets/qtoolbutton.h b/qtbase/src/widgets/widgets/qtoolbutton.h index 52bd2d5f7a..82b5d7924f 100644 --- a/qtbase/src/widgets/widgets/qtoolbutton.h +++ b/qtbase/src/widgets/widgets/qtoolbutton.h @@ -118,6 +118,7 @@ protected: void changeEvent(QEvent *) override; bool hitButton(const QPoint &pos) const override; + void checkStateSet() override; void nextCheckState() override; void initStyleOption(QStyleOptionToolButton *option) const; diff --git a/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp b/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp index ba9b6e0587..9493f090ec 100644 --- a/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp +++ b/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp @@ -2057,6 +2057,11 @@ void QWidgetTextControlPrivate::inputMethodEvent(QInputMethodEvent *e) || e->preeditString() != cursor.block().layout()->preeditAreaText() || e->replacementLength() > 0; + if (!isGettingInput && e->attributes().isEmpty()) { + e->ignore(); + return; + } + int oldCursorPos = cursor.position(); cursor.beginEditBlock(); diff --git a/qtbase/src/xml/sax/qxml.cpp b/qtbase/src/xml/sax/qxml.cpp index 7a444713c1..9076dcfd84 100644 --- a/qtbase/src/xml/sax/qxml.cpp +++ b/qtbase/src/xml/sax/qxml.cpp @@ -7464,7 +7464,12 @@ bool QXmlSimpleReaderPrivate::parseReference() case DoneD: tmp = ref().toUInt(&ok, 10); if (ok) { - stringAddC(QChar(tmp)); + if (tmp > 0xffff) { + stringAddC(QChar::highSurrogate(tmp)); + stringAddC(QChar::lowSurrogate(tmp)); + } else { + stringAddC(QChar(tmp)); + } } else { reportParseError(QLatin1String(XMLERR_ERRORPARSINGREFERENCE)); return false; @@ -7475,7 +7480,12 @@ bool QXmlSimpleReaderPrivate::parseReference() case DoneH: tmp = ref().toUInt(&ok, 16); if (ok) { - stringAddC(QChar(tmp)); + if (tmp > 0xffff) { + stringAddC(QChar::highSurrogate(tmp)); + stringAddC(QChar::lowSurrogate(tmp)); + } else { + stringAddC(QChar(tmp)); + } } else { reportParseError(QLatin1String(XMLERR_ERRORPARSINGREFERENCE)); return false; diff --git a/qtbase/sync.profile b/qtbase/sync.profile index 0292bf0dc2..7dd0177b90 100644 --- a/qtbase/sync.profile +++ b/qtbase/sync.profile @@ -77,7 +77,7 @@ "qsql.h" => "QtSql/qtsqlglobal.h" }, "QtDBus" => { - "qdbusmacros.h" => "QtDbus/qtdbusglobal.h" + "qdbusmacros.h" => "QtDBus/qtdbusglobal.h" }, "QtTest" => { "qtest_global.h" => "QtTest/qttestglobal.h" diff --git a/qtbase/tests/auto/corelib/itemmodels/qconcatenatetablesproxymodel/tst_qconcatenatetablesproxymodel.cpp b/qtbase/tests/auto/corelib/itemmodels/qconcatenatetablesproxymodel/tst_qconcatenatetablesproxymodel.cpp index e1ea7a4552..90972caa57 100644 --- a/qtbase/tests/auto/corelib/itemmodels/qconcatenatetablesproxymodel/tst_qconcatenatetablesproxymodel.cpp +++ b/qtbase/tests/auto/corelib/itemmodels/qconcatenatetablesproxymodel/tst_qconcatenatetablesproxymodel.cpp @@ -117,6 +117,7 @@ private Q_SLOTS: void shouldPropagateDropAfterLastRow_data(); void shouldPropagateDropAfterLastRow(); void qtbug91788(); + void qtbug91878(); private: QStandardItemModel mod; @@ -843,6 +844,22 @@ void tst_QConcatenateTablesProxyModel::qtbug91788() QCOMPARE(proxyConcat.columnCount(), 0); } +void tst_QConcatenateTablesProxyModel::qtbug91878() +{ + QStandardItemModel m; + m.setRowCount(4); + m.setColumnCount(4); + + QConcatenateTablesProxyModel pm; + QSortFilterProxyModel proxyFilter; + proxyFilter.setSourceModel(&pm); + proxyFilter.setFilterFixedString("something"); + pm.addSourceModel(&m); // This should not assert + + QCOMPARE(pm.columnCount(), 4); + QCOMPARE(pm.rowCount(), 4); +} + QTEST_GUILESS_MAIN(tst_QConcatenateTablesProxyModel) #include "tst_qconcatenatetablesproxymodel.moc" diff --git a/qtbase/tests/auto/corelib/mimetypes/qmimedatabase/circular-inheritance.xml b/qtbase/tests/auto/corelib/mimetypes/qmimedatabase/circular-inheritance.xml new file mode 100644 index 0000000000..466f039803 --- /dev/null +++ b/qtbase/tests/auto/corelib/mimetypes/qmimedatabase/circular-inheritance.xml @@ -0,0 +1,13 @@ + + + + It's more accurate to say that ECMAScript is a subset of JavaScript + + + + + than to say that JavaScript is a subset of ECMAScript + + + + diff --git a/qtbase/tests/auto/corelib/mimetypes/qmimedatabase/testdata.qrc b/qtbase/tests/auto/corelib/mimetypes/qmimedatabase/testdata.qrc index 1002d0195d..49dbb0a8ba 100644 --- a/qtbase/tests/auto/corelib/mimetypes/qmimedatabase/testdata.qrc +++ b/qtbase/tests/auto/corelib/mimetypes/qmimedatabase/testdata.qrc @@ -3,10 +3,12 @@ yast2-metapackage-handler-mimetypes.xml qml-again.xml text-x-objcsrc.xml + text-plain-subclass.xml test.qml invalid-magic1.xml invalid-magic2.xml invalid-magic3.xml + circular-inheritance.xml magic-and-hierarchy.xml magic-and-hierarchy.foo magic-and-hierarchy2.foo diff --git a/qtbase/tests/auto/corelib/mimetypes/qmimedatabase/text-plain-subclass.xml b/qtbase/tests/auto/corelib/mimetypes/qmimedatabase/text-plain-subclass.xml new file mode 100644 index 0000000000..7b5cb7506d --- /dev/null +++ b/qtbase/tests/auto/corelib/mimetypes/qmimedatabase/text-plain-subclass.xml @@ -0,0 +1,15 @@ + + + + MicroDVD subtitles + + + + + + + + + + + diff --git a/qtbase/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp b/qtbase/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp index 0ea422ecbc..d2dd8d340b 100644 --- a/qtbase/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp +++ b/qtbase/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp @@ -49,10 +49,12 @@ static const char *const additionalMimeFiles[] = { "yast2-metapackage-handler-mimetypes.xml", "qml-again.xml", "text-x-objcsrc.xml", + "text-plain-subclass.xml", "invalid-magic1.xml", "invalid-magic2.xml", "invalid-magic3.xml", "magic-and-hierarchy.xml", + "circular-inheritance.xml", 0 }; @@ -70,15 +72,15 @@ static inline QString testSuiteWarning() QString result; QTextStream str(&result); - str << "\nCannot find the shared-mime-info test suite\nstarting from: " + str << "\nCannot find the shared-mime-info test suite\nin the parent of: " << QDir::toNativeSeparators(QDir::currentPath()) << "\n" "cd " << QDir::toNativeSeparators(QStringLiteral("tests/auto/corelib/mimetypes/qmimedatabase")) << "\n" - "wget http://cgit.freedesktop.org/xdg/shared-mime-info/snapshot/Release-1-10.zip\n" - "unzip Release-1-10.zip\n"; + "wget https://gitlab.freedesktop.org/xdg/shared-mime-info/-/archive/2.1/shared-mime-info-2.1.zip\n" + "unzip shared-mime-info-2.1.zip\n"; #ifdef Q_OS_WIN - str << "mkdir testfiles\nxcopy /s Release-1-10 s-m-i\n"; + str << "mkdir testfiles\nxcopy /s shared-mime-info-2.1 s-m-i\n"; #else - str << "ln -s Release-1-10 s-m-i\n"; + str << "ln -s shared-mime-info-2.1 s-m-i\n"; #endif return result; } @@ -154,7 +156,7 @@ void tst_QMimeDatabase::initTestCase() QVERIFY2(copyResourceFile(xmlFileName, xmlTargetFileName, &errorMessage), qPrintable(errorMessage)); #endif - m_testSuite = QFINDTESTDATA("s-m-i/tests"); + m_testSuite = QFINDTESTDATA("s-m-i/tests/mime-detection"); if (m_testSuite.isEmpty()) qWarning("%s", qPrintable(testSuiteWarning())); @@ -390,6 +392,13 @@ void tst_QMimeDatabase::inheritance() const QMimeType mswordTemplate = db.mimeTypeForName(QString::fromLatin1("application/msword-template")); QVERIFY(mswordTemplate.isValid()); QVERIFY(mswordTemplate.inherits(QLatin1String("application/msword"))); + + // Check that buggy type definitions that have circular inheritance don't cause an infinite + // loop, especially when resolving a conflict between the file's name and its contents + const QMimeType ecmascript = db.mimeTypeForName(QString::fromLatin1("application/ecmascript")); + QVERIFY(ecmascript.allAncestors().contains("text/plain")); + const QMimeType javascript = db.mimeTypeForFileNameAndData("xml.js", ""); + QVERIFY(javascript.inherits(QString::fromLatin1("text/javascript"))); } void tst_QMimeDatabase::aliases() @@ -611,7 +620,7 @@ void tst_QMimeDatabase::allMimeTypes() QVERIFY(!lst.isEmpty()); // Hardcoding this is the only way to check both providers find the same number of mimetypes. - QCOMPARE(lst.count(), 779); + QCOMPARE(lst.count(), 811); foreach (const QMimeType &mime, lst) { const QString name = mime.name(); @@ -631,10 +640,9 @@ void tst_QMimeDatabase::suffixes_data() QTest::newRow("mimetype with a single pattern") << "application/pdf" << "*.pdf" << "pdf"; QTest::newRow("mimetype with multiple patterns") << "application/x-kpresenter" << "*.kpr;*.kpt" << "kpr"; - QTest::newRow("jpeg") << "image/jpeg" << "*.jpe;*.jpg;*.jpeg" << "jpeg"; - //if (KMimeType::sharedMimeInfoVersion() > KDE_MAKE_VERSION(0, 60, 0)) { - QTest::newRow("mimetype with many patterns") << "application/vnd.wordperfect" << "*.wp;*.wp4;*.wp5;*.wp6;*.wpd;*.wpp" << "wp"; - //} + // The preferred suffix for image/jpeg is *.jpg, as per https://bugs.kde.org/show_bug.cgi?id=176737 + QTest::newRow("jpeg") << "image/jpeg" << "*.jpe;*.jpg;*.jpeg" << "jpg"; + QTest::newRow("mimetype with many patterns") << "application/vnd.wordperfect" << "*.wp;*.wp4;*.wp5;*.wp6;*.wpd;*.wpp" << "wp"; QTest::newRow("oasis text mimetype") << "application/vnd.oasis.opendocument.text" << "*.odt" << "odt"; QTest::newRow("oasis presentation mimetype") << "application/vnd.oasis.opendocument.presentation" << "*.odp" << "odp"; QTest::newRow("mimetype with multiple patterns") << "text/plain" << "*.asc;*.txt;*,v" << "txt"; @@ -1070,6 +1078,8 @@ void tst_QMimeDatabase::installNewLocalMimeType() QVERIFY(objcsrc.isValid()); QCOMPARE(objcsrc.globPatterns(), QStringList()); } + QCOMPARE(db.mimeTypeForFile(QLatin1String("foo.txt"), QMimeDatabase::MatchExtension).name(), + QString::fromLatin1("text/plain")); // Test that a double-definition of a mimetype doesn't lead to sniffing ("conflicting globs"). const QString qmlTestFile = QLatin1String(RESOURCE_PREFIX "test.qml"); diff --git a/qtbase/tests/auto/corelib/plugin/qfactoryloader/plugin1/plugin1.h b/qtbase/tests/auto/corelib/plugin/qfactoryloader/plugin1/plugin1.h index ca2ceed7a9..624316dfdb 100644 --- a/qtbase/tests/auto/corelib/plugin/qfactoryloader/plugin1/plugin1.h +++ b/qtbase/tests/auto/corelib/plugin/qfactoryloader/plugin1/plugin1.h @@ -35,7 +35,7 @@ class Plugin1 : public QObject, public PluginInterface1 { Q_OBJECT - Q_PLUGIN_METADATA(IID "org.qt-project.Qt.autotests.plugininterface1") + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.autotests.plugininterface1" FILE "plugin1.json") Q_INTERFACES(PluginInterface1) public: diff --git a/qtbase/tests/auto/corelib/plugin/qfactoryloader/plugin1/plugin1.json b/qtbase/tests/auto/corelib/plugin/qfactoryloader/plugin1/plugin1.json new file mode 100644 index 0000000000..ce67846d48 --- /dev/null +++ b/qtbase/tests/auto/corelib/plugin/qfactoryloader/plugin1/plugin1.json @@ -0,0 +1,5 @@ +{ + "Keys": [ + "plugin1" + ] +} diff --git a/qtbase/tests/auto/corelib/plugin/qfactoryloader/tst_qfactoryloader.cpp b/qtbase/tests/auto/corelib/plugin/qfactoryloader/tst_qfactoryloader.cpp index 9fa61804b3..88ada1b806 100644 --- a/qtbase/tests/auto/corelib/plugin/qfactoryloader/tst_qfactoryloader.cpp +++ b/qtbase/tests/auto/corelib/plugin/qfactoryloader/tst_qfactoryloader.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include "plugin1/plugininterface1.h" #include "plugin2/plugininterface2.h" @@ -52,6 +53,7 @@ public slots: private slots: void usingTwoFactoriesFromSameDir(); + void multiplePaths(); }; static const char binFolderC[] = "bin"; @@ -92,5 +94,30 @@ void tst_QFactoryLoader::usingTwoFactoriesFromSameDir() QCOMPARE(plugin2->pluginName(), QLatin1String("Plugin2 ok")); } +void tst_QFactoryLoader::multiplePaths() +{ +#if !QT_CONFIG(library) || !(defined(Q_OS_UNIX) && !defined(Q_OS_DARWIN)) || defined(Q_OS_ANDROID) + QSKIP("Test not applicable in this configuration."); +#else + const QString binFolder = QFINDTESTDATA(binFolderC); + + QTemporaryDir dir; + QVERIFY(dir.isValid()); + + QString pluginsPath = QFileInfo(binFolder, binFolderC).absolutePath(); + QString linkPath = dir.filePath(binFolderC); + QVERIFY(QFile::link(pluginsPath, linkPath)); + + QCoreApplication::setLibraryPaths({ QFileInfo(binFolder).absolutePath(), dir.path() }); + + const QString suffix = QLatin1Char('/') + QLatin1String(binFolderC); + QFactoryLoader loader1(PluginInterface1_iid, suffix); + + QLibraryPrivate *library1 = loader1.library("plugin1"); + QVERIFY(library1); + QCOMPARE(library1->loadHints(), QLibrary::PreventUnloadHint); +#endif +} + QTEST_MAIN(tst_QFactoryLoader) #include "tst_qfactoryloader.moc" diff --git a/qtbase/tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp b/qtbase/tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp index ce8057372c..833f68b1de 100644 --- a/qtbase/tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp +++ b/qtbase/tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp @@ -193,7 +193,9 @@ void tst_QPluginLoader::errorString() QVERIFY(!unloaded); } -#if !defined(Q_OS_WIN) && !defined(Q_OS_MAC) && !defined(Q_OS_HPUX) +// A bug in QNX causes the test to crash on exit after attempting to load +// a shared library with undefined symbols (tracked as QTBUG-114682). +#if !defined(Q_OS_WIN) && !defined(Q_OS_MAC) && !defined(Q_OS_HPUX) && !defined(Q_OS_QNX) { QPluginLoader loader( sys_qualifiedLibraryName("almostplugin")); //a plugin with unresolved symbols loader.setLoadHints(QLibrary::ResolveAllSymbolsHint); @@ -243,10 +245,37 @@ void tst_QPluginLoader::loadHints() QSKIP("This test requires Qt to create shared libraries."); #endif QPluginLoader loader; - QCOMPARE(loader.loadHints(), QLibrary::LoadHints{}); //Do not crash + QCOMPARE(loader.loadHints(), QLibrary::PreventUnloadHint); //Do not crash loader.setLoadHints(QLibrary::ResolveAllSymbolsHint); + QCOMPARE(loader.loadHints(), QLibrary::ResolveAllSymbolsHint); + // We can clear load hints when file name is not set. + loader.setLoadHints(QLibrary::LoadHints{}); + QCOMPARE(loader.loadHints(), QLibrary::LoadHints{}); + // Set the hints again + loader.setLoadHints(QLibrary::ResolveAllSymbolsHint); + QCOMPARE(loader.loadHints(), QLibrary::ResolveAllSymbolsHint); loader.setFileName( sys_qualifiedLibraryName("theplugin")); //a plugin QCOMPARE(loader.loadHints(), QLibrary::ResolveAllSymbolsHint); + + QPluginLoader loader4; + QCOMPARE(loader4.loadHints(), QLibrary::PreventUnloadHint); + loader4.setLoadHints(QLibrary::LoadHints{}); + QCOMPARE(loader4.loadHints(), QLibrary::LoadHints{}); + loader4.setFileName(sys_qualifiedLibraryName("theplugin")); + // Hints are merged with hints from the previous loader. + QCOMPARE(loader4.loadHints(), QLibrary::ResolveAllSymbolsHint); + // We cannot clear load hints after associating the loader with a file. + loader.setLoadHints(QLibrary::LoadHints{}); + QCOMPARE(loader.loadHints(), QLibrary::ResolveAllSymbolsHint); + + QPluginLoader loader2; + QCOMPARE(loader2.loadHints(), QLibrary::PreventUnloadHint); + loader2.setFileName(sys_qualifiedLibraryName("theplugin")); + // Hints are merged with hints from previous loaders. + QCOMPARE(loader2.loadHints(), QLibrary::PreventUnloadHint | QLibrary::ResolveAllSymbolsHint); + + QPluginLoader loader3(sys_qualifiedLibraryName("theplugin")); + QCOMPARE(loader3.loadHints(), QLibrary::PreventUnloadHint | QLibrary::ResolveAllSymbolsHint); } void tst_QPluginLoader::deleteinstanceOnUnload() diff --git a/qtbase/tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp b/qtbase/tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp index 533fb1c8aa..63ce77d67f 100644 --- a/qtbase/tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp +++ b/qtbase/tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp @@ -75,6 +75,7 @@ private slots: void arrayStringElements(); void arraySelfAssign_data() { basics_data(); } void arraySelfAssign(); + void arrayNested(); void mapDefaultInitialization(); void mapEmptyInitializerList(); @@ -93,6 +94,7 @@ private slots: void mapSelfAssign(); void mapComplexKeys_data() { basics_data(); } void mapComplexKeys(); + void mapNested(); void sorting(); @@ -1570,6 +1572,91 @@ void tst_QCborValue::mapComplexKeys() QVERIFY(!m.contains(tagged)); } +void tst_QCborValue::arrayNested() +{ + const QCborArray wrongArray = { false, nullptr, QCborValue() }; + { + QCborArray a1 = { 42, 47 }; + QCborArray a2 = { QCborValue(a1) }; + QCOMPARE(a2.size(), 1); + const QCborValue &first = qAsConst(a2).first(); + QVERIFY(first.isArray()); + QCOMPARE(first.toArray(wrongArray).size(), 2); + QCOMPARE(first.toArray(wrongArray).first(), 42); + QCOMPARE(first.toArray(wrongArray).last(), 47); + } + { + QCborArray a1 = { 42, 47 }; + QCborArray a2 = { QCborValue(a1) }; + QCOMPARE(a2.size(), 1); + QCborValueRef first = a2.first(); + QVERIFY(first.isArray()); + QCOMPARE(first.toArray(wrongArray).size(), 2); + QCOMPARE(first.toArray(wrongArray).first(), 42); + QCOMPARE(first.toArray(wrongArray).last(), 47); + } + + { + QCborArray a1; + a1 = { QCborValue(a1) }; // insert it into itself + QCOMPARE(a1.size(), 1); + const QCborValue &first = qAsConst(a1).first(); + QVERIFY(first.isArray()); + QCOMPARE(first, QCborArray()); + QCOMPARE(first.toArray(wrongArray), QCborArray()); + } + { + QCborArray a1; + a1 = { QCborValue(a1) }; // insert it into itself + QCborValueRef first = a1.first(); + QVERIFY(first.isArray()); + QCOMPARE(first, QCborArray()); + QCOMPARE(first.toArray(wrongArray), QCborArray()); + } + { + QCborArray a1; + a1.append(a1); // insert into itself + QCOMPARE(a1.size(), 1); + const QCborValue &first = qAsConst(a1).first(); + QVERIFY(first.isArray()); + QCOMPARE(first, QCborArray()); + QCOMPARE(first.toArray(), QCborArray()); + } + { + QCborArray a1; + a1.append(a1); // insert into itself + QCborValueRef first = a1.first(); + QVERIFY(first.isArray()); + QCOMPARE(first, QCborArray()); + QCOMPARE(first.toArray(), QCborArray()); + } +} + +void tst_QCborValue::mapNested() +{ + const QCborMap wrongMap = { { -1, false }, {-2, nullptr }, { -3, QCborValue() } }; + { + QCborMap m1 = { {1, 42}, {2, 47} }; + QCborMap m2 = { { QString(), m1 } }; + QCOMPARE(m2.size(), 1); + const QCborValue &first = m2.constBegin().value(); + QVERIFY(first.isMap()); + QCOMPARE(first.toMap(wrongMap).size(), 2); + QCOMPARE(first.toMap(wrongMap).begin().key(), 1); + QCOMPARE(first.toMap(wrongMap).begin().value(), 42); + } + + { + QCborMap m1; + m1 = { { QString(), QCborValue(m1) } }; // insert it into itself + QCOMPARE(m1.size(), 1); + const QCborValue &first = m1.constBegin().value(); + QVERIFY(first.isMap()); + QCOMPARE(first, QCborMap()); + QCOMPARE(first.toMap(wrongMap), QCborMap()); + } +} + void tst_QCborValue::sorting() { QCborValue vundef, vnull(nullptr); diff --git a/qtbase/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp b/qtbase/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp index a2349a5846..9150abe65b 100644 --- a/qtbase/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp +++ b/qtbase/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp @@ -42,6 +42,7 @@ #include "qc14n.h" +Q_DECLARE_METATYPE(QXmlStreamReader::Error) Q_DECLARE_METATYPE(QXmlStreamReader::ReadElementTextBehaviour) static const char *const catalogFile = "XML-Test-Suite/xmlconf/finalCatalog.xml"; @@ -587,6 +588,8 @@ private slots: void readBack() const; void roundTrip() const; void roundTrip_data() const; + void test_fastScanName_data() const; + void test_fastScanName() const; void entityExpansionLimit() const; @@ -1843,5 +1846,42 @@ void tst_QXmlStream::roundTrip() const QCOMPARE(out, in); } +void tst_QXmlStream::test_fastScanName_data() const +{ + QTest::addColumn("data"); + QTest::addColumn("errorType"); + + // 4096 is the limit in QXmlStreamReaderPrivate::fastScanName() + + QByteArray arr = "("line"); diff --git a/qtbase/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp b/qtbase/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp index 15e0ecadaa..b4eca74283 100644 --- a/qtbase/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp +++ b/qtbase/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp @@ -81,6 +81,8 @@ private slots: void registerOpenTypePreferredNamesSystem(); void registerOpenTypePreferredNamesApplication(); + void stretchRespected(); + private: QString m_ledFont; QString m_testFont; @@ -355,6 +357,28 @@ static QString testString() return QStringLiteral("foo bar"); } +void tst_QFontDatabase::stretchRespected() +{ + int italicId = QFontDatabase::addApplicationFont(m_testFontItalic); + QVERIFY(italicId != -1); + + QVERIFY(!QFontDatabase::applicationFontFamilies(italicId).isEmpty()); + + QString italicFontName = QFontDatabase::applicationFontFamilies(italicId).first(); + + QFont italicFont = QFontDatabase().font(italicFontName, + QString::fromLatin1("Italic"), 14); + QVERIFY(italicFont.italic()); + + QFont italicStretchedFont = italicFont; + italicStretchedFont.setStretch( 400 ); + + QVERIFY(QFontMetricsF(italicFont).horizontalAdvance(QStringLiteral("foobar")) < + QFontMetricsF(italicStretchedFont).horizontalAdvance(QStringLiteral("foobar"))); + + QFontDatabase::removeApplicationFont(italicId); +} + void tst_QFontDatabase::condensedFontWidthNoFontMerging() { int regularFontId = QFontDatabase::addApplicationFont(m_testFont); diff --git a/qtbase/tests/auto/other/qaccessibilitylinux/tst_qaccessibilitylinux.cpp b/qtbase/tests/auto/other/qaccessibilitylinux/tst_qaccessibilitylinux.cpp index 7ba3715e13..752aa122f6 100644 --- a/qtbase/tests/auto/other/qaccessibilitylinux/tst_qaccessibilitylinux.cpp +++ b/qtbase/tests/auto/other/qaccessibilitylinux/tst_qaccessibilitylinux.cpp @@ -179,6 +179,7 @@ void tst_QAccessibilityLinux::initTestCase() QVERIFY(!address.isEmpty()); m_window = new AccessibleTestWindow(); + m_window->setObjectName("mainWindow"_L1); m_window->show(); QVERIFY(QTest::qWaitForWindowExposed(m_window)); @@ -236,8 +237,11 @@ bool hasState(QDBusInterface *interface, AtspiStateType state) void tst_QAccessibilityLinux::testLabel() { QLabel *l = new QLabel(m_window); + l->setObjectName("theObjectName"_L1); l->setText("Hello A11y"); m_window->addWidget(l); + auto a11yEmpty = new QLabel(m_window); + m_window->addWidget(l); // Application QCOMPARE(getParent(mainWindow), QLatin1String(ATSPI_DBUS_PATH_ROOT)); @@ -249,6 +253,8 @@ void tst_QAccessibilityLinux::testLabel() QCOMPARE(getChildren(labelInterface).count(), 0); QCOMPARE(labelInterface->call(QDBus::Block, "GetRoleName").arguments().first().toString(), QLatin1String("label")); QCOMPARE(labelInterface->call(QDBus::Block, "GetRole").arguments().first().toUInt(), 29u); + QCOMPARE(labelInterface->call(QDBus::Block, "GetAccessibleId").arguments().first().toString(), + QLatin1String("mainWindow.theObjectName")); QCOMPARE(getParent(labelInterface), mainWindow->path()); QVERIFY(!hasState(labelInterface, ATSPI_STATE_EDITABLE)); QVERIFY(hasState(labelInterface, ATSPI_STATE_READ_ONLY)); @@ -256,7 +262,12 @@ void tst_QAccessibilityLinux::testLabel() l->setText("New text"); QCOMPARE(labelInterface->property("Name").toString(), l->text()); + auto *a11yEmptyInterface = getInterface(children.at(1), "org.a11y.atspi.Accessible"); + QCOMPARE(a11yEmptyInterface->call(QDBus::Block, "GetAccessibleId").arguments().first().toString(), + QLatin1String("mainWindow.QLabel")); + m_window->clearChildren(); + delete a11yEmptyInterface; delete labelInterface; } diff --git a/qtbase/tests/auto/testlib/qabstractitemmodeltester/tst_qabstractitemmodeltester.cpp b/qtbase/tests/auto/testlib/qabstractitemmodeltester/tst_qabstractitemmodeltester.cpp index 4aa3f8d60b..d2050a61aa 100644 --- a/qtbase/tests/auto/testlib/qabstractitemmodeltester/tst_qabstractitemmodeltester.cpp +++ b/qtbase/tests/auto/testlib/qabstractitemmodeltester/tst_qabstractitemmodeltester.cpp @@ -115,6 +115,10 @@ void tst_QAbstractItemModelTester::standardItemModelZeroColumns() // QTBUG-92886 model.insertRows(0, 5); model.removeRows(1, 2); + + const QModelIndex parentIndex = model.index(0, 0); + model.insertRows(0, 5, parentIndex); + model.removeRows(1, 2, parentIndex); } void tst_QAbstractItemModelTester::testInsertThroughProxy() diff --git a/qtbase/tests/auto/tools/moc/allmocs_baseline_in.json b/qtbase/tests/auto/tools/moc/allmocs_baseline_in.json index 18282505e4..ce518e78fb 100644 --- a/qtbase/tests/auto/tools/moc/allmocs_baseline_in.json +++ b/qtbase/tests/auto/tools/moc/allmocs_baseline_in.json @@ -668,40 +668,6 @@ "inputFile": "task192552.h", "outputRevision": 67 }, - { - "classes": [ - { - "className": "InlineSlotsWithThrowDeclaration", - "object": true, - "qualifiedClassName": "InlineSlotsWithThrowDeclaration", - "slots": [ - { - "access": "public", - "name": "a", - "returnType": "void" - }, - { - "access": "public", - "name": "b", - "returnType": "void" - }, - { - "access": "public", - "name": "c", - "returnType": "void" - } - ], - "superClasses": [ - { - "access": "public", - "name": "QObject" - } - ] - } - ], - "inputFile": "task189996.h", - "outputRevision": 67 - }, { "classes": [ { diff --git a/qtbase/tests/auto/tools/moc/moc.pro b/qtbase/tests/auto/tools/moc/moc.pro index c324b3a8cd..4aceb78dc0 100644 --- a/qtbase/tests/auto/tools/moc/moc.pro +++ b/qtbase/tests/auto/tools/moc/moc.pro @@ -15,7 +15,7 @@ cross_compile: DEFINES += MOC_CROSS_COMPILED HEADERS += using-namespaces.h no-keywords.h task87883.h c-comments.h backslash-newlines.h oldstyle-casts.h \ slots-with-void-template.h qinvokable.h namespaced-flags.h trigraphs.h \ escapes-in-string-literals.h cstyle-enums.h qprivateslots.h gadgetwithnoenums.h \ - dir-in-include-path.h single_function_keyword.h task192552.h task189996.h \ + dir-in-include-path.h single_function_keyword.h task192552.h \ task234909.h task240368.h pure-virtual-signals.h cxx11-enums.h \ cxx11-final-classes.h \ cxx11-explicit-override-control.h \ diff --git a/qtbase/tests/auto/tools/moc/task189996.h b/qtbase/tests/auto/tools/moc/task189996.h deleted file mode 100644 index ba9450c271..0000000000 --- a/qtbase/tests/auto/tools/moc/task189996.h +++ /dev/null @@ -1,45 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -// inline functions can have throw declarations - -#ifndef TASK189996_H -#define TASK189996_H - -#include - -class InlineSlotsWithThrowDeclaration : public QObject -{ - Q_OBJECT - -public slots: - void a() noexcept { } - void b() const noexcept { } - void c() noexcept; -}; - -#endif diff --git a/qtbase/tests/auto/tools/moc/tst_moc.cpp b/qtbase/tests/auto/tools/moc/tst_moc.cpp index cc465a213a..a9ab6ec4f3 100644 --- a/qtbase/tests/auto/tools/moc/tst_moc.cpp +++ b/qtbase/tests/auto/tools/moc/tst_moc.cpp @@ -671,7 +671,6 @@ private slots: void templateGtGt(); void qprivateslots(); void qprivateproperties(); - void inlineSlotsWithThrowDeclaration(); void warnOnPropertyWithoutREAD(); void constructors(); void typenameWithUnsigned(); @@ -816,7 +815,7 @@ void tst_Moc::oldStyleCasts() QStringList args; args << "-c" << "-x" << "c++" << "-Wold-style-cast" << "-I" << "." - << "-I" << qtIncludePath << "-o" << "/dev/null" << "-fPIC" << "-std=c++11" << "-"; + << "-I" << qtIncludePath << "-o" << "/dev/null" << "-fPIC" << "-std=c++1z" << "-"; proc.start("gcc", args); QVERIFY(proc.waitForStarted()); proc.write(mocOut); @@ -886,7 +885,7 @@ void tst_Moc::inputFileNameWithDotsButNoExtension() QStringList args; args << "-c" << "-x" << "c++" << "-I" << ".." - << "-I" << qtIncludePath << "-o" << "/dev/null" << "-fPIC" << "-std=c++11" << "-"; + << "-I" << qtIncludePath << "-o" << "/dev/null" << "-fPIC" << "-std=c++1z" << "-"; proc.start("gcc", args); QVERIFY(proc.waitForStarted()); proc.write(mocOut); @@ -1166,7 +1165,7 @@ void tst_Moc::ignoreOptionClashes() QStringList gccArgs; gccArgs << "-c" << "-x" << "c++" << "-I" << ".." << "-I" << qtIncludePath << "-I" << includeDir << "-o" << "/dev/null" - << "-fPIC" << "-std=c++11" << "-"; + << "-fPIC" << "-std=c++1z" << "-"; proc.start("gcc", gccArgs); QVERIFY(proc.waitForStarted()); proc.write(mocOut); @@ -1585,19 +1584,6 @@ void tst_Moc::qprivateproperties() } -#include "task189996.h" - -void InlineSlotsWithThrowDeclaration::c() noexcept {} - -void tst_Moc::inlineSlotsWithThrowDeclaration() -{ - InlineSlotsWithThrowDeclaration tst; - const QMetaObject *mobj = tst.metaObject(); - QVERIFY(mobj->indexOfSlot("a()") != -1); - QVERIFY(mobj->indexOfSlot("b()") != -1); - QVERIFY(mobj->indexOfSlot("c()") != -1); -} - void tst_Moc::warnOnPropertyWithoutREAD() { #ifdef MOC_CROSS_COMPILED @@ -1859,7 +1845,7 @@ void tst_Moc::notifyError() QStringList args; args << "-c" << "-x" << "c++" << "-I" << "." - << "-I" << qtIncludePath << "-o" << "/dev/null" << "-fPIC" << "-std=c++11" << "-"; + << "-I" << qtIncludePath << "-o" << "/dev/null" << "-fPIC" << "-std=c++1z" << "-"; proc.start("gcc", args); QVERIFY(proc.waitForStarted()); proc.write(mocOut); diff --git a/qtbase/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp b/qtbase/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp index 761357b252..06bb706074 100644 --- a/qtbase/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp +++ b/qtbase/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp @@ -397,6 +397,7 @@ private slots: void checkHeaderMinSize(); void resizeToContents(); + void resizeToContentsSpans(); void tabFocus(); void bigModel(); @@ -3721,6 +3722,70 @@ void tst_QTableView::resizeToContents() } + +class SpanModel : public QAbstractTableModel +{ +public: + SpanModel(bool sectionsMoved) + : _sectionsMoved(sectionsMoved) + {} + int columnCount(const QModelIndex & = {}) const override { return 2; } + int rowCount(const QModelIndex & = {}) const override { return 1; } + QVariant data(const QModelIndex &idx, int role = Qt::DisplayRole) const override + { + if (role != Qt::DisplayRole) + return QVariant(); + const int col = _sectionsMoved ? 1 - idx.column() : idx.column(); + if (col == 0) + return "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."; + return QVariant(); + } +private: + bool _sectionsMoved; +}; + + +void tst_QTableView::resizeToContentsSpans() +{ + SpanModel model1(false); + SpanModel model2(true); + QTableView view1, view2, view3; + view1.setModel(&model1); + view2.setModel(&model2); + view2.horizontalHeader()->moveSection(0, 1); + view3.setModel(&model1); + + view1.setSpan(0, 0, 1, 2); + view2.setSpan(0, 1, 1, 2); + view1.show(); + view2.show(); + view3.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view1)); + QVERIFY(QTest::qWaitForWindowExposed(&view2)); + QVERIFY(QTest::qWaitForWindowExposed(&view3)); + view1.setColumnWidth(0, 100); + view1.setColumnWidth(1, 100); + view2.setColumnWidth(0, 100); + view2.setColumnWidth(1, 100); + view3.setColumnWidth(0, 200); + + view1.resizeRowToContents(0); + view2.resizeRowToContents(0); + view3.resizeRowToContents(0); + QCOMPARE(view1.rowHeight(0), view3.rowHeight(0)); + QCOMPARE(view2.rowHeight(0), view3.rowHeight(0)); + + view3.resizeColumnToContents(0); + view3.resizeRowToContents(0); + // height should be only 1 text line for easy testing + view1.setRowHeight(0, view3.verticalHeader()->sectionSize(0)); + view2.setRowHeight(0, view3.verticalHeader()->sectionSize(0)); + view1.resizeColumnToContents(0); + view2.resizeColumnToContents(1); + QCOMPARE(view1.columnWidth(0), view3.columnWidth(0) - view1.columnWidth(1)); + QCOMPARE(view2.columnWidth(0), view3.columnWidth(0) - view2.columnWidth(1)); +} + QT_BEGIN_NAMESPACE extern bool Q_WIDGETS_EXPORT qt_tab_all_widgets(); // qapplication.cpp QT_END_NAMESPACE diff --git a/qtbase/tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp b/qtbase/tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp index eb108a40de..dca5528c1b 100644 --- a/qtbase/tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp +++ b/qtbase/tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp @@ -41,6 +41,7 @@ #include #include +#include class tst_QAbstractButton : public QObject { @@ -76,6 +77,8 @@ private slots: void keyNavigation(); #endif + void buttonPressKeys(); + protected slots: void onClicked(); void onToggled( bool on ); @@ -269,7 +272,13 @@ void tst_QAbstractButton::setAutoRepeat() QCOMPARE(press_count, click_count); QVERIFY(click_count > 1); break; - case 4: + case 4: { + const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme() + ->themeHint(QPlatformTheme::ButtonPressKeys) + .value>(); + if (buttonPressKeys.contains(Qt::Key_Enter)) { + QSKIP("platform theme has Key_Enter in ButtonPressKeys"); + } // check that pressing ENTER has no effect when autorepeat is false testWidget->setDown( false ); testWidget->setAutoRepeat( false ); @@ -286,7 +295,14 @@ void tst_QAbstractButton::setAutoRepeat() QVERIFY( click_count == 0 ); break; - case 5: + } + case 5: { + const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme() + ->themeHint(QPlatformTheme::ButtonPressKeys) + .value>(); + if (buttonPressKeys.contains(Qt::Key_Enter)) { + QSKIP("platform theme has Key_Enter in ButtonPressKeys"); + } // check that pressing ENTER has no effect when autorepeat is true testWidget->setDown( false ); testWidget->setAutoRepeat( true ); @@ -304,6 +320,7 @@ void tst_QAbstractButton::setAutoRepeat() QVERIFY( click_count == 0 ); break; + } case 6: // verify autorepeat is off by default. MyButton tmp( 0); @@ -651,5 +668,16 @@ void tst_QAbstractButton::keyNavigation() } #endif +void tst_QAbstractButton::buttonPressKeys() +{ + const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme() + ->themeHint(QPlatformTheme::ButtonPressKeys) + .value>(); + for (int i = 0; i < buttonPressKeys.length(); ++i) { + QTest::keyClick(testWidget, buttonPressKeys[i]); + QCOMPARE(click_count, i + 1); + } +} + QTEST_MAIN(tst_QAbstractButton) #include "tst_qabstractbutton.moc" diff --git a/qtbase/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp b/qtbase/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp index 7af60ed757..46b5af6d63 100644 --- a/qtbase/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp +++ b/qtbase/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp @@ -168,6 +168,7 @@ private slots: void checkMenuItemPosWhenStyleSheetIsSet(); void checkEmbeddedLineEditWhenStyleSheetIsSet(); void propagateStyleChanges(); + void buttonPressKeys(); private: PlatformInputContext m_platformInputContext; @@ -3642,5 +3643,24 @@ void tst_QComboBox::propagateStyleChanges() QVERIFY(frameStyle.inquired); } +void tst_QComboBox::buttonPressKeys() +{ + QComboBox comboBox; + comboBox.setEditable(false); + comboBox.addItem(QString::number(1)); + comboBox.addItem(QString::number(2)); + const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme() + ->themeHint(QPlatformTheme::ButtonPressKeys) + .value>(); + for (int i = 0; i < buttonPressKeys.length(); ++i) { + QTest::keyClick(&comboBox, buttonPressKeys[i]); + // On some platforms, a window will not be immediately visible, + // but take some event-loop iterations to complete. + // Using QTRY_VERIFY to deal with that. + QTRY_VERIFY(comboBox.view()->isVisible()); + comboBox.hidePopup(); + } +} + QTEST_MAIN(tst_QComboBox) #include "tst_qcombobox.moc" diff --git a/qtbase/tests/auto/widgets/widgets/qcommandlinkbutton/qcommandlinkbutton.pro b/qtbase/tests/auto/widgets/widgets/qcommandlinkbutton/qcommandlinkbutton.pro index be3cfcd104..c228fdfcca 100644 --- a/qtbase/tests/auto/widgets/widgets/qcommandlinkbutton/qcommandlinkbutton.pro +++ b/qtbase/tests/auto/widgets/widgets/qcommandlinkbutton/qcommandlinkbutton.pro @@ -1,6 +1,6 @@ CONFIG += testcase TARGET = tst_qcommandlinkbutton -QT += widgets testlib +QT += widgets testlib gui-private SOURCES += tst_qcommandlinkbutton.cpp diff --git a/qtbase/tests/auto/widgets/widgets/qcommandlinkbutton/tst_qcommandlinkbutton.cpp b/qtbase/tests/auto/widgets/widgets/qcommandlinkbutton/tst_qcommandlinkbutton.cpp index 0044d33c66..4cf06296e4 100644 --- a/qtbase/tests/auto/widgets/widgets/qcommandlinkbutton/tst_qcommandlinkbutton.cpp +++ b/qtbase/tests/auto/widgets/widgets/qcommandlinkbutton/tst_qcommandlinkbutton.cpp @@ -40,6 +40,9 @@ #include #include +#include +#include + class tst_QCommandLinkButton : public QObject { Q_OBJECT @@ -223,6 +226,13 @@ void tst_QCommandLinkButton::setAutoRepeat() // check that pressing ENTER has no effect resetCounters(); testWidget->setDown( false ); + // Skip after reset if ButtonPressKeys has Key_Enter + const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme() + ->themeHint(QPlatformTheme::ButtonPressKeys) + .value>(); + if (buttonPressKeys.contains(Qt::Key_Enter)) { + return; + } testWidget->setAutoRepeat( false ); QTest::keyPress( testWidget, Qt::Key_Enter ); @@ -255,6 +265,14 @@ void tst_QCommandLinkButton::pressed() QCOMPARE( press_count, (uint)1 ); QCOMPARE( release_count, (uint)1 ); + // Skip if ButtonPressKeys has Key_Enter + const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme() + ->themeHint(QPlatformTheme::ButtonPressKeys) + .value>(); + if (buttonPressKeys.contains(Qt::Key_Enter)) { + return; + } + QTest::keyPress( testWidget,Qt::Key_Enter ); QCOMPARE( press_count, (uint)1 ); QCOMPARE( release_count, (uint)1 ); diff --git a/qtbase/tests/auto/widgets/widgets/qdial/tst_qdial.cpp b/qtbase/tests/auto/widgets/widgets/qdial/tst_qdial.cpp index 356f773ae9..a014df3b15 100644 --- a/qtbase/tests/auto/widgets/widgets/qdial/tst_qdial.cpp +++ b/qtbase/tests/auto/widgets/widgets/qdial/tst_qdial.cpp @@ -42,6 +42,7 @@ private slots: void valueChanged(); void sliderMoved(); void wrappingCheck(); + void minEqualMaxValueOutsideRange(); }; // Testing get/set functions @@ -194,5 +195,14 @@ void tst_QDial::wrappingCheck() } } +// QTBUG-104641 +void tst_QDial::minEqualMaxValueOutsideRange() +{ + QDial dial; + dial.setRange(30, 30); + dial.setWrapping(true); + dial.setValue(45); +} + QTEST_MAIN(tst_QDial) #include "tst_qdial.moc" diff --git a/qtbase/tests/auto/widgets/widgets/qgroupbox/qgroupbox.pro b/qtbase/tests/auto/widgets/widgets/qgroupbox/qgroupbox.pro index 4a5e76ff65..a235fa1fac 100644 --- a/qtbase/tests/auto/widgets/widgets/qgroupbox/qgroupbox.pro +++ b/qtbase/tests/auto/widgets/widgets/qgroupbox/qgroupbox.pro @@ -1,6 +1,6 @@ CONFIG += testcase TARGET = tst_qgroupbox -QT += widgets testlib +QT += widgets testlib gui-private SOURCES += tst_qgroupbox.cpp diff --git a/qtbase/tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.cpp b/qtbase/tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.cpp index 4fb5d262ca..d8d7562b73 100644 --- a/qtbase/tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.cpp +++ b/qtbase/tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.cpp @@ -35,6 +35,9 @@ #include #include +#include +#include + #include "qgroupbox.h" class tst_QGroupBox : public QObject @@ -69,6 +72,7 @@ private slots: void propagateFocus(); void task_QTBUG_19170_ignoreMouseReleaseEvent(); void task_QTBUG_15519_propagateMouseEvents(); + void buttonPressKeys(); private: bool checked; @@ -610,6 +614,20 @@ void tst_QGroupBox::task_QTBUG_15519_propagateMouseEvents() QCOMPARE(parent.mouseMoved, true); } +void tst_QGroupBox::buttonPressKeys() +{ + QGroupBox groupBox; + groupBox.setCheckable(true); + QSignalSpy clickedSpy(&groupBox, &QGroupBox::clicked); + const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme() + ->themeHint(QPlatformTheme::ButtonPressKeys) + .value>(); + for (int i = 0; i < buttonPressKeys.length(); ++i) { + QTest::keyClick(&groupBox, buttonPressKeys[i]); + QCOMPARE(clickedSpy.length(), i + 1); + } +} + void tst_QGroupBox::sendMouseMoveEvent(QWidget *widget, const QPoint &localPos) { // Send a MouseMove event without actually moving the pointer diff --git a/qtbase/tests/auto/widgets/widgets/qpushbutton/qpushbutton.pro b/qtbase/tests/auto/widgets/widgets/qpushbutton/qpushbutton.pro index 353ad06ca2..e55f6148f2 100644 --- a/qtbase/tests/auto/widgets/widgets/qpushbutton/qpushbutton.pro +++ b/qtbase/tests/auto/widgets/widgets/qpushbutton/qpushbutton.pro @@ -1,6 +1,6 @@ CONFIG += testcase TARGET = tst_qpushbutton -QT += widgets testlib +QT += widgets testlib gui-private SOURCES += tst_qpushbutton.cpp diff --git a/qtbase/tests/auto/widgets/widgets/qpushbutton/tst_qpushbutton.cpp b/qtbase/tests/auto/widgets/widgets/qpushbutton/tst_qpushbutton.cpp index e818514a79..4043e9326a 100644 --- a/qtbase/tests/auto/widgets/widgets/qpushbutton/tst_qpushbutton.cpp +++ b/qtbase/tests/auto/widgets/widgets/qpushbutton/tst_qpushbutton.cpp @@ -41,6 +41,9 @@ #include #include +#include +#include + class tst_QPushButton : public QObject { Q_OBJECT @@ -212,6 +215,13 @@ void tst_QPushButton::autoRepeat() // check that pressing ENTER has no effect resetCounters(); testWidget->setDown( false ); + // Skip after reset if ButtonPressKeys has Key_Enter + const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme() + ->themeHint(QPlatformTheme::ButtonPressKeys) + .value>(); + if (buttonPressKeys.contains(Qt::Key_Enter)) { + return; + } testWidget->setAutoRepeat( false ); QTest::keyPress( testWidget, Qt::Key_Enter ); @@ -247,6 +257,14 @@ void tst_QPushButton::pressed() QCOMPARE( press_count, (uint)1 ); QCOMPARE( release_count, (uint)1 ); + // Skip if ButtonPressKeys has Key_Enter + const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme() + ->themeHint(QPlatformTheme::ButtonPressKeys) + .value>(); + if (buttonPressKeys.contains(Qt::Key_Enter)) { + return; + } + QTest::keyPress( testWidget,Qt::Key_Enter ); QCOMPARE( press_count, (uint)1 ); QCOMPARE( release_count, (uint)1 ); diff --git a/qtbase/tests/auto/xml/sax/qxmlsimplereader/parser/main.cpp b/qtbase/tests/auto/xml/sax/qxmlsimplereader/parser/main.cpp index b5d9fea315..c5597c6f8e 100644 --- a/qtbase/tests/auto/xml/sax/qxmlsimplereader/parser/main.cpp +++ b/qtbase/tests/auto/xml/sax/qxmlsimplereader/parser/main.cpp @@ -37,7 +37,6 @@ #include "parser.h" -static QTextStream qout(stdout, QIODevice::WriteOnly); static QTextStream qerr(stderr, QIODevice::WriteOnly); static void usage() @@ -79,19 +78,15 @@ int main(int argc, const char *argv[]) if (out_file_name.isEmpty()) out_file_name = file_name + ".ref"; - QFile _out_file; - QTextStream _out_stream; - QTextStream *out_stream; + QFile out_file; if (out_file_name == "-") { - out_stream = &qout; + out_file.open(stdout, QFile::WriteOnly); } else { - _out_file.setFileName(out_file_name); - if (!_out_file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { + out_file.setFileName(out_file_name); + if (!out_file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { qerr << "Could not open " << out_file_name << ": " << strerror(errno) << Qt::endl; return 1; } - _out_stream.setDevice(&_out_file); - out_stream = &_out_stream; } Parser parser; @@ -102,9 +97,7 @@ int main(int argc, const char *argv[]) parser.parseFile(&in_file); - out_stream->setCodec("utf8"); - - *out_stream << parser.result(); + out_file.write(parser.result().toUtf8()); return 0; } diff --git a/qtbase/tests/auto/xml/sax/qxmlsimplereader/parser/parser.cpp b/qtbase/tests/auto/xml/sax/qxmlsimplereader/parser/parser.cpp index 44f8101955..24aa9376da 100644 --- a/qtbase/tests/auto/xml/sax/qxmlsimplereader/parser/parser.cpp +++ b/qtbase/tests/auto/xml/sax/qxmlsimplereader/parser/parser.cpp @@ -142,11 +142,12 @@ bool ContentHandler::startElement(const QString &namespaceURI, QString ContentHandler::escapeStr(const QString &s) { QString result = s; - result.replace(QRegularExpression("\""), "\\\""); - result.replace(QRegularExpression("\\"), "\\\\"); - result.replace(QRegularExpression("\n"), "\\n"); - result.replace(QRegularExpression("\r"), "\\r"); - result.replace(QRegularExpression("\t"), "\\t"); + result.replace(QChar(0), "\\0"); + result.replace("\\", "\\\\"); + result.replace("\"", "\\\""); + result.replace("\n", "\\n"); + result.replace("\r", "\\r"); + result.replace("\t", "\\t"); return result; } diff --git a/qtbase/tests/auto/xml/sax/qxmlsimplereader/tst_qxmlsimplereader.cpp b/qtbase/tests/auto/xml/sax/qxmlsimplereader/tst_qxmlsimplereader.cpp index cea4e3c8b8..df158cae0f 100644 --- a/qtbase/tests/auto/xml/sax/qxmlsimplereader/tst_qxmlsimplereader.cpp +++ b/qtbase/tests/auto/xml/sax/qxmlsimplereader/tst_qxmlsimplereader.cpp @@ -311,14 +311,12 @@ void tst_QXmlSimpleReader::testGoodXmlFile() QVERIFY(file.open(QIODevice::ReadOnly)); Parser parser; - QEXPECT_FAIL(QFINDTESTDATA("xmldocs/valid/sa/089.xml").toLocal8Bit().constData(), "a form feed character is not accepted in XML", Continue); QVERIFY(parser.parseFile(&file)); QFile ref_file(file_name + ".ref"); QVERIFY(ref_file.open(QIODevice::ReadOnly | QIODevice::Text)); - QTextStream ref_stream(&ref_file); - ref_stream.setCodec("UTF-8"); - QString ref_file_contents = ref_stream.readAll(); + QByteArray data = ref_file.readAll(); + QString ref_file_contents = QString::fromUtf8(data.constData(), data.size()); QCOMPARE(parser.result(), ref_file_contents); } @@ -393,9 +391,7 @@ void tst_QXmlSimpleReader::testBadXmlFile() QFile ref_file(file_name + ".ref"); QVERIFY(ref_file.open(QIODevice::ReadOnly | QIODevice::Text)); - QTextStream ref_stream(&ref_file); - ref_stream.setCodec("UTF-8"); - QString ref_file_contents = ref_stream.readAll(); + QString ref_file_contents = QString::fromUtf8(ref_file.readAll()); QEXPECT_FAIL(QFINDTESTDATA("xmldocs/not-wf/sa/145.xml").toLocal8Bit().constData(), "Surrogate code point 0xD800 should be rejected", Continue); @@ -469,9 +465,7 @@ void tst_QXmlSimpleReader::testIncrementalParsing() QFile ref_file(file_name + ".ref"); QVERIFY(ref_file.open(QIODevice::ReadOnly | QIODevice::Text)); - QTextStream ref_stream(&ref_file); - ref_stream.setCodec("UTF-8"); - QString ref_file_contents = ref_stream.readAll(); + QString ref_file_contents = QString::fromUtf8(ref_file.readAll()); QCOMPARE(parser.result(), ref_file_contents); } diff --git a/qtbase/tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/142.xml.ref b/qtbase/tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/142.xml.ref index 7ce4da6a06..0684cfa943 100644 Binary files a/qtbase/tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/142.xml.ref and b/qtbase/tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/142.xml.ref differ diff --git a/qtbase/tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/064.xml.ref b/qtbase/tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/064.xml.ref index 579aeb52f6..0b806c96a8 100644 Binary files a/qtbase/tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/064.xml.ref and b/qtbase/tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/064.xml.ref differ diff --git a/qtbase/tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/089.xml.ref b/qtbase/tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/089.xml.ref index 7c68c32286..f09bc2bd09 100644 Binary files a/qtbase/tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/089.xml.ref and b/qtbase/tests/auto/xml/sax/qxmlsimplereader/xmldocs/valid/sa/089.xml.ref differ diff --git a/qtbase/tests/manual/rhi/cubemap_render/buildshader.bat b/qtbase/tests/manual/rhi/cubemap_render/buildshader.bat old mode 100755 new mode 100644 Submodule qtconnectivity f1fed9fb..8024ef3d: diff --git a/qtconnectivity/src/bluetooth/qbluetoothsocket.cpp b/qtconnectivity/src/bluetooth/qbluetoothsocket.cpp index 9da67272..fcd0fbb2 100644 --- a/qtconnectivity/src/bluetooth/qbluetoothsocket.cpp +++ b/qtconnectivity/src/bluetooth/qbluetoothsocket.cpp @@ -797,7 +797,9 @@ void QBluetoothSocket::close() Returns true on success */ - +// ### Qt 7 consider making this function private. The qbluetoothsocket_bluez backend is the +// the only backend providing publicly accessible support for this. Other backends implement +// similarly named, but private, overload bool QBluetoothSocket::setSocketDescriptor(int socketDescriptor, QBluetoothServiceInfo::Protocol socketType, SocketState socketState, OpenMode openMode) { diff --git a/qtconnectivity/src/bluetooth/qbluetoothuuid.cpp b/qtconnectivity/src/bluetooth/qbluetoothuuid.cpp index bc00aa95..517465bd 100644 --- a/qtconnectivity/src/bluetooth/qbluetoothuuid.cpp +++ b/qtconnectivity/src/bluetooth/qbluetoothuuid.cpp @@ -834,8 +834,6 @@ QString QBluetoothUuid::serviceClassToString(QBluetoothUuid::ServiceClassUuid uu //: Connection management (Bluetooth) case QBluetoothUuid::BondManagement: return QBluetoothServiceDiscoveryAgent::tr("Bond Management"); case QBluetoothUuid::ContinuousGlucoseMonitoring: return QBluetoothServiceDiscoveryAgent::tr("Continuous Glucose Monitoring"); - default: - break; } return QString(); @@ -878,8 +876,6 @@ QString QBluetoothUuid::protocolToString(QBluetoothUuid::ProtocolUuid uuid) case QBluetoothUuid::McapControlChannel: return QBluetoothServiceDiscoveryAgent::tr("Multi-Channel Adaptation Protocol - Control"); case QBluetoothUuid::McapDataChannel: return QBluetoothServiceDiscoveryAgent::tr("Multi-Channel Adaptation Protocol - Data"); case QBluetoothUuid::L2cap: return QBluetoothServiceDiscoveryAgent::tr("Layer 2 Control Protocol"); - default: - break; } return QString(); @@ -1081,13 +1077,13 @@ QString QBluetoothUuid::characteristicToString(CharacteristicType uuid) case QBluetoothUuid::BodyCompositionFeature: return QBluetoothServiceDiscoveryAgent::tr("Body Composition Feature"); case QBluetoothUuid::BodyCompositionMeasurement: return QBluetoothServiceDiscoveryAgent::tr("Body Composition Measurement"); case QBluetoothUuid::WeightMeasurement: return QBluetoothServiceDiscoveryAgent::tr("Weight Measurement"); + case QBluetoothUuid::CharacteristicType::WeightScaleFeature: + return QBluetoothServiceDiscoveryAgent::tr("Weight Scale Feature"); case QBluetoothUuid::UserControlPoint: return QBluetoothServiceDiscoveryAgent::tr("User Control Point"); case QBluetoothUuid::MagneticFluxDensity2D: return QBluetoothServiceDiscoveryAgent::tr("Magnetic Flux Density 2D"); case QBluetoothUuid::MagneticFluxDensity3D: return QBluetoothServiceDiscoveryAgent::tr("Magnetic Flux Density 3D"); case QBluetoothUuid::Language: return QBluetoothServiceDiscoveryAgent::tr("Language"); case QBluetoothUuid::BarometricPressureTrend: return QBluetoothServiceDiscoveryAgent::tr("Barometric Pressure Trend"); - default: - break; } return QString(); @@ -1104,6 +1100,8 @@ QString QBluetoothUuid::characteristicToString(CharacteristicType uuid) QString QBluetoothUuid::descriptorToString(QBluetoothUuid::DescriptorType uuid) { switch (uuid) { + case QBluetoothUuid::UnknownDescriptorType: + break; // returns {} below case QBluetoothUuid::CharacteristicExtendedProperties: return QBluetoothServiceDiscoveryAgent::tr("Characteristic Extended Properties"); case QBluetoothUuid::CharacteristicUserDescription: @@ -1128,8 +1126,6 @@ QString QBluetoothUuid::descriptorToString(QBluetoothUuid::DescriptorType uuid) return QBluetoothServiceDiscoveryAgent::tr("Environmental Sensing Measurement"); case QBluetoothUuid::EnvironmentalSensingTriggerSetting: return QBluetoothServiceDiscoveryAgent::tr("Environmental Sensing Trigger Setting"); - default: - break; } return QString(); diff --git a/qtconnectivity/src/tools/sdpscanner/main.cpp b/qtconnectivity/src/tools/sdpscanner/main.cpp index 690f9aaa..c39ff8f3 100644 --- a/qtconnectivity/src/tools/sdpscanner/main.cpp +++ b/qtconnectivity/src/tools/sdpscanner/main.cpp @@ -39,6 +39,7 @@ #include #include +#include #include #include #include @@ -213,10 +214,17 @@ static void parseAttributeValues(sdp_data_t *data, int indentation, QByteArray & case SDP_URL_STR8: case SDP_URL_STR16: case SDP_URL_STR32: + { xmlOutput.append("val.str, qstrnlen(data->val.str, data->unitSize)); + const QByteArray urlData = + QByteArray::fromRawData(data->val.str, qstrnlen(data->val.str, data->unitSize)); + const QUrl url = QUrl::fromEncoded(urlData); + // Encoded url %-encodes all of the XML special characters except '&', + // so we need to do that manually + xmlOutput.append(url.toEncoded().replace('&', "&")); xmlOutput.append("\"/>\n"); break; + } default: fprintf(stderr, "Unknown dtd type\n"); } Submodule qtdeclarative 6ab9856e..b9956813: diff --git a/qtdeclarative/src/3rdparty/masm/wtf/OSAllocatorPosix.cpp b/qtdeclarative/src/3rdparty/masm/wtf/OSAllocatorPosix.cpp index b5c5f6a2b0..1a3d3cdf97 100644 --- a/qtdeclarative/src/3rdparty/masm/wtf/OSAllocatorPosix.cpp +++ b/qtdeclarative/src/3rdparty/masm/wtf/OSAllocatorPosix.cpp @@ -112,10 +112,7 @@ void* OSAllocator::reserveUncommitted(size_t bytes, Usage usage, bool writable, if (result == MAP_FAILED) CRASH(); - while (madvise(result, bytes, MADV_DONTNEED)) { - if (errno != EAGAIN) - CRASH(); - } + while (madvise(result, bytes, MADV_DONTNEED) == -1 && errno == EAGAIN) { } if (fd != -1) close(fd); @@ -248,8 +245,10 @@ void OSAllocator::decommit(void* address, size_t bytes) mmap(address, bytes, PROT_NONE, MAP_FIXED | MAP_LAZY | MAP_PRIVATE | MAP_ANON, -1, 0); #elif OS(LINUX) while (madvise(address, bytes, MADV_DONTNEED)) { - if (errno != EAGAIN) - CRASH(); + if (errno != EAGAIN) { + memset(address, 0, bytes); // We rely on madvise to zero-out the memory + break; + } } if (mprotect(address, bytes, PROT_NONE)) CRASH(); diff --git a/qtdeclarative/src/qml/animations/qcontinuinganimationgroupjob.cpp b/qtdeclarative/src/qml/animations/qcontinuinganimationgroupjob.cpp index 88c0e9e60e..61a9dc36f8 100644 --- a/qtdeclarative/src/qml/animations/qcontinuinganimationgroupjob.cpp +++ b/qtdeclarative/src/qml/animations/qcontinuinganimationgroupjob.cpp @@ -82,9 +82,9 @@ void QContinuingAnimationGroupJob::updateState(QAbstractAnimationJob::State newS return; } for (QAbstractAnimationJob *animation = firstChild(); animation; animation = animation->nextSibling()) { - resetUncontrolledAnimationFinishTime(animation); + RETURN_IF_DELETED(resetUncontrolledAnimationFinishTime(animation)); animation->setDirection(m_direction); - animation->start(); + RETURN_IF_DELETED(animation->start()); } break; } diff --git a/qtdeclarative/src/qml/animations/qparallelanimationgroupjob.cpp b/qtdeclarative/src/qml/animations/qparallelanimationgroupjob.cpp index 420a934ba2..a828d0e234 100644 --- a/qtdeclarative/src/qml/animations/qparallelanimationgroupjob.cpp +++ b/qtdeclarative/src/qml/animations/qparallelanimationgroupjob.cpp @@ -144,10 +144,10 @@ void QParallelAnimationGroupJob::updateState(QAbstractAnimationJob::State newSta animation->stop(); m_previousLoop = m_direction == Forward ? 0 : m_loopCount - 1; } - resetUncontrolledAnimationFinishTime(animation); + RETURN_IF_DELETED(resetUncontrolledAnimationFinishTime(animation)); animation->setDirection(m_direction); if (shouldAnimationStart(animation, oldState == Stopped)) - animation->start(); + RETURN_IF_DELETED(animation->start()); } break; } diff --git a/qtdeclarative/src/qml/common/qqmljsmemorypool_p.h b/qtdeclarative/src/qml/common/qqmljsmemorypool_p.h index 0cf7ea84e6..1b81a87a2c 100644 --- a/qtdeclarative/src/qml/common/qqmljsmemorypool_p.h +++ b/qtdeclarative/src/qml/common/qqmljsmemorypool_p.h @@ -87,7 +87,7 @@ public: inline void *allocate(size_t size) { size = (size + 7) & ~size_t(7); - if (Q_LIKELY(_ptr && (_ptr + size < _end))) { + if (Q_LIKELY(_ptr && size < size_t(_end - _ptr))) { void *addr = _ptr; _ptr += size; return addr; diff --git a/qtdeclarative/src/qml/jit/qv4baselinejit.cpp b/qtdeclarative/src/qml/jit/qv4baselinejit.cpp index 45150cfffd..5ad53faf95 100644 --- a/qtdeclarative/src/qml/jit/qv4baselinejit.cpp +++ b/qtdeclarative/src/qml/jit/qv4baselinejit.cpp @@ -540,6 +540,8 @@ void BaselineJIT::generate_ThrowException() as->passEngineAsArg(0); BASELINEJIT_GENERATE_RUNTIME_CALL(ThrowException, CallResultDestination::Ignore); as->gotoCatchException(); + + // LOAD_ACC(); <- not needed here since it would be unreachable. } void BaselineJIT::generate_GetException() { as->getException(); } @@ -547,9 +549,11 @@ void BaselineJIT::generate_SetException() { as->setException(); } void BaselineJIT::generate_CreateCallContext() { + STORE_ACC(); as->prepareCallWithArgCount(1); as->passCppFrameAsArg(0); BASELINEJIT_GENERATE_RUNTIME_CALL(PushCallContext, CallResultDestination::Ignore); + LOAD_ACC(); } void BaselineJIT::generate_PushCatchContext(int index, int name) { as->pushCatchContext(index, name); } diff --git a/qtdeclarative/src/qml/jsruntime/qv4function.cpp b/qtdeclarative/src/qml/jsruntime/qv4function.cpp index cf8a53cf9f..223e64271e 100644 --- a/qtdeclarative/src/qml/jsruntime/qv4function.cpp +++ b/qtdeclarative/src/qml/jsruntime/qv4function.cpp @@ -136,7 +136,7 @@ void Function::updateInternalClass(ExecutionEngine *engine, const QList T *QRecyclePool::New() { T *rv = d->allocate(); - new (rv) T; - return rv; + return new (rv) T; } template @@ -139,8 +138,7 @@ template T *QRecyclePool::New(const T1 &a) { T *rv = d->allocate(); - new (rv) T(a); - return rv; + return new (rv) T(a); } template @@ -148,8 +146,7 @@ template T *QRecyclePool::New(T1 &a) { T *rv = d->allocate(); - new (rv) T(a); - return rv; + return new (rv) T(a); } template diff --git a/qtdeclarative/src/qml/qml/qqmldata_p.h b/qtdeclarative/src/qml/qml/qqmldata_p.h index ee31cb38d9..187339169b 100644 --- a/qtdeclarative/src/qml/qml/qqmldata_p.h +++ b/qtdeclarative/src/qml/qml/qqmldata_p.h @@ -176,24 +176,24 @@ public: }; struct NotifyList { - quint64 connectionMask; - - quint16 maximumTodoIndex; - quint16 notifiesSize; - - QQmlNotifierEndpoint *todo; - QQmlNotifierEndpoint**notifies; + QAtomicInteger connectionMask; + QQmlNotifierEndpoint *todo = nullptr; + QQmlNotifierEndpoint**notifies = nullptr; + quint16 maximumTodoIndex = 0; + quint16 notifiesSize = 0; void layout(); private: void layout(QQmlNotifierEndpoint*); }; - NotifyList *notifyList; + QAtomicPointer notifyList; - inline QQmlNotifierEndpoint *notify(int index); + inline QQmlNotifierEndpoint *notify(int index) const; void addNotify(int index, QQmlNotifierEndpoint *); int endpointCount(int index); bool signalHasEndpoint(int index) const; - void disconnectNotifiers(); + + enum class DeleteNotifyList { Yes, No }; + void disconnectNotifiers(DeleteNotifyList doDelete); // The context that created the C++ object QQmlContextData *context = nullptr; @@ -201,12 +201,12 @@ public: QQmlContextData *outerContext = nullptr; QQmlContextDataRef ownContext; - QQmlAbstractBinding *bindings; - QQmlBoundSignal *signalHandlers; + QQmlAbstractBinding *bindings = nullptr; + QQmlBoundSignal *signalHandlers = nullptr; // Linked list for QQmlContext::contextObjects - QQmlData *nextContextObject; - QQmlData**prevContextObject; + QQmlData *nextContextObject = nullptr; + QQmlData**prevContextObject = nullptr; inline bool hasBindingBit(int) const; inline void setBindingBit(QObject *obj, int); @@ -216,10 +216,10 @@ public: inline void setPendingBindingBit(QObject *obj, int); inline void clearPendingBindingBit(int); - quint16 lineNumber; - quint16 columnNumber; + quint16 lineNumber = 0; + quint16 columnNumber = 0; - quint32 jsEngineId; // id of the engine that created the jsWrapper + quint32 jsEngineId = 0; // id of the engine that created the jsWrapper struct DeferredData { DeferredData(); @@ -240,7 +240,7 @@ public: QQmlPropertyCache *propertyCache; - QQmlGuardImpl *guards; + QQmlGuardImpl *guards = nullptr; static QQmlData *get(const QObject *object, bool create = false) { QObjectPrivate *priv = QObjectPrivate::get(const_cast(object)); @@ -289,7 +289,7 @@ public: private: // For attachedProperties - mutable QQmlDataExtended *extendedData; + mutable QQmlDataExtended *extendedData = nullptr; Q_NEVER_INLINE static QQmlData *createQQmlData(QObjectPrivate *priv); Q_NEVER_INLINE static QQmlPropertyCache *createPropertyCache(QJSEngine *engine, QObject *object); @@ -342,23 +342,31 @@ bool QQmlData::wasDeleted(const QObject *object) return ddata && ddata->isQueuedForDeletion; } -QQmlNotifierEndpoint *QQmlData::notify(int index) +inline bool isIndexInConnectionMask(quint64 connectionMask, int index) +{ + return connectionMask & (1ULL << quint64(index % 64)); +} + +QQmlNotifierEndpoint *QQmlData::notify(int index) const { + // Can only happen on "home" thread. We apply relaxed semantics when loading the atomics. + Q_ASSERT(index <= 0xFFFF); - if (!notifyList || !(notifyList->connectionMask & (1ULL << quint64(index % 64)))) { + NotifyList *list = notifyList.loadRelaxed(); + if (!list || !isIndexInConnectionMask(list->connectionMask.loadRelaxed(), index)) return nullptr; - } else if (index < notifyList->notifiesSize) { - return notifyList->notifies[index]; - } else if (index <= notifyList->maximumTodoIndex) { - notifyList->layout(); - } - if (index < notifyList->notifiesSize) { - return notifyList->notifies[index]; - } else { - return nullptr; + if (index < list->notifiesSize) + return list->notifies[index]; + + if (index <= list->maximumTodoIndex) { + list->layout(); + if (index < list->notifiesSize) + return list->notifies[index]; } + + return nullptr; } /* @@ -367,7 +375,19 @@ QQmlNotifierEndpoint *QQmlData::notify(int index) */ inline bool QQmlData::signalHasEndpoint(int index) const { - return notifyList && (notifyList->connectionMask & (1ULL << quint64(index % 64))); + // This can be called from any thread. + // We still use relaxed semantics. If we're on a thread different from the "home" thread + // of the QQmlData, two interesting things might happen: + // + // 1. The list might go away while we hold it. In that case we are dealing with an object whose + // QObject dtor is being executed concurrently. This is UB already without the notify lists. + // Therefore, we don't need to consider it. + // 2. The connectionMask may be amended or zeroed while we are looking at it. In that case + // we "misreport" the endpoint. Since ordering of events across threads is inherently + // nondeterministic, either result is correct in that case. We can accept it. + + NotifyList *list = notifyList.loadRelaxed(); + return list && isIndexInConnectionMask(list->connectionMask.loadRelaxed(), index); } bool QQmlData::hasBindingBit(int coreIndex) const diff --git a/qtdeclarative/src/qml/qml/qqmlengine.cpp b/qtdeclarative/src/qml/qml/qqmlengine.cpp index 852a673ebd..5f3367e4d2 100644 --- a/qtdeclarative/src/qml/qml/qqmlengine.cpp +++ b/qtdeclarative/src/qml/qml/qqmlengine.cpp @@ -718,18 +718,15 @@ void QQmlPrivate::qdeclarativeelement_destructor(QObject *o) // Disconnect the notifiers now - during object destruction this would be too late, since // the disconnect call wouldn't be able to call disconnectNotify(), as it isn't possible to // get the metaobject anymore. - d->disconnectNotifiers(); + d->disconnectNotifiers(QQmlData::DeleteNotifyList::No); } } QQmlData::QQmlData() : ownedByQml1(false), ownMemory(true), indestructible(true), explicitIndestructibleSet(false), hasTaintedV4Object(false), isQueuedForDeletion(false), rootObjectInCreation(false), - hasInterceptorMetaObject(false), hasVMEMetaObject(false), parentFrozen(false), - bindingBitsArraySize(InlineBindingArraySize), notifyList(nullptr), - bindings(nullptr), signalHandlers(nullptr), nextContextObject(nullptr), prevContextObject(nullptr), - lineNumber(0), columnNumber(0), jsEngineId(0), - propertyCache(nullptr), guards(nullptr), extendedData(nullptr) + hasInterceptorMetaObject(false), hasVMEMetaObject(false), parentFrozen(false), dummy(0), + bindingBitsArraySize(InlineBindingArraySize), propertyCache(nullptr) { memset(bindingBitsValue, 0, sizeof(bindingBitsValue)); init(); @@ -789,7 +786,10 @@ void QQmlData::signalEmitted(QAbstractDeclarativeData *, QObject *object, int in // QQmlEngine to emit signals from a different thread. These signals are then automatically // marshalled back onto the QObject's thread and handled by QML from there. This is tested // by the qqmlecmascript::threadSignal() autotest. - if (!ddata->notifyList) + + // Relaxed semantics here. If we're on a different thread we might schedule a useless event, + // but that should be rare. + if (!ddata->notifyList.loadRelaxed()) return; auto objectThreadData = QObjectPrivate::get(object)->threadData.loadRelaxed(); @@ -1588,17 +1588,22 @@ void qmlExecuteDeferred(QObject *object) { QQmlData *data = QQmlData::get(object); - if (data && !data->deferredData.isEmpty() && !data->wasDeleted(object)) { - QQmlEnginePrivate *ep = QQmlEnginePrivate::get(data->context->engine); + if (!data + || !data->context + || !data->context->engine + || data->deferredData.isEmpty() + || data->wasDeleted(object)) { + return; + } - QQmlComponentPrivate::DeferredState state; - QQmlComponentPrivate::beginDeferred(ep, object, &state); + QQmlEnginePrivate *ep = QQmlEnginePrivate::get(data->context->engine); + QQmlComponentPrivate::DeferredState state; + QQmlComponentPrivate::beginDeferred(ep, object, &state); - // Release the reference for the deferral action (we still have one from construction) - data->releaseDeferredData(); + // Release the reference for the deferral action (we still have one from construction) + data->releaseDeferredData(); - QQmlComponentPrivate::completeDeferred(ep, &state); - } + QQmlComponentPrivate::completeDeferred(ep, &state); } QQmlContext *qmlContext(const QObject *obj) @@ -1835,49 +1840,73 @@ void QQmlData::releaseDeferredData() void QQmlData::addNotify(int index, QQmlNotifierEndpoint *endpoint) { - if (!notifyList) { - notifyList = (NotifyList *)malloc(sizeof(NotifyList)); - notifyList->connectionMask = 0; - notifyList->maximumTodoIndex = 0; - notifyList->notifiesSize = 0; - notifyList->todo = nullptr; - notifyList->notifies = nullptr; + // Can only happen on "home" thread. We apply relaxed semantics when loading the atomics. + + NotifyList *list = notifyList.loadRelaxed(); + + if (!list) { + list = new NotifyList; + // We don't really care when this change takes effect on other threads. The notifyList can + // only become non-null once in the life time of a QQmlData. It becomes null again when the + // underlying QObject is deleted. At that point any interaction with the QQmlData is UB + // anyway. So, for all intents and purposese, the list becomes non-null once and then stays + // non-null "forever". We can apply relaxed semantics. + notifyList.storeRelaxed(list); } Q_ASSERT(!endpoint->isConnected()); index = qMin(index, 0xFFFF - 1); - notifyList->connectionMask |= (1ULL << quint64(index % 64)); - if (index < notifyList->notifiesSize) { + // Likewise, we don't really care _when_ the change in the connectionMask is propagated to other + // threads. Cross-thread event ordering is inherently nondeterministic. Therefore, when querying + // the conenctionMask in the presence of concurrent modification, any result is correct. + list->connectionMask.storeRelaxed( + list->connectionMask.loadRelaxed() | (1ULL << quint64(index % 64))); - endpoint->next = notifyList->notifies[index]; + if (index < list->notifiesSize) { + endpoint->next = list->notifies[index]; if (endpoint->next) endpoint->next->prev = &endpoint->next; - endpoint->prev = ¬ifyList->notifies[index]; - notifyList->notifies[index] = endpoint; - + endpoint->prev = &list->notifies[index]; + list->notifies[index] = endpoint; } else { - notifyList->maximumTodoIndex = qMax(int(notifyList->maximumTodoIndex), index); + list->maximumTodoIndex = qMax(int(list->maximumTodoIndex), index); - endpoint->next = notifyList->todo; + endpoint->next = list->todo; if (endpoint->next) endpoint->next->prev = &endpoint->next; - endpoint->prev = ¬ifyList->todo; - notifyList->todo = endpoint; + endpoint->prev = &list->todo; + list->todo = endpoint; } } -void QQmlData::disconnectNotifiers() +void QQmlData::disconnectNotifiers(QQmlData::DeleteNotifyList doDelete) { - if (notifyList) { - while (notifyList->todo) - notifyList->todo->disconnect(); - for (int ii = 0; ii < notifyList->notifiesSize; ++ii) { - while (QQmlNotifierEndpoint *ep = notifyList->notifies[ii]) + // Can only happen on "home" thread. We apply relaxed semantics when loading the atomics. + if (NotifyList *list = notifyList.loadRelaxed()) { + while (QQmlNotifierEndpoint *todo = list->todo) + todo->disconnect(); + for (int ii = 0; ii < list->notifiesSize; ++ii) { + while (QQmlNotifierEndpoint *ep = list->notifies[ii]) ep->disconnect(); } - free(notifyList->notifies); - free(notifyList); - notifyList = nullptr; + free(list->notifies); + + if (doDelete == DeleteNotifyList::Yes) { + // We can only get here from QQmlData::destroyed(), and that can only come from the + // the QObject dtor. If you're still sending signals at that point you have UB already + // without any threads. Therefore, it's enough to apply relaxed semantics. + notifyList.storeRelaxed(nullptr); + delete list; + } else { + // We can use relaxed semantics here. The worst thing that can happen is that some + // signal is falsely reported as connected. Signal connectedness across threads + // is not quite deterministic anyway. + list->connectionMask.storeRelaxed(0); + list->maximumTodoIndex = 0; + list->notifiesSize = 0; + list->notifies = nullptr; + + } } } @@ -1961,7 +1990,7 @@ void QQmlData::destroyed(QObject *object) guard->objectDestroyed(object); } - disconnectNotifiers(); + disconnectNotifiers(DeleteNotifyList::Yes); if (extendedData) delete extendedData; diff --git a/qtdeclarative/src/qml/qml/qqmlimport.cpp b/qtdeclarative/src/qml/qml/qqmlimport.cpp index e7263d1850..289f11d006 100644 --- a/qtdeclarative/src/qml/qml/qqmlimport.cpp +++ b/qtdeclarative/src/qml/qml/qqmlimport.cpp @@ -2119,9 +2119,12 @@ void QQmlImportDatabase::addImportPath(const QString& path) cPath.replace(Backslash, Slash); } - if (!cPath.isEmpty() - && !fileImportPath.contains(cPath)) - fileImportPath.prepend(cPath); + if (!cPath.isEmpty()) { + if (fileImportPath.contains(cPath)) + fileImportPath.move(fileImportPath.indexOf(cPath), 0); + else + fileImportPath.prepend(cPath); + } } /*! diff --git a/qtdeclarative/src/qml/qml/qqmlvmemetaobject.cpp b/qtdeclarative/src/qml/qml/qqmlvmemetaobject.cpp index 1e0e4e419f..a0532d1794 100644 --- a/qtdeclarative/src/qml/qml/qqmlvmemetaobject.cpp +++ b/qtdeclarative/src/qml/qml/qqmlvmemetaobject.cpp @@ -251,7 +251,7 @@ void QQmlVMEMetaObjectEndpoint::tryConnect() if (!pd) return; - if (pd->notifyIndex() != -1) + if (pd->notifyIndex() != -1 && ctxt->engine) connect(target, pd->notifyIndex(), ctxt->engine); } diff --git a/qtdeclarative/src/qmlmodels/qqmldelegatemodel.cpp b/qtdeclarative/src/qmlmodels/qqmldelegatemodel.cpp index 4fcff70de6..5b7e767ae2 100644 --- a/qtdeclarative/src/qmlmodels/qqmldelegatemodel.cpp +++ b/qtdeclarative/src/qmlmodels/qqmldelegatemodel.cpp @@ -389,6 +389,12 @@ void QQmlDelegateModelPrivate::connectToAbstractItemModel() q, QQmlDelegateModel, SLOT(_q_rowsRemoved(QModelIndex,int,int))); qmlobject_connect(aim, QAbstractItemModel, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), q, QQmlDelegateModel, SLOT(_q_rowsAboutToBeRemoved(QModelIndex,int,int))); + qmlobject_connect(aim, QAbstractItemModel, SIGNAL(columnsInserted(QModelIndex,int,int)), + q, QQmlDelegateModel, SLOT(_q_columnsInserted(QModelIndex,int,int))); + qmlobject_connect(aim, QAbstractItemModel, SIGNAL(columnsRemoved(QModelIndex,int,int)), + q, QQmlDelegateModel, SLOT(_q_columnsRemoved(QModelIndex,int,int))); + qmlobject_connect(aim, QAbstractItemModel, SIGNAL(columnsMoved(QModelIndex,int,int,QModelIndex,int)), + q, QQmlDelegateModel, SLOT(_q_columnsMoved(QModelIndex,int,int,QModelIndex,int))); qmlobject_connect(aim, QAbstractItemModel, SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector)), q, QQmlDelegateModel, SLOT(_q_dataChanged(QModelIndex,QModelIndex,QVector))); qmlobject_connect(aim, QAbstractItemModel, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)), @@ -413,6 +419,12 @@ void QQmlDelegateModelPrivate::disconnectFromAbstractItemModel() q, SLOT(_q_rowsAboutToBeRemoved(QModelIndex,int,int))); QObject::disconnect(aim, SIGNAL(rowsRemoved(QModelIndex,int,int)), q, SLOT(_q_rowsRemoved(QModelIndex,int,int))); + QObject::disconnect(aim, SIGNAL(columnsInserted(QModelIndex,int,int)), q, + SLOT(_q_columnsInserted(QModelIndex,int,int))); + QObject::disconnect(aim, SIGNAL(columnsRemoved(QModelIndex,int,int)), q, + SLOT(_q_columnsRemoved(QModelIndex,int,int))); + QObject::disconnect(aim, SIGNAL(columnsMoved(QModelIndex,int,int,QModelIndex,int)), q, + SLOT(_q_columnsMoved(QModelIndex,int,int,QModelIndex,int))); QObject::disconnect(aim, SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector)), q, SLOT(_q_dataChanged(QModelIndex,QModelIndex,QVector))); QObject::disconnect(aim, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)), @@ -1871,10 +1883,15 @@ void QQmlDelegateModelPrivate::emitChanges() for (int i = 1; i < m_groupCount; ++i) QQmlDelegateModelGroupPrivate::get(m_groups[i])->emitModelUpdated(reset); - auto cacheCopy = m_cache; // deliberate; emitChanges may alter m_cache - for (QQmlDelegateModelItem *cacheItem : qAsConst(cacheCopy)) { - if (cacheItem->attached) - cacheItem->attached->emitChanges(); + // emitChanges may alter m_cache and delete items + QVarLengthArray> attachedObjects; + attachedObjects.reserve(m_cache.length()); + for (const QQmlDelegateModelItem *cacheItem : qAsConst(m_cache)) + attachedObjects.append(cacheItem->attached); + + for (const QPointer &attached : qAsConst(attachedObjects)) { + if (attached && attached->m_cacheItem) + attached->emitChanges(); } } @@ -1974,6 +1991,38 @@ void QQmlDelegateModel::_q_rowsMoved( } } +void QQmlDelegateModel::_q_columnsInserted(const QModelIndex &parent, int begin, int end) +{ + Q_D(QQmlDelegateModel); + Q_UNUSED(end); + if (parent == d->m_adaptorModel.rootIndex && begin == 0) { + // mark all items as changed + _q_itemsChanged(0, d->m_count, QVector()); + } +} + +void QQmlDelegateModel::_q_columnsRemoved(const QModelIndex &parent, int begin, int end) +{ + Q_D(QQmlDelegateModel); + Q_UNUSED(end); + if (parent == d->m_adaptorModel.rootIndex && begin == 0) { + // mark all items as changed + _q_itemsChanged(0, d->m_count, QVector()); + } +} + +void QQmlDelegateModel::_q_columnsMoved(const QModelIndex &parent, int start, int end, + const QModelIndex &destination, int column) +{ + Q_D(QQmlDelegateModel); + Q_UNUSED(end); + if ((parent == d->m_adaptorModel.rootIndex && start == 0) + || (destination == d->m_adaptorModel.rootIndex && column == 0)) { + // mark all items as changed + _q_itemsChanged(0, d->m_count, QVector()); + } +} + void QQmlDelegateModel::_q_dataChanged(const QModelIndex &begin, const QModelIndex &end, const QVector &roles) { Q_D(QQmlDelegateModel); @@ -2663,20 +2712,24 @@ void QQmlDelegateModelAttached::emitChanges() m_previousGroups = m_cacheItem->groups; int indexChanges = 0; - for (int i = 1; i < m_cacheItem->metaType->groupCount; ++i) { + const int groupCount = m_cacheItem->metaType->groupCount; + for (int i = 1; i < groupCount; ++i) { if (m_previousIndex[i] != m_currentIndex[i]) { m_previousIndex[i] = m_currentIndex[i]; indexChanges |= (1 << i); } } + // Don't access m_cacheItem anymore once we've started sending signals. + // We don't own it and someone might delete it. + int notifierId = 0; const QMetaObject *meta = metaObject(); - for (int i = 1; i < m_cacheItem->metaType->groupCount; ++i, ++notifierId) { + for (int i = 1; i < groupCount; ++i, ++notifierId) { if (groupChanges & (1 << i)) QMetaObject::activate(this, meta, notifierId, nullptr); } - for (int i = 1; i < m_cacheItem->metaType->groupCount; ++i, ++notifierId) { + for (int i = 1; i < groupCount; ++i, ++notifierId) { if (indexChanges & (1 << i)) QMetaObject::activate(this, meta, notifierId, nullptr); } diff --git a/qtdeclarative/src/qmlmodels/qqmldelegatemodel_p.h b/qtdeclarative/src/qmlmodels/qqmldelegatemodel_p.h index 8aab4badca..d140bfbaaf 100644 --- a/qtdeclarative/src/qmlmodels/qqmldelegatemodel_p.h +++ b/qtdeclarative/src/qmlmodels/qqmldelegatemodel_p.h @@ -152,6 +152,9 @@ private Q_SLOTS: void _q_itemsMoved(int from, int to, int count); void _q_modelReset(); void _q_rowsInserted(const QModelIndex &,int,int); + void _q_columnsInserted(const QModelIndex &, int, int); + void _q_columnsRemoved(const QModelIndex &, int, int); + void _q_columnsMoved(const QModelIndex &, int, int, const QModelIndex &, int); void _q_rowsAboutToBeRemoved(const QModelIndex &parent, int begin, int end); void _q_rowsRemoved(const QModelIndex &,int,int); void _q_rowsMoved(const QModelIndex &, int, int, const QModelIndex &, int); diff --git a/qtdeclarative/src/quick/accessible/qaccessiblequickitem.cpp b/qtdeclarative/src/quick/accessible/qaccessiblequickitem.cpp index ae1954ae8d..99e6eff7c3 100644 --- a/qtdeclarative/src/quick/accessible/qaccessiblequickitem.cpp +++ b/qtdeclarative/src/quick/accessible/qaccessiblequickitem.cpp @@ -46,6 +46,7 @@ #include "QtQuick/private/qquicktextinput_p.h" #include "QtQuick/private/qquickaccessibleattached_p.h" #include "QtQuick/qquicktextdocument.h" +#include "QtQuick/qquickrendercontrol.h" QT_BEGIN_NAMESPACE #if QT_CONFIG(accessibility) @@ -57,7 +58,19 @@ QAccessibleQuickItem::QAccessibleQuickItem(QQuickItem *item) QWindow *QAccessibleQuickItem::window() const { - return item()->window(); + QQuickWindow *window = item()->window(); + + // For QQuickWidget the above window will be the offscreen QQuickWindow, + // which is not a part of the accessibility tree. Detect this case and + // return the window for the QQuickWidget instead. + if (window && !window->handle()) { + if (QQuickRenderControl *renderControl = QQuickWindowPrivate::get(window)->renderControl) { + if (QWindow *renderWindow = renderControl->renderWindow(nullptr)) + return renderWindow; + } + } + + return window; } int QAccessibleQuickItem::childCount() const @@ -113,19 +126,15 @@ QAccessibleInterface *QAccessibleQuickItem::childAt(int x, int y) const QAccessibleInterface *QAccessibleQuickItem::parent() const { QQuickItem *parent = item()->parentItem(); - QQuickWindow *window = item()->window(); - QQuickItem *ci = window ? window->contentItem() : nullptr; + QQuickWindow *itemWindow = item()->window(); + QQuickItem *ci = itemWindow ? itemWindow->contentItem() : nullptr; while (parent && !QQuickItemPrivate::get(parent)->isAccessible && parent != ci) parent = parent->parentItem(); if (parent) { if (parent == ci) { - // Jump out to the scene widget if the parent is the root item. - // There are two root items, QQuickWindow::rootItem and - // QQuickView::declarativeRoot. The former is the true root item, - // but is not a part of the accessibility tree. Check if we hit - // it here and return an interface for the scene instead. - return QAccessible::queryAccessibleInterface(window); + // Jump out to the window if the parent is the root item + return QAccessible::queryAccessibleInterface(window()); } else { while (parent && !parent->d_func()->isAccessible) parent = parent->parentItem(); @@ -193,7 +202,7 @@ QAccessible::State QAccessibleQuickItem::state() const QRect viewRect_ = viewRect(); QRect itemRect = rect(); - if (viewRect_.isNull() || itemRect.isNull() || !item()->window() || !item()->window()->isVisible() ||!item()->isVisible() || qFuzzyIsNull(item()->opacity())) + if (viewRect_.isNull() || itemRect.isNull() || !window() || !window()->isVisible() ||!item()->isVisible() || qFuzzyIsNull(item()->opacity())) state.invisible = true; if (!viewRect_.intersects(itemRect)) state.offscreen = true; @@ -206,6 +215,10 @@ QAccessible::State QAccessibleQuickItem::state() const if (role() == QAccessible::EditableText) if (auto ti = qobject_cast(item())) state.passwordEdit = ti->echoMode() != QQuickTextInput::Normal; + if (!item()->isEnabled()) { + state.focusable = false; + state.disabled = true; + } return state; } @@ -217,7 +230,7 @@ QAccessible::Role QAccessibleQuickItem::role() const QAccessible::Role role = QAccessible::NoRole; if (item()) - role = QQuickItemPrivate::get(item())->accessibleRole(); + role = QQuickItemPrivate::get(item())->effectiveAccessibleRole(); if (role == QAccessible::NoRole) { if (qobject_cast(const_cast(item()))) role = QAccessible::StaticText; diff --git a/qtdeclarative/src/quick/accessible/qaccessiblequickview_p.h b/qtdeclarative/src/quick/accessible/qaccessiblequickview_p.h index 39ffcaf39c..8baa01330c 100644 --- a/qtdeclarative/src/quick/accessible/qaccessiblequickview_p.h +++ b/qtdeclarative/src/quick/accessible/qaccessiblequickview_p.h @@ -58,7 +58,7 @@ QT_BEGIN_NAMESPACE #if QT_CONFIG(accessibility) -class QAccessibleQuickWindow : public QAccessibleObject +class Q_QUICK_EXPORT QAccessibleQuickWindow : public QAccessibleObject { public: QAccessibleQuickWindow(QQuickWindow *object); diff --git a/qtdeclarative/src/quick/items/qquickdrag.cpp b/qtdeclarative/src/quick/items/qquickdrag.cpp index 8321fcfeed..383078b3b9 100644 --- a/qtdeclarative/src/quick/items/qquickdrag.cpp +++ b/qtdeclarative/src/quick/items/qquickdrag.cpp @@ -481,7 +481,9 @@ void QQuickDragAttached::setKeys(const QStringList &keys) \qmlattachedproperty stringlist QtQuick::Drag::mimeData \since 5.2 - This property holds a map of mimeData that is used during startDrag. + This property holds a map from mime type to data that is used during startDrag. + The mime data needs to be a \c string, or an \c ArrayBuffer with the data encoded + according to the mime type. */ QVariantMap QQuickDragAttached::mimeData() const @@ -766,8 +768,12 @@ Qt::DropAction QQuickDragAttachedPrivate::startDrag(Qt::DropActions supportedAct QDrag *drag = new QDrag(source ? source : q); QMimeData *mimeData = new QMimeData(); - for (auto it = externalMimeData.cbegin(), end = externalMimeData.cend(); it != end; ++it) - mimeData->setData(it.key(), it.value().toString().toUtf8()); + for (auto it = externalMimeData.cbegin(), end = externalMimeData.cend(); it != end; ++it) { + if (static_cast(it.value().type()) == QMetaType::QByteArray) + mimeData->setData(it.key(), it.value().toByteArray()); + else + mimeData->setData(it.key(), it.value().toString().toUtf8()); + } drag->setMimeData(mimeData); if (pixmapLoader.isReady()) { diff --git a/qtdeclarative/src/quick/items/qquickitem.cpp b/qtdeclarative/src/quick/items/qquickitem.cpp index 33da9762d3..9e8b289376 100644 --- a/qtdeclarative/src/quick/items/qquickitem.cpp +++ b/qtdeclarative/src/quick/items/qquickitem.cpp @@ -59,6 +59,7 @@ #include #include #include +#include #include #include @@ -2326,6 +2327,7 @@ QQuickItem::QQuickItem(QQuickItemPrivate &dd, QQuickItem *parent) QQuickItem::~QQuickItem() { Q_D(QQuickItem); + d->inDestructor = true; if (d->windowRefCount > 1) d->windowRefCount = 1; // Make sure window is set to null in next call to derefWindow(). @@ -2398,7 +2400,7 @@ bool QQuickItemPrivate::canAcceptTabFocus(QQuickItem *item) return true; #if QT_CONFIG(accessibility) - QAccessible::Role role = QQuickItemPrivate::get(item)->accessibleRole(); + QAccessible::Role role = QQuickItemPrivate::get(item)->effectiveAccessibleRole(); if (role == QAccessible::EditableText || role == QAccessible::Table || role == QAccessible::List) { return true; } else if (role == QAccessible::ComboBox || role == QAccessible::SpinBox) { @@ -2526,6 +2528,7 @@ QQuickItem* QQuickItemPrivate::nextPrevItemInTabFocusChain(QQuickItem *item, boo QQuickItem *current = item; qCDebug(DBG_FOCUS) << "QQuickItemPrivate::nextPrevItemInTabFocusChain: startItem:" << startItem; qCDebug(DBG_FOCUS) << "QQuickItemPrivate::nextPrevItemInTabFocusChain: firstFromItem:" << firstFromItem; + QDuplicateTracker cycleDetector; do { qCDebug(DBG_FOCUS) << "QQuickItemPrivate::nextPrevItemInTabFocusChain: current:" << current; qCDebug(DBG_FOCUS) << "QQuickItemPrivate::nextPrevItemInTabFocusChain: from:" << from; @@ -2592,7 +2595,10 @@ QQuickItem* QQuickItemPrivate::nextPrevItemInTabFocusChain(QQuickItem *item, boo // traversed all of the chain (by compare the [current] item with [startItem]) // Since the [startItem] might be promoted to its parent if it is invisible, // we still have to check [current] item with original start item - if ((current == startItem || current == originalStartItem) && from == firstFromItem) { + // We might also run into a cycle before we reach firstFromItem again + // but note that we have to ignore current if we are meant to skip it + if (((current == startItem || current == originalStartItem) && from == firstFromItem) || + (!skip && cycleDetector.hasSeen(current))) { // wrapped around, avoid endless loops if (item == contentItem) { qCDebug(DBG_FOCUS) << "QQuickItemPrivate::nextPrevItemInTabFocusChain: looped, return contentItem"; @@ -2689,9 +2695,8 @@ void QQuickItem::setParentItem(QQuickItem *parentItem) const bool wasVisible = isVisible(); op->removeChild(this); - if (wasVisible) { + if (wasVisible && !op->inDestructor) emit oldParentItem->visibleChildrenChanged(); - } } else if (d->window) { QQuickWindowPrivate::get(d->window)->parentlessItems.remove(this); } @@ -2768,8 +2773,9 @@ void QQuickItem::setParentItem(QQuickItem *parentItem) d->itemChange(ItemParentHasChanged, d->parentItem); - emit parentChanged(d->parentItem); - if (isVisible() && d->parentItem) + if (!d->inDestructor) + emit parentChanged(d->parentItem); + if (isVisible() && d->parentItem && !QQuickItemPrivate::get(d->parentItem)->inDestructor) emit d->parentItem->visibleChildrenChanged(); } @@ -2965,7 +2971,8 @@ void QQuickItemPrivate::removeChild(QQuickItem *child) itemChange(QQuickItem::ItemChildRemovedChange, child); - emit q->childrenChanged(); + if (!inDestructor) + emit q->childrenChanged(); } void QQuickItemPrivate::refWindow(QQuickWindow *c) @@ -3194,6 +3201,7 @@ QQuickItemPrivate::QQuickItemPrivate() , touchEnabled(false) #endif , hasCursorHandler(false) + , inDestructor(false) , dirtyAttributes(0) , nextDirtyItem(nullptr) , prevDirtyItem(nullptr) @@ -5120,6 +5128,13 @@ void QQuickItem::componentComplete() d->addToDirtyList(); QQuickWindowPrivate::get(d->window)->dirtyItem(this); } + +#if QT_CONFIG(accessibility) + if (d->isAccessible && d->effectiveVisible) { + QAccessibleEvent ev(this, QAccessible::ObjectShow); + QAccessible::updateAccessibility(&ev); + } +#endif } QQuickStateGroup *QQuickItemPrivate::_states() @@ -6106,9 +6121,11 @@ bool QQuickItemPrivate::setEffectiveVisibleRecur(bool newEffectiveVisible) QAccessible::updateAccessibility(&ev); } #endif - emit q->visibleChanged(); - if (childVisibilityChanged) - emit q->visibleChildrenChanged(); + if (!inDestructor) { + emit q->visibleChanged(); + if (childVisibilityChanged) + emit q->visibleChildrenChanged(); + } return true; // effective visibility DID change } @@ -6157,6 +6174,15 @@ void QQuickItemPrivate::setEffectiveEnableRecur(QQuickItem *scope, bool newEffec } itemChange(QQuickItem::ItemEnabledHasChanged, effectiveEnable); +#if QT_CONFIG(accessibility) + if (isAccessible) { + QAccessible::State changedState; + changedState.disabled = true; + changedState.focusable = true; + QAccessibleStateChangeEvent ev(q, changedState); + QAccessible::updateAccessibility(&ev); + } +#endif emit q->enabledChanged(); } @@ -8974,13 +9000,20 @@ QQuickItemPrivate::ExtraData::ExtraData() #if QT_CONFIG(accessibility) -QAccessible::Role QQuickItemPrivate::accessibleRole() const +QAccessible::Role QQuickItemPrivate::effectiveAccessibleRole() const { Q_Q(const QQuickItem); - QQuickAccessibleAttached *accessibleAttached = qobject_cast(qmlAttachedPropertiesObject(q, false)); - if (accessibleAttached) - return accessibleAttached->role(); + auto *attached = qmlAttachedPropertiesObject(q, false); + auto role = QAccessible::NoRole; + if (auto *accessibleAttached = qobject_cast(attached)) + role = accessibleAttached->role(); + if (role == QAccessible::NoRole) + role = accessibleRole(); + return role; +} +QAccessible::Role QQuickItemPrivate::accessibleRole() const +{ return QAccessible::NoRole; } #endif diff --git a/qtdeclarative/src/quick/items/qquickitem_p.h b/qtdeclarative/src/quick/items/qquickitem_p.h index 841d91bb40..6f329bd119 100644 --- a/qtdeclarative/src/quick/items/qquickitem_p.h +++ b/qtdeclarative/src/quick/items/qquickitem_p.h @@ -472,6 +472,7 @@ public: bool replayingPressEvent:1; bool touchEnabled:1; bool hasCursorHandler:1; + quint32 inDestructor:1; // has entered ~QQuickItem enum DirtyType { TransformOrigin = 0x00000001, @@ -574,7 +575,10 @@ public: virtual void implicitHeightChanged(); #if QT_CONFIG(accessibility) + QAccessible::Role effectiveAccessibleRole() const; +private: virtual QAccessible::Role accessibleRole() const; +public: #endif void setImplicitAntialiasing(bool antialiasing); diff --git a/qtdeclarative/src/quick/items/qquickmousearea_p_p.h b/qtdeclarative/src/quick/items/qquickmousearea_p_p.h index fba383e268..0d63618622 100644 --- a/qtdeclarative/src/quick/items/qquickmousearea_p_p.h +++ b/qtdeclarative/src/quick/items/qquickmousearea_p_p.h @@ -61,7 +61,6 @@ QT_BEGIN_NAMESPACE class QQuickMouseEvent; class QQuickMouseArea; -class QQuickPointerMask; class QQuickMouseAreaPrivate : public QQuickItemPrivate { Q_DECLARE_PUBLIC(QQuickMouseArea) @@ -100,7 +99,6 @@ public: #if QT_CONFIG(quick_draganddrop) QQuickDrag *drag; #endif - QPointer mask; QPointF startScene; QPointF targetStartPos; QPointF lastPos; diff --git a/qtdeclarative/src/quick/util/qquickstategroup.cpp b/qtdeclarative/src/quick/util/qquickstategroup.cpp index 7cb3138618..f732b1eb4a 100644 --- a/qtdeclarative/src/quick/util/qquickstategroup.cpp +++ b/qtdeclarative/src/quick/util/qquickstategroup.cpp @@ -381,8 +381,14 @@ bool QQuickStateGroupPrivate::updateAutoState() const auto potentialWhenBinding = QQmlPropertyPrivate::binding(whenProp); // if there is a binding, the value in when might not be up-to-date at this point // so we manually reevaluate the binding - if (auto abstractBinding = dynamic_cast(potentialWhenBinding)) - whenValue = abstractBinding->evaluate().toBool(); + if (auto abstractBinding = dynamic_cast(potentialWhenBinding)) { + QVariant evalResult = abstractBinding->evaluate(); + if (evalResult.userType() == qMetaTypeId()) + whenValue = evalResult.value().toBool(); + else + whenValue = evalResult.toBool(); + } + if (whenValue) { if (stateChangeDebug()) qWarning() << "Setting auto state due to expression"; diff --git a/qtdeclarative/src/quickwidgets/qaccessiblequickwidget.cpp b/qtdeclarative/src/quickwidgets/qaccessiblequickwidget.cpp new file mode 100644 index 0000000000..8a1c901880 --- /dev/null +++ b/qtdeclarative/src/quickwidgets/qaccessiblequickwidget.cpp @@ -0,0 +1,110 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtQuick module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qaccessiblequickwidget_p.h" + +#include "qquickwidget_p.h" + +QT_BEGIN_NAMESPACE + +#if QT_CONFIG(accessibility) + +QAccessibleQuickWidget::QAccessibleQuickWidget(QQuickWidget* widget) +: QAccessibleWidget(widget) +, m_accessibleWindow(QQuickWidgetPrivate::get(widget)->offscreenWindow) +{ + // NOTE: m_accessibleWindow is a QAccessibleQuickWindow, and not a + // QAccessibleQuickWidgetOffscreenWindow (defined below). This means + // it will return the Quick item child interfaces, which is what's needed here + // (unlike QAccessibleQuickWidgetOffscreenWindow, which will report 0 children). +} + +QAccessibleInterface *QAccessibleQuickWidget::child(int index) const +{ + return m_accessibleWindow.child(index); +} + +int QAccessibleQuickWidget::childCount() const +{ + return m_accessibleWindow.childCount(); +} + +int QAccessibleQuickWidget::indexOfChild(const QAccessibleInterface *iface) const +{ + return m_accessibleWindow.indexOfChild(iface); +} + +QAccessibleInterface *QAccessibleQuickWidget::childAt(int x, int y) const +{ + return m_accessibleWindow.childAt(x, y); +} + +QAccessibleQuickWidgetOffscreenWindow::QAccessibleQuickWidgetOffscreenWindow(QQuickWindow *window) +:QAccessibleQuickWindow(window) +{ + +} + +QAccessibleInterface *QAccessibleQuickWidgetOffscreenWindow::child(int index) const +{ + Q_UNUSED(index); + return nullptr; +} + +int QAccessibleQuickWidgetOffscreenWindow::childCount() const +{ + return 0; +} + +int QAccessibleQuickWidgetOffscreenWindow::indexOfChild(const QAccessibleInterface *iface) const +{ + Q_UNUSED(iface); + return -1; +} + +QAccessibleInterface *QAccessibleQuickWidgetOffscreenWindow::QAccessibleQuickWidgetOffscreenWindow::childAt(int x, int y) const +{ + Q_UNUSED(x); + Q_UNUSED(y); + return nullptr; +} + +#endif // accessibility + +QT_END_NAMESPACE diff --git a/qtdeclarative/src/quickwidgets/qaccessiblequickwidget_p.h b/qtdeclarative/src/quickwidgets/qaccessiblequickwidget_p.h new file mode 100644 index 0000000000..7c2ab930e0 --- /dev/null +++ b/qtdeclarative/src/quickwidgets/qaccessiblequickwidget_p.h @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtQuick module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QACCESSIBLEQUICKWIDGET_H +#define QACCESSIBLEQUICKWIDGET_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "qquickwidget.h" +#include + +#include + +QT_BEGIN_NAMESPACE + +#if QT_CONFIG(accessibility) + +// These classes implement the QQuickWiget accessibility switcharoo, +// where the child items of the QQuickWidgetOffscreenWindow are reported +// as child accessible interfaces of the QAccessibleQuickWidget. +class QAccessibleQuickWidget: public QAccessibleWidget +{ +public: + QAccessibleQuickWidget(QQuickWidget* widget); + + QAccessibleInterface *child(int index) const override; + int childCount() const override; + int indexOfChild(const QAccessibleInterface *iface) const override; + QAccessibleInterface *childAt(int x, int y) const override; + +private: + QAccessibleQuickWindow m_accessibleWindow; + Q_DISABLE_COPY(QAccessibleQuickWidget) +}; + +class QAccessibleQuickWidgetOffscreenWindow: public QAccessibleQuickWindow +{ +public: + QAccessibleQuickWidgetOffscreenWindow(QQuickWindow *window); + QAccessibleInterface *child(int index) const override; + int childCount() const override; + int indexOfChild(const QAccessibleInterface *iface) const override; + QAccessibleInterface *childAt(int x, int y) const override; +}; + +#endif // accessibility + +QT_END_NAMESPACE + +#endif diff --git a/qtdeclarative/src/quickwidgets/qaccessiblequickwidgetfactory.cpp b/qtdeclarative/src/quickwidgets/qaccessiblequickwidgetfactory.cpp new file mode 100644 index 0000000000..7ba88a1769 --- /dev/null +++ b/qtdeclarative/src/quickwidgets/qaccessiblequickwidgetfactory.cpp @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtQuick module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qaccessiblequickwidgetfactory_p.h" +#include "qaccessiblequickwidget_p.h" + +QT_BEGIN_NAMESPACE + +#if QT_CONFIG(accessibility) + +QAccessibleInterface *qAccessibleQuickWidgetFactory(const QString &classname, QObject *object) +{ + if (classname == QLatin1String("QQuickWidget")) { + return new QAccessibleQuickWidget(qobject_cast(object)); + } else if (classname == QLatin1String("QQuickWidgetOffscreenWindow")) { + return new QAccessibleQuickWidgetOffscreenWindow(qobject_cast(object)); + } + return 0; +} + +#endif // accessibility + +QT_END_NAMESPACE + diff --git a/qtdeclarative/src/quickwidgets/qaccessiblequickwidgetfactory_p.h b/qtdeclarative/src/quickwidgets/qaccessiblequickwidgetfactory_p.h new file mode 100644 index 0000000000..8c63b09f81 --- /dev/null +++ b/qtdeclarative/src/quickwidgets/qaccessiblequickwidgetfactory_p.h @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtQuick module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#ifndef QACCESSIBLEQUICKWIDGETFACTORY_H +#define QACCESSIBLEQUICKWIDGETFACTORY_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +QT_BEGIN_NAMESPACE + +#if QT_CONFIG(accessibility) + +QAccessibleInterface *qAccessibleQuickWidgetFactory(const QString &classname, QObject *object); + +#endif + +QT_END_NAMESPACE + +#endif diff --git a/qtdeclarative/src/quickwidgets/qquickwidget.cpp b/qtdeclarative/src/quickwidgets/qquickwidget.cpp index cf021d9a7c..b0117683f7 100644 --- a/qtdeclarative/src/quickwidgets/qquickwidget.cpp +++ b/qtdeclarative/src/quickwidgets/qquickwidget.cpp @@ -39,6 +39,7 @@ #include "qquickwidget.h" #include "qquickwidget_p.h" +#include "qaccessiblequickwidgetfactory_p.h" #include "private/qquickwindow_p.h" #include "private/qquickitem_p.h" @@ -75,9 +76,16 @@ QT_BEGIN_NAMESPACE +QQuickWidgetOffscreenWindow::QQuickWidgetOffscreenWindow(QQuickWindowPrivate &dd, QQuickRenderControl *control) +:QQuickWindow(dd, control) +{ + setTitle(QString::fromLatin1("Offscreen")); + setObjectName(QString::fromLatin1("QQuickOffScreenWindow")); +} + // override setVisble to prevent accidental offscreen window being created // by base class. -class QQuickOffcreenWindowPrivate: public QQuickWindowPrivate { +class QQuickWidgetOffscreenWindowPrivate: public QQuickWindowPrivate { public: void setVisible(bool visible) override { Q_Q(QWindow); @@ -105,9 +113,8 @@ void QQuickWidgetPrivate::init(QQmlEngine* e) Q_Q(QQuickWidget); renderControl = new QQuickWidgetRenderControl(q); - offscreenWindow = new QQuickWindow(*new QQuickOffcreenWindowPrivate(),renderControl); - offscreenWindow->setTitle(QString::fromLatin1("Offscreen")); - offscreenWindow->setObjectName(QString::fromLatin1("QQuickOffScreenWindow")); + offscreenWindow = new QQuickWidgetOffscreenWindow(*new QQuickWidgetOffscreenWindowPrivate(), renderControl); + offscreenWindow->setScreen(q->screen()); // Do not call create() on offscreenWindow. // Check if the Software Adaptation is being used @@ -138,6 +145,10 @@ void QQuickWidgetPrivate::init(QQmlEngine* e) QWidget::connect(offscreenWindow, &QQuickWindow::focusObjectChanged, q, &QQuickWidget::propagateFocusObjectChanged); QObject::connect(renderControl, SIGNAL(renderRequested()), q, SLOT(triggerUpdate())); QObject::connect(renderControl, SIGNAL(sceneChanged()), q, SLOT(triggerUpdate())); + +#if QT_CONFIG(accessibility) + QAccessible::installFactory(&qAccessibleQuickWidgetFactory); +#endif } void QQuickWidgetPrivate::ensureEngine() const @@ -901,9 +912,7 @@ void QQuickWidgetPrivate::createContext() context = new QOpenGLContext; context->setFormat(offscreenWindow->requestedFormat()); - const QWindow *win = q->window()->windowHandle(); - if (win && win->screen()) - context->setScreen(win->screen()); + context->setScreen(q->screen()); QOpenGLContext *shareContext = qt_gl_global_share_context(); if (!shareContext) shareContext = QWidgetPrivate::get(q->window())->shareContext(); @@ -1527,19 +1536,16 @@ bool QQuickWidget::event(QEvent *e) d->handleWindowChange(); break; - case QEvent::ScreenChangeInternal: - if (QWindow *window = this->window()->windowHandle()) { - QScreen *newScreen = window->screen(); - - if (d->offscreenWindow) - d->offscreenWindow->setScreen(newScreen); - if (d->offscreenSurface) - d->offscreenSurface->setScreen(newScreen); + case QEvent::ScreenChangeInternal: { + QScreen *newScreen = screen(); + if (d->offscreenWindow) + d->offscreenWindow->setScreen(newScreen); + if (d->offscreenSurface) + d->offscreenSurface->setScreen(newScreen); #if QT_CONFIG(opengl) - if (d->context) - d->context->setScreen(newScreen); + if (d->context) + d->context->setScreen(newScreen); #endif - } if (d->useSoftwareRenderer #if QT_CONFIG(opengl) @@ -1552,7 +1558,7 @@ bool QQuickWidget::event(QEvent *e) d->render(true); } break; - + } case QEvent::Show: case QEvent::Move: d->updatePosition(); diff --git a/qtdeclarative/src/quickwidgets/qquickwidget_p.h b/qtdeclarative/src/quickwidgets/qquickwidget_p.h index 881f7f9220..1a946bcc71 100644 --- a/qtdeclarative/src/quickwidgets/qquickwidget_p.h +++ b/qtdeclarative/src/quickwidgets/qquickwidget_p.h @@ -148,6 +148,14 @@ public: bool forceFullUpdate; }; +class QQuickWidgetOffscreenWindow: public QQuickWindow +{ + Q_OBJECT + +public: + QQuickWidgetOffscreenWindow(QQuickWindowPrivate &dd, QQuickRenderControl *control); +}; + QT_END_NAMESPACE #endif // QQuickWidget_P_H diff --git a/qtdeclarative/src/quickwidgets/quickwidgets.pro b/qtdeclarative/src/quickwidgets/quickwidgets.pro index 2438e577ae..85d156b8a3 100644 --- a/qtdeclarative/src/quickwidgets/quickwidgets.pro +++ b/qtdeclarative/src/quickwidgets/quickwidgets.pro @@ -7,9 +7,13 @@ DEFINES += QT_NO_URL_CAST_FROM_STRING QT_NO_INTEGER_EVENT_COORDINATES QT_NO_FO HEADERS += \ qquickwidget.h \ qquickwidget_p.h \ - qtquickwidgetsglobal.h + qtquickwidgetsglobal.h \ + qaccessiblequickwidget_p.h \ + qaccessiblequickwidgetfactory_p.h SOURCES += \ - qquickwidget.cpp + qquickwidget.cpp \ + qaccessiblequickwidget.cpp \ + qaccessiblequickwidgetfactory.cpp load(qt_module) diff --git a/qtdeclarative/tests/auto/qml/qqmldelegatemodel/data/deleteRace.qml b/qtdeclarative/tests/auto/qml/qqmldelegatemodel/data/deleteRace.qml new file mode 100644 index 0000000000..23874970e7 --- /dev/null +++ b/qtdeclarative/tests/auto/qml/qqmldelegatemodel/data/deleteRace.qml @@ -0,0 +1,50 @@ +import QtQuick 2.15 +import QtQml.Models 2.15 + +Item { + DelegateModel { + id: delegateModel + model: ListModel { + id: sourceModel + + ListElement { title: "foo" } + ListElement { title: "bar" } + + function clear() { + if (count > 0) + remove(0, count); + } + } + + groups: [ + DelegateModelGroup { name: "selectedItems" } + ] + + delegate: Text { + height: DelegateModel.inSelectedItems ? implicitHeight * 2 : implicitHeight + Component.onCompleted: { + if (index === 0) + DelegateModel.inSelectedItems = true; + } + } + + Component.onCompleted: { + items.create(0) + items.create(1) + } + } + + ListView { + anchors.fill: parent + model: delegateModel + } + + Timer { + running: true + interval: 10 + onTriggered: sourceModel.clear() + } + + property int count: delegateModel.items.count +} + diff --git a/qtdeclarative/tests/auto/qml/qqmldelegatemodel/data/redrawUponColumnChange.qml b/qtdeclarative/tests/auto/qml/qqmldelegatemodel/data/redrawUponColumnChange.qml new file mode 100644 index 0000000000..206133bb39 --- /dev/null +++ b/qtdeclarative/tests/auto/qml/qqmldelegatemodel/data/redrawUponColumnChange.qml @@ -0,0 +1,11 @@ +import QtQuick 2.8 + +ListView { + id: root + width: 200 + height: 200 + + delegate: Text { + text: display + } +} diff --git a/qtdeclarative/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp b/qtdeclarative/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp index 35f1e2c94d..f473cff75f 100644 --- a/qtdeclarative/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp +++ b/qtdeclarative/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp @@ -27,6 +27,8 @@ ****************************************************************************/ #include +#include +#include #include #include #include @@ -47,6 +49,8 @@ private slots: void filterOnGroup_removeWhenCompleted(); void qtbug_86017(); void contextAccessedByHandler(); + void redrawUponColumnChange(); + void deleteRace(); }; class AbstractItemModel : public QAbstractItemModel @@ -186,6 +190,41 @@ void tst_QQmlDelegateModel::contextAccessedByHandler() QVERIFY(root->property("works").toBool()); } +void tst_QQmlDelegateModel::redrawUponColumnChange() +{ + QStandardItemModel m1; + m1.appendRow({ + new QStandardItem("Banana"), + new QStandardItem("Coconut"), + }); + + QQuickView view(testFileUrl("redrawUponColumnChange.qml")); + QCOMPARE(view.status(), QQuickView::Ready); + view.show(); + QQuickItem *root = view.rootObject(); + root->setProperty("model", QVariant::fromValue(&m1)); + + QObject *item = root->property("currentItem").value(); + QVERIFY(item); + QCOMPARE(item->property("text").toString(), "Banana"); + + QVERIFY(root); + m1.removeColumn(0); + + QCOMPARE(item->property("text").toString(), "Coconut"); +} + +void tst_QQmlDelegateModel::deleteRace() +{ + QQmlEngine engine; + QQmlComponent c(&engine, testFileUrl("deleteRace.qml")); + QVERIFY2(c.isReady(), qPrintable(c.errorString())); + QScopedPointer o(c.create()); + QVERIFY(!o.isNull()); + QTRY_COMPARE(o->property("count").toInt(), 2); + QTRY_COMPARE(o->property("count").toInt(), 0); +} + QTEST_MAIN(tst_QQmlDelegateModel) #include "tst_qqmldelegatemodel.moc" diff --git a/qtdeclarative/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp b/qtdeclarative/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp index 9c865b3f73..1f788f7a7f 100644 --- a/qtdeclarative/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp +++ b/qtdeclarative/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp @@ -154,6 +154,11 @@ void tst_QQmlImport::importPathOrder() engine.addImportPath(QT_QMLTEST_DATADIR); expectedImportPaths.prepend(QT_QMLTEST_DATADIR); QCOMPARE(expectedImportPaths, engine.importPathList()); + + // Add qml2Imports again to make it the first of the list + engine.addImportPath(qml2Imports); + expectedImportPaths.move(expectedImportPaths.indexOf(qml2Imports), 0); + QCOMPARE(expectedImportPaths, engine.importPathList()); } Q_DECLARE_METATYPE(QQmlImports::ImportVersion) diff --git a/qtdeclarative/tests/auto/quick/qquickgridview/data/qtbug86255.qml b/qtdeclarative/tests/auto/quick/qquickgridview/data/qtbug86255.qml new file mode 100644 index 0000000000..20688b1967 --- /dev/null +++ b/qtdeclarative/tests/auto/quick/qquickgridview/data/qtbug86255.qml @@ -0,0 +1,55 @@ +import QtQuick 2.15 + +Item { + width: 240 + height: 320 + + GridView { + id: grid + objectName: "view" + anchors.fill: parent + cellWidth: 64 + cellHeight: 64 + model: ListModel { + id: listModel + + Component.onCompleted: reload() + + function reload() { + clear(); + for (let i = 0; i < 1000; i++) { + let magic = Math.random(); + append( { magic } ); + } + } + } + clip: true + delegate: Item { + id: d + property string val: magic + Loader { + property alias value: d.val + asynchronous: true + sourceComponent: cmp + } + } + } + + Timer { + running: true + interval: 1000 + onTriggered: listModel.reload() + } + Timer { + running: true + interval: 500 + onTriggered: grid.flick(0, -4000) + } + + Component { + id: cmp + Text { + text: value + } + } +} diff --git a/qtdeclarative/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp b/qtdeclarative/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp index 94ec4f44d5..7d0d9fa7a7 100644 --- a/qtdeclarative/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp +++ b/qtdeclarative/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp @@ -213,6 +213,7 @@ private slots: void QTBUG_45640(); void QTBUG_49218(); void QTBUG_48870_fastModelUpdates(); + void QTBUG_86255(); void keyNavigationEnabled(); void resizeDynamicCellWidthRtL(); @@ -6814,6 +6815,18 @@ void tst_QQuickGridView::resizeDynamicCellWidthRtL() QTRY_COMPARE(gridview->contentX(), 0.f); } +void tst_QQuickGridView::QTBUG_86255() +{ + QScopedPointer window(createView()); + window->setSource(testFileUrl("qtbug86255.qml")); + window->show(); + QVERIFY(QTest::qWaitForWindowExposed(window.data())); + QQuickGridView *view = findItem(window->rootObject(), "view"); + QVERIFY(view != nullptr); + QTRY_COMPARE(view->isFlicking(), true); + QTRY_COMPARE(view->isFlicking(), false); +} + void tst_QQuickGridView::releaseItems() { QScopedPointer view(createView()); diff --git a/qtdeclarative/tests/auto/quick/qquickitem2/data/activeFocusOnTab_infiniteLoop3.qml b/qtdeclarative/tests/auto/quick/qquickitem2/data/activeFocusOnTab_infiniteLoop3.qml new file mode 100644 index 0000000000..889e480f3b --- /dev/null +++ b/qtdeclarative/tests/auto/quick/qquickitem2/data/activeFocusOnTab_infiniteLoop3.qml @@ -0,0 +1,13 @@ +import QtQuick 2.6 + +Item { + visible: true + Item { + visible: false + Item { + objectName: "hiddenChild" + activeFocusOnTab: true + focus: true + } + } +} diff --git a/qtdeclarative/tests/auto/quick/qquickitem2/tst_qquickitem.cpp b/qtdeclarative/tests/auto/quick/qquickitem2/tst_qquickitem.cpp index c8f251dbe1..c8ef36ee68 100644 --- a/qtdeclarative/tests/auto/quick/qquickitem2/tst_qquickitem.cpp +++ b/qtdeclarative/tests/auto/quick/qquickitem2/tst_qquickitem.cpp @@ -67,6 +67,7 @@ private slots: void activeFocusOnTab10(); void activeFocusOnTab_infiniteLoop_data(); void activeFocusOnTab_infiniteLoop(); + void activeFocusOnTab_infiniteLoopControls(); void nextItemInFocusChain(); void nextItemInFocusChain2(); @@ -1057,6 +1058,17 @@ void tst_QQuickItem::activeFocusOnTab_infiniteLoop() QCOMPARE(item, window->rootObject()); } + +void tst_QQuickItem::activeFocusOnTab_infiniteLoopControls() +{ + auto source = testFileUrl("activeFocusOnTab_infiniteLoop3.qml"); + QScopedPointerwindow(new QQuickView()); + window->setSource(source); + window->show(); + QVERIFY(window->errors().isEmpty()); + QTest::keyClick(window.get(), Qt::Key_Tab); // should not hang +} + void tst_QQuickItem::nextItemInFocusChain() { if (!qt_tab_all_widgets()) diff --git a/qtdeclarative/tests/auto/quick/qquickstates/data/jsValueWhen.qml b/qtdeclarative/tests/auto/quick/qquickstates/data/jsValueWhen.qml new file mode 100644 index 0000000000..6d5eb1600c --- /dev/null +++ b/qtdeclarative/tests/auto/quick/qquickstates/data/jsValueWhen.qml @@ -0,0 +1,18 @@ +import QtQuick 2.15 + +Item { + id: root + property var prop: null + property bool works: false + states: [ + State { + name: "mystate" + when: root.prop + PropertyChanges { + target: root + works: "works" + } + } + ] + Component.onCompleted: root.prop = new Object +} diff --git a/qtdeclarative/tests/auto/quick/qquickstates/tst_qquickstates.cpp b/qtdeclarative/tests/auto/quick/qquickstates/tst_qquickstates.cpp index aa55b42935..26e86672b0 100644 --- a/qtdeclarative/tests/auto/quick/qquickstates/tst_qquickstates.cpp +++ b/qtdeclarative/tests/auto/quick/qquickstates/tst_qquickstates.cpp @@ -188,6 +188,7 @@ private slots: void revertListMemoryLeak(); void duplicateStateName(); void trivialWhen(); + void jsValueWhen(); void noStateOsciallation(); void parentChangeCorrectReversal(); void revertNullObjectBinding(); @@ -1734,6 +1735,16 @@ void tst_qquickstates::trivialWhen() QVERIFY(c.create()); } +void tst_qquickstates::jsValueWhen() +{ + QQmlEngine engine; + + QQmlComponent c(&engine, testFileUrl("jsValueWhen.qml")); + QScopedPointer root(c.create()); + QVERIFY(root); + QVERIFY(root->property("works").toBool()); +} + void tst_qquickstates::noStateOsciallation() { QQmlEngine engine; diff --git a/qtdeclarative/tests/manual/quickcontrols2/swipedelegate/CloseOnCompletedWorks.qml b/qtdeclarative/tests/manual/quickcontrols2/swipedelegate/CloseOnCompletedWorks.qml new file mode 100644 index 0000000000..38dfde41c3 --- /dev/null +++ b/qtdeclarative/tests/manual/quickcontrols2/swipedelegate/CloseOnCompletedWorks.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2022 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2 +import QtQuick.Controls 2 +ApplicationWindow { + visible: true + width: 640 + height: 480 + + ListView { + anchors.fill: parent + model: 2 + + delegate: SwipeDelegate { + text: "Swipe me left (should not crash)" + + swipe.right: Label { + text: "Release (should not crash)" + } + + swipe.onCompleted: { + swipe.close() + } + } + } +} diff --git a/qtdeclarative/tools/qml/main.cpp b/qtdeclarative/tools/qml/main.cpp index beeec88f07..2cb7653d65 100644 --- a/qtdeclarative/tools/qml/main.cpp +++ b/qtdeclarative/tools/qml/main.cpp @@ -446,8 +446,8 @@ int main(int argc, char *argv[]) QCommandLineParser parser; parser.setSingleDashWordOptionMode(QCommandLineParser::ParseAsLongOptions); parser.setOptionsAfterPositionalArgumentsMode(QCommandLineParser::ParseAsPositionalArguments); - const QCommandLineOption helpOption = parser.addHelpOption(); - const QCommandLineOption versionOption = parser.addVersionOption(); + parser.addHelpOption(); + parser.addVersionOption(); #ifdef QT_GUI_LIB QCommandLineOption apptypeOption(QStringList() << QStringLiteral("a") << QStringLiteral("apptype"), QCoreApplication::translate("main", "Select which application class to use. Default is gui."), @@ -522,14 +522,7 @@ int main(int argc, char *argv[]) parser.addPositionalArgument("args", QCoreApplication::translate("main", "Arguments after '--' are ignored, but passed through to the application.arguments variable in QML."), "[-- args...]"); - if (!parser.parse(QCoreApplication::arguments())) { - qWarning() << parser.errorText(); - exit(1); - } - if (parser.isSet(versionOption)) - parser.showVersion(); - if (parser.isSet(helpOption)) - parser.showHelp(); + parser.process(*app); if (parser.isSet(listConfOption)) listConfFiles(); if (applicationType == QmlApplicationTypeUnknown) { Submodule qtdoc bebd3261...210e3d43: Submodule qtimageformats 3c2ad3ee..63ec444c: diff --git a/qtimageformats/src/3rdparty/libtiff/ChangeLog b/qtimageformats/src/3rdparty/libtiff/ChangeLog index c2e5405..87b5f12 100644 --- a/qtimageformats/src/3rdparty/libtiff/ChangeLog +++ b/qtimageformats/src/3rdparty/libtiff/ChangeLog @@ -1,3 +1,1033 @@ +2023-09-05 Even Rouault + + libtiff v4.6.0 released + +2023-09-05 Even Rouault + + Merge branch 'fix_600' into 'master' + CMake: fix build with -Dstrip-chopping=off (fixes #600) + + See merge request libtiff/libtiff!527 + +2023-09-05 Even Rouault + + Merge branch 'georgthegreat-master-patch-87447' into 'master' + Fix using __attribute__ libtiff with clang-for-windows + + See merge request libtiff/libtiff!525 + +2023-09-05 Yuriy Chernyshov + + Fix using __attribute__ libtiff with clang-for-windows. + +2023-09-05 Even Rouault + + Merge branch 'manpage_TIFFField_docu_update' into 'master' + manpages: TiffField functions documentation updated with return behaviour for... + + See merge request libtiff/libtiff!526 + +2023-09-05 Even Rouault + + CMake: fix build with -Dstrip-chopping=off (fixes #600) + +2023-09-03 Even Rouault + + Merge branch 'consistently_update_TIFF-version_from_configure-ac' into 'master' + Update CMake and autoconf scripts to consistently update LibTIFF version... + + See merge request libtiff/libtiff!456 + +2023-09-03 Su Laus + + Update CMake and autoconf scripts to consistently update LibTIFF version defines and references in various files when version definition in configure.ac has been changed. + - Move in tiffvers.h from .\libtiff source directory to .\libtiff build directory. + - Remove unused version information from tif_config.h + - With every CMake build the version defines (e.g. 4.5.1) within tiffvers.h are consistently updated from configure.ac. The version release-date is taken from file RELEASE-DATE. + - The files VERSION and RELEASE-DATE are only updated with a special CMake target build: cmake --build . --target tiff_release. + + - For autotools, version information is updated from configure.ac with ./autogen.sh. LIBTIFF_RELEASE_DATE is taken form file RELEASE-DATE. + - ./configure generates tiffvers.h with the cached version information and LIBTIFF_RELEASE_DATE. + - "make release" updates tiffvers.h and VERSION file with cached version info and RELEASE-DATE file and tiffves.h with the current date. + +2023-08-28 Su_Laus + + manpages: TiffField functions documentation updated with return behaviour for not defined tags and determination of write-/read-count size. + +2023-08-22 Even Rouault + + Merge branch 'change_long_to_int32_t_in_two_test_apps' into 'master' + Change "long" to "int32_t" in two test apps, because can be either int32_t or... + + See merge request libtiff/libtiff!524 + +2023-08-21 Su_Laus + + Change "long" to "int32_t" in two test apps, because can be either int32_t or int64_t, depending on compiler and system. + +2023-08-16 Even Rouault + + Merge branch 'CI_CMake_static_build' into 'master' + Add static build for CI/CD to run testcases which need private interface functions. + + See merge request libtiff/libtiff!521 + +2023-08-16 Even Rouault + + Merge branch 'fix_#597_tiffset_different_signedness' into 'master' + tiffset fix #597: warning: comparison of integer expressions of different signedness. + + Closes #597 + + See merge request libtiff/libtiff!523 + +2023-08-16 Even Rouault + + Merge branch 'tiffcp_remove_i_option' into 'master' + tiffcp: remove -i option (ignore errors) + + See merge request libtiff/libtiff!522 + +2023-08-16 Even Rouault + + Merge branch 'move_tools_to_unsupported_a_archive' into 'master' + Move most TIFF tools to archive and keep some as unsupported (see #580). + + See merge request libtiff/libtiff!520 + +2023-08-16 Su Laus + + Move most TIFF tools to archive and keep some as unsupported (see #580). + +2023-08-12 Su_Laus + + Add static build for CI/CD to run testcases which need private interface functions. + + tiffset fix #597: warning: comparison of integer expressions of different signedness. + + Remove -i option (ignore errors) from tiffcp, because almost all fuzzer issues were consequential errors from ignored errors because of the "-i" option. + +2023-08-11 Even Rouault + + Merge branch 'fix_585_test_write_read_tags_autoconf' into 'master' + Add missing test_write_read_tags.c and test_transferfunction_write_read.c in... + + Closes #585 + + See merge request libtiff/libtiff!519 + +2023-07-24 Even Rouault + + Fix copy paste error. + +2023-07-23 Su_Laus + + Add missing test_write_read_tags.c and test_transferfunction_write_read.c in tarball (fixes #585) and correct „long“ issue. + Don't use "long" because can be int32_t or int64_t, depending on compiler and system. + +2023-07-20 Even Rouault + + Merge branch 'clang-format-tools' into 'master' + Automatically format with clang-format + + See merge request libtiff/libtiff!518 + +2023-07-20 Timothy Lyanguzov + + Automatically format with clang-format. + +2023-07-20 Even Rouault + + Merge branch 'fix_589' into 'master' + TiffConfig.cmake.in: set TIFF_INCLUDE_DIR, TIFF_INCLUDE_DIRS and... + + Closes #589 + + See merge request libtiff/libtiff!514 + +2023-07-20 Even Rouault + + TiffConfig.cmake.in: set TIFF_INCLUDE_DIR, TIFF_INCLUDE_DIRS and... + +2023-07-19 Even Rouault + + Merge branch 'master-patch-6fc6' into 'master' + raw2tiff: fix integer overflow and bypass of the check (fixes #592) + + See merge request libtiff/libtiff!516 + +2023-07-19 Arie Haenel + + raw2tiff: fix integer overflow and bypass of the check (fixes #592) + +2023-07-19 Even Rouault + + Merge branch 'master-patch-05a4' into 'master' + tiffcp: fix memory corruption (overflow) on hostile images (fixes #591) + + See merge request libtiff/libtiff!515 + +2023-07-19 Arie Haenel + + tiffcp: fix memory corruption (overflow) on hostile images (fixes #591) + +2023-07-17 Even Rouault + + Merge branch 'fix-numtrunc' into 'master' + fix numtrunc at tiff_dirread.c + + See merge request libtiff/libtiff!512 + +2023-07-17 headshog + + TIFFReadDirectoryCheckOrder: avoid integer overflow. + When it occurs, it should be harmless in practice though + +2023-07-17 Even Rouault + + Merge branch 'webp_lossless_exact' into 'master' + WebP codec: turn exact mode when creating lossless files to avoid altering... + + See merge request libtiff/libtiff!511 + +2023-07-11 Even Rouault + + WebP codec: turn exact mode when creating lossless files to avoid altering R,G,B values in areas where alpha=0 + Fixes https://github.com/OSGeo/gdal/issues/8038 + +2023-07-05 Even Rouault + + Merge branch 'webp_reg_fix' into 'master' + WebP decoder: fix error when reading a 3-band blob in a RGBA image + + See merge request libtiff/libtiff!510 + +2023-07-05 Even Rouault + + WebP decoder: fix error when reading a 3-band blob in a RGBA image. + Fixes regression of 350ff161c8a61b6483a1e4689e09cd47dd0dd5f9 (master only) + +2023-06-26 Even Rouault + + Merge branch 'appveyor_fix' into 'master' + .appveyor.yml: workaround build error + + See merge request libtiff/libtiff!509 + +2023-06-26 Even Rouault + + .appveyor.yml: workaround build error. + +2023-06-26 Even Rouault + + Merge branch 'tif_webp_warning_fixes' into 'master' + tif_webp.c: fix signed vs unsigned comparison warnings (fix previous commit) + + See merge request libtiff/libtiff!508 + +2023-06-26 Even Rouault + + tif_webp.c: fix signed vs unsigned comparison warnings (fix previous commit) + +2023-06-26 Even Rouault + + Merge branch 'fix_TransferFunction_writing' into 'master' + Fix TransferFunction writing of only two transfer functions. + + See merge request libtiff/libtiff!502 + +2023-06-26 Even Rouault + + Merge branch 'fix_581_582' into 'master' + WebP decoder: validate WebP blob width, height, band count against TIFF parameters + + Closes #582 et #581 + + See merge request libtiff/libtiff!507 + +2023-06-19 Even Rouault + + Merge branch 'warning_cmake_config_file' into 'master' + v4.5.1 release note: add warning about CMake config file being preview + + See merge request libtiff/libtiff!506 + +2023-06-17 Even Rouault + + WebP decoder: validate WebP blob width, height, band count against TIFF parameters + to avoid use of uninitialized variable, or decoding corrupted content + without explicit error + + Fixes #581, fixes #582 + +2023-06-15 Even Rouault + + v4.5.1 release note: add warning about CMake config file being preview. + +2023-06-14 Even Rouault + + Merge branch 'HOWTO-RELEASE-gitlab-release' into 'master' + HOWTO-RELEASE: mention creating a gitlab release + + See merge request libtiff/libtiff!505 + +2023-06-14 Even Rouault + + HOWTO-RELEASE: mention creating a gitlab release. + +2023-06-10 Even Rouault + + Merge branch 'TIFFOpenWExt_O_RDWR' into 'master' + TIFFOpenWExt(): mode r+ in the Windows implementation adjusted to that of Linux + + See merge request libtiff/libtiff!504 + +2023-06-10 Even Rouault + + TIFFOpenWExt(): mode r+ in the Windows implementation adjusted to that of Linux + +2023-06-10 Even Rouault + + Merge branch 'fix_ossfuzz_59751' into 'master' + TIFFReadDirectory(): fix crash when reading tag TIFFTAG_EP_BATTERYLEVEL + + See merge request libtiff/libtiff!503 + +2023-06-10 Even Rouault + + TIFFReadDirectory(): fix crash when reading tag TIFFTAG_EP_BATTERYLEVEL. + Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=59751 + + In 738e0409 (refs #575), we disabled DNG / EP tags, but there was a + special proessing for TIFFTAG_EP_BATTERYLEVEL that must be disabled + since the tag is no longer defined. + +2023-06-09 Su_Laus + + Fix TransferFunction writing of only two transfer functions. The TIFFWriteDirectoryTagTransferfunction() function writes in some cases only two transfer functions, although only exactly one or exactly three transfer functions are allowed. This then leads to an error when reading. --> TIFFReadDirectory: Warning, Incorrect count for "TransferFunction"; tag ignored. + This MR corrects the behaviour of TIFFWriteDirectoryTagTransferfunction() accordingly. Furthermore, a possible buffer overflow is avoided. + +2023-06-09 Even Rouault + + Merge branch 'fix_win_build' into 'master' + Fix Windows build + + Closes #578 + + See merge request libtiff/libtiff!501 + +2023-06-09 Even Rouault + + cmake/PkgConfig.cmake: avoid CMake error when prefix or suffix is empty. + + Add tif_win32_versioninfo.rc and tif_tools_versioninfo.rc to EXTRA_DIST. + +2023-06-09 Even Rouault + + Merge branch 'fix_coverity_build' into 'master' + build/gitlab-ci: fix coverity_build() + + See merge request libtiff/libtiff!499 + +2023-06-09 Even Rouault + + build/gitlab-ci: fix coverity_build() + +2023-06-09 Even Rouault + + Merge branch 'v4.5.1rc1_preparation' into 'master' + Prepare release 4.5.1 + + See merge request libtiff/libtiff!498 + +2023-06-09 Even Rouault + + Prepare for v4.5.1 release. + + Merge remote-tracking branch 'sulaus/Rel_4.5.1_preparation' + +2023-06-09 Even Rouault + + Merge branch 'disable_dng_tags' into 'master' + tif_dirinfo.c: disable DNG 1.2->1.6 tags + + Closes #575 + + See merge request libtiff/libtiff!497 + +2023-06-09 Even Rouault + + Merge branch 'fix_577' into 'master' + CMake related fixes + + Closes #577 + + See merge request libtiff/libtiff!496 + +2023-06-09 Even Rouault + + libtiff v4.5.1 released + +2023-06-09 Even Rouault + + Merge remote-tracking branch 'sulaus/Rel_4.5.1_preparation' + +2023-06-09 Even Rouault + + Merge branch 'disable_dng_tags' into 'master' + tif_dirinfo.c: disable DNG 1.2->1.6 tags + + Closes #575 + + See merge request libtiff/libtiff!497 + +2023-06-09 Even Rouault + + Merge branch 'fix_577' into 'master' + CMake related fixes + + Closes #577 + + See merge request libtiff/libtiff!496 + +2023-06-07 Even Rouault + + tif_dirinfo.c: disable DNG 1.2->1.6 tags. + They were added per b90b20d36d7833f54a1f3014c324f6c21b988006 but it has + been found in https://gitlab.com/libtiff/libtiff/-/issues/575 that it + could cause compatibity issues with libtiff users, so this addition + should be defered for a feature release (likely 4.6.0) and not a patch one. + + Fixes #575 + +2023-06-06 Timothy Lyanguzov + + Apply 1 suggestion(s) to 1 file(s) + +2023-06-05 Even Rouault + + CI: add testing of find_package(Tiff CONFIG) + + CMake: export TiffConfig.cmake and TiffConfigVersion.cmake files. + + libtiff/CMakeLists.txt: fix export of INTERFACE_INCLUDE_DIRECTORIES. + + libtiff/CMakeLists.txt: correctly define TIFF::tiff alias (fixes #577) + +2023-06-05 Even Rouault + + Merge branch 'TIFFField_downgrade_errors_to_warnings' into 'master' + TIFFFieldWithName() and TIFFFieldWithTag() downgrade errors to warnings. + + See merge request libtiff/libtiff!495 + +2023-05-28 Su_Laus + + TIFFFieldWithName() and TIFFFieldWithTag() downgrade errors to warnings. see https://gitlab.com/libtiff/libtiff/-/issues/575#note_1407633888 + +2023-05-25 Even Rouault + + Merge branch 'bebuch-master-patch-58347' into 'master' + check if upstream lzma (xz) config was used and bind to it if so + + See merge request libtiff/libtiff!494 + +2023-05-25 Benjamin Buch + + check if upstream lzma (xz) config was used and bind to it if so. + +2023-05-25 Even Rouault + + Merge branch 'upstream-zstd-config' into 'master' + check if upstream zstd config was used and bind to it if so + + See merge request libtiff/libtiff!493 + +2023-05-25 Even Rouault + + Merge branch 'cmake_FindDeflate_bugs_see_526' into 'master' + CMake: FindDeflate several errors fixed (see #526) + + See merge request libtiff/libtiff!491 + +2023-05-24 Su_Laus + + CMake: FindDeflate several errors (see #526) + There are CMake issues if the library is not included in the environment path and only set with CMake -D option. + - For FindDeflate.cmake, FindJBIG.cmake, FindLERC.cmake, FindWebP.cmake, FindZSTD.cmake: + Set IMPORTED_LOCATION (without debug or release) if neither _LIBRARY_RELEASE nor _LIBRARY_DEBUG were set. + - FindDeflate.cmake: Correct code to retrieve library version information from libdeflate.h + - FindLERC.cmake version string return added. + +2023-05-24 Benjamin Buch + + prefer shared over static. + + check if upstream zstd config was used and bind to it if so. + +2023-05-24 Even Rouault + + Merge branch 'master' into 'master' + make WebP component name compatible with upstream ConfigWebP.cmake + + See merge request libtiff/libtiff!492 + +2023-05-24 Benjamin Buch + + CMake: make WebP component name compatible with upstream ConfigWebP.cmake + +2023-05-18 Su_Laus + + Prepare release 4.5.1 - Update till 18.05.23 after fix_559_DNG_1.6_passcount_error + + Prepare release 4.5.1. + +2023-05-18 Even Rouault + + Merge branch 'fix_559_DNG_1.6_passcount_error' into 'master' + Fix #559 DNG 1.6 passcount assertion + + Closes #574 et #559 + + See merge request libtiff/libtiff!489 + +2023-05-18 Even Rouault + + Merge branch 'fix_557_TagExtender_for_CustomDirectories_not_possible' into 'master' + manpage: TIFFSetTagExtender() cannot add tags to custom directories. Closes #557. + + Closes #557 + + See merge request libtiff/libtiff!490 + +2023-05-18 Even Rouault + + Merge branch 'fix_559_DNG_1.6_passcount_error' into 'master' + Fix #559 DNG 1.6 passcount assertion + + Closes #574 et #559 + + See merge request libtiff/libtiff!489 + +2023-05-18 Even Rouault + + Merge branch 'fix_557_TagExtender_for_CustomDirectories_not_possible' into 'master' + manpage: TIFFSetTagExtender() cannot add tags to custom directories. Closes #557. + + Closes #557 + + See merge request libtiff/libtiff!490 + +2023-05-17 Su_Laus + + Documentation update: TIFFSetTagExtender() cannot add tags to custom directories. + Closes #557. + +2023-05-16 Even Rouault + + Merge branch 'fix_558' into 'master' + Hardcode HOST_FILLORDER to FILLORDER_LSB2MSB, and make 'H' flag of TIFFOpen()... + + See merge request libtiff/libtiff!488 + +2023-05-16 Su_Laus + + Fix #559 DNG 1.6 passcount assertion. + Amend DNG tags definition introduced with MR 482: + - DNG 1.6 tags specified as UTF-8 strings are defined as variable TIFF_BYTE with passcount=TRUE. + - For all tags with TIFF_SETGET_C32_UINT8 the readcount and writecount were corrected to -3 (TIFF_VARIABLE2). + + Testprogram to write and read all tags defined within LibTIFF is introduced. + It also checks for valid passcount flag setting for the defined tags but some special tags are excluded from that check. + + Closes #559. + +2023-05-09 Even Rouault + + Hardcode HOST_FILLORDER to FILLORDER_LSB2MSB, and make 'H' flag of TIFFOpen() to warn and an alias of FILLORDER_MSB2LSB + + tif_lerc.c: use WORDS_BIGENDIAN instead of HOST_BIGENDIAN. + +2023-05-07 Even Rouault + + Merge branch 'fix_484_TIFFDirectory_32_64_bit' into 'master' + Fix 484 TIFFDirectory td_fieldsset uses unsigned long which can be 32 or 64 bits. + + Closes #484 + + See merge request libtiff/libtiff!471 + +2023-05-07 Even Rouault + + Merge branch 'DNG_1.6_EP_tags' into 'master' + Add DNG tags up to version 1.6.0.0 and some TIFF/EP tags and update documentation + + See merge request libtiff/libtiff!482 + +2023-05-07 Even Rouault + + Merge branch 'issue547' into 'master' + do not install libtiff-4.pc when tiff-install is reset + + Closes #547 + + See merge request libtiff/libtiff!481 + +2023-05-06 Even Rouault + + Merge branch 'fix_548' into 'master' + LZWDecode(): avoid crash when trying to read again from a strip whith a... + + Closes #548 + + See merge request libtiff/libtiff!484 + +2023-05-06 Even Rouault + + Merge branch 'tiffcrop_fix_553_multi-image-errors' into 'master' + tiffcrop: fix 553 by considering error return of writeSelections() + + Closes #553 + + See merge request libtiff/libtiff!485 + +2023-05-06 Even Rouault + + Merge branch 'tif_ojpeg_fix-554_FPE' into 'master' + tif_ojpeg.c fix 554 by checking for division by zero + + Closes #554 + + See merge request libtiff/libtiff!486 + +2023-05-06 Su Laus + + tif_ojpeg.c fix 554 by checking for division by zero. + +2023-05-05 Su_Laus + + Consider error return of writeSelections(). Fixes #553. + +2023-04-29 Even Rouault + + LZWDecode(): avoid crash when trying to read again from a strip whith a missing end-of-information marker (fixes #548) + +2023-04-25 Su_Laus + + Add DNG tags up to version 1.6.0.0 and some TIFF/EP tags and update documentation + Amend MR !337 'Add support for DNG tags up to version 1.6.0.0 and some TIFF/EP tags' from Sami Liedes: + - Set most tags to OkToChange=1. + - Define BATTERYLEVEL tag as ASCII and convert values of rational variant to ASCII. + - TIFF documentation updated for tags recognized by LibTiff (DNG 1.6 and others). + - TIFF/EP tags added, which are equivalent to EXIF tags. This addresses part of #418 as well. + - Definition of tags reformatted (clang-format off) for better readability of tag comments in tiff.h and tif_dirinfo.c + +2023-04-23 Roman + + do not install libtiff-4.pc when tiff-install is reset. + +2023-04-21 Even Rouault + + Merge branch 'mymaster1' into 'master' + fix runtime error: applying zero offset to null pointer + + See merge request libtiff/libtiff!479 + +2023-04-21 xiaoxiaoafeifei + + countInkNamesString(): fix `UndefinedBehaviorSanitizer`: applying zero offset to null pointer + +2023-03-26 Even Rouault + + Merge branch 'tif_ovrcache_TIFFSetSubDirectory' into 'master' + tif_ovrcache.c: check TIFFSetSubDirectory() return value (CID 1524573) + + See merge request libtiff/libtiff!478 + +2023-03-26 Even Rouault + + tif_ovrcache.c: check TIFFSetSubDirectory() return value (CID 1524573) + +2023-03-26 Even Rouault + + Merge branch 'even_faster_setdirectory_with_IFDlist' into 'master' + Even faster TIFFSetDirectory() using IFD list. + + See merge request libtiff/libtiff!477 + +2023-03-26 Su Laus + + Even faster TIFFSetDirectory() using IFD list. + +2023-03-12 Even Rouault + + Merge branch 'faster-setdirectory_newMR' into 'master' + Optimize relative seeking with TIFFSetDirectory + + See merge request libtiff/libtiff!474 + +2023-03-12 Su Laus + + Optimize relative seeking with TIFFSetDirectory. + +2023-03-11 Even Rouault + + Merge branch 'master' into 'master' + Fix memory leak in tiffcrop.c + + See merge request libtiff/libtiff!475 + +2023-03-08 zhailiangliang + + Fix memory leak in tiffcrop.c. + +2023-02-23 Even Rouault + + Merge branch 'skip-thumbnail-test' into 'master' + test: avoid running tool tests if not built + + Closes #421 + + See merge request libtiff/libtiff!334 + +2023-02-22 Sam James + + test (cmake): skip script tests if tools aren't built. + In Gentoo, we avoid building the tools for multilib (32-bit, x86) builds on + amd64/x86_64 because we only need the library to keep binary applications working. + + This causes a test failure in e.g. tiffcp-thumbnail.sh as the 'thumbnail' + binary isn't built. Skip it if unavailable. + + Fixes: https://gitlab.com/libtiff/libtiff/-/issues/421 + +2023-02-22 Sam James + + test (autotools): skip script tests if tools aren't built. + In Gentoo, we avoid building the tools for multilib (32-bit, x86) builds on + amd64/x86_64 because we only need the library to keep binary applications working. + + This causes a test failure in e.g. tiffcp-thumbnail.sh as the 'thumbnail' + binary isn't built. Skip it if unavailable. + + Fixes: https://gitlab.com/libtiff/libtiff/-/issues/421 + +2023-02-16 Even Rouault + + Merge branch 'fix_Unlink_first_directory_0' into 'master' + Fix TIFFUnlinkDirectory(0) case and unlink of first directory. + + See merge request libtiff/libtiff!460 + +2023-02-16 Even Rouault + + Merge branch 'tif_luv_check_NaN_fix_#530' into 'master' + tif_luv: Check and correct for NaN data in uv_encode(). + + Closes #530 + + See merge request libtiff/libtiff!473 + +2023-02-16 Su_Laus + + tif_luv: Check and correct for NaN data in uv_encode(). + Closes #530 + + See merge request !473 + +2023-02-14 Even Rouault + + Merge branch 'tiffcrop_dont_reuse_input_buffer_fix_527' into 'master' + tiffcrop: Do not reuse input buffer for subsequent images. Fix issue 527 + + Closes #527 + + See merge request libtiff/libtiff!472 + +2023-02-14 Su_Laus + + tiffcrop: Do not reuse input buffer for subsequent images. Fix issue 527 + Reuse of read_buff within loadImage() from previous image is quite unsafe, because other functions (like rotateImage() etc.) reallocate that buffer with different size without updating the local prev_readsize value. + + Closes #527 + +2023-02-08 Su_Laus + + Fix 484 TIFFDirectory td_fieldsset uses unsigned long which can be 32 or 64 bits. + Closes #484 + +2023-02-08 Even Rouault + + Merge branch 'test_ifd_loop_detection_fix_CoverityScan_ln_55' into 'master' + test_ifd_loop_detection: fix Coverity Scan issue CID 1520750: Null pointer... + + See merge request libtiff/libtiff!470 + +2023-02-08 Su_Laus + + test_ifd_loop_detection: fix Coverity Scan issue CID 1520750: Null pointer dereferences (NULL_RETURNS) line 55. + +2023-02-06 Even Rouault + + Merge branch 'tiffcrop_fix_CoverityScan_line_9676' into 'master' + Fix Coverity Scan issue CID 1520761: Integer handling issues... + + See merge request libtiff/libtiff!469 + +2023-02-06 Su_Laus + + Fix Coverity Scan issue CID 1520761: Integer handling issues (OVERFLOW_BEFORE_WIDEN) tiffcrop.c: 9676 in rotateImage() + +2023-02-05 Even Rouault + + Merge branch 'tiffcrop_R270_fix#492' into 'master' + tiffcrop: Amend rotateImage() not to toggle the input (main) image width and... + + Closes #519, #518, #499, #495, #494, #493 et #492 + + See merge request libtiff/libtiff!465 + +2023-02-05 Su_Laus + + tiffcrop: Amend rotateImage() not to toggle the input (main) image width and length parameters when only cropped image sections are rotated. Remove buffptr from region structure because never used. + Closes #492 #493 #494 #495 #499 #518 #519 + +2023-02-05 Even Rouault + + Merge branch 'tiffcrop_correctly_update_buffersize_after_rotate_fix#520' into 'master' + tiffcrop correctly update buffersize after rotateImage() fix#520 + + Closes #520 + + See merge request libtiff/libtiff!467 + +2023-02-05 Even Rouault + + Merge branch 'tiffcrop_composite_image_assumption_test_fix#496' into 'master' + tiffcrop: added check for assumption on composite images (fixes #496) + + Closes #501, #500, #498, #497 et #496 + + See merge request libtiff/libtiff!466 + +2023-02-05 Su Laus + + tiffcrop: added check for assumption on composite images (fixes #496) + tiffcrop: For composite images with more than one region, the combined_length or combined_width always needs to be equal, respectively. Otherwise, even the first section/region copy action might cause buffer overrun. This is now checked before the first copy action. + + Closes #496, #497, #498, #500, #501. + +2023-02-04 Su_Laus + + tiffcrop correctly update buffersize after rotateImage() fix#520 -- enlarge buffsize and check integer overflow within rotateImage(). + +2023-02-04 Even Rouault + + Merge branch 'test_subidf_loop' into 'master' + test_ifd_loop_detection: Added test to check loops in SubIFDs that are chained. + + See merge request libtiff/libtiff!464 + +2023-02-04 Su Laus + + test_ifd_loop_detection: Added test to check loops in SubIFDs that are chained. + +2023-02-04 Su_Laus + + Fix TIFFUnlinkDirectory(0) case and unlink of first directory. + If directory number 0 is unlinked, then the base offset variables within LibTiff are not updated. As a result, a subsequent TIFFSetDirectory() first goes to the unlinked former directory number 0. + + In addition, the error case for dirn=0 is handled. + + This MR fixes that by updating the base offset variables tif->tif_header.classic.tiff_diroff and tif->tif_header.big.tiff_diroff. + +2023-02-03 Even Rouault + + Merge branch 'TiffClose_NULL_ptr_dereferencing_fix_515' into 'master' + TIFFClose() avoid NULL pointer dereferencing. fix#515 + + Closes #515 + + See merge request libtiff/libtiff!468 + +2023-02-03 Su_Laus + + TIFFClose() avoid NULL pointer dereferencing. fix#515. + Closes #515 + + tiffcrop correctly update buffersize after rotateImage() fix#520 rotateImage() set up a new buffer and calculates its size individually. Therefore, seg_buffs[] size needs to be updated accordingly. Before this fix, the seg_buffs buffer size was calculated with a different formula than within rotateImage(). + Closes #520. + +2023-01-25 Even Rouault + + Merge branch 'add_windows_DLL_versioninfo' into 'master' + Add versioninfo resource files for DLL and tools compiled with Windows MSVC and MINGW. + + See merge request libtiff/libtiff!455 + +2023-01-25 Su Laus + + Add versioninfo resource files for DLL and tools compiled with Windows MSVC and MINGW. + +2023-01-22 Even Rouault + + Merge branch 'tif_hash_set_order_include' into 'master' + tif_hash_set.c: include tif_hash_set.h after tif_config.h to let a chance for... + + See merge request libtiff/libtiff!462 + +2023-01-22 Even Rouault + + tif_hash_set.c: include tif_hash_set.h after tif_config.h to let a chance for GDAL symbol renaming trick + +2023-01-22 Even Rouault + + Merge branch 'fix_513' into 'master' + Fax3: fix failure to decode some fax3 images (fixes #513) + + Closes #513 + + See merge request libtiff/libtiff!461 + +2023-01-21 Even Rouault + + Add test for Fax3 decoding issues (refs #513) + +2023-01-21 Even Rouault + + Merge branch 'tiffcrop_fix_#488' into 'master' + tiffcrop: Correct simple copy paste error. Fix #488. + + Closes #488 + + See merge request libtiff/libtiff!459 + +2023-01-21 Su Laus + + tiffcrop: Correct simple copy paste error. Fix #488. + +2023-01-21 Even Rouault + + Fax3: fix failure to decode some fax3 images (fixes #513) + Patch by @jsummers26 + +2023-01-12 Even Rouault + + Merge branch 'tiffmedian_fix_#477' into 'master' + tiffmedian: avoid zero num_colors, fixes #477 + + Closes #477 + + See merge request libtiff/libtiff!458 + +2023-01-12 Even Rouault + + Merge branch 'fax2ps_fixes_#475' into 'master' + fax2ps: fixes #475 buffer overflow in qsort function pcompar. + + Closes #475 + + See merge request libtiff/libtiff!457 + +2023-01-12 Su_Laus + + tiffmedian: avoid zero num_colors, fixes #477. + + fax2ps: fixes #475 buffer overflow in qsort function pcompar. + +2023-01-09 Even Rouault + + Merge branch 'fix_241_tiffset_file_size_limit' into 'master' + tiffset: get filesize to allocate only the required memory. Fixes issue #241 + + Closes #241 + + See merge request libtiff/libtiff!451 + +2023-01-09 Su Laus + + tiffset: get filesize to allocate only the required memory. Fixes issue #241 + +2023-01-09 Even Rouault + + Merge branch '_TIFFCleanupIFDOffsetAndNumberMaps' into 'master' + Add _TIFFCleanupIFDOffsetAndNumberMaps() and call it from TIFFUnlinkDirectory() + + See merge request libtiff/libtiff!454 + +2023-01-06 Even Rouault + + Remove use of tif_dirnumber. + + TIFFSetSubDirectory(): call _TIFFCleanupIFDOffsetAndNumberMaps() + + struct tiff: remove unused tif_dirlistoff. + + TIFFUnlinkDirectory(): reset tif_dirnumber. + + Add _TIFFCleanupIFDOffsetAndNumberMaps() and call it from TIFFUnlinkDirectory() + +2022-12-29 Even Rouault + + Merge branch 'cmake_in_files_formatting_sensitive' into 'master' + Disable clang-formatting for tif_config.h.cmake.in and tiffconf.h.cmake.in... + + See merge request libtiff/libtiff!452 + +2022-12-28 Su_Laus + + Disable clang-formatting for tif_config.h.cmake.in and tiffconf.h.cmake.in because sensitive for CMake scripts. - explanation added + +2022-12-26 Su_Laus + + Disable clang-formatting for tif_config.h.cmake.in and tiffconf.h.cmake.in because sensitive for CMake scripts. + +2022-12-19 Even Rouault + + Merge branch 'manpage_multi-page-TIFF' into 'master' + manpage: Add multi page TIFF and SubIFDs description and read / write example. + + See merge request libtiff/libtiff!450 + +2022-12-19 Su Laus + + manpage: Add multi page TIFF and SubIFDs description and read / write example. + +2022-12-18 Even Rouault + + Merge branch 'TIFFOpen_r+_windows_behaviour' into 'master' + Behavior of TIFFOpen() mode "r+" in the Windows implementation adjusted to that of Linux. + + See merge request libtiff/libtiff!449 + +2022-12-16 Su_Laus + + Behavior of TIFFOpen() mode "r+" in the Windows implementation adjusted to that of Linux. + +2022-12-15 Even Rouault + + Merge branch 'ossfuzz_54343' into 'master' + TIFFSetDirectory: avoid harmless unsigned-integer-overflow + + See merge request libtiff/libtiff!447 + +2022-12-15 Even Rouault + + TIFFSetDirectory: avoid harmless unsigned-integer-overflow. + Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=54343 + +2022-12-14 Even Rouault + + Merge branch 'ossfuzz_54311' into 'master' + TIFFWriteDirectorySec(): avoid harmless unsigned-integer-overflow + + See merge request libtiff/libtiff!446 + +2022-12-14 Even Rouault + + TIFFWriteDirectorySec(): avoid harmless unsigned-integer-overflow. + Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=54311 + 2022-12-14 Even Rouault libtiff v4.5.0rc2 preparation diff --git a/qtimageformats/src/3rdparty/libtiff/RELEASE-DATE b/qtimageformats/src/3rdparty/libtiff/RELEASE-DATE index 349ad3e..68d9434 100644 --- a/qtimageformats/src/3rdparty/libtiff/RELEASE-DATE +++ b/qtimageformats/src/3rdparty/libtiff/RELEASE-DATE @@ -1 +1 @@ -20221213 +20230908 diff --git a/qtimageformats/src/3rdparty/libtiff/VERSION b/qtimageformats/src/3rdparty/libtiff/VERSION index a84947d..6016e8a 100644 --- a/qtimageformats/src/3rdparty/libtiff/VERSION +++ b/qtimageformats/src/3rdparty/libtiff/VERSION @@ -1 +1 @@ -4.5.0 +4.6.0 diff --git a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_close.c b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_close.c index 06aa29f..907d7f1 100644 --- a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_close.c +++ b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_close.c @@ -51,8 +51,7 @@ void TIFFCleanup(TIFF *tif) (*tif->tif_cleanup)(tif); TIFFFreeDirectory(tif); - TIFFHashSetDestroy(tif->tif_map_dir_offset_to_number); - TIFFHashSetDestroy(tif->tif_map_dir_number_to_offset); + _TIFFCleanupIFDOffsetAndNumberMaps(tif); /* * Clean up client info links. @@ -114,6 +113,24 @@ void TIFFCleanup(TIFF *tif) _TIFFfreeExt(NULL, tif); } +/************************************************************************/ +/* _TIFFCleanupIFDOffsetAndNumberMaps() */ +/************************************************************************/ + +void _TIFFCleanupIFDOffsetAndNumberMaps(TIFF *tif) +{ + if (tif->tif_map_dir_offset_to_number) + { + TIFFHashSetDestroy(tif->tif_map_dir_offset_to_number); + tif->tif_map_dir_offset_to_number = NULL; + } + if (tif->tif_map_dir_number_to_offset) + { + TIFFHashSetDestroy(tif->tif_map_dir_number_to_offset); + tif->tif_map_dir_number_to_offset = NULL; + } +} + /************************************************************************/ /* TIFFClose() */ /************************************************************************/ @@ -130,9 +147,12 @@ void TIFFCleanup(TIFF *tif) void TIFFClose(TIFF *tif) { - TIFFCloseProc closeproc = tif->tif_closeproc; - thandle_t fd = tif->tif_clientdata; + if (tif != NULL) + { + TIFFCloseProc closeproc = tif->tif_closeproc; + thandle_t fd = tif->tif_clientdata; - TIFFCleanup(tif); - (void)(*closeproc)(fd); + TIFFCleanup(tif); + (void)(*closeproc)(fd); + } } diff --git a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_config.h b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_config.h index 78f6669..7922155 100644 --- a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_config.h +++ b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_config.h @@ -4,10 +4,6 @@ #include "tiffconf.h" -#if defined(Q_OS_WINCE) -#include -#endif - #if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) #define _CRT_SECURE_NO_WARNINGS #endif @@ -36,9 +32,7 @@ #define HAVE_DECL_OPTARG 0 /* Define to 1 if you have the header file. */ -#if !defined(Q_OS_WINCE) #define HAVE_FCNTL_H 1 -#endif /* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ /* #undef HAVE_FSEEKO */ @@ -46,18 +40,6 @@ /* Define to 1 if you have the `getopt' function. */ /* #undef HAVE_GETOPT */ -/* Define to 1 if you have the header file. */ -/* #undef HAVE_GLUT_GLUT_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_GL_GLUT_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_GL_GLU_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_GL_GL_H */ - /* Define to 1 if you have the header file. */ /* #undef HAVE_IO_H */ @@ -67,12 +49,6 @@ /* Define to 1 if you have the `mmap' function. */ /* #undef HAVE_MMAP */ -/* Define to 1 if you have the header file. */ -/* #undef HAVE_OPENGL_GLU_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_OPENGL_GL_H */ - /* Define to 1 if you have the `setmode' function. */ /* #undef HAVE_SETMODE */ @@ -111,18 +87,12 @@ /* Define to the full name of this package. */ /* #undef PACKAGE_NAME */ -/* Define to the full name and version of this package. */ -/* #undef PACKAGE_STRING */ - /* Define to the one symbol short name of this package. */ /* #undef PACKAGE_TARNAME */ /* Define to the home page for this package. */ /* #undef PACKAGE_URL */ -/* Define to the version of this package. */ -/* #undef PACKAGE_VERSION */ - /* The size of `size_t', as computed by sizeof. */ #if SIZE_MAX == 0xffffffff #define SIZEOF_SIZE_T 4 @@ -139,9 +109,6 @@ /* define to use win32 IO system */ /* #undef USE_WIN32_FILEIO */ -/* Version number of package */ -#define VERSION "4.5.0" - /* Support webp compression */ /* #undef WEBP_SUPPORT */ diff --git a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_config.h.cmake.in b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_config.h.cmake.in index 570e4e1..62a4c73 100644 --- a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_config.h.cmake.in +++ b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_config.h.cmake.in @@ -1,3 +1,9 @@ +/* clang-format off */ +/* clang-format disabled because CMake scripts are very sensitive to the + * formatting of this file. configure_file variables of type "@VAR@" are + * modified by clang-format and won't be substituted. + */ + /* libtiff/tif_config.h.cmake.in. Not generated, but originated from autoheader. */ /* This file must be kept up-to-date with needed substitutions from libtiff/tif_config.h.in. */ @@ -34,18 +40,6 @@ /* Define to 1 if you have the `getopt' function. */ #cmakedefine HAVE_GETOPT 1 -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_GLUT_GLUT_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_GL_GLUT_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_GL_GLU_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_GL_GL_H 1 - /* Define to 1 if you have the header file. */ #cmakedefine HAVE_IO_H 1 @@ -55,12 +49,6 @@ /* Define to 1 if you have the `mmap' function. */ #cmakedefine HAVE_MMAP 1 -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_OPENGL_GLU_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_OPENGL_GL_H 1 - /* Define to 1 if you have the `setmode' function. */ #cmakedefine HAVE_SETMODE 1 @@ -94,23 +82,17 @@ /* Define to the full name of this package. */ #define PACKAGE_NAME "@PACKAGE_NAME@" -/* Define to the full name and version of this package. */ -#define PACKAGE_STRING "@PACKAGE_STRING@" - /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "@PACKAGE_TARNAME@" /* Define to the home page for this package. */ #define PACKAGE_URL "@PACKAGE_URL@" -/* Define to the version of this package. */ -#define PACKAGE_VERSION "@PACKAGE_VERSION@" - /* Size of size_t */ #define SIZEOF_SIZE_T @SIZEOF_SIZE_T@ /* Default size of the strip in bytes (when strip chopping enabled) */ -#define STRIP_SIZE_DEFAULT @STRIP_SIZE_DEFAULT@ +#cmakedefine STRIP_SIZE_DEFAULT @STRIP_SIZE_DEFAULT@ /** Maximum number of TIFF IFDs that libtiff can iterate through in a file. */ #define TIFF_MAX_DIR_COUNT @TIFF_MAX_DIR_COUNT@ @@ -118,9 +100,6 @@ /* define to use win32 IO system */ #cmakedefine USE_WIN32_FILEIO 1 -/* Version number of package */ -#define VERSION "@PACKAGE_VERSION@" - /* Support WEBP compression */ #cmakedefine WEBP_SUPPORT 1 @@ -156,3 +135,5 @@ #else # error "Unsupported size_t size; please submit a bug report" #endif + +/* clang-format on */ diff --git a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_config.h.in b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_config.h.in index 8fb78c3..28da641 100644 --- a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_config.h.in +++ b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_config.h.in @@ -1,3 +1,9 @@ +/* clang-format off */ +/* clang-format disabled because CMake scripts are very sensitive to the + * formatting of this file. configure_file variables of type "@VAR@" are + * modified by clang-format and won't be substituted. + */ + /* libtiff/tif_config.h.in. Not generated, but originated from autoheader. */ #include "tiffconf.h" @@ -34,18 +40,6 @@ /* Define to 1 if you have the `getopt' function. */ #undef HAVE_GETOPT -/* Define to 1 if you have the header file. */ -#undef HAVE_GLUT_GLUT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_GL_GLUT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_GL_GLU_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_GL_GL_H - /* Define to 1 if you have the header file. */ #undef HAVE_IO_H @@ -55,12 +49,6 @@ /* Define to 1 if you have the `mmap' function. */ #undef HAVE_MMAP -/* Define to 1 if you have the header file. */ -#undef HAVE_OPENGL_GLU_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_OPENGL_GL_H - /* Define to 1 if you have the `setmode' function. */ #undef HAVE_SETMODE @@ -97,18 +85,12 @@ /* Define to the full name of this package. */ #undef PACKAGE_NAME -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - /* The size of `size_t', as computed by sizeof. */ #undef SIZEOF_SIZE_T @@ -121,9 +103,6 @@ /* define to use win32 IO system */ #undef USE_WIN32_FILEIO -/* Version number of package */ -#undef VERSION - /* Support webp compression */ #undef WEBP_SUPPORT @@ -172,3 +151,5 @@ #else # error "Unsupported size_t size; please submit a bug report" #endif + +/* clang-format on */ diff --git a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_dir.c b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_dir.c index 4a36654..8500621 100644 --- a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_dir.c +++ b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_dir.c @@ -192,11 +192,11 @@ static int setExtraSamples(TIFF *tif, va_list ap, uint32_t *v) static uint16_t countInkNamesString(TIFF *tif, uint32_t slen, const char *s) { uint16_t i = 0; - const char *ep = s + slen; - const char *cp = s; if (slen > 0) { + const char *ep = s + slen; + const char *cp = s; do { for (; cp < ep && *cp != '\0'; cp++) @@ -1621,7 +1621,7 @@ void TIFFFreeDirectory(TIFF *tif) TIFFDirectory *td = &tif->tif_dir; int i; - _TIFFmemset(td->td_fieldsset, 0, FIELD_SETLONGS); + _TIFFmemset(td->td_fieldsset, 0, sizeof(td->td_fieldsset)); CleanupField(td_sminsamplevalue); CleanupField(td_smaxsamplevalue); CleanupField(td_colormap[0]); @@ -1702,6 +1702,12 @@ int TIFFCreateCustomDirectory(TIFF *tif, const TIFFFieldArray *infoarray) tif->tif_curoff = 0; tif->tif_row = (uint32_t)-1; tif->tif_curstrip = (uint32_t)-1; + /* invalidate directory index */ + tif->tif_curdir = TIFF_NON_EXISTENT_DIR_NUMBER; + /* invalidate IFD loop lists */ + _TIFFCleanupIFDOffsetAndNumberMaps(tif); + /* To be able to return from SubIFD or custom-IFD to main-IFD */ + tif->tif_setdirectory_force_absolute = TRUE; return 0; } @@ -2022,29 +2028,78 @@ tdir_t TIFFNumberOfDirectories(TIFF *tif) int TIFFSetDirectory(TIFF *tif, tdir_t dirn) { uint64_t nextdiroff; - tdir_t nextdirnum; + tdir_t nextdirnum = 0; tdir_t n; - if (!(tif->tif_flags & TIFF_BIGTIFF)) - nextdiroff = tif->tif_header.classic.tiff_diroff; + if (tif->tif_setdirectory_force_absolute) + { + /* tif_setdirectory_force_absolute=1 will force parsing the main IFD + * chain from the beginning, thus IFD directory list needs to be cleared + * from possible SubIFD offsets. + */ + _TIFFCleanupIFDOffsetAndNumberMaps(tif); /* invalidate IFD loop lists */ + } + + /* Even faster path, if offset is available within IFD loop hash list. */ + if (!tif->tif_setdirectory_force_absolute && + _TIFFGetOffsetFromDirNumber(tif, dirn, &nextdiroff)) + { + /* Set parameters for following TIFFReadDirectory() below. */ + tif->tif_nextdiroff = nextdiroff; + tif->tif_curdir = dirn; + /* Reset to relative stepping */ + tif->tif_setdirectory_force_absolute = FALSE; + } else - nextdiroff = tif->tif_header.big.tiff_diroff; - nextdirnum = 0; - for (n = dirn; n > 0 && nextdiroff != 0; n--) - if (!TIFFAdvanceDirectory(tif, &nextdiroff, NULL, &nextdirnum)) + { + + /* Fast path when we just advance relative to the current directory: + * start at the current dir offset and continue to seek from there. + * Check special cases when relative is not allowed: + * - jump back from SubIFD or custom directory + * - right after TIFFWriteDirectory() jump back to that directory + * using TIFFSetDirectory() */ + const int relative = (dirn >= tif->tif_curdir) && + (tif->tif_diroff != 0) && + !tif->tif_setdirectory_force_absolute; + + if (relative) + { + nextdiroff = tif->tif_diroff; + dirn -= tif->tif_curdir; + nextdirnum = tif->tif_curdir; + } + else if (!(tif->tif_flags & TIFF_BIGTIFF)) + nextdiroff = tif->tif_header.classic.tiff_diroff; + else + nextdiroff = tif->tif_header.big.tiff_diroff; + + /* Reset to relative stepping */ + tif->tif_setdirectory_force_absolute = FALSE; + + for (n = dirn; n > 0 && nextdiroff != 0; n--) + if (!TIFFAdvanceDirectory(tif, &nextdiroff, NULL, &nextdirnum)) + return (0); + /* If the n-th directory could not be reached (does not exist), + * return here without touching anything further. */ + if (nextdiroff == 0 || n > 0) return (0); - /* If the n-th directory could not be reached (does not exist), - * return here without touching anything further. */ - if (nextdiroff == 0 || n > 0) - return (0); - tif->tif_nextdiroff = nextdiroff; - /* - * Set curdir to the actual directory index. The - * -1 is because TIFFReadDirectory will increment - * tif_curdir after successfully reading the directory. - */ - tif->tif_curdir = (dirn - n) - 1; + tif->tif_nextdiroff = nextdiroff; + + /* Set curdir to the actual directory index. */ + if (relative) + tif->tif_curdir += dirn - n; + else + tif->tif_curdir = dirn - n; + } + + /* The -1 decrement is because TIFFReadDirectory will increment + * tif_curdir after successfully reading the directory. */ + if (tif->tif_curdir == 0) + tif->tif_curdir = TIFF_NON_EXISTENT_DIR_NUMBER; + else + tif->tif_curdir--; return (TIFFReadDirectory(tif)); } @@ -2088,8 +2143,8 @@ int TIFFSetSubDirectory(TIFF *tif, uint64_t diroff) tif->tif_nextdiroff = diroff; retval = TIFFReadDirectory(tif); /* If failed, curdir was not incremented in TIFFReadDirectory(), so set it - * back. */ - if (!retval) + * back, but leave it for diroff==0. */ + if (!retval && diroff != 0) { if (tif->tif_curdir == TIFF_NON_EXISTENT_DIR_NUMBER) tif->tif_curdir = 0; @@ -2100,10 +2155,12 @@ int TIFFSetSubDirectory(TIFF *tif, uint64_t diroff) { /* Reset IFD list to start new one for SubIFD chain and also start * SubIFD chain with tif_curdir=0. */ - tif->tif_dirnumber = 0; + _TIFFCleanupIFDOffsetAndNumberMaps(tif); /* invalidate IFD loop lists */ tif->tif_curdir = 0; /* first directory of new chain */ /* add this offset to new IFD list */ _TIFFCheckDirNumberAndOffset(tif, tif->tif_curdir, diroff); + /* To be able to return from SubIFD or custom-IFD to main-IFD */ + tif->tif_setdirectory_force_absolute = TRUE; } return (retval); } @@ -2139,6 +2196,13 @@ int TIFFUnlinkDirectory(TIFF *tif, tdir_t dirn) "Can not unlink directory in read-only file"); return (0); } + if (dirn == 0) + { + TIFFErrorExtR(tif, module, + "For TIFFUnlinkDirectory() first directory starts with " + "number 1 and not 0"); + return (0); + } /* * Go to the directory before the one we want * to unlink and nab the offset of the link @@ -2201,6 +2265,17 @@ int TIFFUnlinkDirectory(TIFF *tif, tdir_t dirn) return (0); } } + + /* For dirn=1 (first directory) also update the libtiff internal + * base offset variables. */ + if (dirn == 1) + { + if (!(tif->tif_flags & TIFF_BIGTIFF)) + tif->tif_header.classic.tiff_diroff = (uint32_t)nextdir; + else + tif->tif_header.big.tiff_diroff = nextdir; + } + /* * Leave directory state setup safely. We don't have * facilities for doing inserting and removing directories, @@ -2227,5 +2302,7 @@ int TIFFUnlinkDirectory(TIFF *tif, tdir_t dirn) tif->tif_curoff = 0; tif->tif_row = (uint32_t)-1; tif->tif_curstrip = (uint32_t)-1; + tif->tif_curdir = TIFF_NON_EXISTENT_DIR_NUMBER; + _TIFFCleanupIFDOffsetAndNumberMaps(tif); /* invalidate IFD loop lists */ return (1); } diff --git a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_dir.h b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_dir.h index fad1eb0..9eaf22f 100644 --- a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_dir.h +++ b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_dir.h @@ -70,9 +70,9 @@ typedef struct */ typedef struct { -#define FIELD_SETLONGS 4 +#define FIELDSET_ITEMS 4 /* bit vector of fields that are set */ - unsigned long td_fieldsset[FIELD_SETLONGS]; + uint32_t td_fieldsset[FIELDSET_ITEMS]; uint32_t td_imagewidth, td_imagelength, td_imagedepth; uint32_t td_tilewidth, td_tilelength, td_tiledepth; @@ -202,9 +202,9 @@ typedef struct */ #define FIELD_PSEUDO 0 -#define FIELD_LAST (32 * FIELD_SETLONGS - 1) +#define FIELD_LAST (32 * FIELDSET_ITEMS - 1) -#define BITn(n) (((unsigned long)1L) << ((n)&0x1f)) +#define BITn(n) (((uint32_t)1L) << ((n)&0x1f)) #define BITFIELDn(tif, n) ((tif)->tif_dir.td_fieldsset[(n) / 32]) #define TIFFFieldSet(tif, field) (BITFIELDn(tif, field) & BITn(field)) #define TIFFSetFieldBit(tif, field) (BITFIELDn(tif, field) |= BITn(field)) @@ -329,6 +329,10 @@ extern "C" uint64_t diroff); extern int _TIFFGetDirNumberFromOffset(TIFF *tif, uint64_t diroff, tdir_t *dirn); + extern int _TIFFGetOffsetFromDirNumber(TIFF *tif, tdir_t dirn, + uint64_t *diroff); + extern int _TIFFRemoveEntryFromDirectoryListByOffset(TIFF *tif, + uint64_t diroff); #if defined(__cplusplus) } diff --git a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_dirinfo.c b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_dirinfo.c index 6a15c76..0e705e8 100644 --- a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_dirinfo.c +++ b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_dirinfo.c @@ -63,351 +63,283 @@ static const TIFFFieldArray gpsFieldArray; * */ +/* clang-format off */ /* for better readability of tag comments */ static const TIFFField tiffFields[] = { - {TIFFTAG_SUBFILETYPE, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_SUBFILETYPE, 1, 0, "SubfileType", NULL}, - {TIFFTAG_OSUBFILETYPE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, - TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 1, 0, "OldSubfileType", NULL}, - {TIFFTAG_IMAGEWIDTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_IMAGEDIMENSIONS, 0, 0, "ImageWidth", NULL}, - {TIFFTAG_IMAGELENGTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_IMAGEDIMENSIONS, 1, 0, "ImageLength", NULL}, - {TIFFTAG_BITSPERSAMPLE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_BITSPERSAMPLE, 0, 0, "BitsPerSample", NULL}, - {TIFFTAG_COMPRESSION, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_COMPRESSION, 0, 0, "Compression", NULL}, - {TIFFTAG_PHOTOMETRIC, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_PHOTOMETRIC, 0, 0, - "PhotometricInterpretation", NULL}, - {TIFFTAG_THRESHHOLDING, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_THRESHHOLDING, 1, 0, "Threshholding", NULL}, - {TIFFTAG_CELLWIDTH, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CellWidth", NULL}, - {TIFFTAG_CELLLENGTH, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CellLength", NULL}, - {TIFFTAG_FILLORDER, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_FILLORDER, 0, 0, "FillOrder", NULL}, - {TIFFTAG_DOCUMENTNAME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DocumentName", NULL}, - {TIFFTAG_IMAGEDESCRIPTION, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ImageDescription", NULL}, - {TIFFTAG_MAKE, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Make", NULL}, - {TIFFTAG_MODEL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Model", NULL}, - {TIFFTAG_STRIPOFFSETS, -1, -1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, - TIFF_SETGET_UNDEFINED, FIELD_STRIPOFFSETS, 0, 0, "StripOffsets", NULL}, - {TIFFTAG_ORIENTATION, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_ORIENTATION, 0, 0, "Orientation", NULL}, - {TIFFTAG_SAMPLESPERPIXEL, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_SAMPLESPERPIXEL, 0, 0, "SamplesPerPixel", - NULL}, - {TIFFTAG_ROWSPERSTRIP, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_ROWSPERSTRIP, 0, 0, "RowsPerStrip", NULL}, - {TIFFTAG_STRIPBYTECOUNTS, -1, -1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, - TIFF_SETGET_UNDEFINED, FIELD_STRIPBYTECOUNTS, 0, 0, "StripByteCounts", - NULL}, - {TIFFTAG_MINSAMPLEVALUE, -2, -1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_MINSAMPLEVALUE, 1, 0, "MinSampleValue", NULL}, - {TIFFTAG_MAXSAMPLEVALUE, -2, -1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_MAXSAMPLEVALUE, 1, 0, "MaxSampleValue", NULL}, - {TIFFTAG_XRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_RESOLUTION, 1, 0, "XResolution", NULL}, - {TIFFTAG_YRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_RESOLUTION, 1, 0, "YResolution", NULL}, - {TIFFTAG_PLANARCONFIG, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_PLANARCONFIG, 0, 0, "PlanarConfiguration", - NULL}, - {TIFFTAG_PAGENAME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "PageName", NULL}, - {TIFFTAG_XPOSITION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_POSITION, 1, 0, "XPosition", NULL}, - {TIFFTAG_YPOSITION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_POSITION, 1, 0, "YPosition", NULL}, - {TIFFTAG_FREEOFFSETS, -1, -1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, - TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 0, 0, "FreeOffsets", NULL}, - {TIFFTAG_FREEBYTECOUNTS, -1, -1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, - TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 0, 0, "FreeByteCounts", NULL}, - {TIFFTAG_GRAYRESPONSEUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, - TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 1, 0, "GrayResponseUnit", NULL}, - {TIFFTAG_GRAYRESPONSECURVE, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, - TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 1, 0, "GrayResponseCurve", NULL}, - {TIFFTAG_RESOLUTIONUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_RESOLUTIONUNIT, 1, 0, "ResolutionUnit", NULL}, - {TIFFTAG_PAGENUMBER, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_UINT16_PAIR, - TIFF_SETGET_UNDEFINED, FIELD_PAGENUMBER, 1, 0, "PageNumber", NULL}, - {TIFFTAG_COLORRESPONSEUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, - TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 1, 0, "ColorResponseUnit", NULL}, - {TIFFTAG_TRANSFERFUNCTION, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_OTHER, - TIFF_SETGET_UNDEFINED, FIELD_TRANSFERFUNCTION, 1, 0, "TransferFunction", - NULL}, - {TIFFTAG_SOFTWARE, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Software", NULL}, - {TIFFTAG_DATETIME, 20, 20, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DateTime", NULL}, - {TIFFTAG_ARTIST, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Artist", NULL}, - {TIFFTAG_HOSTCOMPUTER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "HostComputer", NULL}, - {TIFFTAG_WHITEPOINT, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "WhitePoint", NULL}, - {TIFFTAG_PRIMARYCHROMATICITIES, 6, 6, TIFF_RATIONAL, 0, - TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, - "PrimaryChromaticities", NULL}, - {TIFFTAG_COLORMAP, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_OTHER, - TIFF_SETGET_UNDEFINED, FIELD_COLORMAP, 1, 0, "ColorMap", NULL}, - {TIFFTAG_HALFTONEHINTS, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_UINT16_PAIR, - TIFF_SETGET_UNDEFINED, FIELD_HALFTONEHINTS, 1, 0, "HalftoneHints", NULL}, - {TIFFTAG_TILEWIDTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_TILEDIMENSIONS, 0, 0, "TileWidth", NULL}, - {TIFFTAG_TILELENGTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_TILEDIMENSIONS, 0, 0, "TileLength", NULL}, - {TIFFTAG_TILEOFFSETS, -1, 1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, - TIFF_SETGET_UNDEFINED, FIELD_STRIPOFFSETS, 0, 0, "TileOffsets", NULL}, - {TIFFTAG_TILEBYTECOUNTS, -1, 1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, - TIFF_SETGET_UNDEFINED, FIELD_STRIPBYTECOUNTS, 0, 0, "TileByteCounts", - NULL}, - {TIFFTAG_SUBIFD, -1, -1, TIFF_IFD8, 0, TIFF_SETGET_C16_IFD8, - TIFF_SETGET_UNDEFINED, FIELD_SUBIFD, 1, 1, "SubIFD", - (TIFFFieldArray *)&tiffFieldArray}, - {TIFFTAG_INKSET, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "InkSet", NULL}, - {TIFFTAG_INKNAMES, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_C16_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_INKNAMES, 1, 1, "InkNames", NULL}, - {TIFFTAG_NUMBEROFINKS, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_NUMBEROFINKS, 1, 0, "NumberOfInks", NULL}, - {TIFFTAG_DOTRANGE, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_UINT16_PAIR, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "DotRange", NULL}, - {TIFFTAG_TARGETPRINTER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "TargetPrinter", NULL}, - {TIFFTAG_EXTRASAMPLES, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_EXTRASAMPLES, 0, 1, "ExtraSamples", NULL}, - {TIFFTAG_SAMPLEFORMAT, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_SAMPLEFORMAT, 0, 0, "SampleFormat", NULL}, - {TIFFTAG_SMINSAMPLEVALUE, -2, -1, TIFF_ANY, 0, TIFF_SETGET_DOUBLE, - TIFF_SETGET_UNDEFINED, FIELD_SMINSAMPLEVALUE, 1, 0, "SMinSampleValue", - NULL}, - {TIFFTAG_SMAXSAMPLEVALUE, -2, -1, TIFF_ANY, 0, TIFF_SETGET_DOUBLE, - TIFF_SETGET_UNDEFINED, FIELD_SMAXSAMPLEVALUE, 1, 0, "SMaxSampleValue", - NULL}, - {TIFFTAG_CLIPPATH, -3, -3, TIFF_BYTE, 0, TIFF_SETGET_C32_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "ClipPath", NULL}, - {TIFFTAG_XCLIPPATHUNITS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "XClipPathUnits", NULL}, - {TIFFTAG_YCLIPPATHUNITS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "YClipPathUnits", NULL}, - {TIFFTAG_YCBCRCOEFFICIENTS, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "YCbCrCoefficients", NULL}, - {TIFFTAG_YCBCRSUBSAMPLING, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_UINT16_PAIR, - TIFF_SETGET_UNDEFINED, FIELD_YCBCRSUBSAMPLING, 0, 0, "YCbCrSubsampling", - NULL}, - {TIFFTAG_YCBCRPOSITIONING, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_YCBCRPOSITIONING, 0, 0, "YCbCrPositioning", - NULL}, - {TIFFTAG_REFERENCEBLACKWHITE, 6, 6, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_REFBLACKWHITE, 1, 0, "ReferenceBlackWhite", - NULL}, - {TIFFTAG_XMLPACKET, -3, -3, TIFF_BYTE, 0, TIFF_SETGET_C32_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "XMLPacket", NULL}, + {TIFFTAG_SUBFILETYPE, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_SUBFILETYPE, 1, 0, "SubfileType", NULL}, + {TIFFTAG_OSUBFILETYPE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 1, 0, "OldSubfileType", NULL}, + {TIFFTAG_IMAGEWIDTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_IMAGEDIMENSIONS, 0, 0, "ImageWidth", NULL}, + {TIFFTAG_IMAGELENGTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_IMAGEDIMENSIONS, 1, 0, "ImageLength", NULL}, + {TIFFTAG_BITSPERSAMPLE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_BITSPERSAMPLE, 0, 0, "BitsPerSample", NULL}, + {TIFFTAG_COMPRESSION, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_COMPRESSION, 0, 0, "Compression", NULL}, + {TIFFTAG_PHOTOMETRIC, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_PHOTOMETRIC, 0, 0, "PhotometricInterpretation", NULL}, + {TIFFTAG_THRESHHOLDING, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_THRESHHOLDING, 1, 0, "Threshholding", NULL}, + {TIFFTAG_CELLWIDTH, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CellWidth", NULL}, + {TIFFTAG_CELLLENGTH, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CellLength", NULL}, + {TIFFTAG_FILLORDER, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_FILLORDER, 0, 0, "FillOrder", NULL}, + {TIFFTAG_DOCUMENTNAME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DocumentName", NULL}, + {TIFFTAG_IMAGEDESCRIPTION, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ImageDescription", NULL}, + {TIFFTAG_MAKE, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Make", NULL}, + {TIFFTAG_MODEL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Model", NULL}, + {TIFFTAG_STRIPOFFSETS, -1, -1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_STRIPOFFSETS, 0, 0, "StripOffsets", NULL}, + {TIFFTAG_ORIENTATION, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_ORIENTATION, 0, 0, "Orientation", NULL}, + {TIFFTAG_SAMPLESPERPIXEL, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_SAMPLESPERPIXEL, 0, 0, "SamplesPerPixel", NULL}, + {TIFFTAG_ROWSPERSTRIP, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_ROWSPERSTRIP, 0, 0, "RowsPerStrip", NULL}, + {TIFFTAG_STRIPBYTECOUNTS, -1, -1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_STRIPBYTECOUNTS, 0, 0, "StripByteCounts", NULL}, + {TIFFTAG_MINSAMPLEVALUE, -2, -1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_MINSAMPLEVALUE, 1, 0, "MinSampleValue", NULL}, + {TIFFTAG_MAXSAMPLEVALUE, -2, -1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_MAXSAMPLEVALUE, 1, 0, "MaxSampleValue", NULL}, + {TIFFTAG_XRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_RESOLUTION, 1, 0, "XResolution", NULL}, + {TIFFTAG_YRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_RESOLUTION, 1, 0, "YResolution", NULL}, + {TIFFTAG_PLANARCONFIG, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_PLANARCONFIG, 0, 0, "PlanarConfiguration", NULL}, + {TIFFTAG_PAGENAME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "PageName", NULL}, + {TIFFTAG_XPOSITION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_POSITION, 1, 0, "XPosition", NULL}, + {TIFFTAG_YPOSITION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_POSITION, 1, 0, "YPosition", NULL}, + {TIFFTAG_FREEOFFSETS, -1, -1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 0, 0, "FreeOffsets", NULL}, + {TIFFTAG_FREEBYTECOUNTS, -1, -1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 0, 0, "FreeByteCounts", NULL}, + {TIFFTAG_GRAYRESPONSEUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 1, 0, "GrayResponseUnit", NULL}, + {TIFFTAG_GRAYRESPONSECURVE, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 1, 0, "GrayResponseCurve", NULL}, + {TIFFTAG_RESOLUTIONUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_RESOLUTIONUNIT, 1, 0, "ResolutionUnit", NULL}, + {TIFFTAG_PAGENUMBER, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_UINT16_PAIR, TIFF_SETGET_UNDEFINED, FIELD_PAGENUMBER, 1, 0, "PageNumber", NULL}, + {TIFFTAG_COLORRESPONSEUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 1, 0, "ColorResponseUnit", NULL}, + {TIFFTAG_TRANSFERFUNCTION, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_OTHER, TIFF_SETGET_UNDEFINED, FIELD_TRANSFERFUNCTION, 1, 0, "TransferFunction", NULL}, + {TIFFTAG_SOFTWARE, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Software", NULL}, + {TIFFTAG_DATETIME, 20, 20, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DateTime", NULL}, + {TIFFTAG_ARTIST, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Artist", NULL}, + {TIFFTAG_HOSTCOMPUTER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "HostComputer", NULL}, + {TIFFTAG_WHITEPOINT, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "WhitePoint", NULL}, + {TIFFTAG_PRIMARYCHROMATICITIES, 6, 6, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "PrimaryChromaticities", NULL}, + {TIFFTAG_COLORMAP, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_OTHER, TIFF_SETGET_UNDEFINED, FIELD_COLORMAP, 1, 0, "ColorMap", NULL}, + {TIFFTAG_HALFTONEHINTS, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_UINT16_PAIR, TIFF_SETGET_UNDEFINED, FIELD_HALFTONEHINTS, 1, 0, "HalftoneHints", NULL}, + {TIFFTAG_TILEWIDTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_TILEDIMENSIONS, 0, 0, "TileWidth", NULL}, + {TIFFTAG_TILELENGTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_TILEDIMENSIONS, 0, 0, "TileLength", NULL}, + {TIFFTAG_TILEOFFSETS, -1, 1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_STRIPOFFSETS, 0, 0, "TileOffsets", NULL}, + {TIFFTAG_TILEBYTECOUNTS, -1, 1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_STRIPBYTECOUNTS, 0, 0, "TileByteCounts", NULL}, + {TIFFTAG_SUBIFD, -1, -1, TIFF_IFD8, 0, TIFF_SETGET_C16_IFD8, TIFF_SETGET_UNDEFINED, FIELD_SUBIFD, 1, 1, "SubIFD", (TIFFFieldArray *)&tiffFieldArray}, + {TIFFTAG_INKSET, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "InkSet", NULL}, + {TIFFTAG_INKNAMES, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_C16_ASCII, TIFF_SETGET_UNDEFINED, FIELD_INKNAMES, 1, 1, "InkNames", NULL}, + {TIFFTAG_NUMBEROFINKS, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_NUMBEROFINKS, 1, 0, "NumberOfInks", NULL}, + {TIFFTAG_DOTRANGE, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_UINT16_PAIR, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "DotRange", NULL}, + {TIFFTAG_TARGETPRINTER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "TargetPrinter", NULL}, + {TIFFTAG_EXTRASAMPLES, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, TIFF_SETGET_UNDEFINED, FIELD_EXTRASAMPLES, 0, 1, "ExtraSamples", NULL}, + {TIFFTAG_SAMPLEFORMAT, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_SAMPLEFORMAT, 0, 0, "SampleFormat", NULL}, + {TIFFTAG_SMINSAMPLEVALUE, -2, -1, TIFF_ANY, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_SMINSAMPLEVALUE, 1, 0, "SMinSampleValue", NULL}, + {TIFFTAG_SMAXSAMPLEVALUE, -2, -1, TIFF_ANY, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_SMAXSAMPLEVALUE, 1, 0, "SMaxSampleValue", NULL}, + {TIFFTAG_CLIPPATH, -3, -3, TIFF_BYTE, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "ClipPath", NULL}, + {TIFFTAG_XCLIPPATHUNITS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "XClipPathUnits", NULL}, + {TIFFTAG_YCLIPPATHUNITS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "YClipPathUnits", NULL}, + {TIFFTAG_YCBCRCOEFFICIENTS, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "YCbCrCoefficients", NULL}, + {TIFFTAG_YCBCRSUBSAMPLING, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_UINT16_PAIR, TIFF_SETGET_UNDEFINED, FIELD_YCBCRSUBSAMPLING, 0, 0, "YCbCrSubsampling", NULL}, + {TIFFTAG_YCBCRPOSITIONING, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_YCBCRPOSITIONING, 0, 0, "YCbCrPositioning", NULL}, + {TIFFTAG_REFERENCEBLACKWHITE, 6, 6, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_REFBLACKWHITE, 1, 0, "ReferenceBlackWhite", NULL}, + {TIFFTAG_XMLPACKET, -3, -3, TIFF_BYTE, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "XMLPacket", NULL}, /* begin SGI tags */ - {TIFFTAG_MATTEING, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_EXTRASAMPLES, 0, 0, "Matteing", NULL}, - {TIFFTAG_DATATYPE, -2, -1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_SAMPLEFORMAT, 0, 0, "DataType", NULL}, - {TIFFTAG_IMAGEDEPTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_IMAGEDEPTH, 0, 0, "ImageDepth", NULL}, - {TIFFTAG_TILEDEPTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_TILEDEPTH, 0, 0, "TileDepth", NULL}, + {TIFFTAG_MATTEING, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_EXTRASAMPLES, 0, 0, "Matteing", NULL}, + {TIFFTAG_DATATYPE, -2, -1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_SAMPLEFORMAT, 0, 0, "DataType", NULL}, + {TIFFTAG_IMAGEDEPTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_IMAGEDEPTH, 0, 0, "ImageDepth", NULL}, + {TIFFTAG_TILEDEPTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_TILEDEPTH, 0, 0, "TileDepth", NULL}, /* end SGI tags */ /* begin Pixar tags */ - {TIFFTAG_PIXAR_IMAGEFULLWIDTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ImageFullWidth", NULL}, - {TIFFTAG_PIXAR_IMAGEFULLLENGTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ImageFullLength", NULL}, - {TIFFTAG_PIXAR_TEXTUREFORMAT, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "TextureFormat", NULL}, - {TIFFTAG_PIXAR_WRAPMODES, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "TextureWrapModes", NULL}, - {TIFFTAG_PIXAR_FOVCOT, 1, 1, TIFF_FLOAT, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FieldOfViewCotangent", NULL}, - {TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN, 16, 16, TIFF_FLOAT, 0, - TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, - "MatrixWorldToScreen", NULL}, - {TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA, 16, 16, TIFF_FLOAT, 0, - TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, - "MatrixWorldToCamera", NULL}, - {TIFFTAG_CFAREPEATPATTERNDIM, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_C0_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "CFARepeatPatternDim", NULL}, - {TIFFTAG_CFAPATTERN, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "CFAPattern", NULL}, - {TIFFTAG_COPYRIGHT, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Copyright", NULL}, + {TIFFTAG_PIXAR_IMAGEFULLWIDTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ImageFullWidth", NULL}, + {TIFFTAG_PIXAR_IMAGEFULLLENGTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ImageFullLength", NULL}, + {TIFFTAG_PIXAR_TEXTUREFORMAT, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "TextureFormat", NULL}, + {TIFFTAG_PIXAR_WRAPMODES, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "TextureWrapModes", NULL}, + {TIFFTAG_PIXAR_FOVCOT, 1, 1, TIFF_FLOAT, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FieldOfViewCotangent", NULL}, + {TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN, 16, 16, TIFF_FLOAT, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "MatrixWorldToScreen", NULL}, + {TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA, 16, 16, TIFF_FLOAT, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "MatrixWorldToCamera", NULL}, + {TIFFTAG_COPYRIGHT, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Copyright", NULL}, /* end Pixar tags */ - {TIFFTAG_RICHTIFFIPTC, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "RichTIFFIPTC", NULL}, - {TIFFTAG_PHOTOSHOP, -3, -3, TIFF_BYTE, 0, TIFF_SETGET_C32_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "Photoshop", NULL}, - /*--: EXIFIFD and GPSIFD specified as TIFF_LONG by Aware-Systems and not - * TIFF_IFD8 as in original LibTiff. However, for IFD-like tags, libtiff - * uses the data type TIFF_IFD8 in tiffFields[]-tag definition combined with - * a special handling procedure in order to write either a 32-bit value - * and the TIFF_IFD type-id into ClassicTIFF files or a 64-bit value and the - * TIFF_IFD8 type-id into BigTIFF files. */ - {TIFFTAG_EXIFIFD, 1, 1, TIFF_IFD8, 0, TIFF_SETGET_IFD8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EXIFIFDOffset", - (TIFFFieldArray *)&exifFieldArray}, - {TIFFTAG_ICCPROFILE, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "ICC Profile", NULL}, - {TIFFTAG_GPSIFD, 1, 1, TIFF_IFD8, 0, TIFF_SETGET_IFD8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "GPSIFDOffset", - (TIFFFieldArray *)&gpsFieldArray}, - {TIFFTAG_FAXRECVPARAMS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, - TIFF_SETGET_UINT32, FIELD_CUSTOM, TRUE, FALSE, "FaxRecvParams", NULL}, - {TIFFTAG_FAXSUBADDRESS, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_ASCII, FIELD_CUSTOM, TRUE, FALSE, "FaxSubAddress", NULL}, - {TIFFTAG_FAXRECVTIME, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, - TIFF_SETGET_UINT32, FIELD_CUSTOM, TRUE, FALSE, "FaxRecvTime", NULL}, - {TIFFTAG_FAXDCS, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_ASCII, FIELD_CUSTOM, TRUE, FALSE, "FaxDcs", NULL}, - {TIFFTAG_STONITS, 1, 1, TIFF_DOUBLE, 0, TIFF_SETGET_DOUBLE, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "StoNits", NULL}, - {TIFFTAG_IMAGESOURCEDATA, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, - "Adobe Photoshop Document Data Block", NULL}, - {TIFFTAG_INTEROPERABILITYIFD, 1, 1, TIFF_IFD8, 0, TIFF_SETGET_IFD8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "InteroperabilityIFDOffset", - NULL}, + {TIFFTAG_RICHTIFFIPTC, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "RichTIFFIPTC", NULL}, + {TIFFTAG_PHOTOSHOP, -3, -3, TIFF_BYTE, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "Photoshop", NULL}, + /*--: EXIFIFD and GPSIFD specified as TIFF_LONG by Aware-Systems and not TIFF_IFD8 as in original LibTiff. However, for IFD-like tags, + * libtiff uses the data type TIFF_IFD8 in tiffFields[]-tag definition combined with a special handling procedure in order to write either + * a 32-bit value and the TIFF_IFD type-id into ClassicTIFF files or a 64-bit value and the TIFF_IFD8 type-id into BigTIFF files. */ + {TIFFTAG_EXIFIFD, 1, 1, TIFF_IFD8, 0, TIFF_SETGET_IFD8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EXIFIFDOffset", (TIFFFieldArray *)&exifFieldArray}, + {TIFFTAG_ICCPROFILE, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ICC Profile", NULL}, + {TIFFTAG_GPSIFD, 1, 1, TIFF_IFD8, 0, TIFF_SETGET_IFD8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "GPSIFDOffset", (TIFFFieldArray *)&gpsFieldArray}, + {TIFFTAG_FAXRECVPARAMS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UINT32, FIELD_CUSTOM, TRUE, FALSE, "FaxRecvParams", NULL}, + {TIFFTAG_FAXSUBADDRESS, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_ASCII, FIELD_CUSTOM, TRUE, FALSE, "FaxSubAddress", NULL}, + {TIFFTAG_FAXRECVTIME, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UINT32, FIELD_CUSTOM, TRUE, FALSE, "FaxRecvTime", NULL}, + {TIFFTAG_FAXDCS, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_ASCII, FIELD_CUSTOM, TRUE, FALSE, "FaxDcs", NULL}, + {TIFFTAG_STONITS, 1, 1, TIFF_DOUBLE, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "StoNits", NULL}, + {TIFFTAG_IMAGESOURCEDATA, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "Adobe Photoshop Document Data Block", NULL}, + {TIFFTAG_INTEROPERABILITYIFD, 1, 1, TIFF_IFD8, 0, TIFF_SETGET_IFD8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "InteroperabilityIFDOffset", NULL}, /* begin DNG tags */ - {TIFFTAG_DNGVERSION, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "DNGVersion", NULL}, - {TIFFTAG_DNGBACKWARDVERSION, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "DNGBackwardVersion", NULL}, - {TIFFTAG_UNIQUECAMERAMODEL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "UniqueCameraModel", NULL}, - {TIFFTAG_LOCALIZEDCAMERAMODEL, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "LocalizedCameraModel", NULL}, - {TIFFTAG_CFAPLANECOLOR, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "CFAPlaneColor", NULL}, - {TIFFTAG_CFALAYOUT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "CFALayout", NULL}, - {TIFFTAG_LINEARIZATIONTABLE, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "LinearizationTable", NULL}, - {TIFFTAG_BLACKLEVELREPEATDIM, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_C0_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "BlackLevelRepeatDim", NULL}, - {TIFFTAG_BLACKLEVEL, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "BlackLevel", NULL}, - {TIFFTAG_BLACKLEVELDELTAH, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "BlackLevelDeltaH", NULL}, - {TIFFTAG_BLACKLEVELDELTAV, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "BlackLevelDeltaV", NULL}, - {TIFFTAG_WHITELEVEL, -1, -1, TIFF_LONG, 0, TIFF_SETGET_C16_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "WhiteLevel", NULL}, - {TIFFTAG_DEFAULTSCALE, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "DefaultScale", NULL}, - {TIFFTAG_BESTQUALITYSCALE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "BestQualityScale", NULL}, - {TIFFTAG_DEFAULTCROPORIGIN, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "DefaultCropOrigin", NULL}, - {TIFFTAG_DEFAULTCROPSIZE, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "DefaultCropSize", NULL}, - {TIFFTAG_COLORMATRIX1, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "ColorMatrix1", NULL}, - {TIFFTAG_COLORMATRIX2, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "ColorMatrix2", NULL}, - {TIFFTAG_CAMERACALIBRATION1, -1, -1, TIFF_SRATIONAL, 0, - TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, - "CameraCalibration1", NULL}, - {TIFFTAG_CAMERACALIBRATION2, -1, -1, TIFF_SRATIONAL, 0, - TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, - "CameraCalibration2", NULL}, - {TIFFTAG_REDUCTIONMATRIX1, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "ReductionMatrix1", NULL}, - {TIFFTAG_REDUCTIONMATRIX2, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "ReductionMatrix2", NULL}, - {TIFFTAG_ANALOGBALANCE, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "AnalogBalance", NULL}, - {TIFFTAG_ASSHOTNEUTRAL, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "AsShotNeutral", NULL}, - {TIFFTAG_ASSHOTWHITEXY, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "AsShotWhiteXY", NULL}, - {TIFFTAG_BASELINEEXPOSURE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "BaselineExposure", NULL}, - {TIFFTAG_BASELINENOISE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "BaselineNoise", NULL}, - {TIFFTAG_BASELINESHARPNESS, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "BaselineSharpness", NULL}, - {TIFFTAG_BAYERGREENSPLIT, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "BayerGreenSplit", NULL}, - {TIFFTAG_LINEARRESPONSELIMIT, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "LinearResponseLimit", NULL}, - {TIFFTAG_CAMERASERIALNUMBER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CameraSerialNumber", NULL}, - {TIFFTAG_LENSINFO, 4, 4, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "LensInfo", NULL}, - {TIFFTAG_CHROMABLURRADIUS, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "ChromaBlurRadius", NULL}, - {TIFFTAG_ANTIALIASSTRENGTH, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "AntiAliasStrength", NULL}, - {TIFFTAG_SHADOWSCALE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "ShadowScale", NULL}, - {TIFFTAG_DNGPRIVATEDATA, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "DNGPrivateData", NULL}, - {TIFFTAG_MAKERNOTESAFETY, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "MakerNoteSafety", NULL}, - {TIFFTAG_CALIBRATIONILLUMINANT1, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "CalibrationIlluminant1", NULL}, - {TIFFTAG_CALIBRATIONILLUMINANT2, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "CalibrationIlluminant2", NULL}, - {TIFFTAG_RAWDATAUNIQUEID, 16, 16, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "RawDataUniqueID", NULL}, - {TIFFTAG_ORIGINALRAWFILENAME, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "OriginalRawFileName", NULL}, - {TIFFTAG_ORIGINALRAWFILEDATA, -1, -1, TIFF_UNDEFINED, 0, - TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, - "OriginalRawFileData", NULL}, - {TIFFTAG_ACTIVEAREA, 4, 4, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "ActiveArea", NULL}, - {TIFFTAG_MASKEDAREAS, -1, -1, TIFF_LONG, 0, TIFF_SETGET_C16_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "MaskedAreas", NULL}, - {TIFFTAG_ASSHOTICCPROFILE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "AsShotICCProfile", NULL}, - {TIFFTAG_ASSHOTPREPROFILEMATRIX, -1, -1, TIFF_SRATIONAL, 0, - TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, - "AsShotPreProfileMatrix", NULL}, - {TIFFTAG_CURRENTICCPROFILE, -1, -1, TIFF_UNDEFINED, 0, - TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, - "CurrentICCProfile", NULL}, - {TIFFTAG_CURRENTPREPROFILEMATRIX, -1, -1, TIFF_SRATIONAL, 0, - TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, - "CurrentPreProfileMatrix", NULL}, - {TIFFTAG_PERSAMPLE, 0, 0, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, - TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, TRUE, FALSE, "PerSample", NULL}, + {TIFFTAG_DNGVERSION, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DNGVersion", NULL}, + {TIFFTAG_DNGBACKWARDVERSION, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DNGBackwardVersion", NULL}, + {TIFFTAG_UNIQUECAMERAMODEL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "UniqueCameraModel", NULL}, + {TIFFTAG_LOCALIZEDCAMERAMODEL, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "LocalizedCameraModel", NULL}, + {TIFFTAG_CFAPLANECOLOR, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "CFAPlaneColor", NULL}, + {TIFFTAG_CFALAYOUT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CFALayout", NULL}, + {TIFFTAG_LINEARIZATIONTABLE, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "LinearizationTable", NULL}, + {TIFFTAG_BLACKLEVELREPEATDIM, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_C0_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "BlackLevelRepeatDim", NULL}, + {TIFFTAG_BLACKLEVEL, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "BlackLevel", NULL}, + {TIFFTAG_BLACKLEVELDELTAH, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "BlackLevelDeltaH", NULL}, + {TIFFTAG_BLACKLEVELDELTAV, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "BlackLevelDeltaV", NULL}, + {TIFFTAG_WHITELEVEL, -1, -1, TIFF_LONG, 0, TIFF_SETGET_C16_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "WhiteLevel", NULL}, + {TIFFTAG_DEFAULTSCALE, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DefaultScale", NULL}, + {TIFFTAG_BESTQUALITYSCALE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "BestQualityScale", NULL}, + {TIFFTAG_DEFAULTCROPORIGIN, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DefaultCropOrigin", NULL}, + {TIFFTAG_DEFAULTCROPSIZE, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DefaultCropSize", NULL}, + {TIFFTAG_COLORMATRIX1, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ColorMatrix1", NULL}, + {TIFFTAG_COLORMATRIX2, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ColorMatrix2", NULL}, + {TIFFTAG_CAMERACALIBRATION1, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "CameraCalibration1", NULL}, + {TIFFTAG_CAMERACALIBRATION2, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "CameraCalibration2", NULL}, + {TIFFTAG_REDUCTIONMATRIX1, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ReductionMatrix1", NULL}, + {TIFFTAG_REDUCTIONMATRIX2, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ReductionMatrix2", NULL}, + {TIFFTAG_ANALOGBALANCE, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "AnalogBalance", NULL}, + {TIFFTAG_ASSHOTNEUTRAL, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "AsShotNeutral", NULL}, + {TIFFTAG_ASSHOTWHITEXY, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "AsShotWhiteXY", NULL}, + {TIFFTAG_BASELINEEXPOSURE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "BaselineExposure", NULL}, + {TIFFTAG_BASELINENOISE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "BaselineNoise", NULL}, + {TIFFTAG_BASELINESHARPNESS, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "BaselineSharpness", NULL}, + {TIFFTAG_BAYERGREENSPLIT, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "BayerGreenSplit", NULL}, + {TIFFTAG_LINEARRESPONSELIMIT, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LinearResponseLimit", NULL}, + {TIFFTAG_CAMERASERIALNUMBER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CameraSerialNumber", NULL}, + {TIFFTAG_LENSINFO, 4, 4, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LensInfo", NULL}, + {TIFFTAG_CHROMABLURRADIUS, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ChromaBlurRadius", NULL}, + {TIFFTAG_ANTIALIASSTRENGTH, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "AntiAliasStrength", NULL}, + {TIFFTAG_SHADOWSCALE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ShadowScale", NULL}, + {TIFFTAG_DNGPRIVATEDATA, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "DNGPrivateData", NULL}, + {TIFFTAG_MAKERNOTESAFETY, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "MakerNoteSafety", NULL}, + {TIFFTAG_CALIBRATIONILLUMINANT1, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CalibrationIlluminant1", NULL}, + {TIFFTAG_CALIBRATIONILLUMINANT2, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CalibrationIlluminant2", NULL}, + {TIFFTAG_RAWDATAUNIQUEID, 16, 16, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "RawDataUniqueID", NULL}, + {TIFFTAG_ORIGINALRAWFILENAME, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "OriginalRawFileName", NULL}, + {TIFFTAG_ORIGINALRAWFILEDATA, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "OriginalRawFileData", NULL}, + {TIFFTAG_ACTIVEAREA, 4, 4, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ActiveArea", NULL}, + {TIFFTAG_MASKEDAREAS, -1, -1, TIFF_LONG, 0, TIFF_SETGET_C16_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "MaskedAreas", NULL}, + {TIFFTAG_ASSHOTICCPROFILE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "AsShotICCProfile", NULL}, + {TIFFTAG_ASSHOTPREPROFILEMATRIX, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "AsShotPreProfileMatrix", NULL}, + {TIFFTAG_CURRENTICCPROFILE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "CurrentICCProfile", NULL}, + {TIFFTAG_CURRENTPREPROFILEMATRIX, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "CurrentPreProfileMatrix", NULL}, + {TIFFTAG_PERSAMPLE, 0, 0, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, TRUE, FALSE, "PerSample", NULL}, +#if 0 + /* TODO: revert above #if 0 for TIFF 4.6.0 */ + + /* begin DNG 1.2.0.0 tags */ + {TIFFTAG_COLORIMETRICREFERENCE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ColorimetricReference", NULL}, + {TIFFTAG_CAMERACALIBRATIONSIGNATURE, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "CameraCalibrationSignature", NULL}, + {TIFFTAG_PROFILECALIBRATIONSIGNATURE, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ProfileCalibrationSignature", NULL}, + {TIFFTAG_EXTRACAMERAPROFILES, -1, -1, TIFF_IFD8, 0, TIFF_SETGET_C16_IFD8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ExtraCameraProfiles", NULL}, + {TIFFTAG_ASSHOTPROFILENAME, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "AsShotProfileName", NULL}, + {TIFFTAG_NOISEREDUCTIONAPPLIED, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "NoiseReductionApplied", NULL}, + {TIFFTAG_PROFILENAME, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ProfileName", NULL}, + {TIFFTAG_PROFILEHUESATMAPDIMS, 3, 3, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ProfileHueSatMapDims", NULL}, + {TIFFTAG_PROFILEHUESATMAPDATA1, -1, -1, TIFF_FLOAT, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ProfileHueSatMapData1", NULL}, + {TIFFTAG_PROFILEHUESATMAPDATA2, -1, -1, TIFF_FLOAT, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ProfileHueSatMapData2", NULL}, + {TIFFTAG_PROFILETONECURVE, -1, -1, TIFF_FLOAT, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ProfileToneCurve", NULL}, + {TIFFTAG_PROFILEEMBEDPOLICY, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ProfileEmbedPolicy", NULL}, + {TIFFTAG_PROFILECOPYRIGHT, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ProfileCopyright", NULL}, + {TIFFTAG_FORWARDMATRIX1, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ForwardMatrix1", NULL}, + {TIFFTAG_FORWARDMATRIX2, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ForwardMatrix2", NULL}, + {TIFFTAG_PREVIEWAPPLICATIONNAME, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "PreviewApplicationName", NULL}, + {TIFFTAG_PREVIEWAPPLICATIONVERSION, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "PreviewApplicationVersion", NULL}, + {TIFFTAG_PREVIEWSETTINGSNAME, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "PreviewSettingsName", NULL}, + {TIFFTAG_PREVIEWSETTINGSDIGEST, 16, 16, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "PreviewSettingsDigest", NULL}, + {TIFFTAG_PREVIEWCOLORSPACE, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "PreviewColorSpace", NULL}, + {TIFFTAG_PREVIEWDATETIME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "PreviewDateTime", NULL}, + {TIFFTAG_RAWIMAGEDIGEST, 16, 16, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "RawImageDigest", NULL}, + {TIFFTAG_ORIGINALRAWFILEDIGEST, 16, 16, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "OriginalRawFileDigest", NULL}, + {TIFFTAG_SUBTILEBLOCKSIZE, 2, 2, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubTileBlockSize", NULL}, + {TIFFTAG_ROWINTERLEAVEFACTOR, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "RowInterleaveFactor", NULL}, + {TIFFTAG_PROFILELOOKTABLEDIMS, 3, 3, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ProfileLookTableDims", NULL}, + {TIFFTAG_PROFILELOOKTABLEDATA, -1, -1, TIFF_FLOAT, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ProfileLookTableData", NULL}, + /* begin DNG 1.3.0.0 tags */ + {TIFFTAG_OPCODELIST1, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "OpcodeList1", NULL}, + {TIFFTAG_OPCODELIST2, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "OpcodeList2", NULL}, + {TIFFTAG_OPCODELIST3, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "OpcodeList3", NULL}, + {TIFFTAG_NOISEPROFILE, -1, -1, TIFF_DOUBLE, 0, TIFF_SETGET_C16_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "NoiseProfile", NULL}, + /* begin DNG 1.4.0.0 tags */ + {TIFFTAG_DEFAULTUSERCROP, 4, 4, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DefaultUserCrop", NULL}, + {TIFFTAG_DEFAULTBLACKRENDER, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DefaultBlackRender", NULL}, + {TIFFTAG_BASELINEEXPOSUREOFFSET, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "BaselineExposureOffset", NULL}, + {TIFFTAG_PROFILELOOKTABLEENCODING, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ProfileLookTableEncoding", NULL}, + {TIFFTAG_PROFILEHUESATMAPENCODING, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ProfileHueSatMapEncoding", NULL}, + {TIFFTAG_ORIGINALDEFAULTFINALSIZE, 2, 2, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "OriginalDefaultFinalSize", NULL}, + {TIFFTAG_ORIGINALBESTQUALITYFINALSIZE, 2, 2, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "OriginalBestQualityFinalSize", NULL}, + {TIFFTAG_ORIGINALDEFAULTCROPSIZE, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "OriginalDefaultCropSize", NULL}, /* could also be rational */ + {TIFFTAG_NEWRAWIMAGEDIGEST, 16, 16, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "NewRawImageDigest", NULL}, + {TIFFTAG_RAWTOPREVIEWGAIN, 1, 1, TIFF_DOUBLE, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "RawToPreviewGain", NULL}, + /* begin DNG 1.5.0.0 tags */ + {TIFFTAG_DEPTHFORMAT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DepthFormat", NULL}, + {TIFFTAG_DEPTHNEAR, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DepthNear", NULL}, + {TIFFTAG_DEPTHFAR, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DepthFar", NULL}, + {TIFFTAG_DEPTHUNITS, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DepthUnits", NULL}, + {TIFFTAG_DEPTHMEASURETYPE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DepthMeasureType", NULL}, + {TIFFTAG_ENHANCEPARAMS, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EnhanceParams", NULL}, + /* begin DNG 1.6.0.0 tags */ + {TIFFTAG_PROFILEGAINTABLEMAP, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ProfileGainTableMap", NULL}, + {TIFFTAG_SEMANTICNAME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SemanticName", NULL}, + {TIFFTAG_SEMANTICINSTANCEID, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SemanticInstanceID", NULL}, + {TIFFTAG_MASKSUBAREA, 4, 4, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "MaskSubArea", NULL}, + {TIFFTAG_RGBTABLES, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "RGBTables", NULL}, + {TIFFTAG_CALIBRATIONILLUMINANT3, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CalibrationIlluminant3", NULL}, + {TIFFTAG_COLORMATRIX3, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ColorMatrix3", NULL}, + {TIFFTAG_CAMERACALIBRATION3, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "CameraCalibration3", NULL}, + {TIFFTAG_REDUCTIONMATRIX3, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ReductionMatrix3", NULL}, + {TIFFTAG_PROFILEHUESATMAPDATA3, -1, -1, TIFF_FLOAT, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ProfileHueSatMapData3", NULL}, + {TIFFTAG_FORWARDMATRIX3, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ForwardMatrix3", NULL}, + {TIFFTAG_ILLUMINANTDATA1, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "IlluminantData1", NULL}, + {TIFFTAG_ILLUMINANTDATA2, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "IlluminantData2", NULL}, + {TIFFTAG_ILLUMINANTDATA3, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "IlluminantData3", NULL}, /* end DNG tags */ + /* begin TIFF/EP tags */ + {TIFFTAG_EP_CFAREPEATPATTERNDIM, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_C0_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP CFARepeatPatternDim", NULL}, + {TIFFTAG_EP_CFAPATTERN, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP CFAPattern", NULL}, + /* TIFFTAG_EP_BATTERYLEVEL can be RATIONAL or ASCII. + * LibTiff defines it as ASCII and converts RATIONAL to an ASCII string. */ + {TIFFTAG_EP_BATTERYLEVEL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP BatteryLevel", NULL}, + {TIFFTAG_EP_INTERLACE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP Interlace", NULL}, + /* TIFFTAG_EP_IPTC_NAA and TIFFTAG_RICHTIFFIPTC share the same tag number (33723) + * LibTIFF type is UNDEFINED or BYTE, but often times incorrectly specified as LONG, because TIFF/EP (ISO/DIS 12234-2) specifies type LONG or ASCII. */ + {TIFFTAG_EP_TIMEZONEOFFSET, -1, -1, TIFF_SSHORT, 0, TIFF_SETGET_C16_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP TimeZoneOffset", NULL}, + {TIFFTAG_EP_SELFTIMERMODE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP SelfTimerMode", NULL}, + {TIFFTAG_EP_FLASHENERGY, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP FlashEnergy", NULL}, + {TIFFTAG_EP_SPATIALFREQUENCYRESPONSE, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP SpatialFrequencyResponse", NULL}, + {TIFFTAG_EP_NOISE, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP Noise", NULL}, + {TIFFTAG_EP_FOCALPLANEXRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP FocalPlaneXResolution", NULL}, + {TIFFTAG_EP_FOCALPLANEYRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP FocalPlaneYResolution", NULL}, + {TIFFTAG_EP_FOCALPLANERESOLUTIONUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP FocalPlaneResolutionUnit", NULL}, + {TIFFTAG_EP_IMAGENUMBER, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP ImageNumber", NULL}, /* or SHORT */ + {TIFFTAG_EP_SECURITYCLASSIFICATION, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP SecurityClassification", NULL}, + {TIFFTAG_EP_IMAGEHISTORY, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP ImageHistory", NULL}, + {TIFFTAG_EP_EXPOSUREINDEX, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP ExposureIndex", NULL}, + {TIFFTAG_EP_STANDARDID, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP StandardId", NULL}, + {TIFFTAG_EP_SENSINGMETHOD, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP SensingMethod", NULL}, + /* TIFF/EP tags equivalent to EXIF tags, sometimes defined differently. */ + {TIFFTAG_EP_EXPOSURETIME, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP ExposureTime", NULL}, /*N=1 or 2 */ + {TIFFTAG_EP_FNUMBER, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP FNumber", NULL}, + {TIFFTAG_EP_EXPOSUREPROGRAM, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP ExposureProgram", NULL}, + {TIFFTAG_EP_SPECTRALSENSITIVITY, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP SpectralSensitivity", NULL}, + {TIFFTAG_EP_ISOSPEEDRATINGS, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP ISOSpeedRatings", NULL}, + {TIFFTAG_EP_OECF, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP OptoelectricConversionFactor", NULL}, + {TIFFTAG_EP_DATETIMEORIGINAL, 20, 20, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP DateTimeOriginal", NULL}, + {TIFFTAG_EP_COMPRESSEDBITSPERPIXEL, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP CompressedBitsPerPixel", NULL}, + {TIFFTAG_EP_SHUTTERSPEEDVALUE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP ShutterSpeedValue", NULL}, + {TIFFTAG_EP_APERTUREVALUE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP ApertureValue", NULL}, + {TIFFTAG_EP_BRIGHTNESSVALUE, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP BrightnessValue", NULL}, + {TIFFTAG_EP_EXPOSUREBIASVALUE, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP ExposureBiasValue", NULL}, /*N=1 or 2 */ + {TIFFTAG_EP_MAXAPERTUREVALUE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP MaxApertureValue", NULL}, + {TIFFTAG_EP_SUBJECTDISTANCE, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP SubjectDistance", NULL}, + {TIFFTAG_EP_METERINGMODE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP MeteringMode", NULL}, + {TIFFTAG_EP_LIGHTSOURCE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP LightSource", NULL}, + {TIFFTAG_EP_FLASH, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "EP Flash", NULL}, + {TIFFTAG_EP_FOCALLENGTH, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP FocalLength", NULL}, + {TIFFTAG_EP_SUBJECTLOCATION, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "EP SubjectLocation", NULL}, + /* end TIFF/EP tags */ +#endif /* begin TIFF/FX tags */ - {TIFFTAG_INDEXED, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "Indexed", NULL}, - {TIFFTAG_GLOBALPARAMETERSIFD, 1, 1, TIFF_IFD8, 0, TIFF_SETGET_IFD8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "GlobalParametersIFD", NULL}, - {TIFFTAG_PROFILETYPE, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "ProfileType", NULL}, - {TIFFTAG_FAXPROFILE, 1, 1, TIFF_BYTE, 0, TIFF_SETGET_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "FaxProfile", NULL}, - {TIFFTAG_CODINGMETHODS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "CodingMethods", NULL}, - {TIFFTAG_VERSIONYEAR, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "VersionYear", NULL}, - {TIFFTAG_MODENUMBER, 1, 1, TIFF_BYTE, 0, TIFF_SETGET_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "ModeNumber", NULL}, - {TIFFTAG_DECODE, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "Decode", NULL}, - {TIFFTAG_IMAGEBASECOLOR, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "ImageBaseColor", NULL}, - {TIFFTAG_T82OPTIONS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "T82Options", NULL}, - {TIFFTAG_STRIPROWCOUNTS, -1, -1, TIFF_LONG, 0, TIFF_SETGET_C16_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "StripRowCounts", NULL}, - {TIFFTAG_IMAGELAYER, 2, 2, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "ImageLayer", NULL}, + {TIFFTAG_INDEXED, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Indexed", NULL}, + {TIFFTAG_GLOBALPARAMETERSIFD, 1, 1, TIFF_IFD8, 0, TIFF_SETGET_IFD8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "GlobalParametersIFD", NULL}, + {TIFFTAG_PROFILETYPE, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ProfileType", NULL}, + {TIFFTAG_FAXPROFILE, 1, 1, TIFF_BYTE, 0, TIFF_SETGET_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FaxProfile", NULL}, + {TIFFTAG_CODINGMETHODS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CodingMethods", NULL}, + {TIFFTAG_VERSIONYEAR, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "VersionYear", NULL}, + {TIFFTAG_MODENUMBER, 1, 1, TIFF_BYTE, 0, TIFF_SETGET_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ModeNumber", NULL}, + {TIFFTAG_DECODE, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "Decode", NULL}, + {TIFFTAG_IMAGEBASECOLOR, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ImageBaseColor", NULL}, + {TIFFTAG_T82OPTIONS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "T82Options", NULL}, + {TIFFTAG_STRIPROWCOUNTS, -1, -1, TIFF_LONG, 0, TIFF_SETGET_C16_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "StripRowCounts", NULL}, + {TIFFTAG_IMAGELAYER, 2, 2, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ImageLayer", NULL}, /* end TIFF/FX tags */ /* begin pseudo tags */ }; @@ -416,181 +348,91 @@ static const TIFFField tiffFields[] = { * EXIF tags (Version 2.31, July 2016 plus version 2.32 May 2019) */ static const TIFFField exifFields[] = { - {EXIFTAG_EXPOSURETIME, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ExposureTime", NULL}, - {EXIFTAG_FNUMBER, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FNumber", NULL}, - {EXIFTAG_EXPOSUREPROGRAM, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ExposureProgram", NULL}, - {EXIFTAG_SPECTRALSENSITIVITY, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SpectralSensitivity", NULL}, - {EXIFTAG_ISOSPEEDRATINGS, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ISOSpeedRatings", NULL}, - {EXIFTAG_OECF, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "OptoelectricConversionFactor", - NULL}, - {EXIFTAG_SENSITIVITYTYPE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SensitivityType", NULL}, - {EXIFTAG_STANDARDOUTPUTSENSITIVITY, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "StandardOutputSensitivity", - NULL}, - {EXIFTAG_RECOMMENDEDEXPOSUREINDEX, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "RecommendedExposureIndex", - NULL}, - {EXIFTAG_ISOSPEED, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ISOSpeed", NULL}, - {EXIFTAG_ISOSPEEDLATITUDEYYY, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ISOSpeedLatitudeyyy", NULL}, - {EXIFTAG_ISOSPEEDLATITUDEZZZ, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ISOSpeedLatitudezzz", NULL}, - {EXIFTAG_EXIFVERSION, 4, 4, TIFF_UNDEFINED, 0, TIFF_SETGET_C0_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ExifVersion", NULL}, - {EXIFTAG_DATETIMEORIGINAL, 20, 20, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DateTimeOriginal", NULL}, - {EXIFTAG_DATETIMEDIGITIZED, 20, 20, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DateTimeDigitized", NULL}, - {EXIFTAG_OFFSETTIME, 7, 7, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "OffsetTime", NULL}, - {EXIFTAG_OFFSETTIMEORIGINAL, 7, 7, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "OffsetTimeOriginal", NULL}, - {EXIFTAG_OFFSETTIMEDIGITIZED, 7, 7, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "OffsetTimeDigitized", NULL}, - {EXIFTAG_COMPONENTSCONFIGURATION, 4, 4, TIFF_UNDEFINED, 0, - TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, - "ComponentsConfiguration", NULL}, - {EXIFTAG_COMPRESSEDBITSPERPIXEL, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CompressedBitsPerPixel", NULL}, - {EXIFTAG_SHUTTERSPEEDVALUE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ShutterSpeedValue", NULL}, - {EXIFTAG_APERTUREVALUE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ApertureValue", NULL}, - {EXIFTAG_BRIGHTNESSVALUE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "BrightnessValue", NULL}, - {EXIFTAG_EXPOSUREBIASVALUE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ExposureBiasValue", NULL}, - {EXIFTAG_MAXAPERTUREVALUE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "MaxApertureValue", NULL}, - /*--: EXIFTAG_SUBJECTDISTANCE: LibTiff returns value of "-1" if numerator - * equals 4294967295 (0xFFFFFFFF) to indicate infinite distance! However, - * there are two other EXIF tags where numerator indicates a special value - * and six other cases where the denominator indicates special values, which - * are not treated within LibTiff!! */ - {EXIFTAG_SUBJECTDISTANCE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubjectDistance", NULL}, - {EXIFTAG_METERINGMODE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "MeteringMode", NULL}, - {EXIFTAG_LIGHTSOURCE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LightSource", NULL}, - {EXIFTAG_FLASH, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Flash", NULL}, - {EXIFTAG_FOCALLENGTH, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FocalLength", NULL}, - {EXIFTAG_SUBJECTAREA, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "SubjectArea", NULL}, - {EXIFTAG_MAKERNOTE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "MakerNote", NULL}, - {EXIFTAG_USERCOMMENT, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "UserComment", NULL}, - {EXIFTAG_SUBSECTIME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubSecTime", NULL}, - {EXIFTAG_SUBSECTIMEORIGINAL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubSecTimeOriginal", NULL}, - {EXIFTAG_SUBSECTIMEDIGITIZED, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubSecTimeDigitized", NULL}, - {EXIFTAG_TEMPERATURE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Temperature", NULL}, - {EXIFTAG_HUMIDITY, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Humidity", NULL}, - {EXIFTAG_PRESSURE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Pressure", NULL}, - {EXIFTAG_WATERDEPTH, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "WaterDepth", NULL}, - {EXIFTAG_ACCELERATION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Acceleration", NULL}, - {EXIFTAG_CAMERAELEVATIONANGLE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CameraElevationAngle", NULL}, - {EXIFTAG_FLASHPIXVERSION, 4, 4, TIFF_UNDEFINED, 0, TIFF_SETGET_C0_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FlashpixVersion", NULL}, - {EXIFTAG_COLORSPACE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ColorSpace", NULL}, - {EXIFTAG_PIXELXDIMENSION, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "PixelXDimension", NULL}, - {EXIFTAG_PIXELYDIMENSION, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "PixelYDimension", NULL}, - {EXIFTAG_RELATEDSOUNDFILE, 13, 13, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "RelatedSoundFile", NULL}, - {EXIFTAG_FLASHENERGY, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FlashEnergy", NULL}, - {EXIFTAG_SPATIALFREQUENCYRESPONSE, -1, -1, TIFF_UNDEFINED, 0, - TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, - "SpatialFrequencyResponse", NULL}, - {EXIFTAG_FOCALPLANEXRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FocalPlaneXResolution", NULL}, - {EXIFTAG_FOCALPLANEYRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FocalPlaneYResolution", NULL}, - {EXIFTAG_FOCALPLANERESOLUTIONUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FocalPlaneResolutionUnit", - NULL}, - {EXIFTAG_SUBJECTLOCATION, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_C0_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubjectLocation", NULL}, - {EXIFTAG_EXPOSUREINDEX, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ExposureIndex", NULL}, - {EXIFTAG_SENSINGMETHOD, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SensingMethod", NULL}, - {EXIFTAG_FILESOURCE, 1, 1, TIFF_UNDEFINED, 0, TIFF_SETGET_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FileSource", NULL}, - {EXIFTAG_SCENETYPE, 1, 1, TIFF_UNDEFINED, 0, TIFF_SETGET_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SceneType", NULL}, - {EXIFTAG_CFAPATTERN, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "CFAPattern", NULL}, - {EXIFTAG_CUSTOMRENDERED, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CustomRendered", NULL}, - {EXIFTAG_EXPOSUREMODE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ExposureMode", NULL}, - {EXIFTAG_WHITEBALANCE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "WhiteBalance", NULL}, - {EXIFTAG_DIGITALZOOMRATIO, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DigitalZoomRatio", NULL}, - {EXIFTAG_FOCALLENGTHIN35MMFILM, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FocalLengthIn35mmFilm", NULL}, - {EXIFTAG_SCENECAPTURETYPE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SceneCaptureType", NULL}, - {EXIFTAG_GAINCONTROL, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "GainControl", NULL}, - {EXIFTAG_CONTRAST, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Contrast", NULL}, - {EXIFTAG_SATURATION, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Saturation", NULL}, - {EXIFTAG_SHARPNESS, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Sharpness", NULL}, - {EXIFTAG_DEVICESETTINGDESCRIPTION, -1, -1, TIFF_UNDEFINED, 0, - TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, - "DeviceSettingDescription", NULL}, - {EXIFTAG_SUBJECTDISTANCERANGE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubjectDistanceRange", NULL}, - {EXIFTAG_IMAGEUNIQUEID, 33, 33, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ImageUniqueID", NULL}, - {EXIFTAG_CAMERAOWNERNAME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CameraOwnerName", NULL}, - {EXIFTAG_BODYSERIALNUMBER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "BodySerialNumber", NULL}, - {EXIFTAG_LENSSPECIFICATION, 4, 4, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LensSpecification", NULL}, - {EXIFTAG_LENSMAKE, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LensMake", NULL}, - {EXIFTAG_LENSMODEL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LensModel", NULL}, - {EXIFTAG_LENSSERIALNUMBER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LensSerialNumber", NULL}, - {EXIFTAG_GAMMA, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Gamma", NULL}, - {EXIFTAG_COMPOSITEIMAGE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CompositeImage", NULL}, - {EXIFTAG_SOURCEIMAGENUMBEROFCOMPOSITEIMAGE, 2, 2, TIFF_SHORT, 0, - TIFF_SETGET_C0_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, - "SourceImageNumberOfCompositeImage", NULL}, - {EXIFTAG_SOURCEEXPOSURETIMESOFCOMPOSITEIMAGE, -1, -1, TIFF_UNDEFINED, 0, - TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, + {EXIFTAG_EXPOSURETIME, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ExposureTime", NULL}, + {EXIFTAG_FNUMBER, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FNumber", NULL}, + {EXIFTAG_EXPOSUREPROGRAM, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ExposureProgram", NULL}, + {EXIFTAG_SPECTRALSENSITIVITY, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SpectralSensitivity", NULL}, + /* After EXIF 2.2.1 ISOSpeedRatings is named PhotographicSensitivity. In addition, while "Count=Any", only 1 count should be used. */ + {EXIFTAG_ISOSPEEDRATINGS, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ISOSpeedRatings", NULL}, + {EXIFTAG_OECF, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "OptoelectricConversionFactor", NULL}, + {EXIFTAG_SENSITIVITYTYPE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SensitivityType", NULL}, + {EXIFTAG_STANDARDOUTPUTSENSITIVITY, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "StandardOutputSensitivity", NULL}, + {EXIFTAG_RECOMMENDEDEXPOSUREINDEX, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "RecommendedExposureIndex", NULL}, + {EXIFTAG_ISOSPEED, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ISOSpeed", NULL}, + {EXIFTAG_ISOSPEEDLATITUDEYYY, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ISOSpeedLatitudeyyy", NULL}, + {EXIFTAG_ISOSPEEDLATITUDEZZZ, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ISOSpeedLatitudezzz", NULL}, + {EXIFTAG_EXIFVERSION, 4, 4, TIFF_UNDEFINED, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ExifVersion", NULL}, + {EXIFTAG_DATETIMEORIGINAL, 20, 20, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DateTimeOriginal", NULL}, + {EXIFTAG_DATETIMEDIGITIZED, 20, 20, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DateTimeDigitized", NULL}, + {EXIFTAG_OFFSETTIME, 7, 7, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "OffsetTime", NULL}, + {EXIFTAG_OFFSETTIMEORIGINAL, 7, 7, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "OffsetTimeOriginal", NULL}, + {EXIFTAG_OFFSETTIMEDIGITIZED, 7, 7, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "OffsetTimeDigitized", NULL}, + {EXIFTAG_COMPONENTSCONFIGURATION, 4, 4, TIFF_UNDEFINED, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ComponentsConfiguration", NULL}, + {EXIFTAG_COMPRESSEDBITSPERPIXEL, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CompressedBitsPerPixel", NULL}, + {EXIFTAG_SHUTTERSPEEDVALUE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ShutterSpeedValue", NULL}, + {EXIFTAG_APERTUREVALUE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ApertureValue", NULL}, + {EXIFTAG_BRIGHTNESSVALUE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "BrightnessValue", NULL}, + {EXIFTAG_EXPOSUREBIASVALUE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ExposureBiasValue", NULL}, + {EXIFTAG_MAXAPERTUREVALUE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "MaxApertureValue", NULL}, + /*--: EXIFTAG_SUBJECTDISTANCE: LibTiff returns value of "-1" if numerator equals 4294967295 (0xFFFFFFFF) to indicate infinite distance! + * However, there are two other EXIF tags where numerator indicates a special value and six other cases where the denominator indicates special values, + * which are not treated within LibTiff!! */ + {EXIFTAG_SUBJECTDISTANCE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubjectDistance", NULL}, + {EXIFTAG_METERINGMODE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "MeteringMode", NULL}, + {EXIFTAG_LIGHTSOURCE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LightSource", NULL}, + {EXIFTAG_FLASH, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Flash", NULL}, + {EXIFTAG_FOCALLENGTH, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FocalLength", NULL}, + {EXIFTAG_SUBJECTAREA, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "SubjectArea", NULL}, + {EXIFTAG_MAKERNOTE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "MakerNote", NULL}, + {EXIFTAG_USERCOMMENT, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "UserComment", NULL}, + {EXIFTAG_SUBSECTIME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubSecTime", NULL}, + {EXIFTAG_SUBSECTIMEORIGINAL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubSecTimeOriginal", NULL}, + {EXIFTAG_SUBSECTIMEDIGITIZED, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubSecTimeDigitized", NULL}, + {EXIFTAG_TEMPERATURE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Temperature", NULL}, + {EXIFTAG_HUMIDITY, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Humidity", NULL}, + {EXIFTAG_PRESSURE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Pressure", NULL}, + {EXIFTAG_WATERDEPTH, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "WaterDepth", NULL}, + {EXIFTAG_ACCELERATION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Acceleration", NULL}, + {EXIFTAG_CAMERAELEVATIONANGLE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CameraElevationAngle", NULL}, + {EXIFTAG_FLASHPIXVERSION, 4, 4, TIFF_UNDEFINED, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FlashpixVersion", NULL}, + {EXIFTAG_COLORSPACE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ColorSpace", NULL}, + {EXIFTAG_PIXELXDIMENSION, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "PixelXDimension", NULL}, + {EXIFTAG_PIXELYDIMENSION, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "PixelYDimension", NULL}, + {EXIFTAG_RELATEDSOUNDFILE, 13, 13, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "RelatedSoundFile", NULL}, + {EXIFTAG_FLASHENERGY, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FlashEnergy", NULL}, + {EXIFTAG_SPATIALFREQUENCYRESPONSE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "SpatialFrequencyResponse", NULL}, + {EXIFTAG_FOCALPLANEXRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FocalPlaneXResolution", NULL}, + {EXIFTAG_FOCALPLANEYRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FocalPlaneYResolution", NULL}, + {EXIFTAG_FOCALPLANERESOLUTIONUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FocalPlaneResolutionUnit", NULL}, + {EXIFTAG_SUBJECTLOCATION, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_C0_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubjectLocation", NULL}, + {EXIFTAG_EXPOSUREINDEX, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ExposureIndex", NULL}, + {EXIFTAG_SENSINGMETHOD, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SensingMethod", NULL}, + {EXIFTAG_FILESOURCE, 1, 1, TIFF_UNDEFINED, 0, TIFF_SETGET_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FileSource", NULL}, + {EXIFTAG_SCENETYPE, 1, 1, TIFF_UNDEFINED, 0, TIFF_SETGET_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SceneType", NULL}, + {EXIFTAG_CFAPATTERN, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "CFAPattern", NULL}, + {EXIFTAG_CUSTOMRENDERED, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CustomRendered", NULL}, + {EXIFTAG_EXPOSUREMODE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ExposureMode", NULL}, + {EXIFTAG_WHITEBALANCE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "WhiteBalance", NULL}, + {EXIFTAG_DIGITALZOOMRATIO, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DigitalZoomRatio", NULL}, + {EXIFTAG_FOCALLENGTHIN35MMFILM, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FocalLengthIn35mmFilm", NULL}, + {EXIFTAG_SCENECAPTURETYPE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SceneCaptureType", NULL}, + {EXIFTAG_GAINCONTROL, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "GainControl", NULL}, + {EXIFTAG_CONTRAST, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Contrast", NULL}, + {EXIFTAG_SATURATION, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Saturation", NULL}, + {EXIFTAG_SHARPNESS, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Sharpness", NULL}, + {EXIFTAG_DEVICESETTINGDESCRIPTION, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "DeviceSettingDescription", NULL}, + {EXIFTAG_SUBJECTDISTANCERANGE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubjectDistanceRange", NULL}, + {EXIFTAG_IMAGEUNIQUEID, 33, 33, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ImageUniqueID", NULL}, + {EXIFTAG_CAMERAOWNERNAME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CameraOwnerName", NULL}, + {EXIFTAG_BODYSERIALNUMBER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "BodySerialNumber", NULL}, + {EXIFTAG_LENSSPECIFICATION, 4, 4, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LensSpecification", NULL}, + {EXIFTAG_LENSMAKE, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LensMake", NULL}, + {EXIFTAG_LENSMODEL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LensModel", NULL}, + {EXIFTAG_LENSSERIALNUMBER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LensSerialNumber", NULL}, + {EXIFTAG_GAMMA, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Gamma", NULL}, + {EXIFTAG_COMPOSITEIMAGE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CompositeImage", NULL}, + {EXIFTAG_SOURCEIMAGENUMBEROFCOMPOSITEIMAGE, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_C0_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SourceImageNumberOfCompositeImage", NULL}, + {EXIFTAG_SOURCEEXPOSURETIMESOFCOMPOSITEIMAGE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "SourceExposureTimesOfCompositeImage", NULL}}; /* * EXIF-GPS tags (Version 2.31, July 2016; nothing changed for version 2.32 May @@ -598,79 +440,44 @@ static const TIFFField exifFields[] = { */ static const TIFFField gpsFields[] = { - /* For the GPS tag definitions in gpsFields[] the standard definition for - *Rationals is TIFF_SETGET_DOUBLE and TIFF_SETGET_C0_FLOAT. - *-- ATTENTION: After the upgrade with Rational2Double, the GPSTAG values - *can now be written and also read in double precision! In order to achieve - *double precision for GPS tags: Standard definitions for GPSTAG is kept to - *TIFF_SETGET_DOUBLE and TIFF_SETGET_C0_FLOAT is changed to - *TIFF_SETGET_C0_DOUBLE. + /* For the GPS tag definitions in gpsFields[] the standard definition for Rationals is TIFF_SETGET_DOUBLE and TIFF_SETGET_C0_FLOAT. + *-- ATTENTION: After the upgrade with Rational2Double, the GPSTAG values can now be written and also read in double precision! + * In order to achieve double precision for GPS tags: Standard definitions for GPSTAG is kept to TIFF_SETGET_DOUBLE + * and TIFF_SETGET_C0_FLOAT is changed to TIFF_SETGET_C0_DOUBLE. */ - {GPSTAG_VERSIONID, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, - TIFF_SETGET_UINT8, FIELD_CUSTOM, 1, 0, "VersionID", NULL}, - {GPSTAG_LATITUDEREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LatitudeRef", NULL}, - {GPSTAG_LATITUDE, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_DOUBLE, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Latitude", NULL}, - {GPSTAG_LONGITUDEREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LongitudeRef", NULL}, - {GPSTAG_LONGITUDE, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_DOUBLE, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Longitude", NULL}, - {GPSTAG_ALTITUDEREF, 1, 1, TIFF_BYTE, 0, TIFF_SETGET_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "AltitudeRef", NULL}, - {GPSTAG_ALTITUDE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Altitude", NULL}, - {GPSTAG_TIMESTAMP, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_DOUBLE, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "TimeStamp", NULL}, - {GPSTAG_SATELLITES, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Satellites", NULL}, - {GPSTAG_STATUS, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Status", NULL}, - {GPSTAG_MEASUREMODE, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "MeasureMode", NULL}, - {GPSTAG_DOP, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DOP", NULL}, - {GPSTAG_SPEEDREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SpeedRef", NULL}, - {GPSTAG_SPEED, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Speed", NULL}, - {GPSTAG_TRACKREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "TrackRef", NULL}, - {GPSTAG_TRACK, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Track", NULL}, - {GPSTAG_IMGDIRECTIONREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ImgDirectionRef", NULL}, - {GPSTAG_IMGDIRECTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ImgDirection", NULL}, - {GPSTAG_MAPDATUM, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "MapDatum", NULL}, - {GPSTAG_DESTLATITUDEREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DestLatitudeRef", NULL}, - {GPSTAG_DESTLATITUDE, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_DOUBLE, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DestLatitude", NULL}, - {GPSTAG_DESTLONGITUDEREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DestLongitudeRef", NULL}, - {GPSTAG_DESTLONGITUDE, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_DOUBLE, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DestLongitude", NULL}, - {GPSTAG_DESTBEARINGREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DestBearingRef", NULL}, - {GPSTAG_DESTBEARING, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DestBearing", NULL}, - {GPSTAG_DESTDISTANCEREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DestDistanceRef", NULL}, - {GPSTAG_DESTDISTANCE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DestDistance", NULL}, - {GPSTAG_PROCESSINGMETHOD, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ProcessingMethod", NULL}, - {GPSTAG_AREAINFORMATION, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "AreaInformation", NULL}, - {GPSTAG_DATESTAMP, 11, 11, TIFF_ASCII, 0, TIFF_SETGET_ASCII, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DateStamp", NULL}, - {GPSTAG_DIFFERENTIAL, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Differential", NULL}, - {GPSTAG_GPSHPOSITIONINGERROR, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, - TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "HorizontalPositioningError", - NULL}}; + {GPSTAG_VERSIONID, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UINT8, FIELD_CUSTOM, 1, 0, "VersionID", NULL}, + {GPSTAG_LATITUDEREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LatitudeRef", NULL}, + {GPSTAG_LATITUDE, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Latitude", NULL}, + {GPSTAG_LONGITUDEREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LongitudeRef", NULL}, + {GPSTAG_LONGITUDE, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Longitude", NULL}, + {GPSTAG_ALTITUDEREF, 1, 1, TIFF_BYTE, 0, TIFF_SETGET_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "AltitudeRef", NULL}, + {GPSTAG_ALTITUDE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Altitude", NULL}, + {GPSTAG_TIMESTAMP, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "TimeStamp", NULL}, + {GPSTAG_SATELLITES, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Satellites", NULL}, + {GPSTAG_STATUS, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Status", NULL}, + {GPSTAG_MEASUREMODE, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "MeasureMode", NULL}, + {GPSTAG_DOP, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DOP", NULL}, + {GPSTAG_SPEEDREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SpeedRef", NULL}, + {GPSTAG_SPEED, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Speed", NULL}, + {GPSTAG_TRACKREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "TrackRef", NULL}, + {GPSTAG_TRACK, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Track", NULL}, + {GPSTAG_IMGDIRECTIONREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ImgDirectionRef", NULL}, + {GPSTAG_IMGDIRECTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ImgDirection", NULL}, + {GPSTAG_MAPDATUM, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "MapDatum", NULL}, + {GPSTAG_DESTLATITUDEREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DestLatitudeRef", NULL}, + {GPSTAG_DESTLATITUDE, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DestLatitude", NULL}, + {GPSTAG_DESTLONGITUDEREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DestLongitudeRef", NULL}, + {GPSTAG_DESTLONGITUDE, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DestLongitude", NULL}, + {GPSTAG_DESTBEARINGREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DestBearingRef", NULL}, + {GPSTAG_DESTBEARING, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DestBearing", NULL}, + {GPSTAG_DESTDISTANCEREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DestDistanceRef", NULL}, + {GPSTAG_DESTDISTANCE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DestDistance", NULL}, + {GPSTAG_PROCESSINGMETHOD, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ProcessingMethod", NULL}, + {GPSTAG_AREAINFORMATION, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "AreaInformation", NULL}, + {GPSTAG_DATESTAMP, 11, 11, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DateStamp", NULL}, + {GPSTAG_DIFFERENTIAL, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Differential", NULL}, + {GPSTAG_GPSHPOSITIONINGERROR, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "HorizontalPositioningError", NULL}}; +/* clang-format on */ /* was off for better readability of tag comments */ static const TIFFFieldArray tiffFieldArray = { tfiatImage, 0, TIFFArrayCount(tiffFields), (TIFFField *)tiffFields}; @@ -1039,8 +846,8 @@ const TIFFField *TIFFFieldWithTag(TIFF *tif, uint32_t tag) const TIFFField *fip = TIFFFindField(tif, tag, TIFF_ANY); if (!fip) { - TIFFErrorExtR(tif, "TIFFFieldWithTag", - "Internal error, unknown tag 0x%x", (unsigned int)tag); + TIFFWarningExtR(tif, "TIFFFieldWithTag", "Warning, unknown tag 0x%x", + (unsigned int)tag); } return (fip); } @@ -1050,8 +857,8 @@ const TIFFField *TIFFFieldWithName(TIFF *tif, const char *field_name) const TIFFField *fip = _TIFFFindFieldByName(tif, field_name, TIFF_ANY); if (!fip) { - TIFFErrorExtR(tif, "TIFFFieldWithName", - "Internal error, unknown tag %s", field_name); + TIFFWarningExtR(tif, "TIFFFieldWithName", "Warning, unknown tag %s", + field_name); } return (fip); } diff --git a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_dirread.c b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_dirread.c index 35425b4..2c49dc6 100644 --- a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_dirread.c +++ b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_dirread.c @@ -144,7 +144,11 @@ static void TIFFReadDirEntryCheckedFloat(TIFF *tif, TIFFDirEntry *direntry, float *value); static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckedDouble(TIFF *tif, TIFFDirEntry *direntry, double *value); - +#if 0 +static enum TIFFReadDirEntryErr +TIFFReadDirEntryCheckedRationalDirect(TIFF *tif, TIFFDirEntry *direntry, + TIFFRational_t *value); +#endif static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeByteSbyte(int8_t value); static enum TIFFReadDirEntryErr @@ -3469,6 +3473,49 @@ TIFFReadDirEntryCheckedSrational(TIFF *tif, TIFFDirEntry *direntry, return (TIFFReadDirEntryErrOk); } +#if 0 +static enum TIFFReadDirEntryErr +TIFFReadDirEntryCheckedRationalDirect(TIFF *tif, TIFFDirEntry *direntry, + TIFFRational_t *value) +{ /*--: SetGetRATIONAL_directly:_CustomTag: Read rational (and signed rationals) + directly --*/ + UInt64Aligned_t m; + + assert(sizeof(double) == 8); + assert(sizeof(uint64_t) == 8); + assert(sizeof(uint32_t) == 4); + + if (direntry->tdir_count != 1) + return (TIFFReadDirEntryErrCount); + + if (direntry->tdir_type != TIFF_RATIONAL && + direntry->tdir_type != TIFF_SRATIONAL) + return (TIFFReadDirEntryErrType); + + if (!(tif->tif_flags & TIFF_BIGTIFF)) + { + enum TIFFReadDirEntryErr err; + uint32_t offset = direntry->tdir_offset.toff_long; + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong(&offset); + err = TIFFReadDirEntryData(tif, offset, 8, m.i); + if (err != TIFFReadDirEntryErrOk) + return (err); + } + else + { + m.l = direntry->tdir_offset.toff_long8; + } + + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabArrayOfLong(m.i, 2); + + value->uNum = m.i[0]; + value->uDenom = m.i[1]; + return (TIFFReadDirEntryErrOk); +} /*-- TIFFReadDirEntryCheckedRationalDirect() --*/ +#endif + static void TIFFReadDirEntryCheckedFloat(TIFF *tif, TIFFDirEntry *direntry, float *value) { @@ -4067,9 +4114,11 @@ int TIFFReadDirectory(TIFF *tif) if (tif->tif_nextdiroff == 0) { - /* In this special case, tif_diroff needs also to be set to 0. */ + /* In this special case, tif_diroff needs also to be set to 0. + * This is behind the last IFD, thus no checking or reading necessary. + */ tif->tif_diroff = tif->tif_nextdiroff; - return 0; /* last offset, thus no checking necessary */ + return 0; } nextdiroff = tif->tif_nextdiroff; @@ -4523,7 +4572,52 @@ int TIFFReadDirectory(TIFF *tif) } } break; - /* END REV 4.0 COMPATIBILITY */ + /* END REV 4.0 COMPATIBILITY */ +#if 0 + case TIFFTAG_EP_BATTERYLEVEL: + /* TIFFTAG_EP_BATTERYLEVEL can be RATIONAL or ASCII. + * LibTiff defines it as ASCII and converts RATIONAL to an + * ASCII string. */ + switch (dp->tdir_type) + { + case TIFF_RATIONAL: + { + /* Read rational and convert to ASCII*/ + enum TIFFReadDirEntryErr err; + TIFFRational_t rValue; + err = TIFFReadDirEntryCheckedRationalDirect( + tif, dp, &rValue); + if (err != TIFFReadDirEntryErrOk) + { + fip = TIFFFieldWithTag(tif, dp->tdir_tag); + TIFFReadDirEntryOutputErr( + tif, err, module, + fip ? fip->field_name : "unknown tagname", + 1); + } + else + { + char szAux[32]; + snprintf(szAux, sizeof(szAux) - 1, "%d/%d", + rValue.uNum, rValue.uDenom); + TIFFSetField(tif, dp->tdir_tag, szAux); + } + } + break; + case TIFF_ASCII: + (void)TIFFFetchNormalTag(tif, dp, TRUE); + break; + default: + fip = TIFFFieldWithTag(tif, dp->tdir_tag); + TIFFWarningExtR(tif, module, + "Invalid data type for tag %s. " + "ASCII or RATIONAL expected", + fip ? fip->field_name + : "unknown tagname"); + break; + } + break; +#endif default: (void)TIFFFetchNormalTag(tif, dp, TRUE); break; @@ -4944,7 +5038,7 @@ static void TIFFReadDirectoryCheckOrder(TIFF *tif, TIFFDirEntry *dir, uint16_t dircount) { static const char module[] = "TIFFReadDirectoryCheckOrder"; - uint16_t m; + uint32_t m; uint16_t n; TIFFDirEntry *o; m = 0; @@ -5131,6 +5225,8 @@ int TIFFReadCustomDirectory(TIFF *tif, toff_t diroff, } /*-- if (!dp->tdir_ignore) */ } } + /* To be able to return from SubIFD or custom-IFD to main-IFD */ + tif->tif_setdirectory_force_absolute = TRUE; if (dir) _TIFFfreeExt(tif, dir); return 1; @@ -5448,7 +5544,8 @@ int _TIFFCheckDirNumberAndOffset(TIFF *tif, tdir_t dirn, uint64_t diroff) } /* Arbitrary (hopefully big enough) limit */ - if (tif->tif_dirnumber >= TIFF_MAX_DIR_COUNT) + if (TIFFHashSetSize(tif->tif_map_dir_offset_to_number) >= + TIFF_MAX_DIR_COUNT) { TIFFErrorExtR(tif, "_TIFFCheckDirNumberAndOffset", "Cannot handle more than %u TIFF directories", @@ -5481,8 +5578,6 @@ int _TIFFCheckDirNumberAndOffset(TIFF *tif, tdir_t dirn, uint64_t diroff) return 0; } - tif->tif_dirnumber++; - return 1; } /* --- _TIFFCheckDirNumberAndOffset() ---*/ @@ -5497,13 +5592,6 @@ int _TIFFGetDirNumberFromOffset(TIFF *tif, uint64_t diroff, tdir_t *dirn) { if (diroff == 0) /* no more directories */ return 0; - if (tif->tif_dirnumber >= TIFF_MAX_DIR_COUNT) - { - TIFFErrorExtR(tif, "_TIFFGetDirNumberFromOffset", - "Cannot handle more than %u TIFF directories", - TIFF_MAX_DIR_COUNT); - return 0; - } /* Check if offset is already in the list and return matching directory * number. Otherwise update IFD list using TIFFNumberOfDirectories() and @@ -5524,6 +5612,7 @@ int _TIFFGetDirNumberFromOffset(TIFF *tif, uint64_t diroff, tdir_t *dirn) return 1; } + /* This updates the directory list for all main-IFDs in the file. */ TIFFNumberOfDirectories(tif); foundEntry = (TIFFOffsetAndDirNumber *)TIFFHashSetLookup( @@ -5537,6 +5626,83 @@ int _TIFFGetDirNumberFromOffset(TIFF *tif, uint64_t diroff, tdir_t *dirn) return 0; } /*--- _TIFFGetDirNumberFromOffset() ---*/ +/* + * Retrieve the matching IFD directory offset of a given IFD number + * from the list of directories already seen. + * Returns 1 if the offset was in the list of already seen IFDs and the + * directory offset can be returned. The directory list is not updated. + * Otherwise returns 0 or if an error occurred. + */ +int _TIFFGetOffsetFromDirNumber(TIFF *tif, tdir_t dirn, uint64_t *diroff) +{ + + if (tif->tif_map_dir_number_to_offset == NULL) + return 0; + TIFFOffsetAndDirNumber entry; + entry.offset = 0; /* not used */ + entry.dirNumber = dirn; + + TIFFOffsetAndDirNumber *foundEntry = + (TIFFOffsetAndDirNumber *)TIFFHashSetLookup( + tif->tif_map_dir_number_to_offset, &entry); + if (foundEntry) + { + *diroff = foundEntry->offset; + return 1; + } + + return 0; +} /*--- _TIFFGetOffsetFromDirNumber() ---*/ + +/* + * Remove an entry from the directory list of already seen directories + * by directory offset. + * If an entry is to be removed from the list, it is also okay if the entry + * is not in the list or the list does not exist. + */ +int _TIFFRemoveEntryFromDirectoryListByOffset(TIFF *tif, uint64_t diroff) +{ + if (tif->tif_map_dir_offset_to_number == NULL) + return 1; + + TIFFOffsetAndDirNumber entryOld; + entryOld.offset = diroff; + entryOld.dirNumber = 0; + /* We must remove first from tif_map_dir_number_to_offset as the + * entry is owned (and thus freed) by tif_map_dir_offset_to_number. + * However, we need firstly to find the directory number from offset. */ + + TIFFOffsetAndDirNumber *foundEntryOldOff = + (TIFFOffsetAndDirNumber *)TIFFHashSetLookup( + tif->tif_map_dir_offset_to_number, &entryOld); + if (foundEntryOldOff) + { + entryOld.dirNumber = foundEntryOldOff->dirNumber; + if (tif->tif_map_dir_number_to_offset != NULL) + { + TIFFOffsetAndDirNumber *foundEntryOldDir = + (TIFFOffsetAndDirNumber *)TIFFHashSetLookup( + tif->tif_map_dir_number_to_offset, &entryOld); + if (foundEntryOldDir) + { + TIFFHashSetRemove(tif->tif_map_dir_number_to_offset, + foundEntryOldDir); + TIFFHashSetRemove(tif->tif_map_dir_offset_to_number, + foundEntryOldOff); + return 1; + } + } + else + { + TIFFErrorExtR(tif, "_TIFFRemoveEntryFromDirectoryListByOffset", + "Unexpectedly tif_map_dir_number_to_offset is " + "missing but tif_map_dir_offset_to_number exists."); + return 0; + } + } + return 1; +} /*--- _TIFFRemoveEntryFromDirectoryListByOffset() ---*/ + /* * Check the count field of a directory entry against a known value. The * caller is expected to skip/ignore the tag if there is a mismatch. diff --git a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_dirwrite.c b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_dirwrite.c index beebd11..d8844bb 100644 --- a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_dirwrite.c +++ b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_dirwrite.c @@ -320,6 +320,7 @@ int TIFFRewriteDirectory(TIFF *tif) * Find and zero the pointer to this directory, so that TIFFLinkDirectory * will cause it to be added after this directories current pre-link. */ + uint64_t torewritediroff = tif->tif_diroff; if (!(tif->tif_flags & TIFF_BIGTIFF)) { @@ -387,6 +388,8 @@ int TIFFRewriteDirectory(TIFF *tif) nextdir = nextnextdir; } } + /* Remove skipped offset from IFD loop directory list. */ + _TIFFRemoveEntryFromDirectoryListByOffset(tif, torewritediroff); } else { @@ -456,6 +459,8 @@ int TIFFRewriteDirectory(TIFF *tif) nextdir = nextnextdir; } } + /* Remove skipped offset from IFD loop directory list. */ + _TIFFRemoveEntryFromDirectoryListByOffset(tif, torewritediroff); } /* @@ -1114,7 +1119,12 @@ static int TIFFWriteDirectorySec(TIFF *tif, int isimage, int imagedone, if (tif->tif_dataoff & 1) tif->tif_dataoff++; if (isimage) - tif->tif_curdir++; + { + if (tif->tif_curdir == TIFF_NON_EXISTENT_DIR_NUMBER) + tif->tif_curdir = 0; + else + tif->tif_curdir++; + } } if (isimage) { @@ -2063,34 +2073,41 @@ static int TIFFWriteDirectoryTagTransferfunction(TIFF *tif, uint32_t *ndir, (*ndir)++; return (1); } + /* TIFFTAG_TRANSFERFUNCTION expects (1 or 3) pointer to arrays with + * (1 << BitsPerSample) * uint16_t values. + */ m = (1 << tif->tif_dir.td_bitspersample); - n = tif->tif_dir.td_samplesperpixel - tif->tif_dir.td_extrasamples; + /* clang-format off */ + n = (tif->tif_dir.td_samplesperpixel - tif->tif_dir.td_extrasamples) > 1 ? 3 : 1; + /* clang-format on */ + + /* Check for proper number of transferfunctions */ + for (int i = 0; i < n; i++) + { + if (tif->tif_dir.td_transferfunction[i] == NULL) + { + TIFFWarningExtR( + tif, module, + "Too few TransferFunctions provided. Tag not written to file"); + return (1); /* Not an error; only tag is not written. */ + } + } /* * Check if the table can be written as a single column, * or if it must be written as 3 columns. Note that we * write a 3-column tag if there are 2 samples/pixel and * a single column of data won't suffice--hmm. */ - if (n > 3) - n = 3; if (n == 3) { - if (tif->tif_dir.td_transferfunction[2] == NULL || - !_TIFFmemcmp(tif->tif_dir.td_transferfunction[0], + if (!_TIFFmemcmp(tif->tif_dir.td_transferfunction[0], tif->tif_dir.td_transferfunction[2], - m * sizeof(uint16_t))) - n = 2; - } - if (n == 2) - { - if (tif->tif_dir.td_transferfunction[1] == NULL || + m * sizeof(uint16_t)) && !_TIFFmemcmp(tif->tif_dir.td_transferfunction[0], tif->tif_dir.td_transferfunction[1], m * sizeof(uint16_t))) n = 1; } - if (n == 0) - n = 1; o = _TIFFmallocExt(tif, n * m * sizeof(uint16_t)); if (o == NULL) { diff --git a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_fax3.c b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_fax3.c index 7428544..3874ac9 100644 --- a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_fax3.c +++ b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_fax3.c @@ -349,22 +349,22 @@ static int Fax3Decode2D(TIFF *tif, uint8_t *buf, tmsize_t occ, uint16_t s) } #undef SWAP -# define FILL(n, cp) { \ - int32_t ifill; \ - for (ifill = 0; ifill < (n); ++ifill) \ - { \ - (cp)[ifill] = 0xff; \ - } \ - (cp) += (n); \ +#define FILL(n, cp) { \ + int32_t ifill; \ + for (ifill = 0; ifill < (n); ++ifill) \ + { \ + (cp)[ifill] = 0xff; \ + } \ + (cp) += (n); \ } -# define ZERO(n, cp) { \ - int32_t izero; \ - for (izero = 0; izero < (n); ++izero) \ - { \ - (cp)[izero] = 0; \ - } \ - (cp) += (n); \ +#define ZERO(n, cp) { \ + int32_t izero; \ + for (izero = 0; izero < (n); ++izero) \ + { \ + (cp)[izero] = 0; \ + } \ + (cp) += (n); \ } /* @@ -541,7 +541,7 @@ static int Fax3SetupState(TIFF *tif) TIFFroundup and TIFFSafeMultiply return zero on integer overflow */ dsp->runs = (uint32_t *)NULL; - dsp->nruns = TIFFroundup_32(rowpixels, 32); + dsp->nruns = TIFFroundup_32(rowpixels + 1, 32); if (needsRefLine) { dsp->nruns = TIFFSafeMultiply(uint32_t, dsp->nruns, 2); diff --git a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_hash_set.c b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_hash_set.c index 49718ce..9792c63 100644 --- a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_hash_set.c +++ b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_hash_set.c @@ -26,6 +26,8 @@ * DEALINGS IN THE SOFTWARE. ****************************************************************************/ +#include "tif_config.h" + #include "tif_hash_set.h" #include @@ -161,7 +163,6 @@ TIFFHashSet *TIFFHashSetNew(TIFFHashSetHashFunc fnHashFunc, return set; } -#ifdef notdef /************************************************************************/ /* TIFFHashSetSize() */ /************************************************************************/ @@ -181,7 +182,6 @@ int TIFFHashSetSize(const TIFFHashSet *set) assert(set != NULL); return set->nSize; } -#endif /************************************************************************/ /* TIFFHashSetGetNewListElt() */ diff --git a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_hash_set.h b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_hash_set.h index 1a3f8da..f60e2c6 100644 --- a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_hash_set.h +++ b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_hash_set.h @@ -71,11 +71,11 @@ extern "C" void TIFFHashSetDestroy(TIFFHashSet *set); + int TIFFHashSetSize(const TIFFHashSet *set); + #ifdef notused void TIFFHashSetClear(TIFFHashSet *set); - int TIFFHashSetSize(const TIFFHashSet *set); - /** TIFFHashSetIterEltFunc */ typedef int (*TIFFHashSetIterEltFunc)(void *elt, void *user_data); diff --git a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_lerc.c b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_lerc.c index 99de713..4f357a6 100644 --- a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_lerc.c +++ b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_lerc.c @@ -517,7 +517,7 @@ static int LERCPreDecode(TIFF *tif, uint16_t s) { const unsigned nb_pixels = sp->segment_width * sp->segment_height; unsigned i; -#if HOST_BIGENDIAN +#if WORDS_BIGENDIAN const unsigned char nan_bytes[] = {0x7f, 0xc0, 0, 0}; #else const unsigned char nan_bytes[] = {0, 0, 0xc0, 0x7f}; diff --git a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_luv.c b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_luv.c index 051721e..021756d 100644 --- a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_luv.c +++ b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_luv.c @@ -953,6 +953,13 @@ static { register int vi, ui; + /* check for NaN */ + if (u != u || v != v) + { + u = U_NEU; + v = V_NEU; + } + if (v < UV_VSTART) return oog_encode(u, v); vi = tiff_itrunc((v - UV_VSTART) * (1. / UV_SQSIZ), em); diff --git a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_lzw.c b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_lzw.c index ba75a07..d631fa1 100644 --- a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_lzw.c +++ b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_lzw.c @@ -423,6 +423,10 @@ static int LZWDecode(TIFF *tif, uint8_t *op0, tmsize_t occ0, uint16_t s) if (sp->read_error) { + TIFFErrorExtR(tif, module, + "LZWDecode: Scanline %" PRIu32 " cannot be read due to " + "previous error", + tif->tif_row); return 0; } @@ -742,6 +746,7 @@ after_loop: return (1); no_eoi: + sp->read_error = 1; TIFFErrorExtR(tif, module, "LZWDecode: Strip %" PRIu32 " not terminated with EOI code", tif->tif_curstrip); diff --git a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_ojpeg.c b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_ojpeg.c index 0c915de..ea57209 100644 --- a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_ojpeg.c +++ b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_ojpeg.c @@ -1360,6 +1360,9 @@ static int OJPEGWriteHeaderInfo(TIFF *tif) { assert(sp->subsampling_convert_ycbcrbuf == 0); assert(sp->subsampling_convert_ycbcrimage == 0); + /* Check for division by zero. */ + if (sp->subsampling_hor == 0 || sp->subsampling_ver == 0) + return (0); sp->subsampling_convert_ylinelen = ((sp->strile_width + sp->subsampling_hor * 8 - 1) / (sp->subsampling_hor * 8) * sp->subsampling_hor * 8); diff --git a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_open.c b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_open.c index 8a86a26..23fcf81 100644 --- a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_open.c +++ b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_open.c @@ -365,8 +365,12 @@ TIFF *TIFFClientOpenExt(const char *name, const char *mode, (tif->tif_flags & ~TIFF_FILLORDER) | FILLORDER_LSB2MSB; break; case 'H': + TIFFWarningExtR(tif, name, + "H(ost) mode is deprecated. Since " + "libtiff 4.5.1, it is an alias of 'B' / " + "FILLORDER_MSB2LSB."); tif->tif_flags = - (tif->tif_flags & ~TIFF_FILLORDER) | HOST_FILLORDER; + (tif->tif_flags & ~TIFF_FILLORDER) | FILLORDER_MSB2LSB; break; case 'M': if (m == O_RDONLY) @@ -485,7 +489,7 @@ TIFF *TIFFClientOpenExt(const char *name, const char *mode, goto bad; tif->tif_diroff = 0; tif->tif_lastdiroff = 0; - tif->tif_dirnumber = 0; + tif->tif_setdirectory_force_absolute = FALSE; return (tif); } /* diff --git a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_webp.c b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_webp.c index 07db7cc..bf9d77e 100644 --- a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_webp.c +++ b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_webp.c @@ -47,9 +47,11 @@ typedef struct { uint16_t nSamples; /* number of samples per pixel */ - int lossless; /* lossy/lossless compression */ - int quality_level; /* compression level */ - WebPPicture sPicture; /* WebP Picture */ + int lossless; /* lossy/lossless compression */ + int lossless_exact; /* lossless exact mode. If TRUE, R,G,B values in areas + with alpha = 0 will be preserved */ + int quality_level; /* compression level */ + WebPPicture sPicture; /* WebP Picture */ WebPConfig sEncoderConfig; /* WebP encoder config */ uint8_t *pBuffer; /* buffer to hold raw data on encoding */ unsigned int buffer_offset; /* current offset into the buffer */ @@ -149,6 +151,64 @@ static int TWebPDecode(TIFF *tif, uint8_t *op, tmsize_t occ, uint16_t s) segment_height = td->td_rowsperstrip; } + int webp_width, webp_height; + if (!WebPGetInfo(tif->tif_rawcp, + (uint64_t)tif->tif_rawcc > UINT32_MAX + ? UINT32_MAX + : (uint32_t)tif->tif_rawcc, + &webp_width, &webp_height)) + { + TIFFErrorExtR(tif, module, "WebPGetInfo() failed"); + return 0; + } + if ((uint32_t)webp_width != segment_width || + (uint32_t)webp_height != segment_height) + { + TIFFErrorExtR( + tif, module, "WebP blob dimension is %dx%d. Expected %ux%u", + webp_width, webp_height, segment_width, segment_height); + return 0; + } + +#if WEBP_DECODER_ABI_VERSION >= 0x0002 + WebPDecoderConfig config; + if (!WebPInitDecoderConfig(&config)) + { + TIFFErrorExtR(tif, module, "WebPInitDecoderConfig() failed"); + return 0; + } + + const bool bWebPGetFeaturesOK = + WebPGetFeatures(tif->tif_rawcp, + (uint64_t)tif->tif_rawcc > UINT32_MAX + ? UINT32_MAX + : (uint32_t)tif->tif_rawcc, + &config.input) == VP8_STATUS_OK; + + WebPFreeDecBuffer(&config.output); + + if (!bWebPGetFeaturesOK) + { + TIFFErrorExtR(tif, module, "WebPInitDecoderConfig() failed"); + return 0; + } + + const int webp_bands = config.input.has_alpha ? 4 : 3; + if (webp_bands != sp->nSamples && + /* We accept the situation where the WebP blob has only 3 bands, + * whereas the raster is 4 bands. This can happen when the alpha + * channel is fully opaque, and WebP decoding works fine in that + * situation. + */ + !(webp_bands == 3 && sp->nSamples == 4)) + { + TIFFErrorExtR(tif, module, + "WebP blob band count is %d. Expected %d", webp_bands, + sp->nSamples); + return 0; + } +#endif + buffer_size = segment_width * segment_height * sp->nSamples; if (occ == (tmsize_t)buffer_size) { @@ -461,6 +521,9 @@ static int TWebPSetupEncode(TIFF *tif) if (sp->lossless) { sp->sPicture.use_argb = 1; +#if WEBP_ENCODER_ABI_VERSION >= 0x0209 + sp->sEncoderConfig.exact = sp->lossless_exact; +#endif } #endif @@ -695,6 +758,17 @@ static int TWebPVSetField(TIFF *tif, uint32_t tag, va_list ap) "Need to upgrade WEBP driver, this version doesn't support " "lossless compression."); return 0; +#endif + case TIFFTAG_WEBP_LOSSLESS_EXACT: +#if WEBP_ENCODER_ABI_VERSION >= 0x0209 + sp->lossless_exact = va_arg(ap, int); + return 1; +#else + TIFFErrorExtR( + tif, module, + "Need to upgrade WEBP driver, this version doesn't support " + "lossless compression."); + return 0; #endif default: return (*sp->vsetparent)(tif, tag, ap); @@ -714,6 +788,9 @@ static int TWebPVGetField(TIFF *tif, uint32_t tag, va_list ap) case TIFFTAG_WEBP_LOSSLESS: *va_arg(ap, int *) = sp->lossless; break; + case TIFFTAG_WEBP_LOSSLESS_EXACT: + *va_arg(ap, int *) = sp->lossless_exact; + break; default: return (*sp->vgetparent)(tif, tag, ap); } @@ -726,6 +803,9 @@ static const TIFFField TWebPFields[] = { {TIFFTAG_WEBP_LOSSLESS, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, TRUE, FALSE, "WEBP lossless/lossy", NULL}, + {TIFFTAG_WEBP_LOSSLESS_EXACT, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, + TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, TRUE, FALSE, "WEBP exact lossless", + NULL}, }; int TIFFInitWebP(TIFF *tif, int scheme) @@ -764,6 +844,7 @@ int TIFFInitWebP(TIFF *tif, int scheme) /* Default values for codec-specific fields */ sp->quality_level = 75; /* default comp. level */ sp->lossless = 0; /* default to false */ + sp->lossless_exact = 1; /* exact lossless mode (if lossless enabled) */ sp->state = 0; sp->nSamples = 0; sp->psDecoder = NULL; diff --git a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_win32.c b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_win32.c index 8b47650..1a6b86d 100644 --- a/qtimageformats/src/3rdparty/libtiff/libtiff/tif_win32.c +++ b/qtimageformats/src/3rdparty/libtiff/libtiff/tif_win32.c @@ -274,7 +274,7 @@ TIFF *TIFFOpenExt(const char *name, const char *mode, TIFFOpenOptions *opts) dwMode = OPEN_EXISTING; break; case O_RDWR: - dwMode = OPEN_ALWAYS; + dwMode = OPEN_EXISTING; break; case O_RDWR | O_CREAT: dwMode = OPEN_ALWAYS; @@ -332,7 +332,7 @@ TIFF *TIFFOpenWExt(const wchar_t *name, const char *mode, TIFFOpenOptions *opts) dwMode = OPEN_EXISTING; break; case O_RDWR: - dwMode = OPEN_ALWAYS; + dwMode = OPEN_EXISTING; break; case O_RDWR | O_CREAT: dwMode = OPEN_ALWAYS; diff --git a/qtimageformats/src/3rdparty/libtiff/libtiff/tiff.h b/qtimageformats/src/3rdparty/libtiff/libtiff/tiff.h index 285a968..d8da33d 100644 --- a/qtimageformats/src/3rdparty/libtiff/libtiff/tiff.h +++ b/qtimageformats/src/3rdparty/libtiff/libtiff/tiff.h @@ -166,30 +166,30 @@ typedef enum /* * TIFF Tag Definitions. */ -#define TIFFTAG_SUBFILETYPE 254 /* subfile data descriptor */ -#define FILETYPE_REDUCEDIMAGE 0x1 /* reduced resolution version */ -#define FILETYPE_PAGE 0x2 /* one page of many */ -#define FILETYPE_MASK 0x4 /* transparency mask */ -#define TIFFTAG_OSUBFILETYPE 255 /* +kind of data in subfile */ -#define OFILETYPE_IMAGE 1 /* full resolution image data */ -#define OFILETYPE_REDUCEDIMAGE 2 /* reduced size image data */ -#define OFILETYPE_PAGE 3 /* one page of many */ -#define TIFFTAG_IMAGEWIDTH 256 /* image width in pixels */ -#define TIFFTAG_IMAGELENGTH 257 /* image height in pixels */ -#define TIFFTAG_BITSPERSAMPLE 258 /* bits per channel (sample) */ -#define TIFFTAG_COMPRESSION 259 /* data compression technique */ -#define COMPRESSION_NONE 1 /* dump mode */ -#define COMPRESSION_CCITTRLE 2 /* CCITT modified Huffman RLE */ -#define COMPRESSION_CCITTFAX3 3 /* CCITT Group 3 fax encoding */ -#define COMPRESSION_CCITT_T4 3 /* CCITT T.4 (TIFF 6 name) */ -#define COMPRESSION_CCITTFAX4 4 /* CCITT Group 4 fax encoding */ -#define COMPRESSION_CCITT_T6 4 /* CCITT T.6 (TIFF 6 name) */ -#define COMPRESSION_LZW 5 /* Lempel-Ziv & Welch */ -#define COMPRESSION_OJPEG 6 /* !6.0 JPEG */ -#define COMPRESSION_JPEG 7 /* %JPEG DCT compression */ -#define COMPRESSION_T85 9 /* !TIFF/FX T.85 JBIG compression */ -#define COMPRESSION_T43 \ - 10 /* !TIFF/FX T.43 colour by layered JBIG compression */ +/* clang-format off */ /* for better readability of tag comments */ +#define TIFFTAG_SUBFILETYPE 254 /* subfile data descriptor */ +#define FILETYPE_REDUCEDIMAGE 0x1 /* reduced resolution version */ +#define FILETYPE_PAGE 0x2 /* one page of many */ +#define FILETYPE_MASK 0x4 /* transparency mask */ +#define TIFFTAG_OSUBFILETYPE 255 /* +kind of data in subfile */ +#define OFILETYPE_IMAGE 1 /* full resolution image data */ +#define OFILETYPE_REDUCEDIMAGE 2 /* reduced size image data */ +#define OFILETYPE_PAGE 3 /* one page of many */ +#define TIFFTAG_IMAGEWIDTH 256 /* image width in pixels */ +#define TIFFTAG_IMAGELENGTH 257 /* image height in pixels */ +#define TIFFTAG_BITSPERSAMPLE 258 /* bits per channel (sample) */ +#define TIFFTAG_COMPRESSION 259 /* data compression technique */ +#define COMPRESSION_NONE 1 /* dump mode */ +#define COMPRESSION_CCITTRLE 2 /* CCITT modified Huffman RLE */ +#define COMPRESSION_CCITTFAX3 3 /* CCITT Group 3 fax encoding */ +#define COMPRESSION_CCITT_T4 3 /* CCITT T.4 (TIFF 6 name) */ +#define COMPRESSION_CCITTFAX4 4 /* CCITT Group 4 fax encoding */ +#define COMPRESSION_CCITT_T6 4 /* CCITT T.6 (TIFF 6 name) */ +#define COMPRESSION_LZW 5 /* Lempel-Ziv & Welch */ +#define COMPRESSION_OJPEG 6 /* !6.0 JPEG */ +#define COMPRESSION_JPEG 7 /* %JPEG DCT compression */ +#define COMPRESSION_T85 9 /* !TIFF/FX T.85 JBIG compression */ +#define COMPRESSION_T43 10 /* !TIFF/FX T.43 colour by layered JBIG compression */ #define COMPRESSION_NEXT 32766 /* NeXT 2-bit RLE */ #define COMPRESSION_CCITTRLEW 32771 /* #1 w/ word alignment */ #define COMPRESSION_PACKBITS 32773 /* Macintosh RLE */ @@ -203,113 +203,107 @@ typedef enum #define COMPRESSION_PIXARFILM 32908 /* Pixar companded 10bit LZW */ #define COMPRESSION_PIXARLOG 32909 /* Pixar companded 11bit ZIP */ #define COMPRESSION_DEFLATE 32946 /* Deflate compression, legacy tag */ -#define COMPRESSION_ADOBE_DEFLATE \ - 8 /* Deflate compression, \ - as recognized by Adobe */ +#define COMPRESSION_ADOBE_DEFLATE 8 /* Deflate compression, as recognized by Adobe */ /* compression code 32947 is reserved for Oceana Matrix */ #define COMPRESSION_DCS 32947 /* Kodak DCS encoding */ #define COMPRESSION_JBIG 34661 /* ISO JBIG */ #define COMPRESSION_SGILOG 34676 /* SGI Log Luminance RLE */ #define COMPRESSION_SGILOG24 34677 /* SGI Log 24-bit packed */ #define COMPRESSION_JP2000 34712 /* Leadtools JPEG2000 */ -#define COMPRESSION_LERC \ - 34887 /* ESRI Lerc codec: https://github.com/Esri/lerc */ +#define COMPRESSION_LERC 34887 /* ESRI Lerc codec: https://github.com/Esri/lerc */ /* compression codes 34887-34889 are reserved for ESRI */ -#define COMPRESSION_LZMA 34925 /* LZMA2 */ -#define COMPRESSION_ZSTD \ - 50000 /* ZSTD: WARNING not registered in Adobe-maintained registry */ -#define COMPRESSION_WEBP \ - 50001 /* WEBP: WARNING not registered in Adobe-maintained registry */ -#define COMPRESSION_JXL \ - 50002 /* JPEGXL: WARNING not registered in Adobe-maintained registry */ -#define TIFFTAG_PHOTOMETRIC 262 /* photometric interpretation */ -#define PHOTOMETRIC_MINISWHITE 0 /* min value is white */ -#define PHOTOMETRIC_MINISBLACK 1 /* min value is black */ -#define PHOTOMETRIC_RGB 2 /* RGB color model */ -#define PHOTOMETRIC_PALETTE 3 /* color map indexed */ -#define PHOTOMETRIC_MASK 4 /* $holdout mask */ -#define PHOTOMETRIC_SEPARATED 5 /* !color separations */ -#define PHOTOMETRIC_YCBCR 6 /* !CCIR 601 */ -#define PHOTOMETRIC_CIELAB 8 /* !1976 CIE L*a*b* */ -#define PHOTOMETRIC_ICCLAB 9 /* ICC L*a*b* [Adobe TIFF Technote 4] */ -#define PHOTOMETRIC_ITULAB 10 /* ITU L*a*b* */ -#define PHOTOMETRIC_CFA 32803 /* color filter array */ -#define PHOTOMETRIC_LOGL 32844 /* CIE Log2(L) */ -#define PHOTOMETRIC_LOGLUV 32845 /* CIE Log2(L) (u',v') */ -#define TIFFTAG_THRESHHOLDING 263 /* +thresholding used on data */ -#define THRESHHOLD_BILEVEL 1 /* b&w art scan */ -#define THRESHHOLD_HALFTONE 2 /* or dithered scan */ -#define THRESHHOLD_ERRORDIFFUSE 3 /* usually floyd-steinberg */ -#define TIFFTAG_CELLWIDTH 264 /* +dithering matrix width */ -#define TIFFTAG_CELLLENGTH 265 /* +dithering matrix height */ -#define TIFFTAG_FILLORDER 266 /* data order within a byte */ -#define FILLORDER_MSB2LSB 1 /* most significant -> least */ -#define FILLORDER_LSB2MSB 2 /* least significant -> most */ -#define TIFFTAG_DOCUMENTNAME 269 /* name of doc. image is from */ -#define TIFFTAG_IMAGEDESCRIPTION 270 /* info about image */ -#define TIFFTAG_MAKE 271 /* scanner manufacturer name */ -#define TIFFTAG_MODEL 272 /* scanner model name/number */ -#define TIFFTAG_STRIPOFFSETS 273 /* offsets to data strips */ -#define TIFFTAG_ORIENTATION 274 /* +image orientation */ -#define ORIENTATION_TOPLEFT 1 /* row 0 top, col 0 lhs */ -#define ORIENTATION_TOPRIGHT 2 /* row 0 top, col 0 rhs */ -#define ORIENTATION_BOTRIGHT 3 /* row 0 bottom, col 0 rhs */ -#define ORIENTATION_BOTLEFT 4 /* row 0 bottom, col 0 lhs */ -#define ORIENTATION_LEFTTOP 5 /* row 0 lhs, col 0 top */ -#define ORIENTATION_RIGHTTOP 6 /* row 0 rhs, col 0 top */ -#define ORIENTATION_RIGHTBOT 7 /* row 0 rhs, col 0 bottom */ -#define ORIENTATION_LEFTBOT 8 /* row 0 lhs, col 0 bottom */ -#define TIFFTAG_SAMPLESPERPIXEL 277 /* samples per pixel */ -#define TIFFTAG_ROWSPERSTRIP 278 /* rows per strip of data */ -#define TIFFTAG_STRIPBYTECOUNTS 279 /* bytes counts for strips */ -#define TIFFTAG_MINSAMPLEVALUE 280 /* +minimum sample value */ -#define TIFFTAG_MAXSAMPLEVALUE 281 /* +maximum sample value */ -#define TIFFTAG_XRESOLUTION 282 /* pixels/resolution in x */ -#define TIFFTAG_YRESOLUTION 283 /* pixels/resolution in y */ -#define TIFFTAG_PLANARCONFIG 284 /* storage organization */ -#define PLANARCONFIG_CONTIG 1 /* single image plane */ -#define PLANARCONFIG_SEPARATE 2 /* separate planes of data */ -#define TIFFTAG_PAGENAME 285 /* page name image is from */ -#define TIFFTAG_XPOSITION 286 /* x page offset of image lhs */ -#define TIFFTAG_YPOSITION 287 /* y page offset of image lhs */ -#define TIFFTAG_FREEOFFSETS 288 /* +byte offset to free block */ -#define TIFFTAG_FREEBYTECOUNTS 289 /* +sizes of free blocks */ -#define TIFFTAG_GRAYRESPONSEUNIT 290 /* $gray scale curve accuracy */ -#define GRAYRESPONSEUNIT_10S 1 /* tenths of a unit */ -#define GRAYRESPONSEUNIT_100S 2 /* hundredths of a unit */ -#define GRAYRESPONSEUNIT_1000S 3 /* thousandths of a unit */ -#define GRAYRESPONSEUNIT_10000S 4 /* ten-thousandths of a unit */ -#define GRAYRESPONSEUNIT_100000S 5 /* hundred-thousandths */ -#define TIFFTAG_GRAYRESPONSECURVE 291 /* $gray scale response curve */ -#define TIFFTAG_GROUP3OPTIONS 292 /* 32 flag bits */ -#define TIFFTAG_T4OPTIONS 292 /* TIFF 6.0 proper name alias */ -#define GROUP3OPT_2DENCODING 0x1 /* 2-dimensional coding */ -#define GROUP3OPT_UNCOMPRESSED 0x2 /* data not compressed */ -#define GROUP3OPT_FILLBITS 0x4 /* fill to byte boundary */ -#define TIFFTAG_GROUP4OPTIONS 293 /* 32 flag bits */ -#define TIFFTAG_T6OPTIONS 293 /* TIFF 6.0 proper name */ -#define GROUP4OPT_UNCOMPRESSED 0x2 /* data not compressed */ -#define TIFFTAG_RESOLUTIONUNIT 296 /* units of resolutions */ -#define RESUNIT_NONE 1 /* no meaningful units */ -#define RESUNIT_INCH 2 /* english */ -#define RESUNIT_CENTIMETER 3 /* metric */ -#define TIFFTAG_PAGENUMBER 297 /* page numbers of multi-page */ -#define TIFFTAG_COLORRESPONSEUNIT 300 /* $color curve accuracy */ -#define COLORRESPONSEUNIT_10S 1 /* tenths of a unit */ -#define COLORRESPONSEUNIT_100S 2 /* hundredths of a unit */ -#define COLORRESPONSEUNIT_1000S 3 /* thousandths of a unit */ -#define COLORRESPONSEUNIT_10000S 4 /* ten-thousandths of a unit */ -#define COLORRESPONSEUNIT_100000S 5 /* hundred-thousandths */ -#define TIFFTAG_TRANSFERFUNCTION 301 /* !colorimetry info */ -#define TIFFTAG_SOFTWARE 305 /* name & release */ -#define TIFFTAG_DATETIME 306 /* creation date and time */ -#define TIFFTAG_ARTIST 315 /* creator of image */ -#define TIFFTAG_HOSTCOMPUTER 316 /* machine where created */ -#define TIFFTAG_PREDICTOR 317 /* prediction scheme w/ LZW */ -#define PREDICTOR_NONE 1 /* no prediction scheme used */ -#define PREDICTOR_HORIZONTAL 2 /* horizontal differencing */ -#define PREDICTOR_FLOATINGPOINT 3 /* floating point predictor */ -#define TIFFTAG_WHITEPOINT 318 /* image white point */ +#define COMPRESSION_LZMA 34925 /* LZMA2 */ +#define COMPRESSION_ZSTD 50000 /* ZSTD: WARNING not registered in Adobe-maintained registry */ +#define COMPRESSION_WEBP 50001 /* WEBP: WARNING not registered in Adobe-maintained registry */ +#define COMPRESSION_JXL 50002 /* JPEGXL: WARNING not registered in Adobe-maintained registry */ +#define TIFFTAG_PHOTOMETRIC 262 /* photometric interpretation */ +#define PHOTOMETRIC_MINISWHITE 0 /* min value is white */ +#define PHOTOMETRIC_MINISBLACK 1 /* min value is black */ +#define PHOTOMETRIC_RGB 2 /* RGB color model */ +#define PHOTOMETRIC_PALETTE 3 /* color map indexed */ +#define PHOTOMETRIC_MASK 4 /* $holdout mask */ +#define PHOTOMETRIC_SEPARATED 5 /* !color separations */ +#define PHOTOMETRIC_YCBCR 6 /* !CCIR 601 */ +#define PHOTOMETRIC_CIELAB 8 /* !1976 CIE L*a*b* */ +#define PHOTOMETRIC_ICCLAB 9 /* ICC L*a*b* [Adobe TIFF Technote 4] */ +#define PHOTOMETRIC_ITULAB 10 /* ITU L*a*b* */ +#define PHOTOMETRIC_CFA 32803 /* color filter array */ +#define PHOTOMETRIC_LOGL 32844 /* CIE Log2(L) */ +#define PHOTOMETRIC_LOGLUV 32845 /* CIE Log2(L) (u',v') */ +#define TIFFTAG_THRESHHOLDING 263 /* +thresholding used on data */ +#define THRESHHOLD_BILEVEL 1 /* b&w art scan */ +#define THRESHHOLD_HALFTONE 2 /* or dithered scan */ +#define THRESHHOLD_ERRORDIFFUSE 3 /* usually floyd-steinberg */ +#define TIFFTAG_CELLWIDTH 264 /* +dithering matrix width */ +#define TIFFTAG_CELLLENGTH 265 /* +dithering matrix height */ +#define TIFFTAG_FILLORDER 266 /* data order within a byte */ +#define FILLORDER_MSB2LSB 1 /* most significant -> least */ +#define FILLORDER_LSB2MSB 2 /* least significant -> most */ +#define TIFFTAG_DOCUMENTNAME 269 /* name of doc. image is from */ +#define TIFFTAG_IMAGEDESCRIPTION 270 /* info about image */ +#define TIFFTAG_MAKE 271 /* scanner manufacturer name */ +#define TIFFTAG_MODEL 272 /* scanner model name/number */ +#define TIFFTAG_STRIPOFFSETS 273 /* offsets to data strips */ +#define TIFFTAG_ORIENTATION 274 /* +image orientation */ +#define ORIENTATION_TOPLEFT 1 /* row 0 top, col 0 lhs */ +#define ORIENTATION_TOPRIGHT 2 /* row 0 top, col 0 rhs */ +#define ORIENTATION_BOTRIGHT 3 /* row 0 bottom, col 0 rhs */ +#define ORIENTATION_BOTLEFT 4 /* row 0 bottom, col 0 lhs */ +#define ORIENTATION_LEFTTOP 5 /* row 0 lhs, col 0 top */ +#define ORIENTATION_RIGHTTOP 6 /* row 0 rhs, col 0 top */ +#define ORIENTATION_RIGHTBOT 7 /* row 0 rhs, col 0 bottom */ +#define ORIENTATION_LEFTBOT 8 /* row 0 lhs, col 0 bottom */ +#define TIFFTAG_SAMPLESPERPIXEL 277 /* samples per pixel */ +#define TIFFTAG_ROWSPERSTRIP 278 /* rows per strip of data */ +#define TIFFTAG_STRIPBYTECOUNTS 279 /* bytes counts for strips */ +#define TIFFTAG_MINSAMPLEVALUE 280 /* +minimum sample value */ +#define TIFFTAG_MAXSAMPLEVALUE 281 /* +maximum sample value */ +#define TIFFTAG_XRESOLUTION 282 /* pixels/resolution in x */ +#define TIFFTAG_YRESOLUTION 283 /* pixels/resolution in y */ +#define TIFFTAG_PLANARCONFIG 284 /* storage organization */ +#define PLANARCONFIG_CONTIG 1 /* single image plane */ +#define PLANARCONFIG_SEPARATE 2 /* separate planes of data */ +#define TIFFTAG_PAGENAME 285 /* page name image is from */ +#define TIFFTAG_XPOSITION 286 /* x page offset of image lhs */ +#define TIFFTAG_YPOSITION 287 /* y page offset of image lhs */ +#define TIFFTAG_FREEOFFSETS 288 /* +byte offset to free block */ +#define TIFFTAG_FREEBYTECOUNTS 289 /* +sizes of free blocks */ +#define TIFFTAG_GRAYRESPONSEUNIT 290 /* $gray scale curve accuracy */ +#define GRAYRESPONSEUNIT_10S 1 /* tenths of a unit */ +#define GRAYRESPONSEUNIT_100S 2 /* hundredths of a unit */ +#define GRAYRESPONSEUNIT_1000S 3 /* thousandths of a unit */ +#define GRAYRESPONSEUNIT_10000S 4 /* ten-thousandths of a unit */ +#define GRAYRESPONSEUNIT_100000S 5 /* hundred-thousandths */ +#define TIFFTAG_GRAYRESPONSECURVE 291 /* $gray scale response curve */ +#define TIFFTAG_GROUP3OPTIONS 292 /* 32 flag bits */ +#define TIFFTAG_T4OPTIONS 292 /* TIFF 6.0 proper name alias */ +#define GROUP3OPT_2DENCODING 0x1 /* 2-dimensional coding */ +#define GROUP3OPT_UNCOMPRESSED 0x2 /* data not compressed */ +#define GROUP3OPT_FILLBITS 0x4 /* fill to byte boundary */ +#define TIFFTAG_GROUP4OPTIONS 293 /* 32 flag bits */ +#define TIFFTAG_T6OPTIONS 293 /* TIFF 6.0 proper name */ +#define GROUP4OPT_UNCOMPRESSED 0x2 /* data not compressed */ +#define TIFFTAG_RESOLUTIONUNIT 296 /* units of resolutions */ +#define RESUNIT_NONE 1 /* no meaningful units */ +#define RESUNIT_INCH 2 /* english */ +#define RESUNIT_CENTIMETER 3 /* metric */ +#define TIFFTAG_PAGENUMBER 297 /* page numbers of multi-page */ +#define TIFFTAG_COLORRESPONSEUNIT 300 /* $color curve accuracy */ +#define COLORRESPONSEUNIT_10S 1 /* tenths of a unit */ +#define COLORRESPONSEUNIT_100S 2 /* hundredths of a unit */ +#define COLORRESPONSEUNIT_1000S 3 /* thousandths of a unit */ +#define COLORRESPONSEUNIT_10000S 4 /* ten-thousandths of a unit */ +#define COLORRESPONSEUNIT_100000S 5 /* hundred-thousandths */ +#define TIFFTAG_TRANSFERFUNCTION 301 /* !colorimetry info */ +#define TIFFTAG_SOFTWARE 305 /* name & release */ +#define TIFFTAG_DATETIME 306 /* creation date and time */ +#define TIFFTAG_ARTIST 315 /* creator of image */ +#define TIFFTAG_HOSTCOMPUTER 316 /* machine where created */ +#define TIFFTAG_PREDICTOR 317 /* prediction scheme w/ LZW */ +#define PREDICTOR_NONE 1 /* no prediction scheme used */ +#define PREDICTOR_HORIZONTAL 2 /* horizontal differencing */ +#define PREDICTOR_FLOATINGPOINT 3 /* floating point predictor */ +#define TIFFTAG_WHITEPOINT 318 /* image white point */ #define TIFFTAG_PRIMARYCHROMATICITIES 319 /* !primary chromaticities */ #define TIFFTAG_COLORMAP 320 /* RGB map for palette image */ #define TIFFTAG_HALFTONEHINTS 321 /* !highlight+shadow info */ @@ -325,39 +319,31 @@ typedef enum #define TIFFTAG_CONSECUTIVEBADFAXLINES 328 /* max consecutive bad lines */ #define TIFFTAG_SUBIFD 330 /* subimage descriptors */ #define TIFFTAG_INKSET 332 /* !inks in separated image */ -#define INKSET_CMYK 1 /* !cyan-magenta-yellow-black color */ -#define INKSET_MULTIINK 2 /* !multi-ink or hi-fi color */ -#define TIFFTAG_INKNAMES 333 /* !ascii names of inks */ -#define TIFFTAG_NUMBEROFINKS 334 /* !number of inks */ -#define TIFFTAG_DOTRANGE 336 /* !0% and 100% dot codes */ -#define TIFFTAG_TARGETPRINTER 337 /* !separation target */ -#define TIFFTAG_EXTRASAMPLES 338 /* !info about extra samples */ -#define EXTRASAMPLE_UNSPECIFIED 0 /* !unspecified data */ -#define EXTRASAMPLE_ASSOCALPHA 1 /* !associated alpha data */ -#define EXTRASAMPLE_UNASSALPHA 2 /* !unassociated alpha data */ -#define TIFFTAG_SAMPLEFORMAT 339 /* !data sample format */ -#define SAMPLEFORMAT_UINT 1 /* !unsigned integer data */ -#define SAMPLEFORMAT_INT 2 /* !signed integer data */ -#define SAMPLEFORMAT_IEEEFP 3 /* !IEEE floating point data */ -#define SAMPLEFORMAT_VOID 4 /* !untyped data */ -#define SAMPLEFORMAT_COMPLEXINT 5 /* !complex signed int */ -#define SAMPLEFORMAT_COMPLEXIEEEFP 6 /* !complex ieee floating */ -#define TIFFTAG_SMINSAMPLEVALUE 340 /* !variable MinSampleValue */ -#define TIFFTAG_SMAXSAMPLEVALUE 341 /* !variable MaxSampleValue */ -#define TIFFTAG_CLIPPATH \ - 343 /* %ClipPath \ - [Adobe TIFF technote 2] */ -#define TIFFTAG_XCLIPPATHUNITS \ - 344 /* %XClipPathUnits \ - [Adobe TIFF technote 2] */ -#define TIFFTAG_YCLIPPATHUNITS \ - 345 /* %YClipPathUnits \ - [Adobe TIFF technote 2] */ -#define TIFFTAG_INDEXED \ - 346 /* %Indexed \ - [Adobe TIFF Technote 3] */ -#define TIFFTAG_JPEGTABLES 347 /* %JPEG table stream */ -#define TIFFTAG_OPIPROXY 351 /* %OPI Proxy [Adobe TIFF technote] */ +#define INKSET_CMYK 1 /* !cyan-magenta-yellow-black color */ +#define INKSET_MULTIINK 2 /* !multi-ink or hi-fi color */ +#define TIFFTAG_INKNAMES 333 /* !ascii names of inks */ +#define TIFFTAG_NUMBEROFINKS 334 /* !number of inks */ +#define TIFFTAG_DOTRANGE 336 /* !0% and 100% dot codes */ +#define TIFFTAG_TARGETPRINTER 337 /* !separation target */ +#define TIFFTAG_EXTRASAMPLES 338 /* !info about extra samples */ +#define EXTRASAMPLE_UNSPECIFIED 0 /* !unspecified data */ +#define EXTRASAMPLE_ASSOCALPHA 1 /* !associated alpha data */ +#define EXTRASAMPLE_UNASSALPHA 2 /* !unassociated alpha data */ +#define TIFFTAG_SAMPLEFORMAT 339 /* !data sample format */ +#define SAMPLEFORMAT_UINT 1 /* !unsigned integer data */ +#define SAMPLEFORMAT_INT 2 /* !signed integer data */ +#define SAMPLEFORMAT_IEEEFP 3 /* !IEEE floating point data */ +#define SAMPLEFORMAT_VOID 4 /* !untyped data */ +#define SAMPLEFORMAT_COMPLEXINT 5 /* !complex signed int */ +#define SAMPLEFORMAT_COMPLEXIEEEFP 6 /* !complex ieee floating */ +#define TIFFTAG_SMINSAMPLEVALUE 340 /* !variable MinSampleValue */ +#define TIFFTAG_SMAXSAMPLEVALUE 341 /* !variable MaxSampleValue */ +#define TIFFTAG_CLIPPATH 343 /* %ClipPath [Adobe TIFF technote 2] */ +#define TIFFTAG_XCLIPPATHUNITS 344 /* %XClipPathUnits [Adobe TIFF technote 2] */ +#define TIFFTAG_YCLIPPATHUNITS 345 /* %YClipPathUnits [Adobe TIFF technote 2] */ +#define TIFFTAG_INDEXED 346 /* %Indexed [Adobe TIFF Technote 3] */ +#define TIFFTAG_JPEGTABLES 347 /* %JPEG table stream */ +#define TIFFTAG_OPIPROXY 351 /* %OPI Proxy [Adobe TIFF technote] */ /* Tags 400-435 are from the TIFF/FX spec */ #define TIFFTAG_GLOBALPARAMETERSIFD 400 /* ! */ #define TIFFTAG_PROFILETYPE 401 /* ! */ @@ -404,16 +390,11 @@ typedef enum #define YCBCRPOSITION_COSITED 2 /* !as in CCIR 601-1 */ #define TIFFTAG_REFERENCEBLACKWHITE 532 /* !colorimetry info */ #define TIFFTAG_STRIPROWCOUNTS 559 /* !TIFF/FX strip row counts */ -#define TIFFTAG_XMLPACKET \ - 700 /* %XML packet \ - [Adobe XMP Specification, \ - January 2004 */ -#define TIFFTAG_OPIIMAGEID \ - 32781 /* %OPI ImageID \ - [Adobe TIFF technote] */ -#define TIFFTAG_TIFFANNOTATIONDATA \ - 32932 /* http://web.archive.org/web/20050309141348/http://www.kofile.com/support%20pro/faqs/annospec.htm \ - */ +#define TIFFTAG_XMLPACKET 700 /* %XML packet [Adobe XMP Specification, January 2004 */ +#define TIFFTAG_OPIIMAGEID 32781 /* %OPI ImageID [Adobe TIFF technote] */ +/* For eiStream Annotation Specification, Version 1.00.06 see + * http://web.archive.org/web/20050309141348/http://www.kofile.com/support%20pro/faqs/annospec.htm */ +#define TIFFTAG_TIFFANNOTATIONDATA 32932 /* tags 32952-32956 are private tags registered to Island Graphics */ #define TIFFTAG_REFPTS 32953 /* image reference points */ #define TIFFTAG_REGIONTACKPOINT 32954 /* region-xform tack point */ @@ -444,53 +425,36 @@ typedef enum #define TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA 33306 /* tag 33405 is a private tag registered to Eastman Kodak */ #define TIFFTAG_WRITERSERIALNUMBER 33405 /* device serial number */ -#define TIFFTAG_CFAREPEATPATTERNDIM 33421 /* dimensions of CFA pattern */ -#define TIFFTAG_CFAPATTERN 33422 /* color filter array pattern */ +#define TIFFTAG_CFAREPEATPATTERNDIM 33421 /* (alias for TIFFTAG_EP_CFAREPEATPATTERNDIM)*/ +#define TIFFTAG_CFAPATTERN 33422 /* (alias for TIFFTAG_EP_CFAPATTERN) */ +#define TIFFTAG_BATTERYLEVEL 33423 /* (alias for TIFFTAG_EP_BATTERYLEVEL) */ /* tag 33432 is listed in the 6.0 spec w/ unknown ownership */ #define TIFFTAG_COPYRIGHT 33432 /* copyright string */ -/* Tags 33445-33452 are used for GEL fileformat, see - * http://research.stowers-institute.org/mcm/efg/ScientificSoftware/Utility/TiffTags/GEL-FileFormat.pdf +/* Tags 33445-33452 are used for Molecular Dynamics GEL fileformat, + * see http://research.stowers-institute.org/mcm/efg/ScientificSoftware/Utility/TiffTags/GEL-FileFormat.pdf + * (2023: the above web site is unavailable but tags are explained briefly at + * https://www.awaresystems.be/imaging/tiff/tifftags/docs/gel.html */ -#define TIFFTAG_MD_FILETAG \ - 33445 /* http://research.stowers-institute.org/mcm/efg/ScientificSoftware/Utility/TiffTags/GEL-FileFormat.pdf \ - */ -#define TIFFTAG_MD_SCALEPIXEL \ - 33446 /* http://research.stowers-institute.org/mcm/efg/ScientificSoftware/Utility/TiffTags/GEL-FileFormat.pdf \ - */ -#define TIFFTAG_MD_COLORTABLE \ - 33447 /* http://research.stowers-institute.org/mcm/efg/ScientificSoftware/Utility/TiffTags/GEL-FileFormat.pdf \ - */ -#define TIFFTAG_MD_LABNAME \ - 33448 /* http://research.stowers-institute.org/mcm/efg/ScientificSoftware/Utility/TiffTags/GEL-FileFormat.pdf \ - */ -#define TIFFTAG_MD_SAMPLEINFO \ - 33449 /* http://research.stowers-institute.org/mcm/efg/ScientificSoftware/Utility/TiffTags/GEL-FileFormat.pdf \ - */ -#define TIFFTAG_MD_PREPDATE \ - 33450 /* http://research.stowers-institute.org/mcm/efg/ScientificSoftware/Utility/TiffTags/GEL-FileFormat.pdf \ - */ -#define TIFFTAG_MD_PREPTIME \ - 33451 /* http://research.stowers-institute.org/mcm/efg/ScientificSoftware/Utility/TiffTags/GEL-FileFormat.pdf \ - */ -#define TIFFTAG_MD_FILEUNITS \ - 33452 /* http://research.stowers-institute.org/mcm/efg/ScientificSoftware/Utility/TiffTags/GEL-FileFormat.pdf \ - */ +#define TIFFTAG_MD_FILETAG 33445 /* Specifies the pixel data format encoding in the GEL file format. */ +#define TIFFTAG_MD_SCALEPIXEL 33446 /* scale factor */ +#define TIFFTAG_MD_COLORTABLE 33447 /* conversion from 16bit to 8bit */ +#define TIFFTAG_MD_LABNAME 33448 /* name of the lab that scanned this file. */ +#define TIFFTAG_MD_SAMPLEINFO 33449 /* information about the scanned GEL sample */ +#define TIFFTAG_MD_PREPDATE 33450 /* information about the date the sample was prepared YY/MM/DD */ +#define TIFFTAG_MD_PREPTIME 33451 /* information about the time the sample was prepared HH:MM*/ +#define TIFFTAG_MD_FILEUNITS 33452 /* Units for data in this file, as used in the GEL file format. */ /* IPTC TAG from RichTIFF specifications */ #define TIFFTAG_RICHTIFFIPTC 33723 -#define TIFFTAG_INGR_PACKET_DATA_TAG \ - 33918 /* Intergraph Application specific storage. */ -#define TIFFTAG_INGR_FLAG_REGISTERS \ - 33919 /* Intergraph Application specific flags. */ -#define TIFFTAG_IRASB_TRANSORMATION_MATRIX \ - 33920 /* Originally part of Intergraph's GeoTIFF tags, but likely \ - understood by IrasB only. */ -#define TIFFTAG_MODELTIEPOINTTAG 33922 /* GeoTIFF */ +#define TIFFTAG_INGR_PACKET_DATA_TAG 33918 /* Intergraph Application specific storage. */ +#define TIFFTAG_INGR_FLAG_REGISTERS 33919 /* Intergraph Application specific flags. */ +#define TIFFTAG_IRASB_TRANSORMATION_MATRIX 33920 /* Originally part of Intergraph's GeoTIFF tags, but likely understood by IrasB only. */ +#define TIFFTAG_MODELTIEPOINTTAG 33922 /* GeoTIFF */ /* 34016-34029 are reserved for ANSI IT8 TIFF/IT */ #define TIFFTAG_STONITS 37439 /* Sample value to Nits */ /* tag 34929 is a private tag registered to FedEx */ -#define TIFFTAG_FEDEX_EDR 34929 /* unknown use */ -#define TIFFTAG_IMAGESOURCEDATA \ - 37724 /* http://justsolve.archiveteam.org/wiki/PSD, \ - http://www.adobe.com/devnet-apps/photoshop/fileformatashtml/ */ -#define TIFFTAG_INTEROPERABILITYIFD \ - 40965 /* Pointer to Interoperability private directory */ -#define TIFFTAG_GDAL_METADATA 42112 /* Used by the GDAL library */ -#define TIFFTAG_GDAL_NODATA 42113 /* Used by the GDAL library */ -#define TIFFTAG_OCE_SCANJOB_DESCRIPTION \ - 50215 /* Used in the Oce scanning process */ -#define TIFFTAG_OCE_APPLICATION_SELECTOR \ - 50216 /* Used in the Oce scanning process. */ +#define TIFFTAG_FEDEX_EDR 34929 /* unknown use */ +#define TIFFTAG_IMAGESOURCEDATA 37724 /* http://justsolve.archiveteam.org/wiki/PSD, http://www.adobe.com/devnet-apps/photoshop/fileformatashtml/ */ +#define TIFFTAG_INTEROPERABILITYIFD 40965 /* Pointer to EXIF Interoperability private directory */ +#define TIFFTAG_GDAL_METADATA 42112 /* Used by the GDAL library */ +#define TIFFTAG_GDAL_NODATA 42113 /* Used by the GDAL library */ +#define TIFFTAG_OCE_SCANJOB_DESCRIPTION 50215 /* Used in the Oce scanning process */ +#define TIFFTAG_OCE_APPLICATION_SELECTOR 50216 /* Used in the Oce scanning process. */ #define TIFFTAG_OCE_IDENTIFICATION_NUMBER 50217 #define TIFFTAG_OCE_IMAGELOGIC_CHARACTERISTICS 50218 - /* tags 50674 to 50677 are reserved for ESRI */ -#define TIFFTAG_LERC_PARAMETERS \ - 50674 /* Stores LERC version and additional compression method */ +#define TIFFTAG_LERC_PARAMETERS 50674 /* Stores LERC version and additional compression method */ + /* Adobe Digital Negative (DNG) format tags */ -#define TIFFTAG_DNGVERSION 50706 /* &DNG version number */ -#define TIFFTAG_DNGBACKWARDVERSION 50707 /* &DNG compatibility version */ -#define TIFFTAG_UNIQUECAMERAMODEL 50708 /* &name for the camera model */ -#define TIFFTAG_LOCALIZEDCAMERAMODEL \ - 50709 /* &localized camera model \ - name */ -#define TIFFTAG_CFAPLANECOLOR \ - 50710 /* &CFAPattern->LinearRaw space \ - mapping */ -#define TIFFTAG_CFALAYOUT 50711 /* &spatial layout of the CFA */ -#define TIFFTAG_LINEARIZATIONTABLE 50712 /* &lookup table description */ -#define TIFFTAG_BLACKLEVELREPEATDIM \ - 50713 /* &repeat pattern size for \ - the BlackLevel tag */ -#define TIFFTAG_BLACKLEVEL 50714 /* &zero light encoding level */ -#define TIFFTAG_BLACKLEVELDELTAH \ - 50715 /* &zero light encoding level \ - differences (columns) */ -#define TIFFTAG_BLACKLEVELDELTAV \ - 50716 /* &zero light encoding level \ - differences (rows) */ -#define TIFFTAG_WHITELEVEL \ - 50717 /* &fully saturated encoding \ - level */ -#define TIFFTAG_DEFAULTSCALE 50718 /* &default scale factors */ -#define TIFFTAG_DEFAULTCROPORIGIN \ - 50719 /* &origin of the final image \ - area */ -#define TIFFTAG_DEFAULTCROPSIZE \ - 50720 /* &size of the final image \ - area */ -#define TIFFTAG_COLORMATRIX1 \ - 50721 /* &XYZ->reference color space \ - transformation matrix 1 */ -#define TIFFTAG_COLORMATRIX2 \ - 50722 /* &XYZ->reference color space \ - transformation matrix 2 */ -#define TIFFTAG_CAMERACALIBRATION1 50723 /* &calibration matrix 1 */ -#define TIFFTAG_CAMERACALIBRATION2 50724 /* &calibration matrix 2 */ -#define TIFFTAG_REDUCTIONMATRIX1 \ - 50725 /* &dimensionality reduction \ - matrix 1 */ -#define TIFFTAG_REDUCTIONMATRIX2 \ - 50726 /* &dimensionality reduction \ - matrix 2 */ -#define TIFFTAG_ANALOGBALANCE \ - 50727 /* &gain applied the stored raw \ - values*/ -#define TIFFTAG_ASSHOTNEUTRAL \ - 50728 /* &selected white balance in \ - linear reference space */ -#define TIFFTAG_ASSHOTWHITEXY \ - 50729 /* &selected white balance in \ - x-y chromaticity \ - coordinates */ -#define TIFFTAG_BASELINEEXPOSURE \ - 50730 /* &how much to move the zero \ - point */ -#define TIFFTAG_BASELINENOISE 50731 /* &relative noise level */ -#define TIFFTAG_BASELINESHARPNESS \ - 50732 /* &relative amount of \ - sharpening */ -#define TIFFTAG_BAYERGREENSPLIT \ - 50733 /* &how closely the values of \ - the green pixels in the \ - blue/green rows track the \ - values of the green pixels \ - in the red/green rows */ -#define TIFFTAG_LINEARRESPONSELIMIT 50734 /* &non-linear encoding range */ -#define TIFFTAG_CAMERASERIALNUMBER 50735 /* &camera's serial number */ -#define TIFFTAG_LENSINFO 50736 /* info about the lens */ -#define TIFFTAG_CHROMABLURRADIUS 50737 /* &chroma blur radius */ -#define TIFFTAG_ANTIALIASSTRENGTH \ - 50738 /* &relative strength of the \ - camera's anti-alias filter */ -#define TIFFTAG_SHADOWSCALE 50739 /* &used by Adobe Camera Raw */ -#define TIFFTAG_DNGPRIVATEDATA 50740 /* &manufacturer's private data */ -#define TIFFTAG_MAKERNOTESAFETY \ - 50741 /* &whether the EXIF MakerNote \ - tag is safe to preserve \ - along with the rest of the \ - EXIF data */ -#define TIFFTAG_CALIBRATIONILLUMINANT1 50778 /* &illuminant 1 */ -#define TIFFTAG_CALIBRATIONILLUMINANT2 50779 /* &illuminant 2 */ -#define TIFFTAG_BESTQUALITYSCALE 50780 /* &best quality multiplier */ -#define TIFFTAG_RAWDATAUNIQUEID \ - 50781 /* &unique identifier for \ - the raw image data */ -#define TIFFTAG_ORIGINALRAWFILENAME \ - 50827 /* &file name of the original \ - raw file */ -#define TIFFTAG_ORIGINALRAWFILEDATA \ - 50828 /* &contents of the original \ - raw file */ -#define TIFFTAG_ACTIVEAREA \ - 50829 /* &active (non-masked) pixels \ - of the sensor */ -#define TIFFTAG_MASKEDAREAS \ - 50830 /* &list of coordinates \ - of fully masked pixels */ -#define TIFFTAG_ASSHOTICCPROFILE 50831 /* &these two tags used to */ -#define TIFFTAG_ASSHOTPREPROFILEMATRIX \ - 50832 /* map cameras's color space \ - into ICC profile space */ +#define TIFFTAG_DNGVERSION 50706 /* &DNG version number */ +#define TIFFTAG_DNGBACKWARDVERSION 50707 /* &DNG compatibility version */ +#define TIFFTAG_UNIQUECAMERAMODEL 50708 /* &name for the camera model */ +#define TIFFTAG_LOCALIZEDCAMERAMODEL 50709 /* &localized camera model name (UTF-8) */ +#define TIFFTAG_CFAPLANECOLOR 50710 /* &CFAPattern->LinearRaw space mapping */ +#define TIFFTAG_CFALAYOUT 50711 /* &spatial layout of the CFA */ +#define TIFFTAG_LINEARIZATIONTABLE 50712 /* &lookup table description */ +#define TIFFTAG_BLACKLEVELREPEATDIM 50713 /* &repeat pattern size for the BlackLevel tag */ +#define TIFFTAG_BLACKLEVEL 50714 /* &zero light encoding level */ +#define TIFFTAG_BLACKLEVELDELTAH 50715 /* &zero light encoding level differences (columns) */ +#define TIFFTAG_BLACKLEVELDELTAV 50716 /* &zero light encoding level differences (rows) */ +#define TIFFTAG_WHITELEVEL 50717 /* &fully saturated encoding level */ +#define TIFFTAG_DEFAULTSCALE 50718 /* &default scale factors */ +#define TIFFTAG_DEFAULTCROPORIGIN 50719 /* &origin of the final image area */ +#define TIFFTAG_DEFAULTCROPSIZE 50720 /* &size of the final image area */ +#define TIFFTAG_COLORMATRIX1 50721 /* &XYZ->reference color space transformation matrix 1 */ +#define TIFFTAG_COLORMATRIX2 50722 /* &XYZ->reference color space transformation matrix 2 */ +#define TIFFTAG_CAMERACALIBRATION1 50723 /* &calibration matrix 1 */ +#define TIFFTAG_CAMERACALIBRATION2 50724 /* &calibration matrix 2 */ +#define TIFFTAG_REDUCTIONMATRIX1 50725 /* &dimensionality reduction matrix 1 */ +#define TIFFTAG_REDUCTIONMATRIX2 50726 /* &dimensionality reduction matrix 2 */ +#define TIFFTAG_ANALOGBALANCE 50727 /* &gain applied the stored raw values*/ +#define TIFFTAG_ASSHOTNEUTRAL 50728 /* &selected white balance in linear reference space */ +#define TIFFTAG_ASSHOTWHITEXY 50729 /* &selected white balance in x-y chromaticity coordinates */ +#define TIFFTAG_BASELINEEXPOSURE 50730 /* &how much to move the zero point */ +#define TIFFTAG_BASELINENOISE 50731 /* &relative noise level */ +#define TIFFTAG_BASELINESHARPNESS 50732 /* &relative amount of sharpening */ +/* TIFFTAG_BAYERGREENSPLIT: &how closely the values of the green pixels in the blue/green rows + * track the values of the green pixels in the red/green rows */ +#define TIFFTAG_BAYERGREENSPLIT 50733 +#define TIFFTAG_LINEARRESPONSELIMIT 50734 /* &non-linear encoding range */ +#define TIFFTAG_CAMERASERIALNUMBER 50735 /* &camera's serial number */ +#define TIFFTAG_LENSINFO 50736 /* info about the lens */ +#define TIFFTAG_CHROMABLURRADIUS 50737 /* &chroma blur radius */ +#define TIFFTAG_ANTIALIASSTRENGTH 50738 /* &relative strength of the camera's anti-alias filter */ +#define TIFFTAG_SHADOWSCALE 50739 /* &used by Adobe Camera Raw */ +#define TIFFTAG_DNGPRIVATEDATA 50740 /* &manufacturer's private data */ +#define TIFFTAG_MAKERNOTESAFETY 50741 /* &whether the EXIF MakerNote tag is safe to preserve along with the rest of the EXIF data */ +#define TIFFTAG_CALIBRATIONILLUMINANT1 50778 /* &illuminant 1 */ +#define TIFFTAG_CALIBRATIONILLUMINANT2 50779 /* &illuminant 2 */ +#define TIFFTAG_BESTQUALITYSCALE 50780 /* &best quality multiplier */ +#define TIFFTAG_RAWDATAUNIQUEID 50781 /* &unique identifier for the raw image data */ +#define TIFFTAG_ORIGINALRAWFILENAME 50827 /* &file name of the original raw file (UTF-8) */ +#define TIFFTAG_ORIGINALRAWFILEDATA 50828 /* &contents of the original raw file */ +#define TIFFTAG_ACTIVEAREA 50829 /* &active (non-masked) pixels of the sensor */ +#define TIFFTAG_MASKEDAREAS 50830 /* &list of coordinates of fully masked pixels */ +#define TIFFTAG_ASSHOTICCPROFILE 50831 /* &these two tags used to */ +#define TIFFTAG_ASSHOTPREPROFILEMATRIX 50832 /* map cameras's color space into ICC profile space */ #define TIFFTAG_CURRENTICCPROFILE 50833 /* & */ #define TIFFTAG_CURRENTPREPROFILEMATRIX 50834 /* & */ -#define TIFFTAG_RPCCOEFFICIENT \ - 50844 /* Define by GDAL for geospatial georeferencing through RPC: \ - http://geotiff.maptools.org/rpc_prop.html */ +/* DNG 1.2.0.0 */ +#define TIFFTAG_COLORIMETRICREFERENCE 50879 /* &colorimetric reference */ +#define TIFFTAG_CAMERACALIBRATIONSIGNATURE 50931 /* &camera calibration signature (UTF-8) */ +#define TIFFTAG_PROFILECALIBRATIONSIGNATURE 50932 /* &profile calibration signature (UTF-8) */ +/* TIFFTAG_EXTRACAMERAPROFILES 50933 &extra camera profiles : is already defined for GeoTIFF DGIWG */ +#define TIFFTAG_ASSHOTPROFILENAME 50934 /* &as shot profile name (UTF-8) */ +#define TIFFTAG_NOISEREDUCTIONAPPLIED 50935 /* &amount of applied noise reduction */ +#define TIFFTAG_PROFILENAME 50936 /* &camera profile name (UTF-8) */ +#define TIFFTAG_PROFILEHUESATMAPDIMS 50937 /* &dimensions of HSV mapping */ +#define TIFFTAG_PROFILEHUESATMAPDATA1 50938 /* &first HSV mapping table */ +#define TIFFTAG_PROFILEHUESATMAPDATA2 50939 /* &second HSV mapping table */ +#define TIFFTAG_PROFILETONECURVE 50940 /* &default tone curve */ +#define TIFFTAG_PROFILEEMBEDPOLICY 50941 /* &profile embedding policy */ +#define TIFFTAG_PROFILECOPYRIGHT 50942 /* &profile copyright information (UTF-8) */ +#define TIFFTAG_FORWARDMATRIX1 50964 /* &matrix for mapping white balanced camera colors to XYZ D50 */ +#define TIFFTAG_FORWARDMATRIX2 50965 /* &matrix for mapping white balanced camera colors to XYZ D50 */ +#define TIFFTAG_PREVIEWAPPLICATIONNAME 50966 /* &name of application that created preview (UTF-8) */ +#define TIFFTAG_PREVIEWAPPLICATIONVERSION 50967 /* &version of application that created preview (UTF-8) */ +#define TIFFTAG_PREVIEWSETTINGSNAME 50968 /* &name of conversion settings (UTF-8) */ +#define TIFFTAG_PREVIEWSETTINGSDIGEST 50969 /* &unique id of conversion settings */ +#define TIFFTAG_PREVIEWCOLORSPACE 50970 /* &preview color space */ +#define TIFFTAG_PREVIEWDATETIME 50971 /* &date/time preview was rendered */ +#define TIFFTAG_RAWIMAGEDIGEST 50972 /* &md5 of raw image data */ +#define TIFFTAG_ORIGINALRAWFILEDIGEST 50973 /* &md5 of the data stored in the OriginalRawFileData tag */ +#define TIFFTAG_SUBTILEBLOCKSIZE 50974 /* &subtile block size */ +#define TIFFTAG_ROWINTERLEAVEFACTOR 50975 /* &number of interleaved fields */ +#define TIFFTAG_PROFILELOOKTABLEDIMS 50981 /* &num of input samples in each dim of default "look" table */ +#define TIFFTAG_PROFILELOOKTABLEDATA 50982 /* &default "look" table for use as starting point */ -#define TIFFTAG_ALIAS_LAYER_METADATA \ - 50784 /* Alias Sketchbook Pro layer usage description. */ +/* DNG 1.3.0.0 */ +#define TIFFTAG_OPCODELIST1 51008 /* &opcodes that should be applied to raw image after reading */ +#define TIFFTAG_OPCODELIST2 51009 /* &opcodes that should be applied after mapping to linear reference */ +#define TIFFTAG_OPCODELIST3 51022 /* &opcodes that should be applied after demosaicing */ +#define TIFFTAG_NOISEPROFILE 51041 /* &noise profile */ -/* GeoTIFF DGIWG */ -#define TIFFTAG_TIFF_RSID \ - 50908 /* https://www.awaresystems.be/imaging/tiff/tifftags/tiff_rsid.html \ - */ -#define TIFFTAG_GEO_METADATA \ - 50909 /* https://www.awaresystems.be/imaging/tiff/tifftags/geo_metadata.html \ - */ +/* DNG 1.4.0.0 */ +#define TIFFTAG_DEFAULTUSERCROP 51125 /* &default user crop rectangle in relative coords */ +#define TIFFTAG_DEFAULTBLACKRENDER 51110 /* &black rendering hint */ +#define TIFFTAG_BASELINEEXPOSUREOFFSET 51109 /* &baseline exposure offset */ +#define TIFFTAG_PROFILELOOKTABLEENCODING 51108 /* &3D LookTable indexing conversion */ +#define TIFFTAG_PROFILEHUESATMAPENCODING 51107 /* &3D HueSatMap indexing conversion */ +#define TIFFTAG_ORIGINALDEFAULTFINALSIZE 51089 /* &default final size of larger original file for this proxy */ +#define TIFFTAG_ORIGINALBESTQUALITYFINALSIZE 51090 /* &best quality final size of larger original file for this proxy */ +#define TIFFTAG_ORIGINALDEFAULTCROPSIZE 51091 /* &the default crop size of larger original file for this proxy */ +#define TIFFTAG_NEWRAWIMAGEDIGEST 51111 /* &modified MD5 digest of the raw image data */ +#define TIFFTAG_RAWTOPREVIEWGAIN 51112 /* &The gain between the main raw FD and the preview IFD containing this tag */ + +/* DNG 1.5.0.0 */ +#define TIFFTAG_DEPTHFORMAT 51177 /* &encoding of the depth data in the file */ +#define TIFFTAG_DEPTHNEAR 51178 /* &distance from the camera represented by value 0 in the depth map */ +#define TIFFTAG_DEPTHFAR 51179 /* &distance from the camera represented by the maximum value in the depth map */ +#define TIFFTAG_DEPTHUNITS 51180 /* &measurement units for DepthNear and DepthFar */ +#define TIFFTAG_DEPTHMEASURETYPE 51181 /* &measurement geometry for the depth map */ +#define TIFFTAG_ENHANCEPARAMS 51182 /* &a string that documents how the enhanced image data was processed. */ + +/* DNG 1.6.0.0 */ +#define TIFFTAG_PROFILEGAINTABLEMAP 52525 /* &spatially varying gain tables that can be applied as starting point */ +#define TIFFTAG_SEMANTICNAME 52526 /* &a string that identifies the semantic mask */ +#define TIFFTAG_SEMANTICINSTANCEID 52528 /* &a string that identifies a specific instance in a semantic mask */ +#define TIFFTAG_MASKSUBAREA 52536 /* &the crop rectangle of this IFD's mask, relative to the main image */ +#define TIFFTAG_RGBTABLES 52543 /* &color transforms to apply to masked image regions */ +#define TIFFTAG_CALIBRATIONILLUMINANT3 52529 /* &the illuminant used for the third set of color calibration tags */ +#define TIFFTAG_COLORMATRIX3 52531 /* &matrix to convert XYZ values to reference camera native color space under CalibrationIlluminant3 */ +#define TIFFTAG_CAMERACALIBRATION3 52530 /* &matrix to transform reference camera native space values to individual camera native space values under CalibrationIlluminant3 */ +#define TIFFTAG_REDUCTIONMATRIX3 52538 /* &dimensionality reduction matrix for use in color conversion to XYZ under CalibrationIlluminant3 */ +#define TIFFTAG_PROFILEHUESATMAPDATA3 52537 /* &the data for the third HSV table */ +#define TIFFTAG_FORWARDMATRIX3 52532 /* &matrix to map white balanced camera colors to XYZ D50 */ +#define TIFFTAG_ILLUMINANTDATA1 52533 /* &data for the first calibration illuminant */ +#define TIFFTAG_ILLUMINANTDATA2 52534 /* &data for the second calibration illuminant */ +#define TIFFTAG_ILLUMINANTDATA3 53535 /* &data for the third calibration illuminant */ -#define TIFFTAG_EXTRACAMERAPROFILES \ - 50933 /* http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/products/photoshop/pdfs/dng_spec_1.4.0.0.pdf \ - */ +/* TIFF/EP */ +#define TIFFTAG_EP_CFAREPEATPATTERNDIM 33421 /* dimensions of CFA pattern */ +#define TIFFTAG_EP_CFAPATTERN 33422 /* color filter array pattern */ +#define TIFFTAG_EP_BATTERYLEVEL 33423 /* battery level (rational or ASCII) */ +#define TIFFTAG_EP_INTERLACE 34857 /* Number of multi-field images */ +/* TIFFTAG_EP_IPTC_NAA and TIFFTAG_RICHTIFFIPTC share the same tag number (33723) + * LibTIFF type is UNDEFINED or BYTE, but often times incorrectly specified as LONG, + * because TIFF/EP (ISO/DIS 12234-2) specifies type LONG or ASCII. */ +#define TIFFTAG_EP_IPTC_NAA 33723 /* Alias IPTC/NAA Newspaper Association RichTIFF */ +#define TIFFTAG_EP_TIMEZONEOFFSET 34858 /* Time zone offset relative to UTC */ +#define TIFFTAG_EP_SELFTIMERMODE 34859 /* Number of seconds capture was delayed from button press */ +#define TIFFTAG_EP_FLASHENERGY 37387 /* Flash energy, or range if there is uncertainty */ +#define TIFFTAG_EP_SPATIALFREQUENCYRESPONSE 37388 /* Spatial frequency response */ +#define TIFFTAG_EP_NOISE 37389 /* Camera noise measurement values */ +#define TIFFTAG_EP_FOCALPLANEXRESOLUTION 37390 /* Focal plane X resolution */ +#define TIFFTAG_EP_FOCALPLANEYRESOLUTION 37391 /* Focal plane Y resolution */ +#define TIFFTAG_EP_FOCALPLANERESOLUTIONUNIT 37392 /* Focal plane resolution unit */ +#define TIFFTAG_EP_IMAGENUMBER 37393 /* Number of image when several of burst shot stored in same TIFF/EP */ +#define TIFFTAG_EP_SECURITYCLASSIFICATION 37394 /* Security classification */ +#define TIFFTAG_EP_IMAGEHISTORY 37395 /* Record of what has been done to the image */ +#define TIFFTAG_EP_EXPOSUREINDEX 37397 /* Exposure index */ +#define TIFFTAG_EP_STANDARDID 37398 /* TIFF/EP standard version, n.n.n.n */ +#define TIFFTAG_EP_SENSINGMETHOD 37399 /* Type of image sensor */ +/* + * TIFF/EP tags equivalent to EXIF tags + * Note that TIFF-EP and EXIF use nearly the same metadata tag set, but TIFF-EP stores the tags in IFD 0, + * while EXIF store the tags in a separate IFD. Either location is allowed by DNG, but the EXIF location is preferred. + */ +#define TIFFTAG_EP_EXPOSURETIME 33434 /* Exposure time */ +#define TIFFTAG_EP_FNUMBER 33437 /* F number */ +#define TIFFTAG_EP_EXPOSUREPROGRAM 34850 /* Exposure program */ +#define TIFFTAG_EP_SPECTRALSENSITIVITY 34852 /* Spectral sensitivity */ +#define TIFFTAG_EP_ISOSPEEDRATINGS 34855 /* ISO speed rating */ +#define TIFFTAG_EP_OECF 34856 /* Optoelectric conversion factor */ +#define TIFFTAG_EP_DATETIMEORIGINAL 36867 /* Date and time of original data generation */ +#define TIFFTAG_EP_COMPRESSEDBITSPERPIXEL 37122 /* Image compression mode */ +#define TIFFTAG_EP_SHUTTERSPEEDVALUE 37377 /* Shutter speed */ +#define TIFFTAG_EP_APERTUREVALUE 37378 /* Aperture */ +#define TIFFTAG_EP_BRIGHTNESSVALUE 37379 /* Brightness */ +#define TIFFTAG_EP_EXPOSUREBIASVALUE 37380 /* Exposure bias */ +#define TIFFTAG_EP_MAXAPERTUREVALUE 37381 /* Maximum lens aperture */ +#define TIFFTAG_EP_SUBJECTDISTANCE 37382 /* Subject distance */ +#define TIFFTAG_EP_METERINGMODE 37383 /* Metering mode */ +#define TIFFTAG_EP_LIGHTSOURCE 37384 /* Light source */ +#define TIFFTAG_EP_FLASH 37385 /* Flash */ +#define TIFFTAG_EP_FOCALLENGTH 37386 /* Lens focal length */ +#define TIFFTAG_EP_SUBJECTLOCATION 37396 /* Subject location (area) */ + +#define TIFFTAG_RPCCOEFFICIENT 50844 /* Define by GDAL for geospatial georeferencing through RPC: http://geotiff.maptools.org/rpc_prop.html */ +#define TIFFTAG_ALIAS_LAYER_METADATA 50784 /* Alias Sketchbook Pro layer usage description. */ + +/* GeoTIFF DGIWG */ +#define TIFFTAG_TIFF_RSID 50908 /* https://www.awaresystems.be/imaging/tiff/tifftags/tiff_rsid.html */ +#define TIFFTAG_GEO_METADATA 50909 /* https://www.awaresystems.be/imaging/tiff/tifftags/geo_metadata.html */ +#define TIFFTAG_EXTRACAMERAPROFILES 50933 /* http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/products/photoshop/pdfs/dng_spec_1.4.0.0.pdf */ /* tag 65535 is an undefined tag used by Eastman Kodak */ #define TIFFTAG_DCSHUESHIFTVALUES 65535 /* hue shift correction data */ @@ -751,220 +758,142 @@ typedef enum #define LERC_ADD_COMPRESSION_NONE 0 #define LERC_ADD_COMPRESSION_DEFLATE 1 #define LERC_ADD_COMPRESSION_ZSTD 2 -#define TIFFTAG_LERC_MAXZERROR 65567 /* LERC maximum error */ -#define TIFFTAG_WEBP_LEVEL 65568 /* WebP compression level */ -#define TIFFTAG_WEBP_LOSSLESS 65569 /* WebP lossless/lossy */ -#define TIFFTAG_DEFLATE_SUBCODEC \ - 65570 /* ZIP codec: to get/set the sub-codec to use. Will default to \ - libdeflate when available */ +#define TIFFTAG_LERC_MAXZERROR 65567 /* LERC maximum error */ +#define TIFFTAG_WEBP_LEVEL 65568 /* WebP compression level */ +#define TIFFTAG_WEBP_LOSSLESS 65569 /* WebP lossless/lossy */ +#define TIFFTAG_WEBP_LOSSLESS_EXACT 65571 /* WebP lossless exact mode. Set-only mode. Default is 1. Can be set to 0 to increase compression rate, but R,G,B in areas where alpha = 0 will not be preserved */ +#define TIFFTAG_DEFLATE_SUBCODEC 65570 /* ZIP codec: to get/set the sub-codec to use. Will default to libdeflate when available */ #define DEFLATE_SUBCODEC_ZLIB 0 #define DEFLATE_SUBCODEC_LIBDEFLATE 1 /* * EXIF tags */ -#define EXIFTAG_EXPOSURETIME 33434 /* Exposure time */ -#define EXIFTAG_FNUMBER 33437 /* F number */ -#define EXIFTAG_EXPOSUREPROGRAM 34850 /* Exposure program */ -#define EXIFTAG_SPECTRALSENSITIVITY 34852 /* Spectral sensitivity */ -#define EXIFTAG_ISOSPEEDRATINGS 34855 /* ISO speed rating */ -#define EXIFTAG_PHOTOGRAPHICSENSITIVITY \ - 34855 /* Photographic Sensitivity (new name for tag 34855) */ -#define EXIFTAG_OECF 34856 /* Optoelectric conversion factor */ -#define EXIFTAG_EXIFVERSION 36864 /* Exif version */ -#define EXIFTAG_DATETIMEORIGINAL \ - 36867 /* Date and time of original \ - data generation */ -#define EXIFTAG_DATETIMEDIGITIZED \ - 36868 /* Date and time of digital \ - data generation */ -#define EXIFTAG_COMPONENTSCONFIGURATION 37121 /* Meaning of each component */ -#define EXIFTAG_COMPRESSEDBITSPERPIXEL 37122 /* Image compression mode */ -#define EXIFTAG_SHUTTERSPEEDVALUE 37377 /* Shutter speed */ -#define EXIFTAG_APERTUREVALUE 37378 /* Aperture */ -#define EXIFTAG_BRIGHTNESSVALUE 37379 /* Brightness */ -#define EXIFTAG_EXPOSUREBIASVALUE 37380 /* Exposure bias */ -#define EXIFTAG_MAXAPERTUREVALUE 37381 /* Maximum lens aperture */ -#define EXIFTAG_SUBJECTDISTANCE 37382 /* Subject distance */ -#define EXIFTAG_METERINGMODE 37383 /* Metering mode */ -#define EXIFTAG_LIGHTSOURCE 37384 /* Light source */ -#define EXIFTAG_FLASH 37385 /* Flash */ -#define EXIFTAG_FOCALLENGTH 37386 /* Lens focal length */ -#define EXIFTAG_SUBJECTAREA 37396 /* Subject area */ -#define EXIFTAG_MAKERNOTE 37500 /* Manufacturer notes */ -#define EXIFTAG_USERCOMMENT 37510 /* User comments */ -#define EXIFTAG_SUBSECTIME 37520 /* DateTime subseconds */ -#define EXIFTAG_SUBSECTIMEORIGINAL 37521 /* DateTimeOriginal subseconds */ -#define EXIFTAG_SUBSECTIMEDIGITIZED 37522 /* DateTimeDigitized subseconds */ -#define EXIFTAG_FLASHPIXVERSION 40960 /* Supported Flashpix version */ -#define EXIFTAG_COLORSPACE 40961 /* Color space information */ -#define EXIFTAG_PIXELXDIMENSION 40962 /* Valid image width */ -#define EXIFTAG_PIXELYDIMENSION 40963 /* Valid image height */ -#define EXIFTAG_RELATEDSOUNDFILE 40964 /* Related audio file */ -#define EXIFTAG_FLASHENERGY 41483 /* Flash energy */ -#define EXIFTAG_SPATIALFREQUENCYRESPONSE \ - 41484 /* Spatial frequency response \ - */ -#define EXIFTAG_FOCALPLANEXRESOLUTION 41486 /* Focal plane X resolution */ -#define EXIFTAG_FOCALPLANEYRESOLUTION 41487 /* Focal plane Y resolution */ -#define EXIFTAG_FOCALPLANERESOLUTIONUNIT \ - 41488 /* Focal plane resolution unit \ - */ -#define EXIFTAG_SUBJECTLOCATION 41492 /* Subject location */ -#define EXIFTAG_EXPOSUREINDEX 41493 /* Exposure index */ -#define EXIFTAG_SENSINGMETHOD 41495 /* Sensing method */ -#define EXIFTAG_FILESOURCE 41728 /* File source */ -#define EXIFTAG_SCENETYPE 41729 /* Scene type */ -#define EXIFTAG_CFAPATTERN 41730 /* CFA pattern */ -#define EXIFTAG_CUSTOMRENDERED 41985 /* Custom image processing */ -#define EXIFTAG_EXPOSUREMODE 41986 /* Exposure mode */ -#define EXIFTAG_WHITEBALANCE 41987 /* White balance */ -#define EXIFTAG_DIGITALZOOMRATIO 41988 /* Digital zoom ratio */ -#define EXIFTAG_FOCALLENGTHIN35MMFILM 41989 /* Focal length in 35 mm film */ -#define EXIFTAG_SCENECAPTURETYPE 41990 /* Scene capture type */ -#define EXIFTAG_GAINCONTROL 41991 /* Gain control */ -#define EXIFTAG_CONTRAST 41992 /* Contrast */ -#define EXIFTAG_SATURATION 41993 /* Saturation */ -#define EXIFTAG_SHARPNESS 41994 /* Sharpness */ -#define EXIFTAG_DEVICESETTINGDESCRIPTION \ - 41995 /* Device settings description \ - */ -#define EXIFTAG_SUBJECTDISTANCERANGE 41996 /* Subject distance range */ -#define EXIFTAG_IMAGEUNIQUEID 42016 /* Unique image ID */ +#define EXIFTAG_EXPOSURETIME 33434 /* Exposure time */ +#define EXIFTAG_FNUMBER 33437 /* F number */ +#define EXIFTAG_EXPOSUREPROGRAM 34850 /* Exposure program */ +#define EXIFTAG_SPECTRALSENSITIVITY 34852 /* Spectral sensitivity */ +/* After EXIF 2.2.1 ISOSpeedRatings is named PhotographicSensitivity. + In addition, while "Count=Any", only 1 count should be used. */ +#define EXIFTAG_ISOSPEEDRATINGS 34855 /* ISO speed rating */ +#define EXIFTAG_PHOTOGRAPHICSENSITIVITY 34855 /* Photographic Sensitivity (new name for tag 34855) */ +#define EXIFTAG_OECF 34856 /* Optoelectric conversion factor */ +#define EXIFTAG_EXIFVERSION 36864 /* Exif version */ +#define EXIFTAG_DATETIMEORIGINAL 36867 /* Date and time of original data generation */ +#define EXIFTAG_DATETIMEDIGITIZED 36868 /* Date and time of digital data generation */ +#define EXIFTAG_COMPONENTSCONFIGURATION 37121 /* Meaning of each component */ +#define EXIFTAG_COMPRESSEDBITSPERPIXEL 37122 /* Image compression mode */ +#define EXIFTAG_SHUTTERSPEEDVALUE 37377 /* Shutter speed */ +#define EXIFTAG_APERTUREVALUE 37378 /* Aperture */ +#define EXIFTAG_BRIGHTNESSVALUE 37379 /* Brightness */ +#define EXIFTAG_EXPOSUREBIASVALUE 37380 /* Exposure bias */ +#define EXIFTAG_MAXAPERTUREVALUE 37381 /* Maximum lens aperture */ +#define EXIFTAG_SUBJECTDISTANCE 37382 /* Subject distance */ +#define EXIFTAG_METERINGMODE 37383 /* Metering mode */ +#define EXIFTAG_LIGHTSOURCE 37384 /* Light source */ +#define EXIFTAG_FLASH 37385 /* Flash */ +#define EXIFTAG_FOCALLENGTH 37386 /* Lens focal length */ +#define EXIFTAG_SUBJECTAREA 37396 /* Subject area */ +#define EXIFTAG_MAKERNOTE 37500 /* Manufacturer notes */ +#define EXIFTAG_USERCOMMENT 37510 /* User comments */ +#define EXIFTAG_SUBSECTIME 37520 /* DateTime subseconds */ +#define EXIFTAG_SUBSECTIMEORIGINAL 37521 /* DateTimeOriginal subseconds */ +#define EXIFTAG_SUBSECTIMEDIGITIZED 37522 /* DateTimeDigitized subseconds */ +#define EXIFTAG_FLASHPIXVERSION 40960 /* Supported Flashpix version */ +#define EXIFTAG_COLORSPACE 40961 /* Color space information */ +#define EXIFTAG_PIXELXDIMENSION 40962 /* Valid image width */ +#define EXIFTAG_PIXELYDIMENSION 40963 /* Valid image height */ +#define EXIFTAG_RELATEDSOUNDFILE 40964 /* Related audio file */ +#define EXIFTAG_FLASHENERGY 41483 /* Flash energy */ +#define EXIFTAG_SPATIALFREQUENCYRESPONSE 41484 /* Spatial frequency response */ +#define EXIFTAG_FOCALPLANEXRESOLUTION 41486 /* Focal plane X resolution */ +#define EXIFTAG_FOCALPLANEYRESOLUTION 41487 /* Focal plane Y resolution */ +#define EXIFTAG_FOCALPLANERESOLUTIONUNIT 41488 /* Focal plane resolution unit */ +#define EXIFTAG_SUBJECTLOCATION 41492 /* Subject location */ +#define EXIFTAG_EXPOSUREINDEX 41493 /* Exposure index */ +#define EXIFTAG_SENSINGMETHOD 41495 /* Sensing method */ +#define EXIFTAG_FILESOURCE 41728 /* File source */ +#define EXIFTAG_SCENETYPE 41729 /* Scene type */ +#define EXIFTAG_CFAPATTERN 41730 /* CFA pattern */ +#define EXIFTAG_CUSTOMRENDERED 41985 /* Custom image processing */ +#define EXIFTAG_EXPOSUREMODE 41986 /* Exposure mode */ +#define EXIFTAG_WHITEBALANCE 41987 /* White balance */ +#define EXIFTAG_DIGITALZOOMRATIO 41988 /* Digital zoom ratio */ +#define EXIFTAG_FOCALLENGTHIN35MMFILM 41989 /* Focal length in 35 mm film */ +#define EXIFTAG_SCENECAPTURETYPE 41990 /* Scene capture type */ +#define EXIFTAG_GAINCONTROL 41991 /* Gain control */ +#define EXIFTAG_CONTRAST 41992 /* Contrast */ +#define EXIFTAG_SATURATION 41993 /* Saturation */ +#define EXIFTAG_SHARPNESS 41994 /* Sharpness */ +#define EXIFTAG_DEVICESETTINGDESCRIPTION 41995 /* Device settings description */ +#define EXIFTAG_SUBJECTDISTANCERANGE 41996 /* Subject distance range */ +#define EXIFTAG_IMAGEUNIQUEID 42016 /* Unique image ID */ /*--: New for EXIF-Version 2.32, May 2019 ... */ -#define EXIFTAG_SENSITIVITYTYPE \ - 34864 /* The SensitivityType tag indicates which one of the parameters of \ - ISO12232 is the PhotographicSensitivity tag. */ -#define EXIFTAG_STANDARDOUTPUTSENSITIVITY \ - 34865 /* This tag indicates the standard output sensitivity value of a \ - camera or input device defined in ISO 12232. */ -#define EXIFTAG_RECOMMENDEDEXPOSUREINDEX \ - 34866 /* recommended exposure index \ - */ -#define EXIFTAG_ISOSPEED 34867 /* ISO speed value */ -#define EXIFTAG_ISOSPEEDLATITUDEYYY 34868 /* ISO speed latitude yyy */ -#define EXIFTAG_ISOSPEEDLATITUDEZZZ 34869 /* ISO speed latitude zzz */ -#define EXIFTAG_OFFSETTIME \ - 36880 /* offset from UTC of the time of DateTime tag. */ -#define EXIFTAG_OFFSETTIMEORIGINAL \ - 36881 /* offset from UTC of the time of DateTimeOriginal tag. */ -#define EXIFTAG_OFFSETTIMEDIGITIZED \ - 36882 /* offset from UTC of the time of DateTimeDigitized tag. */ -#define EXIFTAG_TEMPERATURE \ - 37888 /* Temperature as the ambient situation at the shot in dergee \ - Celsius */ -#define EXIFTAG_HUMIDITY \ - 37889 /* Humidity as the ambient situation at the shot in percent */ -#define EXIFTAG_PRESSURE \ - 37890 /* Pressure as the ambient situation at the shot hecto-Pascal (hPa) \ - */ -#define EXIFTAG_WATERDEPTH \ - 37891 /* WaterDepth as the ambient situation at the shot in meter (m) */ -#define EXIFTAG_ACCELERATION \ - 37892 /* Acceleration (a scalar regardless of direction) as the ambient \ - situation at the shot in units of mGal (10-5 m/s^2) */ -#define EXIFTAG_CAMERAELEVATIONANGLE \ - 37893 /* Elevation/depression. angle of the orientation of the \ - camera(imaging optical axis) as the ambient situation at the shot \ - in degree from -180deg to +180deg. */ -#define EXIFTAG_CAMERAOWNERNAME 42032 /* owner of a camera */ -#define EXIFTAG_BODYSERIALNUMBER \ - 42033 /* serial number of the body of the camera */ -#define EXIFTAG_LENSSPECIFICATION \ - 42034 /* minimum focal length (in mm), maximum focal length (in mm), \ - minimum F number in the minimum focal length, and minimum F \ - number in the maximum focal length, */ -#define EXIFTAG_LENSMAKE 42035 /* the lens manufacturer */ -#define EXIFTAG_LENSMODEL 42036 /* the lens model name and model number */ -#define EXIFTAG_LENSSERIALNUMBER \ - 42037 /* the serial number of the interchangeable lens */ -#define EXIFTAG_GAMMA 42240 /* value of coefficient gamma */ -#define EXIFTAG_COMPOSITEIMAGE 42080 /* composite image */ -#define EXIFTAG_SOURCEIMAGENUMBEROFCOMPOSITEIMAGE \ - 42081 /* source image number of composite image */ -#define EXIFTAG_SOURCEEXPOSURETIMESOFCOMPOSITEIMAGE \ - 42082 /* source exposure times of composite image */ +#define EXIFTAG_SENSITIVITYTYPE 34864 /* The SensitivityType tag indicates which one of the parameters of ISO12232 is the PhotographicSensitivity tag. */ +#define EXIFTAG_STANDARDOUTPUTSENSITIVITY 34865 /* This tag indicates the standard output sensitivity value of a camera or input device defined in ISO 12232. */ +#define EXIFTAG_RECOMMENDEDEXPOSUREINDEX 34866 /* recommended exposure index */ +#define EXIFTAG_ISOSPEED 34867 /* ISO speed value */ +#define EXIFTAG_ISOSPEEDLATITUDEYYY 34868 /* ISO speed latitude yyy */ +#define EXIFTAG_ISOSPEEDLATITUDEZZZ 34869 /* ISO speed latitude zzz */ +#define EXIFTAG_OFFSETTIME 36880 /* offset from UTC of the time of DateTime tag. */ +#define EXIFTAG_OFFSETTIMEORIGINAL 36881 /* offset from UTC of the time of DateTimeOriginal tag. */ +#define EXIFTAG_OFFSETTIMEDIGITIZED 36882 /* offset from UTC of the time of DateTimeDigitized tag. */ +#define EXIFTAG_TEMPERATURE 37888 /* Temperature as the ambient situation at the shot in dergee Celsius */ +#define EXIFTAG_HUMIDITY 37889 /* Humidity as the ambient situation at the shot in percent */ +#define EXIFTAG_PRESSURE 37890 /* Pressure as the ambient situation at the shot hecto-Pascal (hPa) */ +#define EXIFTAG_WATERDEPTH 37891 /* WaterDepth as the ambient situation at the shot in meter (m) */ +#define EXIFTAG_ACCELERATION 37892 /* Acceleration (a scalar regardless of direction) as the ambientsituation at the shot in units of mGal (10-5 m/s^2) */ +/* EXIFTAG_CAMERAELEVATIONANGLE: Elevation/depression. angle of the orientation of the camera(imaging optical axis) + * as the ambient situation at the shot in degree from -180deg to +180deg. */ +#define EXIFTAG_CAMERAELEVATIONANGLE 37893 +#define EXIFTAG_CAMERAOWNERNAME 42032 /* owner of a camera */ +#define EXIFTAG_BODYSERIALNUMBER 42033 /* serial number of the body of the camera */ +/* EXIFTAG_LENSSPECIFICATION: minimum focal length (in mm), maximum focal length (in mm),minimum F number in the minimum focal length, + * and minimum F number in the maximum focal length, */ +#define EXIFTAG_LENSSPECIFICATION 42034 +#define EXIFTAG_LENSMAKE 42035 /* the lens manufacturer */ +#define EXIFTAG_LENSMODEL 42036 /* the lens model name and model number */ +#define EXIFTAG_LENSSERIALNUMBER 42037 /* the serial number of the interchangeable lens */ +#define EXIFTAG_GAMMA 42240 /* value of coefficient gamma */ +#define EXIFTAG_COMPOSITEIMAGE 42080 /* composite image */ +#define EXIFTAG_SOURCEIMAGENUMBEROFCOMPOSITEIMAGE 42081 /* source image number of composite image */ +#define EXIFTAG_SOURCEEXPOSURETIMESOFCOMPOSITEIMAGE 42082 /* source exposure times of composite image */ /* * EXIF-GPS tags (Version 2.31, July 2016) */ -#define GPSTAG_VERSIONID 0 /* Indicates the version of GPSInfoIFD. */ -#define GPSTAG_LATITUDEREF \ - 1 /* Indicates whether the latitude is north or south latitude. \ - */ -#define GPSTAG_LATITUDE 2 /* Indicates the latitude. */ -#define GPSTAG_LONGITUDEREF \ - 3 /* Indicates whether the longitude is east or west longitude. \ - */ -#define GPSTAG_LONGITUDE 4 /* Indicates the longitude. */ -#define GPSTAG_ALTITUDEREF \ - 5 /* Indicates the altitude used as the reference altitude. */ -#define GPSTAG_ALTITUDE \ - 6 /* Indicates the altitude based on the reference in \ - GPSAltitudeRef. */ -#define GPSTAG_TIMESTAMP \ - 7 /* Indicates the time as UTC (Coordinated Universal Time). */ -#define GPSTAG_SATELLITES \ - 8 /* Indicates the GPS satellites used for measurements. */ -#define GPSTAG_STATUS \ - 9 /* Indicates the status of the GPS receiver when the image is \ - recorded. */ -#define GPSTAG_MEASUREMODE \ - 10 /* Indicates the GPS measurement mode. */ -#define GPSTAG_DOP \ - 11 /* Indicates the GPS DOP (data degree of precision). */ -#define GPSTAG_SPEEDREF \ - 12 /* Indicates the unit used to express the GPS receiver speed of \ - movement. */ -#define GPSTAG_SPEED \ - 13 /* Indicates the speed of GPS receiver movement. */ -#define GPSTAG_TRACKREF \ - 14 /* Indicates the reference for giving the direction of GPS \ - receiver movement. */ -#define GPSTAG_TRACK \ - 15 /* Indicates the direction of GPS receiver movement. */ -#define GPSTAG_IMGDIRECTIONREF \ - 16 /* Indicates the reference for giving the direction of the image \ - when it is captured. */ -#define GPSTAG_IMGDIRECTION \ - 17 /* Indicates the direction of the image when it was captured. \ - */ -#define GPSTAG_MAPDATUM \ - 18 /* Indicates the geodetic survey data used by the GPS receiver. \ - (e.g. WGS-84) */ -#define GPSTAG_DESTLATITUDEREF \ - 19 /* Indicates whether the latitude of the destination point is \ - north or south latitude. */ -#define GPSTAG_DESTLATITUDE \ - 20 /* Indicates the latitude of the destination point. */ -#define GPSTAG_DESTLONGITUDEREF \ - 21 /* Indicates whether the longitude of the destination point is \ - east or west longitude. */ -#define GPSTAG_DESTLONGITUDE \ - 22 /* Indicates the longitude of the destination point. */ -#define GPSTAG_DESTBEARINGREF \ - 23 /* Indicates the reference used for giving the bearing to the \ - destination point. */ -#define GPSTAG_DESTBEARING \ - 24 /* Indicates the bearing to the destination point. */ -#define GPSTAG_DESTDISTANCEREF \ - 25 /* Indicates the unit used to express the distance to the \ - destination point. */ -#define GPSTAG_DESTDISTANCE \ - 26 /* Indicates the distance to the destination point. */ -#define GPSTAG_PROCESSINGMETHOD \ - 27 /* A character string recording the name of the method used for \ - location finding. */ -#define GPSTAG_AREAINFORMATION \ - 28 /* A character string recording the name of the GPS area. */ -#define GPSTAG_DATESTAMP \ - 29 /* A character string recording date and time information \ - relative to UTC (Coordinated Universal Time). */ -#define GPSTAG_DIFFERENTIAL \ - 30 /* Indicates whether differential correction is applied to the \ - GPS receiver. */ -#define GPSTAG_GPSHPOSITIONINGERROR \ - 31 /* Indicates horizontal positioning errors in meters. */ +#define GPSTAG_VERSIONID 0 /* Indicates the version of GPSInfoIFD. */ +#define GPSTAG_LATITUDEREF 1 /* Indicates whether the latitude is north or south latitude. */ +#define GPSTAG_LATITUDE 2 /* Indicates the latitude. */ +#define GPSTAG_LONGITUDEREF 3 /* Indicates whether the longitude is east or west longitude. */ +#define GPSTAG_LONGITUDE 4 /* Indicates the longitude. */ +#define GPSTAG_ALTITUDEREF 5 /* Indicates the altitude used as the reference altitude. */ +#define GPSTAG_ALTITUDE 6 /* Indicates the altitude based on the reference in GPSAltitudeRef. */ +#define GPSTAG_TIMESTAMP 7 /*Indicates the time as UTC (Coordinated Universal Time). */ +#define GPSTAG_SATELLITES 8 /*Indicates the GPS satellites used for measurements. */ +#define GPSTAG_STATUS 9 /* Indicates the status of the GPS receiver when the image is recorded. */ +#define GPSTAG_MEASUREMODE 10 /* Indicates the GPS measurement mode. */ +#define GPSTAG_DOP 11 /* Indicates the GPS DOP (data degree of precision). */ +#define GPSTAG_SPEEDREF 12 /* Indicates the unit used to express the GPS receiver speed of movement. */ +#define GPSTAG_SPEED 13 /* Indicates the speed of GPS receiver movement. */ +#define GPSTAG_TRACKREF 14 /* Indicates the reference for giving the direction of GPS receiver movement. */ +#define GPSTAG_TRACK 15 /* Indicates the direction of GPS receiver movement. */ +#define GPSTAG_IMGDIRECTIONREF 16 /* Indicates the reference for giving the direction of the image when it is captured. */ +#define GPSTAG_IMGDIRECTION 17 /* Indicates the direction of the image when it was captured. */ +#define GPSTAG_MAPDATUM 18 /* Indicates the geodetic survey data used by the GPS receiver. (e.g. WGS-84) */ +#define GPSTAG_DESTLATITUDEREF 19 /* Indicates whether the latitude of the destination point is north or south latitude. */ +#define GPSTAG_DESTLATITUDE 20 /* Indicates the latitude of the destination point. */ +#define GPSTAG_DESTLONGITUDEREF 21 /* Indicates whether the longitude of the destination point is east or west longitude. */ +#define GPSTAG_DESTLONGITUDE 22 /* Indicates the longitude of the destination point. */ +#define GPSTAG_DESTBEARINGREF 23 /* Indicates the reference used for giving the bearing to the destination point. */ +#define GPSTAG_DESTBEARING 24 /* Indicates the bearing to the destination point. */ +#define GPSTAG_DESTDISTANCEREF 25 /* Indicates the unit used to express the distance to the destination point. */ +#define GPSTAG_DESTDISTANCE 26 /* Indicates the distance to the destination point. */ +#define GPSTAG_PROCESSINGMETHOD 27 /* A character string recording the name of the method used for location finding. */ +#define GPSTAG_AREAINFORMATION 28 /* A character string recording the name of the GPS area. */ +#define GPSTAG_DATESTAMP 29 /* A character string recording date and time information relative to UTC (Coordinated Universal Time). */ +#define GPSTAG_DIFFERENTIAL 30 /* Indicates whether differential correction is applied to the GPS receiver. */ +#define GPSTAG_GPSHPOSITIONINGERROR 31 /* Indicates horizontal positioning errors in meters. */ #endif /* _TIFF_ */ diff --git a/qtimageformats/src/3rdparty/libtiff/libtiff/tiffconf.h.cmake.in b/qtimageformats/src/3rdparty/libtiff/libtiff/tiffconf.h.cmake.in index 5afbf3b..306874f 100644 --- a/qtimageformats/src/3rdparty/libtiff/libtiff/tiffconf.h.cmake.in +++ b/qtimageformats/src/3rdparty/libtiff/libtiff/tiffconf.h.cmake.in @@ -4,6 +4,12 @@ from this file in your programs. */ +/* clang-format off */ +/* clang-format disabled because CMake scripts are very sensitive to the + * formatting of this file. configure_file variables of type "@VAR@" are + * modified by clang-format and won't be substituted. + */ + #ifndef _TIFFCONF_ #define _TIFFCONF_ @@ -46,8 +52,17 @@ machine */ #cmakedefine HAVE_IEEEFP 1 -/* Set the native cpu bit order (FILLORDER_LSB2MSB or FILLORDER_MSB2LSB) */ -#define HOST_FILLORDER @HOST_FILLORDER@ +/* The concept of HOST_FILLORDER is broken. Since libtiff 4.5.1 + * this macro will always be hardcoded to FILLORDER_LSB2MSB on all + * architectures, to reflect past long behavior of doing so on x86 architecture. + * Note however that the default FillOrder used by libtiff is FILLORDER_MSB2LSB, + * as mandated per the TIFF specification. + * The influence of HOST_FILLORDER is only when passing the 'H' mode in + * TIFFOpen(). + * You should NOT rely on this macro to decide the CPU endianness! + * This macro will be removed in libtiff 4.6 + */ +#define HOST_FILLORDER FILLORDER_LSB2MSB /* Native cpu byte order: 1 if big-endian (Motorola) or 0 if little-endian (Intel) */ @@ -125,3 +140,5 @@ #define IPTC_SUPPORT #endif /* _TIFFCONF_ */ + +/* clang-format on */ diff --git a/qtimageformats/src/3rdparty/libtiff/libtiff/tiffconf.h.in b/qtimageformats/src/3rdparty/libtiff/libtiff/tiffconf.h.in index 6703eb0..ab01735 100644 --- a/qtimageformats/src/3rdparty/libtiff/libtiff/tiffconf.h.in +++ b/qtimageformats/src/3rdparty/libtiff/libtiff/tiffconf.h.in @@ -4,6 +4,12 @@ from this file in your programs. */ +/* clang-format off */ +/* clang-format disabled because CMake scripts are very sensitive to the + * formatting of this file. configure_file variables of type "@VAR@" are + * modified by clang-format and won't be substituted. + */ + #ifndef _TIFFCONF_ #define _TIFFCONF_ @@ -46,8 +52,17 @@ machine */ #undef HAVE_IEEEFP -/* Set the native cpu bit order (FILLORDER_LSB2MSB or FILLORDER_MSB2LSB) */ -#undef HOST_FILLORDER +/* The concept of HOST_FILLORDER is broken. Since libtiff 4.5.1 + * this macro will always be hardcoded to FILLORDER_LSB2MSB on all + * architectures, to reflect past long behavior of doing so on x86 architecture. + * Note however that the default FillOrder used by libtiff is FILLORDER_MSB2LSB, + * as mandated per the TIFF specification. + * The influence of HOST_FILLORDER is only when passing the 'H' mode in + * TIFFOpen(). + * You should NOT rely on this macro to decide the CPU endianness! + * This macro will be removed in libtiff 4.6 + */ +#define HOST_FILLORDER FILLORDER_LSB2MSB /* Native cpu byte order: 1 if big-endian (Motorola) or 0 if little-endian (Intel) */ @@ -125,3 +140,5 @@ #define IPTC_SUPPORT #endif /* _TIFFCONF_ */ + +/* clang-format on */ diff --git a/qtimageformats/src/3rdparty/libtiff/libtiff/tiffio.h b/qtimageformats/src/3rdparty/libtiff/libtiff/tiffio.h index 4df5766..2046054 100644 --- a/qtimageformats/src/3rdparty/libtiff/libtiff/tiffio.h +++ b/qtimageformats/src/3rdparty/libtiff/libtiff/tiffio.h @@ -263,6 +263,12 @@ typedef struct TIFFInitMethod init; } TIFFCodec; +typedef struct +{ + uint32_t uNum; + uint32_t uDenom; +} TIFFRational_t; + #include #include @@ -271,7 +277,7 @@ typedef struct #define LOGLUV_PUBLIC 1 #endif -#if defined(__GNUC__) || defined(__attribute__) +#if defined(__GNUC__) || defined(__clang__) || defined(__attribute__) #define TIFF_ATTRIBUTE(x) __attribute__(x) #else #define TIFF_ATTRIBUTE(x) /*nothing*/ diff --git a/qtimageformats/src/3rdparty/libtiff/libtiff/tiffiop.h b/qtimageformats/src/3rdparty/libtiff/libtiff/tiffiop.h index 791881a..fbf7b07 100644 --- a/qtimageformats/src/3rdparty/libtiff/libtiff/tiffiop.h +++ b/qtimageformats/src/3rdparty/libtiff/libtiff/tiffiop.h @@ -143,15 +143,14 @@ struct tiff #define TIFF_CHOPPEDUPARRAYS \ 0x4000000U /* set when allocChoppedUpStripArrays() has modified strip \ array */ - uint64_t tif_diroff; /* file offset of current directory */ - uint64_t tif_nextdiroff; /* file offset of following directory */ - uint64_t tif_lastdiroff; /* file offset of last directory written so far */ - uint64_t *tif_dirlistoff; /* list of offsets to already seen directories to - prevent IFD looping */ + uint64_t tif_diroff; /* file offset of current directory */ + uint64_t tif_nextdiroff; /* file offset of following directory */ + uint64_t tif_lastdiroff; /* file offset of last directory written so far */ TIFFHashSet *tif_map_dir_offset_to_number; TIFFHashSet *tif_map_dir_number_to_offset; - tdir_t tif_dirnumber; /* number of already seen directories */ - TIFFDirectory tif_dir; /* internal rep of current directory */ + int tif_setdirectory_force_absolute; /* switch between relative and absolute + stepping in TIFFSetDirectory() */ + TIFFDirectory tif_dir; /* internal rep of current directory */ TIFFDirectory tif_customdir; /* custom IFDs are separated from the main ones */ union @@ -444,6 +443,8 @@ extern "C" extern float _TIFFClampDoubleToFloat(double); extern uint32_t _TIFFClampDoubleToUInt32(double); + extern void _TIFFCleanupIFDOffsetAndNumberMaps(TIFF *tif); + extern tmsize_t _TIFFReadEncodedStripAndAllocBuffer(TIFF *tif, uint32_t strip, void **buf, diff --git a/qtimageformats/src/3rdparty/libtiff/libtiff/tiffvers.h b/qtimageformats/src/3rdparty/libtiff/libtiff/tiffvers.h index 552e885..892e9a0 100644 --- a/qtimageformats/src/3rdparty/libtiff/libtiff/tiffvers.h +++ b/qtimageformats/src/3rdparty/libtiff/libtiff/tiffvers.h @@ -1,9 +1,14 @@ +/* tiffvers.h version information is updated according to version information + * in configure.ac */ + /* clang-format off */ /* clang-format disabled because FindTIFF.cmake is very sensitive to the * formatting of below line being a single line. + * Furthermore, configure_file variables of type "@VAR@" are + * modified by clang-format and won't be substituted by CMake. */ -#define TIFFLIB_VERSION_STR "LIBTIFF, Version 4.5.0\nCopyright (c) 1988-1996 Sam Leffler\nCopyright (c) 1991-1996 Silicon Graphics, Inc." +#define TIFFLIB_VERSION_STR "LIBTIFF, Version 4.6.0\nCopyright (c) 1988-1996 Sam Leffler\nCopyright (c) 1991-1996 Silicon Graphics, Inc." /* * This define can be used in code that requires * compilation-related definitions specific to a @@ -11,12 +16,13 @@ * version checking should be done based on the * string returned by TIFFGetVersion. */ -#define TIFFLIB_VERSION 20221213 +#define TIFFLIB_VERSION 20230908 /* The following defines have been added in 4.5.0 */ #define TIFFLIB_MAJOR_VERSION 4 -#define TIFFLIB_MINOR_VERSION 5 +#define TIFFLIB_MINOR_VERSION 6 #define TIFFLIB_MICRO_VERSION 0 +#define TIFFLIB_VERSION_STR_MAJ_MIN_MIC "4.6.0" /* Macro added in 4.5.0. Returns TRUE if the current libtiff version is * greater or equal to major.minor.micro diff --git a/qtimageformats/src/3rdparty/libtiff/qt_attribution.json b/qtimageformats/src/3rdparty/libtiff/qt_attribution.json index 7787e89..1da529c 100644 --- a/qtimageformats/src/3rdparty/libtiff/qt_attribution.json +++ b/qtimageformats/src/3rdparty/libtiff/qt_attribution.json @@ -6,7 +6,7 @@ "Description": "", "Homepage": "http://www.simplesystems.org/libtiff/", - "Version": "4.5.0", + "Version": "4.6.0", "License": "libtiff License", "LicenseId": "libtiff", "LicenseFile": "COPYRIGHT", diff --git a/qtimageformats/src/3rdparty/libwebp/AUTHORS b/qtimageformats/src/3rdparty/libwebp/AUTHORS index 2f0c537..8359b20 100644 --- a/qtimageformats/src/3rdparty/libwebp/AUTHORS +++ b/qtimageformats/src/3rdparty/libwebp/AUTHORS @@ -32,6 +32,7 @@ Contributors: - Mislav Bradac (mislavm at google dot com) - Nico Weber (thakis at chromium dot org) - Noel Chromium (noel at chromium dot org) +- Nozomi Isozaki (nontan at pixiv dot co dot jp) - Oliver Wolff (oliver dot wolff at qt dot io) - Owen Rodley (orodley at google dot com) - Parag Salasakar (img dot mips1 at gmail dot com) @@ -47,6 +48,7 @@ Contributors: - Somnath Banerjee (somnath dot banerjee at gmail dot com) - Sriraman Tallam (tmsriram at google dot com) - Tamar Levy (tamar dot levy at intel dot com) +- Thiago Perrotta (tperrotta at google dot com) - Timothy Gu (timothygu99 at gmail dot com) - Urvang Joshi (urvang at google dot com) - Vikas Arora (vikasa at google dot com) diff --git a/qtimageformats/src/3rdparty/libwebp/ChangeLog b/qtimageformats/src/3rdparty/libwebp/ChangeLog index 00ef617..33ec486 100644 --- a/qtimageformats/src/3rdparty/libwebp/ChangeLog +++ b/qtimageformats/src/3rdparty/libwebp/ChangeLog @@ -1,3 +1,82 @@ +1ace578c update NEWS +63234c42 bump version to 1.3.2 +2af26267 Fix OOB write in BuildHuffmanTable. +fd7bb21c update ChangeLog (tag: v1.3.1-rc2, tag: v1.3.1) +e1adea50 update NEWS +43393320 enc/*: normalize WebPEncodingSetError() calls +287fdefe enc/*: add missing WebPEncodingSetError() calls +c3bd7cff EncodeAlphaInternal: add missing error check +d49cfbb3 vp8l_enc,WriteImage: add missing error check +2e5a9ec3 muxread,MuxImageParse: add missing error checks +ebb6f949 cmake,emscripten: explicitly set stack size +59a2b1f9 WebPDecodeYUV: check u/v/stride/uv_stride ptrs +8e965ccb Call png_get_channels() to see if image has alpha +7f0a3419 update ChangeLog (tag: v1.3.1-rc1) +bab7efbe update NEWS +7138bf8f bump version to 1.3.1 +435b4ded update AUTHORS +47351229 update .mailmap +ff6c7f4e CONTRIBUTING.md: add C style / cmake-format notes +dd530437 add .cmake-format.py +adbe2cb1 cmake,cosmetics: apply cmake-format +15b36508 doc/webp-container-spec: rm future codec comment +c369c4bf doc/webp-lossless-bitstream-spec: improve link text +1de35f47 doc/webp-container-spec: don't use 'currently' +bb06a16e doc/webp-container-spec: prefer present tense +9f38b71e doc/webp-lossless-bitstream-spec: prefer present tense +7acb6b82 doc/webp-container-spec: avoid i.e. & e.g. +4967e7cd doc/webp-lossless-bitstream-spec: avoid i.e. & e.g. +e3366659 Merge "Do not find_package image libraries if not needed." into main +428588ef clarify single leaf node trees and use of canonical prefix coding +709ec152 Do not find_package image libraries if not needed. +8dd80ef8 fuzz_utils.h: lower kFuzzPxLimit w/ASan +8f187b9f Clean message calls in CMake +cba30078 WebPConfig.cmake.in: use calculated include path +6cf9a76a Merge "webp-lossless-bitstream-spec: remove use of 'dynamics'" into main +740943b2 Merge "Specialize and optimize ITransform_SSE2 using do_two" into main +2d547e24 Compare kFuzzPxLimit to max_num_operations +ac42dde1 Specialize and optimize ITransform_SSE2 using do_two +17e0ef1d webp-lossless-bitstream-spec: remove use of 'dynamics' +ed274371 neon.h,cosmetics: clear a couple lint warnings +3fb82947 cpu.h,cosmetics: segment defines +0c496a4f cpu.h: add WEBP_AARCH64 +8151f388 move VP8GetCPUInfo declaration to cpu.c +916548c2 Make kFuzzPxLimit sanitizer dependent +4070b271 advanced_api_fuzzer: reduce scaling limit +761f49c3 Merge "webp-lossless-bitstream-spec: add missing bits to ABNF" into main +84d04c48 webp-lossless-bitstream-spec: add missing bits to ABNF +0696e1a7 advanced_api_fuzzer: reduce scaling limit +93d88aa2 Merge "deps.cmake: remove unneeded header checks" into main +118e0035 deps.cmake: remove unneeded header checks +4c3d7018 webp-lossless-bitstream-spec: condense normal-prefix-code +a6a09b32 webp-lossless-bitstream-spec: fix 2 code typos +50ac4f7c Merge "cpu.h: enable NEON w/_M_ARM64EC" into main +4b7d7b4f Add contribution instructions +0afbd97b cpu.h: enable NEON w/_M_ARM64EC +349f4353 Merge changes Ibd89e56b,Ic57e7f84,I89096614 into main +8f7513b7 upsampling_neon.c: fix WEBP_SWAP_16BIT_CSP check +cbf624b5 advanced_api_fuzzer: reduce scaling limit +89edfdd1 Skip slow scaling in libwebp advanced_api_fuzzer +859f19f7 Reduce libwebp advanced_api_fuzzer threshold +a4f04835 Merge changes Ic389aaa2,I329ccd79 into main +1275fac8 Makefile.vc: fix img2webp link w/dynamic cfg +2fe27bb9 img2webp: normalize help output +24bed3d9 cwebp: reflow -near_lossless help text +0825faa4 img2webp: add -sharp_yuv/-near_lossless +d64e6d7d Merge "PaletteSortModifiedZeng: fix leak on error" into main +0e12a22d Merge "EncodeAlphaInternal: clear result->bw on error" into main +0edbb6ea PaletteSortModifiedZeng: fix leak on error +41ffe04e Merge "Update yapf style from "chromium" to "yapf"" into main +2d9d9265 Update yapf style from "chromium" to "yapf" +a486d800 EncodeAlphaInternal: clear result->bw on error +1347a32d Skip big scaled advanced_api_fuzzer +52b6f067 Fix scaling limit in advanced_api_fuzzer.c +73618428 Limit scaling in libwebp advanced_api_fuzzer.c +b54d21a0 Merge "CMakeLists.txt: allow CMAKE_INSTALL_RPATH to be set empty" into main +31c28db5 libwebp{,demux,mux}.pc.in: Requires -> Requires.private +d9a505ff CMakeLists.txt: allow CMAKE_INSTALL_RPATH to be set empty +bdf33d03 Merge tag 'v1.3.0' +b5577769 update ChangeLog (tag: v1.3.0-rc1, tag: v1.3.0) 0ba77244 update NEWS e763eb1e bump version to 1.3.0 2a8686fc update AUTHORS @@ -103,7 +182,7 @@ c626e7d5 cwebp: fix WebPPictureHasTransparency call 866e349c Merge tag 'v1.2.4' c170df38 Merge "Create libsharpyuv.a in makefile.unix." into main 9d7ff74a Create libsharpyuv.a in makefile.unix. -0d1f1254 update ChangeLog (tag: v1.2.4, origin/1.2.4) +0d1f1254 update ChangeLog (tag: v1.2.4) fcbc2d78 Merge "doc/*.txt: restrict code to 69 columns" into main 4ad0e189 Merge "webp-container-spec.txt: normalize fourcc spelling" into main 980d2488 update NEWS diff --git a/qtimageformats/src/3rdparty/libwebp/NEWS b/qtimageformats/src/3rdparty/libwebp/NEWS index c4f8ef7..47f8451 100644 --- a/qtimageformats/src/3rdparty/libwebp/NEWS +++ b/qtimageformats/src/3rdparty/libwebp/NEWS @@ -1,3 +1,22 @@ +- 9/13/2023: version 1.3.2 + This is a binary compatible release. + * security fix for lossless decoder (chromium: #1479274, CVE-2023-4863) + +- 6/23/2023: version 1.3.1 + This is a binary compatible release. + * security fixes for lossless encoder (#603, chromium: #1420107, #1455619, + CVE-2023-1999) + * improve error reporting through WebPPicture error codes + * fix upsampling for RGB565 and RGBA4444 in NEON builds + * img2webp: add -sharp_yuv & -near_lossless + * Windows builds: + - fix compatibility with clang-cl (#607) + - improve Arm64 performance with cl.exe + - add Arm64EC support + * fix webp_js with emcc >= 3.1.27 (stack size change, #614) + * CMake fixes (#592, #610, #612) + * further updates to the container and lossless bitstream docs (#581, #611) + - 12/16/2022: version 1.3.0 This is a binary compatible release. * add libsharpyuv, which exposes -sharp_yuv/config.use_sharp_yuv diff --git a/qtimageformats/src/3rdparty/libwebp/patches/0001-Fix-Windows-build-for-clang-and-neon.patch b/qtimageformats/src/3rdparty/libwebp/patches/0001-Fix-Windows-build-for-clang-and-neon.patch index 2b46f5b..d721476 100644 --- a/qtimageformats/src/3rdparty/libwebp/patches/0001-Fix-Windows-build-for-clang-and-neon.patch +++ b/qtimageformats/src/3rdparty/libwebp/patches/0001-Fix-Windows-build-for-clang-and-neon.patch @@ -1,5 +1,5 @@ diff --git a/src/3rdparty/libwebp/src/dsp/cpu.h b/src/3rdparty/libwebp/src/dsp/cpu.h -index 57a40d8..8cf3e92 100644 +index c86540f..581ecbd 100644 --- a/src/3rdparty/libwebp/src/dsp/cpu.h +++ b/src/3rdparty/libwebp/src/dsp/cpu.h @@ -14,6 +14,8 @@ @@ -8,10 +8,10 @@ index 57a40d8..8cf3e92 100644 +#include + + #include + #ifdef HAVE_CONFIG_H - #include "src/webp/config.h" - #endif -@@ -43,12 +45,12 @@ +@@ -48,12 +50,12 @@ #if !defined(HAVE_CONFIG_H) #if defined(_MSC_VER) && _MSC_VER > 1310 && \ @@ -26,13 +26,13 @@ index 57a40d8..8cf3e92 100644 #define WEBP_MSC_SSE41 // Visual C++ SSE4.1 targets #endif #endif -@@ -97,7 +99,8 @@ - // arm_neon.h. Compile errors were seen with Visual Studio 2019 16.4 with +@@ -106,7 +108,8 @@ // vtbl4_u8(); a fix was made in 16.6. - #if defined(_MSC_VER) && ((_MSC_VER >= 1700 && defined(_M_ARM)) || \ -- (_MSC_VER >= 1926 && defined(_M_ARM64))) -+ (_MSC_VER >= 1926 && defined(_M_ARM64))) && \ -+ !defined(__clang__) && (QT_CONFIG_neon == 1) + #if defined(_MSC_VER) && \ + ((_MSC_VER >= 1700 && defined(_M_ARM)) || \ +- (_MSC_VER >= 1926 && (defined(_M_ARM64) || defined(_M_ARM64EC)))) ++ (_MSC_VER >= 1926 && (defined(_M_ARM64) || defined(_M_ARM64EC)))) && \ ++ !defined(__clang__) && (QT_CONFIG_neon == 1) #define WEBP_USE_NEON #define WEBP_USE_INTRINSICS #endif diff --git a/qtimageformats/src/3rdparty/libwebp/qt_attribution.json b/qtimageformats/src/3rdparty/libwebp/qt_attribution.json index 258f7ff..d186c36 100644 --- a/qtimageformats/src/3rdparty/libwebp/qt_attribution.json +++ b/qtimageformats/src/3rdparty/libwebp/qt_attribution.json @@ -6,7 +6,7 @@ "Description": "WebP is a new image format that provides lossless and lossy compression for images on the web.", "Homepage": "https://developers.google.com/speed/webp/", - "Version": "1.3.0", + "Version": "1.3.2", "License": "BSD 3-clause \"New\" or \"Revised\" License", "LicenseId": "BSD-3-Clause", "LicenseFile": "COPYING", diff --git a/qtimageformats/src/3rdparty/libwebp/sharpyuv/sharpyuv.c b/qtimageformats/src/3rdparty/libwebp/sharpyuv/sharpyuv.c index 7de34fb..a074564 100644 --- a/qtimageformats/src/3rdparty/libwebp/sharpyuv/sharpyuv.c +++ b/qtimageformats/src/3rdparty/libwebp/sharpyuv/sharpyuv.c @@ -440,6 +440,7 @@ static int DoSharpArgbToYuv(const uint8_t* r_ptr, const uint8_t* g_ptr, // By default SharpYuvConvert calls it with SharpYuvGetCPUInfo. If needed, // users can declare it as extern and call it with an alternate VP8CPUInfo // function. +extern VP8CPUInfo SharpYuvGetCPUInfo; SHARPYUV_EXTERN void SharpYuvInit(VP8CPUInfo cpu_info_func); void SharpYuvInit(VP8CPUInfo cpu_info_func) { static volatile VP8CPUInfo sharpyuv_last_cpuinfo_used = diff --git a/qtimageformats/src/3rdparty/libwebp/sharpyuv/sharpyuv.h b/qtimageformats/src/3rdparty/libwebp/sharpyuv/sharpyuv.h index 181b20a..7b9904d 100644 --- a/qtimageformats/src/3rdparty/libwebp/sharpyuv/sharpyuv.h +++ b/qtimageformats/src/3rdparty/libwebp/sharpyuv/sharpyuv.h @@ -37,7 +37,7 @@ extern "C" { // SharpYUV API version following the convention from semver.org #define SHARPYUV_VERSION_MAJOR 0 #define SHARPYUV_VERSION_MINOR 2 -#define SHARPYUV_VERSION_PATCH 0 +#define SHARPYUV_VERSION_PATCH 1 // Version as a uint32_t. The major number is the high 8 bits. // The minor number is the middle 8 bits. The patch number is the low 16 bits. #define SHARPYUV_MAKE_VERSION(MAJOR, MINOR, PATCH) \ diff --git a/qtimageformats/src/3rdparty/libwebp/sharpyuv/sharpyuv_dsp.c b/qtimageformats/src/3rdparty/libwebp/sharpyuv/sharpyuv_dsp.c index 31c272c..0da3efc 100644 --- a/qtimageformats/src/3rdparty/libwebp/sharpyuv/sharpyuv_dsp.c +++ b/qtimageformats/src/3rdparty/libwebp/sharpyuv/sharpyuv_dsp.c @@ -72,6 +72,7 @@ void (*SharpYuvFilterRow)(const int16_t* A, const int16_t* B, int len, const uint16_t* best_y, uint16_t* out, int bit_depth); +extern VP8CPUInfo SharpYuvGetCPUInfo; extern void InitSharpYuvSSE2(void); extern void InitSharpYuvNEON(void); diff --git a/qtimageformats/src/3rdparty/libwebp/src/dec/tree_dec.c b/qtimageformats/src/3rdparty/libwebp/src/dec/tree_dec.c index 1c6fdea..2434605 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dec/tree_dec.c +++ b/qtimageformats/src/3rdparty/libwebp/src/dec/tree_dec.c @@ -12,10 +12,11 @@ // Author: Skal (pascal.massimino@gmail.com) #include "src/dec/vp8i_dec.h" +#include "src/dsp/cpu.h" #include "src/utils/bit_reader_inl_utils.h" #if !defined(USE_GENERIC_TREE) -#if !defined(__arm__) && !defined(_M_ARM) && !defined(__aarch64__) +#if !defined(__arm__) && !defined(_M_ARM) && !WEBP_AARCH64 // using a table is ~1-2% slower on ARM. Prefer the coded-tree approach then. #define USE_GENERIC_TREE 1 // ALTERNATE_CODE #else diff --git a/qtimageformats/src/3rdparty/libwebp/src/dec/vp8_dec.c b/qtimageformats/src/3rdparty/libwebp/src/dec/vp8_dec.c index 2003935..20b92e8 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dec/vp8_dec.c +++ b/qtimageformats/src/3rdparty/libwebp/src/dec/vp8_dec.c @@ -494,6 +494,8 @@ static int GetCoeffsAlt(VP8BitReader* const br, return 16; } +extern VP8CPUInfo VP8GetCPUInfo; + WEBP_DSP_INIT_FUNC(InitGetCoeffs) { if (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kSlowSSSE3)) { GetCoeffs = GetCoeffsAlt; diff --git a/qtimageformats/src/3rdparty/libwebp/src/dec/vp8i_dec.h b/qtimageformats/src/3rdparty/libwebp/src/dec/vp8i_dec.h index 83791ec..7929fd7 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dec/vp8i_dec.h +++ b/qtimageformats/src/3rdparty/libwebp/src/dec/vp8i_dec.h @@ -32,7 +32,7 @@ extern "C" { // version numbers #define DEC_MAJ_VERSION 1 #define DEC_MIN_VERSION 3 -#define DEC_REV_VERSION 0 +#define DEC_REV_VERSION 2 // YUV-cache parameters. Cache is 32-bytes wide (= one cacheline). // Constraints are: We need to store one 16x16 block of luma samples (y), diff --git a/qtimageformats/src/3rdparty/libwebp/src/dec/vp8l_dec.c b/qtimageformats/src/3rdparty/libwebp/src/dec/vp8l_dec.c index c0ea018..7995313 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dec/vp8l_dec.c +++ b/qtimageformats/src/3rdparty/libwebp/src/dec/vp8l_dec.c @@ -253,11 +253,11 @@ static int ReadHuffmanCodeLengths( int symbol; int max_symbol; int prev_code_len = DEFAULT_CODE_LENGTH; - HuffmanCode table[1 << LENGTHS_TABLE_BITS]; + HuffmanTables tables; - if (!VP8LBuildHuffmanTable(table, LENGTHS_TABLE_BITS, - code_length_code_lengths, - NUM_CODE_LENGTH_CODES)) { + if (!VP8LHuffmanTablesAllocate(1 << LENGTHS_TABLE_BITS, &tables) || + !VP8LBuildHuffmanTable(&tables, LENGTHS_TABLE_BITS, + code_length_code_lengths, NUM_CODE_LENGTH_CODES)) { goto End; } @@ -277,7 +277,7 @@ static int ReadHuffmanCodeLengths( int code_len; if (max_symbol-- == 0) break; VP8LFillBitWindow(br); - p = &table[VP8LPrefetchBits(br) & LENGTHS_TABLE_MASK]; + p = &tables.curr_segment->start[VP8LPrefetchBits(br) & LENGTHS_TABLE_MASK]; VP8LSetBitPos(br, br->bit_pos_ + p->bits); code_len = p->value; if (code_len < kCodeLengthLiterals) { @@ -300,6 +300,7 @@ static int ReadHuffmanCodeLengths( ok = 1; End: + VP8LHuffmanTablesDeallocate(&tables); if (!ok) dec->status_ = VP8_STATUS_BITSTREAM_ERROR; return ok; } @@ -307,7 +308,8 @@ static int ReadHuffmanCodeLengths( // 'code_lengths' is pre-allocated temporary buffer, used for creating Huffman // tree. static int ReadHuffmanCode(int alphabet_size, VP8LDecoder* const dec, - int* const code_lengths, HuffmanCode* const table) { + int* const code_lengths, + HuffmanTables* const table) { int ok = 0; int size = 0; VP8LBitReader* const br = &dec->br_; @@ -362,8 +364,7 @@ static int ReadHuffmanCodes(VP8LDecoder* const dec, int xsize, int ysize, VP8LMetadata* const hdr = &dec->hdr_; uint32_t* huffman_image = NULL; HTreeGroup* htree_groups = NULL; - HuffmanCode* huffman_tables = NULL; - HuffmanCode* huffman_table = NULL; + HuffmanTables* huffman_tables = &hdr->huffman_tables_; int num_htree_groups = 1; int num_htree_groups_max = 1; int max_alphabet_size = 0; @@ -372,6 +373,10 @@ static int ReadHuffmanCodes(VP8LDecoder* const dec, int xsize, int ysize, int* mapping = NULL; int ok = 0; + // Check the table has been 0 initialized (through InitMetadata). + assert(huffman_tables->root.start == NULL); + assert(huffman_tables->curr_segment == NULL); + if (allow_recursion && VP8LReadBits(br, 1)) { // use meta Huffman codes. const int huffman_precision = VP8LReadBits(br, 3) + 2; @@ -434,16 +439,15 @@ static int ReadHuffmanCodes(VP8LDecoder* const dec, int xsize, int ysize, code_lengths = (int*)WebPSafeCalloc((uint64_t)max_alphabet_size, sizeof(*code_lengths)); - huffman_tables = (HuffmanCode*)WebPSafeMalloc(num_htree_groups * table_size, - sizeof(*huffman_tables)); htree_groups = VP8LHtreeGroupsNew(num_htree_groups); - if (htree_groups == NULL || code_lengths == NULL || huffman_tables == NULL) { + if (htree_groups == NULL || code_lengths == NULL || + !VP8LHuffmanTablesAllocate(num_htree_groups * table_size, + huffman_tables)) { dec->status_ = VP8_STATUS_OUT_OF_MEMORY; goto Error; } - huffman_table = huffman_tables; for (i = 0; i < num_htree_groups_max; ++i) { // If the index "i" is unused in the Huffman image, just make sure the // coefficients are valid but do not store them. @@ -468,19 +472,20 @@ static int ReadHuffmanCodes(VP8LDecoder* const dec, int xsize, int ysize, int max_bits = 0; for (j = 0; j < HUFFMAN_CODES_PER_META_CODE; ++j) { int alphabet_size = kAlphabetSize[j]; - htrees[j] = huffman_table; if (j == 0 && color_cache_bits > 0) { alphabet_size += (1 << color_cache_bits); } - size = ReadHuffmanCode(alphabet_size, dec, code_lengths, huffman_table); + size = + ReadHuffmanCode(alphabet_size, dec, code_lengths, huffman_tables); + htrees[j] = huffman_tables->curr_segment->curr_table; if (size == 0) { goto Error; } if (is_trivial_literal && kLiteralMap[j] == 1) { - is_trivial_literal = (huffman_table->bits == 0); + is_trivial_literal = (htrees[j]->bits == 0); } - total_size += huffman_table->bits; - huffman_table += size; + total_size += htrees[j]->bits; + huffman_tables->curr_segment->curr_table += size; if (j <= ALPHA) { int local_max_bits = code_lengths[0]; int k; @@ -515,14 +520,13 @@ static int ReadHuffmanCodes(VP8LDecoder* const dec, int xsize, int ysize, hdr->huffman_image_ = huffman_image; hdr->num_htree_groups_ = num_htree_groups; hdr->htree_groups_ = htree_groups; - hdr->huffman_tables_ = huffman_tables; Error: WebPSafeFree(code_lengths); WebPSafeFree(mapping); if (!ok) { WebPSafeFree(huffman_image); - WebPSafeFree(huffman_tables); + VP8LHuffmanTablesDeallocate(huffman_tables); VP8LHtreeGroupsFree(htree_groups); } return ok; @@ -1358,7 +1362,7 @@ static void ClearMetadata(VP8LMetadata* const hdr) { assert(hdr != NULL); WebPSafeFree(hdr->huffman_image_); - WebPSafeFree(hdr->huffman_tables_); + VP8LHuffmanTablesDeallocate(&hdr->huffman_tables_); VP8LHtreeGroupsFree(hdr->htree_groups_); VP8LColorCacheClear(&hdr->color_cache_); VP8LColorCacheClear(&hdr->saved_color_cache_); @@ -1673,7 +1677,7 @@ int VP8LDecodeImage(VP8LDecoder* const dec) { if (dec == NULL) return 0; - assert(dec->hdr_.huffman_tables_ != NULL); + assert(dec->hdr_.huffman_tables_.root.start != NULL); assert(dec->hdr_.htree_groups_ != NULL); assert(dec->hdr_.num_htree_groups_ > 0); diff --git a/qtimageformats/src/3rdparty/libwebp/src/dec/vp8li_dec.h b/qtimageformats/src/3rdparty/libwebp/src/dec/vp8li_dec.h index 72b2e86..32540a4 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dec/vp8li_dec.h +++ b/qtimageformats/src/3rdparty/libwebp/src/dec/vp8li_dec.h @@ -51,7 +51,7 @@ typedef struct { uint32_t* huffman_image_; int num_htree_groups_; HTreeGroup* htree_groups_; - HuffmanCode* huffman_tables_; + HuffmanTables huffman_tables_; } VP8LMetadata; typedef struct VP8LDecoder VP8LDecoder; diff --git a/qtimageformats/src/3rdparty/libwebp/src/dec/webp_dec.c b/qtimageformats/src/3rdparty/libwebp/src/dec/webp_dec.c index 3f4f7bb..f557868 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dec/webp_dec.c +++ b/qtimageformats/src/3rdparty/libwebp/src/dec/webp_dec.c @@ -658,19 +658,26 @@ uint8_t* WebPDecodeBGRA(const uint8_t* data, size_t data_size, uint8_t* WebPDecodeYUV(const uint8_t* data, size_t data_size, int* width, int* height, uint8_t** u, uint8_t** v, int* stride, int* uv_stride) { - WebPDecBuffer output; // only to preserve the side-infos - uint8_t* const out = Decode(MODE_YUV, data, data_size, - width, height, &output); - - if (out != NULL) { - const WebPYUVABuffer* const buf = &output.u.YUVA; - *u = buf->u; - *v = buf->v; - *stride = buf->y_stride; - *uv_stride = buf->u_stride; - assert(buf->u_stride == buf->v_stride); - } - return out; + // data, width and height are checked by Decode(). + if (u == NULL || v == NULL || stride == NULL || uv_stride == NULL) { + return NULL; + } + + { + WebPDecBuffer output; // only to preserve the side-infos + uint8_t* const out = Decode(MODE_YUV, data, data_size, + width, height, &output); + + if (out != NULL) { + const WebPYUVABuffer* const buf = &output.u.YUVA; + *u = buf->u; + *v = buf->v; + *stride = buf->y_stride; + *uv_stride = buf->u_stride; + assert(buf->u_stride == buf->v_stride); + } + return out; + } } static void DefaultFeatures(WebPBitstreamFeatures* const features) { diff --git a/qtimageformats/src/3rdparty/libwebp/src/demux/demux.c b/qtimageformats/src/3rdparty/libwebp/src/demux/demux.c index 324e5eb..4b0d3f5 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/demux/demux.c +++ b/qtimageformats/src/3rdparty/libwebp/src/demux/demux.c @@ -25,7 +25,7 @@ #define DMUX_MAJ_VERSION 1 #define DMUX_MIN_VERSION 3 -#define DMUX_REV_VERSION 0 +#define DMUX_REV_VERSION 2 typedef struct { size_t start_; // start location of the data diff --git a/qtimageformats/src/3rdparty/libwebp/src/dsp/alpha_processing.c b/qtimageformats/src/3rdparty/libwebp/src/dsp/alpha_processing.c index 1892929..1d152f2 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dsp/alpha_processing.c +++ b/qtimageformats/src/3rdparty/libwebp/src/dsp/alpha_processing.c @@ -425,6 +425,7 @@ void (*WebPAlphaReplace)(uint32_t* src, int length, uint32_t color); //------------------------------------------------------------------------------ // Init function +extern VP8CPUInfo VP8GetCPUInfo; extern void WebPInitAlphaProcessingMIPSdspR2(void); extern void WebPInitAlphaProcessingSSE2(void); extern void WebPInitAlphaProcessingSSE41(void); diff --git a/qtimageformats/src/3rdparty/libwebp/src/dsp/cost.c b/qtimageformats/src/3rdparty/libwebp/src/dsp/cost.c index 460ec4f..73d2140 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dsp/cost.c +++ b/qtimageformats/src/3rdparty/libwebp/src/dsp/cost.c @@ -374,6 +374,7 @@ static void SetResidualCoeffs_C(const int16_t* const coeffs, VP8GetResidualCostFunc VP8GetResidualCost; VP8SetResidualCoeffsFunc VP8SetResidualCoeffs; +extern VP8CPUInfo VP8GetCPUInfo; extern void VP8EncDspCostInitMIPS32(void); extern void VP8EncDspCostInitMIPSdspR2(void); extern void VP8EncDspCostInitSSE2(void); diff --git a/qtimageformats/src/3rdparty/libwebp/src/dsp/cost_neon.c b/qtimageformats/src/3rdparty/libwebp/src/dsp/cost_neon.c index 8cc8ce5..6582669 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dsp/cost_neon.c +++ b/qtimageformats/src/3rdparty/libwebp/src/dsp/cost_neon.c @@ -29,7 +29,7 @@ static void SetResidualCoeffs_NEON(const int16_t* const coeffs, const uint8x16_t eob = vcombine_u8(vqmovn_u16(eob_0), vqmovn_u16(eob_1)); const uint8x16_t masked = vandq_u8(eob, vld1q_u8(position)); -#ifdef __aarch64__ +#if WEBP_AARCH64 res->last = vmaxvq_u8(masked) - 1; #else const uint8x8_t eob_8x8 = vmax_u8(vget_low_u8(masked), vget_high_u8(masked)); @@ -43,7 +43,7 @@ static void SetResidualCoeffs_NEON(const int16_t* const coeffs, vst1_lane_s32(&res->last, vreinterpret_s32_u32(eob_32x2), 0); --res->last; -#endif // __aarch64__ +#endif // WEBP_AARCH64 res->coeffs = coeffs; } diff --git a/qtimageformats/src/3rdparty/libwebp/src/dsp/cpu.c b/qtimageformats/src/3rdparty/libwebp/src/dsp/cpu.c index 62de73f..2234c77 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dsp/cpu.c +++ b/qtimageformats/src/3rdparty/libwebp/src/dsp/cpu.c @@ -173,6 +173,7 @@ static int x86CPUInfo(CPUFeature feature) { } return 0; } +WEBP_EXTERN VP8CPUInfo VP8GetCPUInfo; VP8CPUInfo VP8GetCPUInfo = x86CPUInfo; #elif defined(WEBP_ANDROID_NEON) // NB: needs to be before generic NEON test. static int AndroidCPUInfo(CPUFeature feature) { @@ -184,6 +185,7 @@ static int AndroidCPUInfo(CPUFeature feature) { } return 0; } +WEBP_EXTERN VP8CPUInfo VP8GetCPUInfo; VP8CPUInfo VP8GetCPUInfo = AndroidCPUInfo; #elif defined(EMSCRIPTEN) // also needs to be before generic NEON test // Use compile flags as an indicator of SIMD support instead of a runtime check. @@ -208,6 +210,7 @@ static int wasmCPUInfo(CPUFeature feature) { } return 0; } +WEBP_EXTERN VP8CPUInfo VP8GetCPUInfo; VP8CPUInfo VP8GetCPUInfo = wasmCPUInfo; #elif defined(WEBP_HAVE_NEON) // In most cases this function doesn't check for NEON support (it's assumed by @@ -236,6 +239,7 @@ static int armCPUInfo(CPUFeature feature) { return 1; #endif } +WEBP_EXTERN VP8CPUInfo VP8GetCPUInfo; VP8CPUInfo VP8GetCPUInfo = armCPUInfo; #elif defined(WEBP_USE_MIPS32) || defined(WEBP_USE_MIPS_DSP_R2) || \ defined(WEBP_USE_MSA) @@ -247,7 +251,9 @@ static int mipsCPUInfo(CPUFeature feature) { } } +WEBP_EXTERN VP8CPUInfo VP8GetCPUInfo; VP8CPUInfo VP8GetCPUInfo = mipsCPUInfo; #else +WEBP_EXTERN VP8CPUInfo VP8GetCPUInfo; VP8CPUInfo VP8GetCPUInfo = NULL; #endif diff --git a/qtimageformats/src/3rdparty/libwebp/src/dsp/cpu.h b/qtimageformats/src/3rdparty/libwebp/src/dsp/cpu.h index de32a39..581ecbd 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dsp/cpu.h +++ b/qtimageformats/src/3rdparty/libwebp/src/dsp/cpu.h @@ -14,10 +14,10 @@ #ifndef WEBP_DSP_CPU_H_ #define WEBP_DSP_CPU_H_ -#include - #include +#include + #ifdef HAVE_CONFIG_H #include "src/webp/config.h" #endif @@ -45,6 +45,9 @@ #define __has_builtin(x) 0 #endif +//------------------------------------------------------------------------------ +// x86 defines. + #if !defined(HAVE_CONFIG_H) #if defined(_MSC_VER) && _MSC_VER > 1310 && \ (defined(_M_X64) || defined(_M_IX86)) && !defined(__clang__) @@ -82,6 +85,9 @@ #undef WEBP_MSC_SSE41 #undef WEBP_MSC_SSE2 +//------------------------------------------------------------------------------ +// Arm defines. + // The intrinsics currently cause compiler errors with arm-nacl-gcc and the // inline assembly would need to be modified for use with Native Client. #if ((defined(__ARM_NEON__) || defined(__aarch64__)) && \ @@ -100,17 +106,27 @@ // inclusion of arm64_neon.h; Visual Studio 2019 includes this file in // arm_neon.h. Compile errors were seen with Visual Studio 2019 16.4 with // vtbl4_u8(); a fix was made in 16.6. -#if defined(_MSC_VER) && ((_MSC_VER >= 1700 && defined(_M_ARM)) || \ - (_MSC_VER >= 1926 && defined(_M_ARM64))) && \ - !defined(__clang__) && (QT_CONFIG_neon == 1) +#if defined(_MSC_VER) && \ + ((_MSC_VER >= 1700 && defined(_M_ARM)) || \ + (_MSC_VER >= 1926 && (defined(_M_ARM64) || defined(_M_ARM64EC)))) && \ + !defined(__clang__) && (QT_CONFIG_neon == 1) #define WEBP_USE_NEON #define WEBP_USE_INTRINSICS #endif +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) +#define WEBP_AARCH64 1 +#else +#define WEBP_AARCH64 0 +#endif + #if defined(WEBP_USE_NEON) && !defined(WEBP_HAVE_NEON) #define WEBP_HAVE_NEON #endif +//------------------------------------------------------------------------------ +// MIPS defines. + #if defined(__mips__) && !defined(__mips64) && defined(__mips_isa_rev) && \ (__mips_isa_rev >= 1) && (__mips_isa_rev < 6) #define WEBP_USE_MIPS32 @@ -126,6 +142,8 @@ #define WEBP_USE_MSA #endif +//------------------------------------------------------------------------------ + #ifndef WEBP_DSP_OMIT_C_CODE #define WEBP_DSP_OMIT_C_CODE 1 #endif @@ -136,13 +154,14 @@ #define WEBP_NEON_OMIT_C_CODE 0 #endif -#if !(LOCAL_CLANG_PREREQ(3, 8) || LOCAL_GCC_PREREQ(4, 8) || \ - defined(__aarch64__)) +#if !(LOCAL_CLANG_PREREQ(3, 8) || LOCAL_GCC_PREREQ(4, 8) || WEBP_AARCH64) #define WEBP_NEON_WORK_AROUND_GCC 1 #else #define WEBP_NEON_WORK_AROUND_GCC 0 #endif +//------------------------------------------------------------------------------ + // This macro prevents thread_sanitizer from reporting known concurrent writes. #define WEBP_TSAN_IGNORE_FUNCTION #if defined(__has_feature) @@ -244,16 +263,7 @@ typedef enum { kMSA } CPUFeature; -#ifdef __cplusplus -extern "C" { -#endif - // returns true if the CPU supports the feature. typedef int (*VP8CPUInfo)(CPUFeature feature); -WEBP_EXTERN VP8CPUInfo VP8GetCPUInfo; - -#ifdef __cplusplus -} // extern "C" -#endif #endif // WEBP_DSP_CPU_H_ diff --git a/qtimageformats/src/3rdparty/libwebp/src/dsp/dec.c b/qtimageformats/src/3rdparty/libwebp/src/dsp/dec.c index 537c701..33d8df8 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dsp/dec.c +++ b/qtimageformats/src/3rdparty/libwebp/src/dsp/dec.c @@ -734,6 +734,7 @@ VP8SimpleFilterFunc VP8SimpleHFilter16i; void (*VP8DitherCombine8x8)(const uint8_t* dither, uint8_t* dst, int dst_stride); +extern VP8CPUInfo VP8GetCPUInfo; extern void VP8DspInitSSE2(void); extern void VP8DspInitSSE41(void); extern void VP8DspInitNEON(void); diff --git a/qtimageformats/src/3rdparty/libwebp/src/dsp/dec_neon.c b/qtimageformats/src/3rdparty/libwebp/src/dsp/dec_neon.c index fa85170..22784cf 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dsp/dec_neon.c +++ b/qtimageformats/src/3rdparty/libwebp/src/dsp/dec_neon.c @@ -1428,7 +1428,7 @@ static WEBP_INLINE void DC8_NEON(uint8_t* dst, int do_top, int do_left) { if (do_top) { const uint8x8_t A = vld1_u8(dst - BPS); // top row -#if defined(__aarch64__) +#if WEBP_AARCH64 const uint16_t p2 = vaddlv_u8(A); sum_top = vdupq_n_u16(p2); #else @@ -1511,7 +1511,7 @@ static WEBP_INLINE void DC16_NEON(uint8_t* dst, int do_top, int do_left) { if (do_top) { const uint8x16_t A = vld1q_u8(dst - BPS); // top row -#if defined(__aarch64__) +#if WEBP_AARCH64 const uint16_t p3 = vaddlvq_u8(A); sum_top = vdupq_n_u16(p3); #else diff --git a/qtimageformats/src/3rdparty/libwebp/src/dsp/enc.c b/qtimageformats/src/3rdparty/libwebp/src/dsp/enc.c index ea47a3f..2ba97ba 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dsp/enc.c +++ b/qtimageformats/src/3rdparty/libwebp/src/dsp/enc.c @@ -732,6 +732,7 @@ VP8QuantizeBlockWHT VP8EncQuantizeBlockWHT; VP8BlockCopy VP8Copy4x4; VP8BlockCopy VP8Copy16x8; +extern VP8CPUInfo VP8GetCPUInfo; extern void VP8EncDspInitSSE2(void); extern void VP8EncDspInitSSE41(void); extern void VP8EncDspInitNEON(void); diff --git a/qtimageformats/src/3rdparty/libwebp/src/dsp/enc_neon.c b/qtimageformats/src/3rdparty/libwebp/src/dsp/enc_neon.c index 3a04111..7148003 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dsp/enc_neon.c +++ b/qtimageformats/src/3rdparty/libwebp/src/dsp/enc_neon.c @@ -764,7 +764,7 @@ static WEBP_INLINE void AccumulateSSE16_NEON(const uint8_t* const a, // Horizontal sum of all four uint32_t values in 'sum'. static int SumToInt_NEON(uint32x4_t sum) { -#if defined(__aarch64__) +#if WEBP_AARCH64 return (int)vaddvq_u32(sum); #else const uint64x2_t sum2 = vpaddlq_u32(sum); @@ -865,7 +865,7 @@ static int QuantizeBlock_NEON(int16_t in[16], int16_t out[16], uint8x8x4_t shuffles; // vtbl?_u8 are marked unavailable for iOS arm64 with Xcode < 6.3, use // non-standard versions there. -#if defined(__APPLE__) && defined(__aarch64__) && \ +#if defined(__APPLE__) && WEBP_AARCH64 && \ defined(__apple_build_version__) && (__apple_build_version__< 6020037) uint8x16x2_t all_out; INIT_VECTOR2(all_out, vreinterpretq_u8_s16(out0), vreinterpretq_u8_s16(out1)); diff --git a/qtimageformats/src/3rdparty/libwebp/src/dsp/enc_sse2.c b/qtimageformats/src/3rdparty/libwebp/src/dsp/enc_sse2.c index 1d10556..010624a 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dsp/enc_sse2.c +++ b/qtimageformats/src/3rdparty/libwebp/src/dsp/enc_sse2.c @@ -25,9 +25,160 @@ //------------------------------------------------------------------------------ // Transforms (Paragraph 14.4) -// Does one or two inverse transforms. -static void ITransform_SSE2(const uint8_t* ref, const int16_t* in, uint8_t* dst, - int do_two) { +// Does one inverse transform. +static void ITransform_One_SSE2(const uint8_t* ref, const int16_t* in, + uint8_t* dst) { + // This implementation makes use of 16-bit fixed point versions of two + // multiply constants: + // K1 = sqrt(2) * cos (pi/8) ~= 85627 / 2^16 + // K2 = sqrt(2) * sin (pi/8) ~= 35468 / 2^16 + // + // To be able to use signed 16-bit integers, we use the following trick to + // have constants within range: + // - Associated constants are obtained by subtracting the 16-bit fixed point + // version of one: + // k = K - (1 << 16) => K = k + (1 << 16) + // K1 = 85267 => k1 = 20091 + // K2 = 35468 => k2 = -30068 + // - The multiplication of a variable by a constant become the sum of the + // variable and the multiplication of that variable by the associated + // constant: + // (x * K) >> 16 = (x * (k + (1 << 16))) >> 16 = ((x * k ) >> 16) + x + const __m128i k1k2 = _mm_set_epi16(-30068, -30068, -30068, -30068, + 20091, 20091, 20091, 20091); + const __m128i k2k1 = _mm_set_epi16(20091, 20091, 20091, 20091, + -30068, -30068, -30068, -30068); + const __m128i zero = _mm_setzero_si128(); + const __m128i zero_four = _mm_set_epi16(0, 0, 0, 0, 4, 4, 4, 4); + __m128i T01, T23; + + // Load and concatenate the transform coefficients. + const __m128i in01 = _mm_loadu_si128((const __m128i*)&in[0]); + const __m128i in23 = _mm_loadu_si128((const __m128i*)&in[8]); + // a00 a10 a20 a30 a01 a11 a21 a31 + // a02 a12 a22 a32 a03 a13 a23 a33 + + // Vertical pass and subsequent transpose. + { + const __m128i in1 = _mm_unpackhi_epi64(in01, in01); + const __m128i in3 = _mm_unpackhi_epi64(in23, in23); + + // First pass, c and d calculations are longer because of the "trick" + // multiplications. + // c = MUL(in1, K2) - MUL(in3, K1) = MUL(in1, k2) - MUL(in3, k1) + in1 - in3 + // d = MUL(in1, K1) + MUL(in3, K2) = MUL(in1, k1) + MUL(in3, k2) + in1 + in3 + const __m128i a_d3 = _mm_add_epi16(in01, in23); + const __m128i b_c3 = _mm_sub_epi16(in01, in23); + const __m128i c1d1 = _mm_mulhi_epi16(in1, k2k1); + const __m128i c2d2 = _mm_mulhi_epi16(in3, k1k2); + const __m128i c3 = _mm_unpackhi_epi64(b_c3, b_c3); + const __m128i c4 = _mm_sub_epi16(c1d1, c2d2); + const __m128i c = _mm_add_epi16(c3, c4); + const __m128i d4u = _mm_add_epi16(c1d1, c2d2); + const __m128i du = _mm_add_epi16(a_d3, d4u); + const __m128i d = _mm_unpackhi_epi64(du, du); + + // Second pass. + const __m128i comb_ab = _mm_unpacklo_epi64(a_d3, b_c3); + const __m128i comb_dc = _mm_unpacklo_epi64(d, c); + + const __m128i tmp01 = _mm_add_epi16(comb_ab, comb_dc); + const __m128i tmp32 = _mm_sub_epi16(comb_ab, comb_dc); + const __m128i tmp23 = _mm_shuffle_epi32(tmp32, _MM_SHUFFLE(1, 0, 3, 2)); + + const __m128i transpose_0 = _mm_unpacklo_epi16(tmp01, tmp23); + const __m128i transpose_1 = _mm_unpackhi_epi16(tmp01, tmp23); + // a00 a20 a01 a21 a02 a22 a03 a23 + // a10 a30 a11 a31 a12 a32 a13 a33 + + T01 = _mm_unpacklo_epi16(transpose_0, transpose_1); + T23 = _mm_unpackhi_epi16(transpose_0, transpose_1); + // a00 a10 a20 a30 a01 a11 a21 a31 + // a02 a12 a22 a32 a03 a13 a23 a33 + } + + // Horizontal pass and subsequent transpose. + { + const __m128i T1 = _mm_unpackhi_epi64(T01, T01); + const __m128i T3 = _mm_unpackhi_epi64(T23, T23); + + // First pass, c and d calculations are longer because of the "trick" + // multiplications. + const __m128i dc = _mm_add_epi16(T01, zero_four); + + // c = MUL(T1, K2) - MUL(T3, K1) = MUL(T1, k2) - MUL(T3, k1) + T1 - T3 + // d = MUL(T1, K1) + MUL(T3, K2) = MUL(T1, k1) + MUL(T3, k2) + T1 + T3 + const __m128i a_d3 = _mm_add_epi16(dc, T23); + const __m128i b_c3 = _mm_sub_epi16(dc, T23); + const __m128i c1d1 = _mm_mulhi_epi16(T1, k2k1); + const __m128i c2d2 = _mm_mulhi_epi16(T3, k1k2); + const __m128i c3 = _mm_unpackhi_epi64(b_c3, b_c3); + const __m128i c4 = _mm_sub_epi16(c1d1, c2d2); + const __m128i c = _mm_add_epi16(c3, c4); + const __m128i d4u = _mm_add_epi16(c1d1, c2d2); + const __m128i du = _mm_add_epi16(a_d3, d4u); + const __m128i d = _mm_unpackhi_epi64(du, du); + + // Second pass. + const __m128i comb_ab = _mm_unpacklo_epi64(a_d3, b_c3); + const __m128i comb_dc = _mm_unpacklo_epi64(d, c); + + const __m128i tmp01 = _mm_add_epi16(comb_ab, comb_dc); + const __m128i tmp32 = _mm_sub_epi16(comb_ab, comb_dc); + const __m128i tmp23 = _mm_shuffle_epi32(tmp32, _MM_SHUFFLE(1, 0, 3, 2)); + + const __m128i shifted01 = _mm_srai_epi16(tmp01, 3); + const __m128i shifted23 = _mm_srai_epi16(tmp23, 3); + // a00 a01 a02 a03 a10 a11 a12 a13 + // a20 a21 a22 a23 a30 a31 a32 a33 + + const __m128i transpose_0 = _mm_unpacklo_epi16(shifted01, shifted23); + const __m128i transpose_1 = _mm_unpackhi_epi16(shifted01, shifted23); + // a00 a20 a01 a21 a02 a22 a03 a23 + // a10 a30 a11 a31 a12 a32 a13 a33 + + T01 = _mm_unpacklo_epi16(transpose_0, transpose_1); + T23 = _mm_unpackhi_epi16(transpose_0, transpose_1); + // a00 a10 a20 a30 a01 a11 a21 a31 + // a02 a12 a22 a32 a03 a13 a23 a33 + } + + // Add inverse transform to 'ref' and store. + { + // Load the reference(s). + __m128i ref01, ref23, ref0123; + int32_t buf[4]; + + // Load four bytes/pixels per line. + const __m128i ref0 = _mm_cvtsi32_si128(WebPMemToInt32(&ref[0 * BPS])); + const __m128i ref1 = _mm_cvtsi32_si128(WebPMemToInt32(&ref[1 * BPS])); + const __m128i ref2 = _mm_cvtsi32_si128(WebPMemToInt32(&ref[2 * BPS])); + const __m128i ref3 = _mm_cvtsi32_si128(WebPMemToInt32(&ref[3 * BPS])); + ref01 = _mm_unpacklo_epi32(ref0, ref1); + ref23 = _mm_unpacklo_epi32(ref2, ref3); + + // Convert to 16b. + ref01 = _mm_unpacklo_epi8(ref01, zero); + ref23 = _mm_unpacklo_epi8(ref23, zero); + // Add the inverse transform(s). + ref01 = _mm_add_epi16(ref01, T01); + ref23 = _mm_add_epi16(ref23, T23); + // Unsigned saturate to 8b. + ref0123 = _mm_packus_epi16(ref01, ref23); + + _mm_storeu_si128((__m128i *)buf, ref0123); + + // Store four bytes/pixels per line. + WebPInt32ToMem(&dst[0 * BPS], buf[0]); + WebPInt32ToMem(&dst[1 * BPS], buf[1]); + WebPInt32ToMem(&dst[2 * BPS], buf[2]); + WebPInt32ToMem(&dst[3 * BPS], buf[3]); + } +} + +// Does two inverse transforms. +static void ITransform_Two_SSE2(const uint8_t* ref, const int16_t* in, + uint8_t* dst) { // This implementation makes use of 16-bit fixed point versions of two // multiply constants: // K1 = sqrt(2) * cos (pi/8) ~= 85627 / 2^16 @@ -49,33 +200,21 @@ static void ITransform_SSE2(const uint8_t* ref, const int16_t* in, uint8_t* dst, __m128i T0, T1, T2, T3; // Load and concatenate the transform coefficients (we'll do two inverse - // transforms in parallel). In the case of only one inverse transform, the - // second half of the vectors will just contain random value we'll never - // use nor store. + // transforms in parallel). __m128i in0, in1, in2, in3; { - in0 = _mm_loadl_epi64((const __m128i*)&in[0]); - in1 = _mm_loadl_epi64((const __m128i*)&in[4]); - in2 = _mm_loadl_epi64((const __m128i*)&in[8]); - in3 = _mm_loadl_epi64((const __m128i*)&in[12]); - // a00 a10 a20 a30 x x x x - // a01 a11 a21 a31 x x x x - // a02 a12 a22 a32 x x x x - // a03 a13 a23 a33 x x x x - if (do_two) { - const __m128i inB0 = _mm_loadl_epi64((const __m128i*)&in[16]); - const __m128i inB1 = _mm_loadl_epi64((const __m128i*)&in[20]); - const __m128i inB2 = _mm_loadl_epi64((const __m128i*)&in[24]); - const __m128i inB3 = _mm_loadl_epi64((const __m128i*)&in[28]); - in0 = _mm_unpacklo_epi64(in0, inB0); - in1 = _mm_unpacklo_epi64(in1, inB1); - in2 = _mm_unpacklo_epi64(in2, inB2); - in3 = _mm_unpacklo_epi64(in3, inB3); - // a00 a10 a20 a30 b00 b10 b20 b30 - // a01 a11 a21 a31 b01 b11 b21 b31 - // a02 a12 a22 a32 b02 b12 b22 b32 - // a03 a13 a23 a33 b03 b13 b23 b33 - } + const __m128i tmp0 = _mm_loadu_si128((const __m128i*)&in[0]); + const __m128i tmp1 = _mm_loadu_si128((const __m128i*)&in[8]); + const __m128i tmp2 = _mm_loadu_si128((const __m128i*)&in[16]); + const __m128i tmp3 = _mm_loadu_si128((const __m128i*)&in[24]); + in0 = _mm_unpacklo_epi64(tmp0, tmp2); + in1 = _mm_unpackhi_epi64(tmp0, tmp2); + in2 = _mm_unpacklo_epi64(tmp1, tmp3); + in3 = _mm_unpackhi_epi64(tmp1, tmp3); + // a00 a10 a20 a30 b00 b10 b20 b30 + // a01 a11 a21 a31 b01 b11 b21 b31 + // a02 a12 a22 a32 b02 b12 b22 b32 + // a03 a13 a23 a33 b03 b13 b23 b33 } // Vertical pass and subsequent transpose. @@ -148,19 +287,11 @@ static void ITransform_SSE2(const uint8_t* ref, const int16_t* in, uint8_t* dst, const __m128i zero = _mm_setzero_si128(); // Load the reference(s). __m128i ref0, ref1, ref2, ref3; - if (do_two) { - // Load eight bytes/pixels per line. - ref0 = _mm_loadl_epi64((const __m128i*)&ref[0 * BPS]); - ref1 = _mm_loadl_epi64((const __m128i*)&ref[1 * BPS]); - ref2 = _mm_loadl_epi64((const __m128i*)&ref[2 * BPS]); - ref3 = _mm_loadl_epi64((const __m128i*)&ref[3 * BPS]); - } else { - // Load four bytes/pixels per line. - ref0 = _mm_cvtsi32_si128(WebPMemToInt32(&ref[0 * BPS])); - ref1 = _mm_cvtsi32_si128(WebPMemToInt32(&ref[1 * BPS])); - ref2 = _mm_cvtsi32_si128(WebPMemToInt32(&ref[2 * BPS])); - ref3 = _mm_cvtsi32_si128(WebPMemToInt32(&ref[3 * BPS])); - } + // Load eight bytes/pixels per line. + ref0 = _mm_loadl_epi64((const __m128i*)&ref[0 * BPS]); + ref1 = _mm_loadl_epi64((const __m128i*)&ref[1 * BPS]); + ref2 = _mm_loadl_epi64((const __m128i*)&ref[2 * BPS]); + ref3 = _mm_loadl_epi64((const __m128i*)&ref[3 * BPS]); // Convert to 16b. ref0 = _mm_unpacklo_epi8(ref0, zero); ref1 = _mm_unpacklo_epi8(ref1, zero); @@ -176,20 +307,21 @@ static void ITransform_SSE2(const uint8_t* ref, const int16_t* in, uint8_t* dst, ref1 = _mm_packus_epi16(ref1, ref1); ref2 = _mm_packus_epi16(ref2, ref2); ref3 = _mm_packus_epi16(ref3, ref3); - // Store the results. - if (do_two) { - // Store eight bytes/pixels per line. - _mm_storel_epi64((__m128i*)&dst[0 * BPS], ref0); - _mm_storel_epi64((__m128i*)&dst[1 * BPS], ref1); - _mm_storel_epi64((__m128i*)&dst[2 * BPS], ref2); - _mm_storel_epi64((__m128i*)&dst[3 * BPS], ref3); - } else { - // Store four bytes/pixels per line. - WebPInt32ToMem(&dst[0 * BPS], _mm_cvtsi128_si32(ref0)); - WebPInt32ToMem(&dst[1 * BPS], _mm_cvtsi128_si32(ref1)); - WebPInt32ToMem(&dst[2 * BPS], _mm_cvtsi128_si32(ref2)); - WebPInt32ToMem(&dst[3 * BPS], _mm_cvtsi128_si32(ref3)); - } + // Store eight bytes/pixels per line. + _mm_storel_epi64((__m128i*)&dst[0 * BPS], ref0); + _mm_storel_epi64((__m128i*)&dst[1 * BPS], ref1); + _mm_storel_epi64((__m128i*)&dst[2 * BPS], ref2); + _mm_storel_epi64((__m128i*)&dst[3 * BPS], ref3); + } +} + +// Does one or two inverse transforms. +static void ITransform_SSE2(const uint8_t* ref, const int16_t* in, uint8_t* dst, + int do_two) { + if (do_two) { + ITransform_Two_SSE2(ref, in, dst); + } else { + ITransform_One_SSE2(ref, in, dst); } } diff --git a/qtimageformats/src/3rdparty/libwebp/src/dsp/filters.c b/qtimageformats/src/3rdparty/libwebp/src/dsp/filters.c index 4506567..85eee50 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dsp/filters.c +++ b/qtimageformats/src/3rdparty/libwebp/src/dsp/filters.c @@ -233,6 +233,7 @@ static void GradientUnfilter_C(const uint8_t* prev, const uint8_t* in, WebPFilterFunc WebPFilters[WEBP_FILTER_LAST]; WebPUnfilterFunc WebPUnfilters[WEBP_FILTER_LAST]; +extern VP8CPUInfo VP8GetCPUInfo; extern void VP8FiltersInitMIPSdspR2(void); extern void VP8FiltersInitMSA(void); extern void VP8FiltersInitNEON(void); diff --git a/qtimageformats/src/3rdparty/libwebp/src/dsp/lossless.c b/qtimageformats/src/3rdparty/libwebp/src/dsp/lossless.c index fb86e58..9f81209 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dsp/lossless.c +++ b/qtimageformats/src/3rdparty/libwebp/src/dsp/lossless.c @@ -588,6 +588,7 @@ VP8LConvertFunc VP8LConvertBGRAToBGR; VP8LMapARGBFunc VP8LMapColor32b; VP8LMapAlphaFunc VP8LMapColor8b; +extern VP8CPUInfo VP8GetCPUInfo; extern void VP8LDspInitSSE2(void); extern void VP8LDspInitSSE41(void); extern void VP8LDspInitNEON(void); diff --git a/qtimageformats/src/3rdparty/libwebp/src/dsp/lossless_enc.c b/qtimageformats/src/3rdparty/libwebp/src/dsp/lossless_enc.c index b1f9f26..cde1280 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dsp/lossless_enc.c +++ b/qtimageformats/src/3rdparty/libwebp/src/dsp/lossless_enc.c @@ -791,6 +791,7 @@ VP8LBundleColorMapFunc VP8LBundleColorMap; VP8LPredictorAddSubFunc VP8LPredictorsSub[16]; VP8LPredictorAddSubFunc VP8LPredictorsSub_C[16]; +extern VP8CPUInfo VP8GetCPUInfo; extern void VP8LEncDspInitSSE2(void); extern void VP8LEncDspInitSSE41(void); extern void VP8LEncDspInitNEON(void); diff --git a/qtimageformats/src/3rdparty/libwebp/src/dsp/lossless_enc_neon.c b/qtimageformats/src/3rdparty/libwebp/src/dsp/lossless_enc_neon.c index 7c7b73f..e32c796 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dsp/lossless_enc_neon.c +++ b/qtimageformats/src/3rdparty/libwebp/src/dsp/lossless_enc_neon.c @@ -25,7 +25,7 @@ // vtbl?_u8 are marked unavailable for iOS arm64 with Xcode < 6.3, use // non-standard versions there. -#if defined(__APPLE__) && defined(__aarch64__) && \ +#if defined(__APPLE__) && WEBP_AARCH64 && \ defined(__apple_build_version__) && (__apple_build_version__< 6020037) #define USE_VTBLQ #endif diff --git a/qtimageformats/src/3rdparty/libwebp/src/dsp/lossless_neon.c b/qtimageformats/src/3rdparty/libwebp/src/dsp/lossless_neon.c index 89e3e01..ddc9b61 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dsp/lossless_neon.c +++ b/qtimageformats/src/3rdparty/libwebp/src/dsp/lossless_neon.c @@ -498,7 +498,7 @@ static void PredictorAdd13_NEON(const uint32_t* in, const uint32_t* upper, // vtbl?_u8 are marked unavailable for iOS arm64 with Xcode < 6.3, use // non-standard versions there. -#if defined(__APPLE__) && defined(__aarch64__) && \ +#if defined(__APPLE__) && WEBP_AARCH64 && \ defined(__apple_build_version__) && (__apple_build_version__< 6020037) #define USE_VTBLQ #endif diff --git a/qtimageformats/src/3rdparty/libwebp/src/dsp/neon.h b/qtimageformats/src/3rdparty/libwebp/src/dsp/neon.h index c591f9b..14acb40 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dsp/neon.h +++ b/qtimageformats/src/3rdparty/libwebp/src/dsp/neon.h @@ -21,7 +21,7 @@ // Right now, some intrinsics functions seem slower, so we disable them // everywhere except newer clang/gcc or aarch64 where the inline assembly is // incompatible. -#if LOCAL_CLANG_PREREQ(3,8) || LOCAL_GCC_PREREQ(4,9) || defined(__aarch64__) +#if LOCAL_CLANG_PREREQ(3, 8) || LOCAL_GCC_PREREQ(4, 9) || WEBP_AARCH64 #define WEBP_USE_INTRINSICS // use intrinsics when possible #endif @@ -46,7 +46,7 @@ // if using intrinsics, this flag avoids some functions that make gcc-4.6.3 // crash ("internal compiler error: in immed_double_const, at emit-rtl."). // (probably similar to gcc.gnu.org/bugzilla/show_bug.cgi?id=48183) -#if !(LOCAL_CLANG_PREREQ(3,8) || LOCAL_GCC_PREREQ(4,8) || defined(__aarch64__)) +#if !(LOCAL_CLANG_PREREQ(3, 8) || LOCAL_GCC_PREREQ(4, 8) || WEBP_AARCH64) #define WORK_AROUND_GCC #endif diff --git a/qtimageformats/src/3rdparty/libwebp/src/dsp/quant.h b/qtimageformats/src/3rdparty/libwebp/src/dsp/quant.h index fc099bf..bf7734c 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dsp/quant.h +++ b/qtimageformats/src/3rdparty/libwebp/src/dsp/quant.h @@ -22,7 +22,7 @@ #define IsFlat IsFlat_NEON static uint32_t horizontal_add_uint32x4(const uint32x4_t a) { -#if defined(__aarch64__) +#if WEBP_AARCH64 return vaddvq_u32(a); #else const uint64x2_t b = vpaddlq_u32(a); diff --git a/qtimageformats/src/3rdparty/libwebp/src/dsp/rescaler.c b/qtimageformats/src/3rdparty/libwebp/src/dsp/rescaler.c index 14620ce..325d8be 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dsp/rescaler.c +++ b/qtimageformats/src/3rdparty/libwebp/src/dsp/rescaler.c @@ -197,6 +197,7 @@ WebPRescalerImportRowFunc WebPRescalerImportRowShrink; WebPRescalerExportRowFunc WebPRescalerExportRowExpand; WebPRescalerExportRowFunc WebPRescalerExportRowShrink; +extern VP8CPUInfo VP8GetCPUInfo; extern void WebPRescalerDspInitSSE2(void); extern void WebPRescalerDspInitMIPS32(void); extern void WebPRescalerDspInitMIPSdspR2(void); diff --git a/qtimageformats/src/3rdparty/libwebp/src/dsp/ssim.c b/qtimageformats/src/3rdparty/libwebp/src/dsp/ssim.c index f85c2e6..9a1341e 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dsp/ssim.c +++ b/qtimageformats/src/3rdparty/libwebp/src/dsp/ssim.c @@ -137,6 +137,7 @@ VP8SSIMGetClippedFunc VP8SSIMGetClipped; VP8AccumulateSSEFunc VP8AccumulateSSE; #endif +extern VP8CPUInfo VP8GetCPUInfo; extern void VP8SSIMDspInitSSE2(void); WEBP_DSP_INIT_FUNC(VP8SSIMDspInit) { diff --git a/qtimageformats/src/3rdparty/libwebp/src/dsp/upsampling.c b/qtimageformats/src/3rdparty/libwebp/src/dsp/upsampling.c index 87f771f..983b9c4 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dsp/upsampling.c +++ b/qtimageformats/src/3rdparty/libwebp/src/dsp/upsampling.c @@ -215,6 +215,7 @@ static void EmptyYuv444Func(const uint8_t* y, WebPYUV444Converter WebPYUV444Converters[MODE_LAST]; +extern VP8CPUInfo VP8GetCPUInfo; extern void WebPInitYUV444ConvertersMIPSdspR2(void); extern void WebPInitYUV444ConvertersSSE2(void); extern void WebPInitYUV444ConvertersSSE41(void); diff --git a/qtimageformats/src/3rdparty/libwebp/src/dsp/upsampling_neon.c b/qtimageformats/src/3rdparty/libwebp/src/dsp/upsampling_neon.c index 6ba71a7..bbc000c 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dsp/upsampling_neon.c +++ b/qtimageformats/src/3rdparty/libwebp/src/dsp/upsampling_neon.c @@ -111,7 +111,7 @@ static const int16_t kCoeffs1[4] = { 19077, 26149, 6419, 13320 }; vst4_u8(out, v255_r_g_b); \ } while (0) -#if !defined(WEBP_SWAP_16BIT_CSP) +#if (WEBP_SWAP_16BIT_CSP == 0) #define ZIP_U8(lo, hi) vzip_u8((lo), (hi)) #else #define ZIP_U8(lo, hi) vzip_u8((hi), (lo)) diff --git a/qtimageformats/src/3rdparty/libwebp/src/dsp/yuv.c b/qtimageformats/src/3rdparty/libwebp/src/dsp/yuv.c index d16c13d..8a04b85 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/dsp/yuv.c +++ b/qtimageformats/src/3rdparty/libwebp/src/dsp/yuv.c @@ -70,6 +70,7 @@ void WebPSamplerProcessPlane(const uint8_t* y, int y_stride, WebPSamplerRowFunc WebPSamplers[MODE_LAST]; +extern VP8CPUInfo VP8GetCPUInfo; extern void WebPInitSamplersSSE2(void); extern void WebPInitSamplersSSE41(void); extern void WebPInitSamplersMIPS32(void); diff --git a/qtimageformats/src/3rdparty/libwebp/src/enc/alpha_enc.c b/qtimageformats/src/3rdparty/libwebp/src/enc/alpha_enc.c index f7c0269..26f0034 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/enc/alpha_enc.c +++ b/qtimageformats/src/3rdparty/libwebp/src/enc/alpha_enc.c @@ -13,6 +13,7 @@ #include #include +#include #include "src/enc/vp8i_enc.h" #include "src/dsp/dsp.h" @@ -140,6 +141,11 @@ static int EncodeAlphaInternal(const uint8_t* const data, int width, int height, !reduce_levels, &tmp_bw, &result->stats); if (ok) { output = VP8LBitWriterFinish(&tmp_bw); + if (tmp_bw.error_) { + VP8LBitWriterWipeOut(&tmp_bw); + memset(&result->bw, 0, sizeof(result->bw)); + return 0; + } output_size = VP8LBitWriterNumBytes(&tmp_bw); if (output_size > data_size) { // compressed size is larger than source! Revert to uncompressed mode. @@ -148,6 +154,7 @@ static int EncodeAlphaInternal(const uint8_t* const data, int width, int height, } } else { VP8LBitWriterWipeOut(&tmp_bw); + memset(&result->bw, 0, sizeof(result->bw)); return 0; } } @@ -162,7 +169,7 @@ static int EncodeAlphaInternal(const uint8_t* const data, int width, int height, header = method | (filter << 2); if (reduce_levels) header |= ALPHA_PREPROCESSED_LEVELS << 4; - VP8BitWriterInit(&result->bw, ALPHA_HEADER_LEN + output_size); + if (!VP8BitWriterInit(&result->bw, ALPHA_HEADER_LEN + output_size)) ok = 0; ok = ok && VP8BitWriterAppend(&result->bw, &header, ALPHA_HEADER_LEN); ok = ok && VP8BitWriterAppend(&result->bw, output, output_size); @@ -312,11 +319,11 @@ static int EncodeAlpha(VP8Encoder* const enc, assert(filter >= WEBP_FILTER_NONE && filter <= WEBP_FILTER_FAST); if (quality < 0 || quality > 100) { - return 0; + return WebPEncodingSetError(pic, VP8_ENC_ERROR_INVALID_CONFIGURATION); } if (method < ALPHA_NO_COMPRESSION || method > ALPHA_LOSSLESS_COMPRESSION) { - return 0; + return WebPEncodingSetError(pic, VP8_ENC_ERROR_INVALID_CONFIGURATION); } if (method == ALPHA_NO_COMPRESSION) { @@ -326,7 +333,7 @@ static int EncodeAlpha(VP8Encoder* const enc, quant_alpha = (uint8_t*)WebPSafeMalloc(1ULL, data_size); if (quant_alpha == NULL) { - return 0; + return WebPEncodingSetError(pic, VP8_ENC_ERROR_OUT_OF_MEMORY); } // Extract alpha data (width x height) from raw_data (stride x height). @@ -346,6 +353,9 @@ static int EncodeAlpha(VP8Encoder* const enc, ok = ApplyFiltersAndEncode(quant_alpha, width, height, data_size, method, filter, reduce_levels, effort_level, output, output_size, pic->stats); + if (!ok) { + WebPEncodingSetError(pic, VP8_ENC_ERROR_OUT_OF_MEMORY); // imprecise + } #if !defined(WEBP_DISABLE_STATS) if (pic->stats != NULL) { // need stats? pic->stats->coded_size += (int)(*output_size); @@ -405,7 +415,7 @@ int VP8EncStartAlpha(VP8Encoder* const enc) { WebPWorker* const worker = &enc->alpha_worker_; // Makes sure worker is good to go. if (!WebPGetWorkerInterface()->Reset(worker)) { - return 0; + return WebPEncodingSetError(enc->pic_, VP8_ENC_ERROR_OUT_OF_MEMORY); } WebPGetWorkerInterface()->Launch(worker); return 1; diff --git a/qtimageformats/src/3rdparty/libwebp/src/enc/analysis_enc.c b/qtimageformats/src/3rdparty/libwebp/src/enc/analysis_enc.c index a0001ac..962eaa9 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/enc/analysis_enc.c +++ b/qtimageformats/src/3rdparty/libwebp/src/enc/analysis_enc.c @@ -474,6 +474,10 @@ int VP8EncAnalyze(VP8Encoder* const enc) { } else { // Use only one default segment. ResetAllMBInfo(enc); } + if (!ok) { + return WebPEncodingSetError(enc->pic_, + VP8_ENC_ERROR_OUT_OF_MEMORY); // imprecise + } return ok; } diff --git a/qtimageformats/src/3rdparty/libwebp/src/enc/backward_references_enc.c b/qtimageformats/src/3rdparty/libwebp/src/enc/backward_references_enc.c index 49a0fac..dc98bf1 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/enc/backward_references_enc.c +++ b/qtimageformats/src/3rdparty/libwebp/src/enc/backward_references_enc.c @@ -283,8 +283,7 @@ int VP8LHashChainFill(VP8LHashChain* const p, int quality, hash_to_first_index = (int32_t*)WebPSafeMalloc(HASH_SIZE, sizeof(*hash_to_first_index)); if (hash_to_first_index == NULL) { - WebPEncodingSetError(pic, VP8_ENC_ERROR_OUT_OF_MEMORY); - return 0; + return WebPEncodingSetError(pic, VP8_ENC_ERROR_OUT_OF_MEMORY); } percent_range = remaining_percent / 2; @@ -1050,8 +1049,7 @@ int VP8LGetBackwardReferences( refs_best = GetBackwardReferencesLowEffort( width, height, argb, cache_bits_best, hash_chain, refs); if (refs_best == NULL) { - WebPEncodingSetError(pic, VP8_ENC_ERROR_OUT_OF_MEMORY); - return 0; + return WebPEncodingSetError(pic, VP8_ENC_ERROR_OUT_OF_MEMORY); } // Set it in first position. BackwardRefsSwap(refs_best, &refs[0]); @@ -1059,8 +1057,7 @@ int VP8LGetBackwardReferences( if (!GetBackwardReferences(width, height, argb, quality, lz77_types_to_try, cache_bits_max, do_no_cache, hash_chain, refs, cache_bits_best)) { - WebPEncodingSetError(pic, VP8_ENC_ERROR_OUT_OF_MEMORY); - return 0; + return WebPEncodingSetError(pic, VP8_ENC_ERROR_OUT_OF_MEMORY); } } diff --git a/qtimageformats/src/3rdparty/libwebp/src/enc/frame_enc.c b/qtimageformats/src/3rdparty/libwebp/src/enc/frame_enc.c index b93d9e5..9a98dc1 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/enc/frame_enc.c +++ b/qtimageformats/src/3rdparty/libwebp/src/enc/frame_enc.c @@ -689,7 +689,7 @@ static int PreLoopInitialize(VP8Encoder* const enc) { } if (!ok) { VP8EncFreeBitWriters(enc); // malloc error occurred - WebPEncodingSetError(enc->pic_, VP8_ENC_ERROR_OUT_OF_MEMORY); + return WebPEncodingSetError(enc->pic_, VP8_ENC_ERROR_OUT_OF_MEMORY); } return ok; } @@ -719,6 +719,7 @@ static int PostLoopFinalize(VP8EncIterator* const it, int ok) { } else { // Something bad happened -> need to do some memory cleanup. VP8EncFreeBitWriters(enc); + return WebPEncodingSetError(enc->pic_, VP8_ENC_ERROR_OUT_OF_MEMORY); } return ok; } @@ -754,6 +755,11 @@ int VP8EncLoop(VP8Encoder* const enc) { // *then* decide how to code the skip decision if there's one. if (!VP8Decimate(&it, &info, rd_opt) || dont_use_skip) { CodeResiduals(it.bw_, &it, &info); + if (it.bw_->error_) { + // enc->pic_->error_code is set in PostLoopFinalize(). + ok = 0; + break; + } } else { // reset predictors after a skip ResetAfterSkip(&it); } diff --git a/qtimageformats/src/3rdparty/libwebp/src/enc/picture_csp_enc.c b/qtimageformats/src/3rdparty/libwebp/src/enc/picture_csp_enc.c index 78c8ca4..a9280e6 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/enc/picture_csp_enc.c +++ b/qtimageformats/src/3rdparty/libwebp/src/enc/picture_csp_enc.c @@ -98,6 +98,7 @@ static int kLinearToGammaTab[GAMMA_TAB_SIZE + 1]; static uint16_t kGammaToLinearTab[256]; static volatile int kGammaTablesOk = 0; static void InitGammaTables(void); +extern VP8CPUInfo VP8GetCPUInfo; WEBP_DSP_INIT_FUNC(InitGammaTables) { if (!kGammaTablesOk) { @@ -534,7 +535,9 @@ static int ImportYUVAFromRGBA(const uint8_t* r_ptr, WebPInitConvertARGBToYUV(); InitGammaTables(); - if (tmp_rgb == NULL) return 0; // malloc error + if (tmp_rgb == NULL) { + return WebPEncodingSetError(picture, VP8_ENC_ERROR_OUT_OF_MEMORY); + } // Downsample Y/U/V planes, two rows at a time for (y = 0; y < (height >> 1); ++y) { diff --git a/qtimageformats/src/3rdparty/libwebp/src/enc/picture_rescale_enc.c b/qtimageformats/src/3rdparty/libwebp/src/enc/picture_rescale_enc.c index 839f91c..ea90d82 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/enc/picture_rescale_enc.c +++ b/qtimageformats/src/3rdparty/libwebp/src/enc/picture_rescale_enc.c @@ -137,7 +137,9 @@ int WebPPictureCrop(WebPPicture* pic, PictureGrabSpecs(pic, &tmp); tmp.width = width; tmp.height = height; - if (!WebPPictureAlloc(&tmp)) return 0; + if (!WebPPictureAlloc(&tmp)) { + return WebPEncodingSetError(pic, tmp.error_code); + } if (!pic->use_argb) { const int y_offset = top * pic->y_stride + left; @@ -212,26 +214,28 @@ int WebPPictureRescale(WebPPicture* picture, int width, int height) { prev_height = picture->height; if (!WebPRescalerGetScaledDimensions( prev_width, prev_height, &width, &height)) { - return 0; + return WebPEncodingSetError(picture, VP8_ENC_ERROR_BAD_DIMENSION); } PictureGrabSpecs(picture, &tmp); tmp.width = width; tmp.height = height; - if (!WebPPictureAlloc(&tmp)) return 0; + if (!WebPPictureAlloc(&tmp)) { + return WebPEncodingSetError(picture, tmp.error_code); + } if (!picture->use_argb) { work = (rescaler_t*)WebPSafeMalloc(2ULL * width, sizeof(*work)); if (work == NULL) { WebPPictureFree(&tmp); - return 0; + return WebPEncodingSetError(picture, VP8_ENC_ERROR_OUT_OF_MEMORY); } // If present, we need to rescale alpha first (for AlphaMultiplyY). if (picture->a != NULL) { WebPInitAlphaProcessing(); if (!RescalePlane(picture->a, prev_width, prev_height, picture->a_stride, tmp.a, width, height, tmp.a_stride, work, 1)) { - return 0; + return WebPEncodingSetError(picture, VP8_ENC_ERROR_BAD_DIMENSION); } } @@ -246,14 +250,14 @@ int WebPPictureRescale(WebPPicture* picture, int width, int height) { !RescalePlane(picture->v, HALVE(prev_width), HALVE(prev_height), picture->uv_stride, tmp.v, HALVE(width), HALVE(height), tmp.uv_stride, work, 1)) { - return 0; + return WebPEncodingSetError(picture, VP8_ENC_ERROR_BAD_DIMENSION); } AlphaMultiplyY(&tmp, 1); } else { work = (rescaler_t*)WebPSafeMalloc(2ULL * width * 4, sizeof(*work)); if (work == NULL) { WebPPictureFree(&tmp); - return 0; + return WebPEncodingSetError(picture, VP8_ENC_ERROR_OUT_OF_MEMORY); } // In order to correctly interpolate colors, we need to apply the alpha // weighting first (black-matting), scale the RGB values, and remove @@ -263,7 +267,7 @@ int WebPPictureRescale(WebPPicture* picture, int width, int height) { if (!RescalePlane((const uint8_t*)picture->argb, prev_width, prev_height, picture->argb_stride * 4, (uint8_t*)tmp.argb, width, height, tmp.argb_stride * 4, work, 4)) { - return 0; + return WebPEncodingSetError(picture, VP8_ENC_ERROR_BAD_DIMENSION); } AlphaMultiplyARGB(&tmp, 1); } diff --git a/qtimageformats/src/3rdparty/libwebp/src/enc/syntax_enc.c b/qtimageformats/src/3rdparty/libwebp/src/enc/syntax_enc.c index e18cf65..9b8f524 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/enc/syntax_enc.c +++ b/qtimageformats/src/3rdparty/libwebp/src/enc/syntax_enc.c @@ -258,7 +258,10 @@ static int EmitPartitionsSize(const VP8Encoder* const enc, buf[3 * p + 1] = (part_size >> 8) & 0xff; buf[3 * p + 2] = (part_size >> 16) & 0xff; } - return p ? pic->writer(buf, 3 * p, pic) : 1; + if (p && !pic->writer(buf, 3 * p, pic)) { + return WebPEncodingSetError(pic, VP8_ENC_ERROR_BAD_WRITE); + } + return 1; } //------------------------------------------------------------------------------ @@ -381,6 +384,7 @@ int VP8EncWrite(VP8Encoder* const enc) { enc->coded_size_ = (int)(CHUNK_HEADER_SIZE + riff_size); ok = ok && WebPReportProgress(pic, final_percent, &enc->percent_); + if (!ok) WebPEncodingSetError(pic, VP8_ENC_ERROR_BAD_WRITE); return ok; } diff --git a/qtimageformats/src/3rdparty/libwebp/src/enc/vp8i_enc.h b/qtimageformats/src/3rdparty/libwebp/src/enc/vp8i_enc.h index c9927c4..0864fbf 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/enc/vp8i_enc.h +++ b/qtimageformats/src/3rdparty/libwebp/src/enc/vp8i_enc.h @@ -32,7 +32,7 @@ extern "C" { // version numbers #define ENC_MAJ_VERSION 1 #define ENC_MIN_VERSION 3 -#define ENC_REV_VERSION 0 +#define ENC_REV_VERSION 2 enum { MAX_LF_LEVELS = 64, // Maximum loop filter level MAX_VARIABLE_LEVEL = 67, // last (inclusive) level with variable cost diff --git a/qtimageformats/src/3rdparty/libwebp/src/enc/vp8l_enc.c b/qtimageformats/src/3rdparty/libwebp/src/enc/vp8l_enc.c index 0b07e52..3a8ec3d 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/enc/vp8l_enc.c +++ b/qtimageformats/src/3rdparty/libwebp/src/enc/vp8l_enc.c @@ -196,8 +196,7 @@ static int CoOccurrenceBuild(const WebPPicture* const pic, uint32_t palette_sorted[MAX_PALETTE_SIZE]; lines = (uint32_t*)WebPSafeMalloc(2 * pic->width, sizeof(*lines)); if (lines == NULL) { - WebPEncodingSetError(pic, VP8_ENC_ERROR_OUT_OF_MEMORY); - return 0; + return WebPEncodingSetError(pic, VP8_ENC_ERROR_OUT_OF_MEMORY); } line_top = &lines[0]; line_current = &lines[pic->width]; @@ -255,10 +254,10 @@ static int PaletteSortModifiedZeng( cooccurrence = (uint32_t*)WebPSafeCalloc(num_colors * num_colors, sizeof(*cooccurrence)); if (cooccurrence == NULL) { - WebPEncodingSetError(pic, VP8_ENC_ERROR_OUT_OF_MEMORY); - return 0; + return WebPEncodingSetError(pic, VP8_ENC_ERROR_OUT_OF_MEMORY); } if (!CoOccurrenceBuild(pic, palette_sorted, num_colors, cooccurrence)) { + WebPSafeFree(cooccurrence); return 0; } @@ -1012,8 +1011,7 @@ static int StoreImageToBitMask( VP8LRefsCursorNext(&c); } if (bw->error_) { - WebPEncodingSetError(pic, VP8_ENC_ERROR_OUT_OF_MEMORY); - return 0; + return WebPEncodingSetError(pic, VP8_ENC_ERROR_OUT_OF_MEMORY); } return 1; } @@ -1297,7 +1295,10 @@ static int EncodeImageInternal( } } tokens = (HuffmanTreeToken*)WebPSafeMalloc(max_tokens, sizeof(*tokens)); - if (tokens == NULL) goto Error; + if (tokens == NULL) { + WebPEncodingSetError(pic, VP8_ENC_ERROR_OUT_OF_MEMORY); + goto Error; + } for (i = 0; i < 5 * histogram_image_size; ++i) { HuffmanTreeCode* const codes = &huffman_codes[i]; StoreHuffmanCode(bw, huff_tree, tokens, codes); @@ -1448,18 +1449,21 @@ static int WriteImage(const WebPPicture* const pic, VP8LBitWriter* const bw, const size_t vp8l_size = VP8L_SIGNATURE_SIZE + webpll_size; const size_t pad = vp8l_size & 1; const size_t riff_size = TAG_SIZE + CHUNK_HEADER_SIZE + vp8l_size + pad; + *coded_size = 0; + + if (bw->error_) { + return WebPEncodingSetError(pic, VP8_ENC_ERROR_OUT_OF_MEMORY); + } if (!WriteRiffHeader(pic, riff_size, vp8l_size) || !pic->writer(webpll_data, webpll_size, pic)) { - WebPEncodingSetError(pic, VP8_ENC_ERROR_BAD_WRITE); - return 0; + return WebPEncodingSetError(pic, VP8_ENC_ERROR_BAD_WRITE); } if (pad) { const uint8_t pad_byte[1] = { 0 }; if (!pic->writer(pad_byte, 1, pic)) { - WebPEncodingSetError(pic, VP8_ENC_ERROR_BAD_WRITE); - return 0; + return WebPEncodingSetError(pic, VP8_ENC_ERROR_BAD_WRITE); } } *coded_size = CHUNK_HEADER_SIZE + riff_size; @@ -1504,8 +1508,7 @@ static int AllocateTransformBuffer(VP8LEncoder* const enc, int width, ClearTransformBuffer(enc); mem = (uint32_t*)WebPSafeMalloc(mem_size, sizeof(*mem)); if (mem == NULL) { - WebPEncodingSetError(enc->pic_, VP8_ENC_ERROR_OUT_OF_MEMORY); - return 0; + return WebPEncodingSetError(enc->pic_, VP8_ENC_ERROR_OUT_OF_MEMORY); } enc->transform_mem_ = mem; enc->transform_mem_size_ = (size_t)mem_size; @@ -1613,8 +1616,7 @@ static int ApplyPalette(const uint32_t* src, uint32_t src_stride, uint32_t* dst, int x, y; if (tmp_row == NULL) { - WebPEncodingSetError(pic, VP8_ENC_ERROR_OUT_OF_MEMORY); - return 0; + return WebPEncodingSetError(pic, VP8_ENC_ERROR_OUT_OF_MEMORY); } if (palette_size < APPLY_PALETTE_GREEDY_MAX) { @@ -1968,9 +1970,8 @@ int VP8LEncodeStream(const WebPConfig* const config, int ok_main; if (enc_main == NULL || !VP8LBitWriterInit(&bw_side, 0)) { - WebPEncodingSetError(picture, VP8_ENC_ERROR_OUT_OF_MEMORY); VP8LEncoderDelete(enc_main); - return 0; + return WebPEncodingSetError(picture, VP8_ENC_ERROR_OUT_OF_MEMORY); } // Avoid "garbage value" error from Clang's static analysis tool. @@ -2117,8 +2118,7 @@ int VP8LEncodeImage(const WebPConfig* const config, if (picture == NULL) return 0; if (config == NULL || picture->argb == NULL) { - WebPEncodingSetError(picture, VP8_ENC_ERROR_NULL_PARAMETER); - return 0; + return WebPEncodingSetError(picture, VP8_ENC_ERROR_NULL_PARAMETER); } width = picture->width; diff --git a/qtimageformats/src/3rdparty/libwebp/src/enc/webp_enc.c b/qtimageformats/src/3rdparty/libwebp/src/enc/webp_enc.c index 9620e05..583fe6a 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/enc/webp_enc.c +++ b/qtimageformats/src/3rdparty/libwebp/src/enc/webp_enc.c @@ -307,7 +307,10 @@ int WebPEncodingSetError(const WebPPicture* const pic, WebPEncodingError error) { assert((int)error < VP8_ENC_ERROR_LAST); assert((int)error >= VP8_ENC_OK); - ((WebPPicture*)pic)->error_code = error; + // The oldest error reported takes precedence over the new one. + if (pic->error_code == VP8_ENC_OK) { + ((WebPPicture*)pic)->error_code = error; + } return 0; } @@ -317,8 +320,7 @@ int WebPReportProgress(const WebPPicture* const pic, *percent_store = percent; if (pic->progress_hook && !pic->progress_hook(percent, pic)) { // user abort requested - WebPEncodingSetError(pic, VP8_ENC_ERROR_USER_ABORT); - return 0; + return WebPEncodingSetError(pic, VP8_ENC_ERROR_USER_ABORT); } } return 1; // ok @@ -329,7 +331,7 @@ int WebPEncode(const WebPConfig* config, WebPPicture* pic) { int ok = 0; if (pic == NULL) return 0; - WebPEncodingSetError(pic, VP8_ENC_OK); // all ok so far + pic->error_code = VP8_ENC_OK; // all ok so far if (config == NULL) { // bad params return WebPEncodingSetError(pic, VP8_ENC_ERROR_NULL_PARAMETER); } diff --git a/qtimageformats/src/3rdparty/libwebp/src/mux/muxi.h b/qtimageformats/src/3rdparty/libwebp/src/mux/muxi.h index 7929138..afc5954 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/mux/muxi.h +++ b/qtimageformats/src/3rdparty/libwebp/src/mux/muxi.h @@ -29,7 +29,7 @@ extern "C" { #define MUX_MAJ_VERSION 1 #define MUX_MIN_VERSION 3 -#define MUX_REV_VERSION 0 +#define MUX_REV_VERSION 2 // Chunk object. typedef struct WebPChunk WebPChunk; diff --git a/qtimageformats/src/3rdparty/libwebp/src/mux/muxread.c b/qtimageformats/src/3rdparty/libwebp/src/mux/muxread.c index 8005039..9862ec6 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/mux/muxread.c +++ b/qtimageformats/src/3rdparty/libwebp/src/mux/muxread.c @@ -116,9 +116,12 @@ static int MuxImageParse(const WebPChunk* const chunk, int copy_data, // Each of ANMF chunk contain a header at the beginning. So, its size should // be at least 'hdr_size'. if (size < hdr_size) goto Fail; - ChunkAssignData(&subchunk, &temp, copy_data, chunk->tag_); + if (ChunkAssignData(&subchunk, &temp, copy_data, + chunk->tag_) != WEBP_MUX_OK) { + goto Fail; + } } - ChunkSetHead(&subchunk, &wpi->header_); + if (ChunkSetHead(&subchunk, &wpi->header_) != WEBP_MUX_OK) goto Fail; wpi->is_partial_ = 1; // Waiting for ALPH and/or VP8/VP8L chunks. // Rest of the chunks. diff --git a/qtimageformats/src/3rdparty/libwebp/src/utils/bit_reader_utils.c b/qtimageformats/src/3rdparty/libwebp/src/utils/bit_reader_utils.c index 857cd60..a26557a 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/utils/bit_reader_utils.c +++ b/qtimageformats/src/3rdparty/libwebp/src/utils/bit_reader_utils.c @@ -15,6 +15,7 @@ #include "src/webp/config.h" #endif +#include "src/dsp/cpu.h" #include "src/utils/bit_reader_inl_utils.h" #include "src/utils/utils.h" @@ -121,7 +122,7 @@ int32_t VP8GetSignedValue(VP8BitReader* const br, int bits, #define VP8L_LOG8_WBITS 4 // Number of bytes needed to store VP8L_WBITS bits. -#if defined(__arm__) || defined(_M_ARM) || defined(__aarch64__) || \ +#if defined(__arm__) || defined(_M_ARM) || WEBP_AARCH64 || \ defined(__i386__) || defined(_M_IX86) || \ defined(__x86_64__) || defined(_M_X64) #define VP8L_USE_FAST_LOAD diff --git a/qtimageformats/src/3rdparty/libwebp/src/utils/bit_reader_utils.h b/qtimageformats/src/3rdparty/libwebp/src/utils/bit_reader_utils.h index e64156e..25ff31e 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/utils/bit_reader_utils.h +++ b/qtimageformats/src/3rdparty/libwebp/src/utils/bit_reader_utils.h @@ -19,6 +19,7 @@ #ifdef _MSC_VER #include // _byteswap_ulong #endif +#include "src/dsp/cpu.h" #include "src/webp/types.h" // Warning! This macro triggers quite some MACRO wizardry around func signature! @@ -64,7 +65,7 @@ extern "C" { #define BITS 56 #elif defined(__arm__) || defined(_M_ARM) // ARM #define BITS 24 -#elif defined(__aarch64__) // ARM 64bit +#elif WEBP_AARCH64 // ARM 64bit #define BITS 56 #elif defined(__mips__) // MIPS #define BITS 24 diff --git a/qtimageformats/src/3rdparty/libwebp/src/utils/huffman_utils.c b/qtimageformats/src/3rdparty/libwebp/src/utils/huffman_utils.c index 90c2fbf..cf73abd 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/utils/huffman_utils.c +++ b/qtimageformats/src/3rdparty/libwebp/src/utils/huffman_utils.c @@ -177,21 +177,24 @@ static int BuildHuffmanTable(HuffmanCode* const root_table, int root_bits, if (num_open < 0) { return 0; } - if (root_table == NULL) continue; for (; count[len] > 0; --count[len]) { HuffmanCode code; if ((key & mask) != low) { - table += table_size; + if (root_table != NULL) table += table_size; table_bits = NextTableBitSize(count, len, root_bits); table_size = 1 << table_bits; total_size += table_size; low = key & mask; - root_table[low].bits = (uint8_t)(table_bits + root_bits); - root_table[low].value = (uint16_t)((table - root_table) - low); + if (root_table != NULL) { + root_table[low].bits = (uint8_t)(table_bits + root_bits); + root_table[low].value = (uint16_t)((table - root_table) - low); + } + } + if (root_table != NULL) { + code.bits = (uint8_t)(len - root_bits); + code.value = (uint16_t)sorted[symbol++]; + ReplicateValue(&table[key >> root_bits], step, table_size, code); } - code.bits = (uint8_t)(len - root_bits); - code.value = (uint16_t)sorted[symbol++]; - ReplicateValue(&table[key >> root_bits], step, table_size, code); key = GetNextKey(key, len); } } @@ -211,25 +214,83 @@ static int BuildHuffmanTable(HuffmanCode* const root_table, int root_bits, ((1 << MAX_CACHE_BITS) + NUM_LITERAL_CODES + NUM_LENGTH_CODES) // Cut-off value for switching between heap and stack allocation. #define SORTED_SIZE_CUTOFF 512 -int VP8LBuildHuffmanTable(HuffmanCode* const root_table, int root_bits, +int VP8LBuildHuffmanTable(HuffmanTables* const root_table, int root_bits, const int code_lengths[], int code_lengths_size) { - int total_size; + const int total_size = + BuildHuffmanTable(NULL, root_bits, code_lengths, code_lengths_size, NULL); assert(code_lengths_size <= MAX_CODE_LENGTHS_SIZE); - if (root_table == NULL) { - total_size = BuildHuffmanTable(NULL, root_bits, - code_lengths, code_lengths_size, NULL); - } else if (code_lengths_size <= SORTED_SIZE_CUTOFF) { + if (total_size == 0 || root_table == NULL) return total_size; + + if (root_table->curr_segment->curr_table + total_size >= + root_table->curr_segment->start + root_table->curr_segment->size) { + // If 'root_table' does not have enough memory, allocate a new segment. + // The available part of root_table->curr_segment is left unused because we + // need a contiguous buffer. + const int segment_size = root_table->curr_segment->size; + struct HuffmanTablesSegment* next = + (HuffmanTablesSegment*)WebPSafeMalloc(1, sizeof(*next)); + if (next == NULL) return 0; + // Fill the new segment. + // We need at least 'total_size' but if that value is small, it is better to + // allocate a big chunk to prevent more allocations later. 'segment_size' is + // therefore chosen (any other arbitrary value could be chosen). + next->size = total_size > segment_size ? total_size : segment_size; + next->start = + (HuffmanCode*)WebPSafeMalloc(next->size, sizeof(*next->start)); + if (next->start == NULL) { + WebPSafeFree(next); + return 0; + } + next->curr_table = next->start; + next->next = NULL; + // Point to the new segment. + root_table->curr_segment->next = next; + root_table->curr_segment = next; + } + if (code_lengths_size <= SORTED_SIZE_CUTOFF) { // use local stack-allocated array. uint16_t sorted[SORTED_SIZE_CUTOFF]; - total_size = BuildHuffmanTable(root_table, root_bits, - code_lengths, code_lengths_size, sorted); - } else { // rare case. Use heap allocation. + BuildHuffmanTable(root_table->curr_segment->curr_table, root_bits, + code_lengths, code_lengths_size, sorted); + } else { // rare case. Use heap allocation. uint16_t* const sorted = (uint16_t*)WebPSafeMalloc(code_lengths_size, sizeof(*sorted)); if (sorted == NULL) return 0; - total_size = BuildHuffmanTable(root_table, root_bits, - code_lengths, code_lengths_size, sorted); + BuildHuffmanTable(root_table->curr_segment->curr_table, root_bits, + code_lengths, code_lengths_size, sorted); WebPSafeFree(sorted); } return total_size; } + +int VP8LHuffmanTablesAllocate(int size, HuffmanTables* huffman_tables) { + // Have 'segment' point to the first segment for now, 'root'. + HuffmanTablesSegment* const root = &huffman_tables->root; + huffman_tables->curr_segment = root; + // Allocate root. + root->start = (HuffmanCode*)WebPSafeMalloc(size, sizeof(*root->start)); + if (root->start == NULL) return 0; + root->curr_table = root->start; + root->next = NULL; + root->size = size; + return 1; +} + +void VP8LHuffmanTablesDeallocate(HuffmanTables* const huffman_tables) { + HuffmanTablesSegment *current, *next; + if (huffman_tables == NULL) return; + // Free the root node. + current = &huffman_tables->root; + next = current->next; + WebPSafeFree(current->start); + current->start = NULL; + current->next = NULL; + current = next; + // Free the following nodes. + while (current != NULL) { + next = current->next; + WebPSafeFree(current->start); + WebPSafeFree(current); + current = next; + } +} diff --git a/qtimageformats/src/3rdparty/libwebp/src/utils/huffman_utils.h b/qtimageformats/src/3rdparty/libwebp/src/utils/huffman_utils.h index 13b7ad1..98415c5 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/utils/huffman_utils.h +++ b/qtimageformats/src/3rdparty/libwebp/src/utils/huffman_utils.h @@ -43,6 +43,29 @@ typedef struct { // or non-literal symbol otherwise } HuffmanCode32; +// Contiguous memory segment of HuffmanCodes. +typedef struct HuffmanTablesSegment { + HuffmanCode* start; + // Pointer to where we are writing into the segment. Starts at 'start' and + // cannot go beyond 'start' + 'size'. + HuffmanCode* curr_table; + // Pointer to the next segment in the chain. + struct HuffmanTablesSegment* next; + int size; +} HuffmanTablesSegment; + +// Chained memory segments of HuffmanCodes. +typedef struct HuffmanTables { + HuffmanTablesSegment root; + // Currently processed segment. At first, this is 'root'. + HuffmanTablesSegment* curr_segment; +} HuffmanTables; + +// Allocates a HuffmanTables with 'size' contiguous HuffmanCodes. Returns 0 on +// memory allocation error, 1 otherwise. +int VP8LHuffmanTablesAllocate(int size, HuffmanTables* huffman_tables); +void VP8LHuffmanTablesDeallocate(HuffmanTables* const huffman_tables); + #define HUFFMAN_PACKED_BITS 6 #define HUFFMAN_PACKED_TABLE_SIZE (1u << HUFFMAN_PACKED_BITS) @@ -78,9 +101,7 @@ void VP8LHtreeGroupsFree(HTreeGroup* const htree_groups); // the huffman table. // Returns built table size or 0 in case of error (invalid tree or // memory error). -// If root_table is NULL, it returns 0 if a lookup cannot be built, something -// > 0 otherwise (but not the table size). -int VP8LBuildHuffmanTable(HuffmanCode* const root_table, int root_bits, +int VP8LBuildHuffmanTable(HuffmanTables* const root_table, int root_bits, const int code_lengths[], int code_lengths_size); #ifdef __cplusplus diff --git a/qtimageformats/src/3rdparty/libwebp/src/webp/decode.h b/qtimageformats/src/3rdparty/libwebp/src/webp/decode.h index d982475..0177b12 100644 --- a/qtimageformats/src/3rdparty/libwebp/src/webp/decode.h +++ b/qtimageformats/src/3rdparty/libwebp/src/webp/decode.h @@ -81,10 +81,11 @@ WEBP_EXTERN uint8_t* WebPDecodeBGR(const uint8_t* data, size_t data_size, // returned is the Y samples buffer. Upon return, *u and *v will point to // the U and V chroma data. These U and V buffers need NOT be passed to // WebPFree(), unlike the returned Y luma one. The dimension of the U and V -// planes are both (*width + 1) / 2 and (*height + 1)/ 2. +// planes are both (*width + 1) / 2 and (*height + 1) / 2. // Upon return, the Y buffer has a stride returned as '*stride', while U and V // have a common stride returned as '*uv_stride'. -// Return NULL in case of error. +// 'width' and 'height' may be NULL, the other pointers must not be. +// Returns NULL in case of error. // (*) Also named Y'CbCr. See: https://en.wikipedia.org/wiki/YCbCr WEBP_EXTERN uint8_t* WebPDecodeYUV(const uint8_t* data, size_t data_size, int* width, int* height, diff --git a/qtimageformats/src/plugins/imageformats/tiff/qtiffhandler.cpp b/qtimageformats/src/plugins/imageformats/tiff/qtiffhandler.cpp index f0dfe7f..5cb0522 100644 --- a/qtimageformats/src/plugins/imageformats/tiff/qtiffhandler.cpp +++ b/qtimageformats/src/plugins/imageformats/tiff/qtiffhandler.cpp @@ -38,13 +38,14 @@ ****************************************************************************/ #include "qtiffhandler_p.h" -#include #include #include #include #include #include #include +#include +#include extern "C" { #include "tiffio.h" diff --git a/qtimageformats/src/plugins/imageformats/webp/qwebphandler.cpp b/qtimageformats/src/plugins/imageformats/webp/qwebphandler.cpp index 82d38cb..d02eb05 100644 --- a/qtimageformats/src/plugins/imageformats/webp/qwebphandler.cpp +++ b/qtimageformats/src/plugins/imageformats/webp/qwebphandler.cpp @@ -45,6 +45,7 @@ #include #include #include +#include static const int riffHeaderSize = 12; // RIFF_HEADER_SIZE from webp/format_constants.h @@ -102,21 +103,23 @@ bool QWebpHandler::ensureScanned() const m_scanState = ScanError; - if (device()->isSequential()) { - qWarning() << "Sequential devices are not supported"; + QWebpHandler *that = const_cast(this); + const int headerBytesNeeded = sizeof(WebPBitstreamFeatures); + QByteArray header = device()->peek(headerBytesNeeded); + if (header.size() < headerBytesNeeded) return false; - } - qint64 oldPos = device()->pos(); - device()->seek(0); - - QWebpHandler *that = const_cast(this); - QByteArray header = device()->peek(sizeof(WebPBitstreamFeatures)); + // We do no random access during decoding, just a readAll() of the whole image file. So if + // if it is all available already, we can accept a sequential device. The riff header contains + // the file size minus 8 bytes header + qint64 byteSize = qFromLittleEndian(header.constData() + 4); + if (device()->isSequential() && device()->bytesAvailable() < byteSize + 8) { + qWarning() << "QWebpHandler: Insufficient data available in sequential device"; + return false; + } if (WebPGetFeatures((const uint8_t*)header.constData(), header.size(), &(that->m_features)) == VP8_STATUS_OK) { if (m_features.has_animation) { // For animation, we have to read and scan whole file to determine loop count and images count - device()->seek(oldPos); - if (that->ensureDemuxer()) { that->m_loop = WebPDemuxGetI(m_demuxer, WEBP_FF_LOOP_COUNT); that->m_frameCount = WebPDemuxGetI(m_demuxer, WEBP_FF_FRAME_COUNT); @@ -126,17 +129,13 @@ bool QWebpHandler::ensureScanned() const if (that->m_features.has_alpha) that->m_composited->fill(Qt::transparent); - // We do not reset device position since we have read in all data m_scanState = ScanSuccess; - return true; } } else { m_scanState = ScanSuccess; } } - device()->seek(oldPos); - return m_scanState == ScanSuccess; } @@ -159,7 +158,7 @@ bool QWebpHandler::ensureDemuxer() bool QWebpHandler::read(QImage *image) { - if (!ensureScanned() || device()->isSequential() || !ensureDemuxer()) + if (!ensureScanned() || !ensureDemuxer()) return false; QRect prevFrameRect; Submodule qtlocation f6953a8d..c576985d: Submodule src/3rdparty/mapbox-gl-native d3101bbc...4c88f2c0 (commits not present) diff --git a/qtlocation/src/location/configure.json b/qtlocation/src/location/configure.json index 6d01a9a3..d1e623a1 100644 --- a/qtlocation/src/location/configure.json +++ b/qtlocation/src/location/configure.json @@ -9,7 +9,7 @@ "label": "Qt.labs.location experimental QML plugin", "purpose": "Provides experimental QtLocation QML types", "section": "Location", - "condition": "config.opengl", + "condition": "features.opengl", "output": [ "privateFeature" ] }, "geoservices_osm": { diff --git a/qtlocation/src/location/labs/qsg/qgeomapobjectqsgsupport.cpp b/qtlocation/src/location/labs/qsg/qgeomapobjectqsgsupport.cpp index a978573d..11e1466f 100644 --- a/qtlocation/src/location/labs/qsg/qgeomapobjectqsgsupport.cpp +++ b/qtlocation/src/location/labs/qsg/qgeomapobjectqsgsupport.cpp @@ -158,7 +158,7 @@ void QGeoMapObjectQSGSupport::updateMapObjects(QSGNode *root, QQuickWindow *wind if (!root) return; - if (m_mapObjectsRootNode && m_mapObjectsRootNode->parent()) + if (m_mapObjectsRootNode && !m_mapObjectsRootNode->parent()) root->appendChildNode(m_mapObjectsRootNode.get()); if (!m_mapObjectsRootNode) { diff --git a/qtlocation/src/plugins/geoservices/nokia/qgeocodingmanagerengine_nokia.cpp b/qtlocation/src/plugins/geoservices/nokia/qgeocodingmanagerengine_nokia.cpp index 68b2429e..deef29f9 100644 --- a/qtlocation/src/plugins/geoservices/nokia/qgeocodingmanagerengine_nokia.cpp +++ b/qtlocation/src/plugins/geoservices/nokia/qgeocodingmanagerengine_nokia.cpp @@ -66,11 +66,8 @@ QGeoCodingManagerEngineNokia::QGeoCodingManagerEngineNokia( Q_ASSERT(networkManager); m_networkManager->setParent(this); - if (parameters.contains(QStringLiteral("here.token"))) - m_token = parameters.value(QStringLiteral("here.token")).toString(); - - if (parameters.contains(QStringLiteral("here.app_id"))) - m_applicationId = parameters.value(QStringLiteral("here.app_id")).toString(); + if (parameters.contains(QStringLiteral("here.apiKey"))) + m_apiKey = parameters.value(QStringLiteral("here.apiKey")).toString(); if (error) *error = QGeoServiceProvider::NoError; @@ -85,12 +82,9 @@ QString QGeoCodingManagerEngineNokia::getAuthenticationString() const { QString authenticationString; - if (!m_token.isEmpty() && !m_applicationId.isEmpty()) { - authenticationString += "?app_code="; - authenticationString += m_token; - - authenticationString += "&app_id="; - authenticationString += m_applicationId; + if (!m_apiKey.isEmpty()) { + authenticationString += "?apiKey="; + authenticationString += m_apiKey; } return authenticationString; diff --git a/qtlocation/src/plugins/geoservices/nokia/qgeocodingmanagerengine_nokia.h b/qtlocation/src/plugins/geoservices/nokia/qgeocodingmanagerengine_nokia.h index 9e1564aa..a7cfd06a 100644 --- a/qtlocation/src/plugins/geoservices/nokia/qgeocodingmanagerengine_nokia.h +++ b/qtlocation/src/plugins/geoservices/nokia/qgeocodingmanagerengine_nokia.h @@ -82,8 +82,7 @@ private: QGeoNetworkAccessManager *m_networkManager; QGeoUriProvider *m_uriProvider; QGeoUriProvider *m_reverseGeocodingUriProvider; - QString m_token; - QString m_applicationId; + QString m_apiKey; }; QT_END_NAMESPACE diff --git a/qtlocation/src/plugins/geoservices/nokia/qgeoerror_messages.cpp b/qtlocation/src/plugins/geoservices/nokia/qgeoerror_messages.cpp index 576ecd43..f49e0905 100644 --- a/qtlocation/src/plugins/geoservices/nokia/qgeoerror_messages.cpp +++ b/qtlocation/src/plugins/geoservices/nokia/qgeoerror_messages.cpp @@ -39,7 +39,7 @@ QT_BEGIN_NAMESPACE const char NOKIA_PLUGIN_CONTEXT_NAME[] = "QtLocationQML"; -const char MISSED_CREDENTIALS[] = QT_TRANSLATE_NOOP("QtLocationQML", "Qt Location requires app_id and token parameters.\nPlease register at https://developer.here.com/ to get your personal application credentials."); +const char MISSED_CREDENTIALS[] = QT_TRANSLATE_NOOP("QtLocationQML", "Qt Location requires apiKey parameter.\nPlease register at https://developer.here.com/ to get your personal application credentials."); const char SAVING_PLACE_NOT_SUPPORTED[] = QT_TRANSLATE_NOOP("QtLocationQML", "Saving places is not supported."); const char REMOVING_PLACE_NOT_SUPPORTED[] = QT_TRANSLATE_NOOP("QtLocationQML", "Removing places is not supported."); const char SAVING_CATEGORY_NOT_SUPPORTED[] = QT_TRANSLATE_NOOP("QtLocationQML", "Saving categories is not supported."); diff --git a/qtlocation/src/plugins/geoservices/nokia/qgeoroutingmanagerengine_nokia.cpp b/qtlocation/src/plugins/geoservices/nokia/qgeoroutingmanagerengine_nokia.cpp index 73b998b1..a938096b 100644 --- a/qtlocation/src/plugins/geoservices/nokia/qgeoroutingmanagerengine_nokia.cpp +++ b/qtlocation/src/plugins/geoservices/nokia/qgeoroutingmanagerengine_nokia.cpp @@ -60,8 +60,7 @@ QGeoRoutingManagerEngineNokia::QGeoRoutingManagerEngineNokia( Q_ASSERT(networkManager); m_networkManager->setParent(this); - m_appId = parameters.value(QStringLiteral("here.app_id")).toString(); - m_token = parameters.value(QStringLiteral("here.token")).toString(); + m_apiKey = parameters.value(QStringLiteral("here.apiKey")).toString(); QGeoRouteRequest::FeatureTypes featureTypes; featureTypes |= QGeoRouteRequest::TollFeature; @@ -219,18 +218,16 @@ QStringList QGeoRoutingManagerEngineNokia::calculateRouteRequestString(const QGe return QStringList(); QStringList requests; - QString baseRequest = QStringLiteral("http://"); + QString baseRequest = QStringLiteral("https://"); baseRequest += m_uriProvider->getCurrentHost(); baseRequest += QStringLiteral("/routing/7.2/calculateroute.xml"); baseRequest += QStringLiteral("?alternatives="); baseRequest += QString::number(request.numberAlternativeRoutes()); - if (!m_appId.isEmpty() && !m_token.isEmpty()) { - baseRequest += QStringLiteral("&app_id="); - baseRequest += m_appId; - baseRequest += QStringLiteral("&token="); - baseRequest += m_token; + if (!m_apiKey.isEmpty()) { + baseRequest += QStringLiteral("&apiKey="); + baseRequest += m_apiKey; } const QList metadata = request.waypointsMetadata(); @@ -281,7 +278,7 @@ QStringList QGeoRoutingManagerEngineNokia::updateRouteRequestString(const QGeoRo return QStringList(); QStringList requests; - QString baseRequest = "http://"; + QString baseRequest = "https://"; baseRequest += m_uriProvider->getCurrentHost(); baseRequest += "/routing/7.2/getroute.xml"; diff --git a/qtlocation/src/plugins/geoservices/nokia/qgeoroutingmanagerengine_nokia.h b/qtlocation/src/plugins/geoservices/nokia/qgeoroutingmanagerengine_nokia.h index 9335bcac..67fb5825 100644 --- a/qtlocation/src/plugins/geoservices/nokia/qgeoroutingmanagerengine_nokia.h +++ b/qtlocation/src/plugins/geoservices/nokia/qgeoroutingmanagerengine_nokia.h @@ -77,8 +77,7 @@ private: QGeoNetworkAccessManager *m_networkManager; QGeoUriProvider *m_uriProvider; - QString m_appId; - QString m_token; + QString m_apiKey; }; QT_END_NAMESPACE diff --git a/qtlocation/src/plugins/geoservices/nokia/qgeoserviceproviderplugin_nokia.cpp b/qtlocation/src/plugins/geoservices/nokia/qgeoserviceproviderplugin_nokia.cpp index e4ef86d6..2c53dd16 100644 --- a/qtlocation/src/plugins/geoservices/nokia/qgeoserviceproviderplugin_nokia.cpp +++ b/qtlocation/src/plugins/geoservices/nokia/qgeoserviceproviderplugin_nokia.cpp @@ -75,20 +75,15 @@ namespace void checkUsageTerms(const QVariantMap ¶meters, QGeoServiceProvider::Error *error, QString *errorString) { - QString appId, token; + const QString apiKey = parameters.value(QStringLiteral("here.apiKey")).toString(); - appId = parameters.value(QStringLiteral("here.app_id")).toString(); - token = parameters.value(QStringLiteral("here.token")).toString(); - - if (isValidParameter(appId) && isValidParameter(token)) + if (isValidParameter(apiKey)) return; - else if (!isValidParameter(appId)) - qWarning() << "Invalid here.app_id"; else - qWarning() << "Invalid here.token"; + qWarning() << "Invalid here.apiKey"; - if (parameters.contains(QStringLiteral("app_id")) || parameters.contains(QStringLiteral("token"))) - qWarning() << QStringLiteral("Please prefix 'app_id' and 'token' with prefix 'here' (e.g.: 'here.app_id')"); + if (parameters.contains(QStringLiteral("apiKey"))) + qWarning() << QStringLiteral("Please prefix 'apiKey' with prefix 'here' (e.g.: 'here.apiKey')"); *error = QGeoServiceProvider::MissingRequiredParameterError; *errorString = QCoreApplication::translate(NOKIA_PLUGIN_CONTEXT_NAME, MISSED_CREDENTIALS); diff --git a/qtlocation/src/plugins/geoservices/nokia/qgeotilefetcher_nokia.cpp b/qtlocation/src/plugins/geoservices/nokia/qgeotilefetcher_nokia.cpp index d07a93ba..4cfd62f8 100644 --- a/qtlocation/src/plugins/geoservices/nokia/qgeotilefetcher_nokia.cpp +++ b/qtlocation/src/plugins/geoservices/nokia/qgeotilefetcher_nokia.cpp @@ -84,8 +84,7 @@ QGeoTileFetcherNokia::QGeoTileFetcherNokia(const QVariantMap ¶meters, m_tileSize = qMax(tileSize.width(), tileSize.height()); m_networkManager->setParent(this); - m_applicationId = parameters.value(QStringLiteral("here.app_id")).toString(); - m_token = parameters.value(QStringLiteral("here.token")).toString(); + m_apiKey = parameters.value(QStringLiteral("here.apiKey")).toString(); } QGeoTileFetcherNokia::~QGeoTileFetcherNokia() @@ -127,7 +126,7 @@ QString QGeoTileFetcherNokia::getRequestString(const QGeoTileSpec &spec, int ppi if (!m_engineNokia) return QString(); - static const QString http("http://"); + static const QString http("https://"); static const QString path("/maptile/2.1/maptile/newest/"); static const QChar slash('/'); @@ -152,12 +151,9 @@ QString QGeoTileFetcherNokia::getRequestString(const QGeoTileSpec &spec, int ppi static const QString slashpng("/png8"); requestString += slashpng; - if (!m_token.isEmpty() && !m_applicationId.isEmpty()) { // TODO: remove the if - requestString += "?token="; - requestString += m_token; - - requestString += "&app_id="; - requestString += m_applicationId; + if (!m_apiKey.isEmpty()) { // TODO: remove the if + requestString += "?apiKey="; + requestString += m_apiKey; } requestString += "&ppi=" + QString::number(ppi); @@ -235,14 +231,9 @@ QString QGeoTileFetcherNokia::getLanguageString() const // No "lg" param means that we want English. } -QString QGeoTileFetcherNokia::token() const -{ - return m_token; -} - -QString QGeoTileFetcherNokia::applicationId() const +QString QGeoTileFetcherNokia::apiKey() const { - return m_applicationId; + return m_apiKey; } void QGeoTileFetcherNokia::copyrightsFetched() @@ -271,19 +262,14 @@ void QGeoTileFetcherNokia::versionFetched() void QGeoTileFetcherNokia::fetchCopyrightsData() { - QString copyrightUrl = QStringLiteral("http://"); + QString copyrightUrl = QStringLiteral("https://"); copyrightUrl += m_baseUriProvider->getCurrentHost(); copyrightUrl += QStringLiteral("/maptile/2.1/copyright/newest?output=json"); - if (!token().isEmpty()) { - copyrightUrl += QStringLiteral("&token="); - copyrightUrl += token(); - } - - if (!applicationId().isEmpty()) { - copyrightUrl += QStringLiteral("&app_id="); - copyrightUrl += applicationId(); + if (!apiKey().isEmpty()) { + copyrightUrl += QStringLiteral("&apiKey="); + copyrightUrl += apiKey(); } QNetworkRequest netRequest((QUrl(copyrightUrl))); @@ -303,19 +289,14 @@ void QGeoTileFetcherNokia::fetchCopyrightsData() void QGeoTileFetcherNokia::fetchVersionData() { - QString versionUrl = QStringLiteral("http://"); + QString versionUrl = QStringLiteral("https://"); versionUrl += m_baseUriProvider->getCurrentHost(); versionUrl += QStringLiteral("/maptile/2.1/version"); - if (!token().isEmpty()) { - versionUrl += QStringLiteral("?token="); - versionUrl += token(); - } - - if (!applicationId().isEmpty()) { - versionUrl += QStringLiteral("&app_id="); - versionUrl += applicationId(); + if (!apiKey().isEmpty()) { + versionUrl += QStringLiteral("?apiKey="); + versionUrl += apiKey(); } QNetworkRequest netRequest((QUrl(versionUrl))); diff --git a/qtlocation/src/plugins/geoservices/nokia/qgeotilefetcher_nokia.h b/qtlocation/src/plugins/geoservices/nokia/qgeotilefetcher_nokia.h index 06d1bba9..ee0cb0e9 100644 --- a/qtlocation/src/plugins/geoservices/nokia/qgeotilefetcher_nokia.h +++ b/qtlocation/src/plugins/geoservices/nokia/qgeotilefetcher_nokia.h @@ -62,8 +62,7 @@ public: QGeoTiledMapReply *getTileImage(const QGeoTileSpec &spec); - QString token() const; - QString applicationId() const; + QString apiKey() const; public Q_SLOTS: void copyrightsFetched(); @@ -82,11 +81,10 @@ private: QGeoNetworkAccessManager *m_networkManager; int m_tileSize; int m_ppi; - QString m_token; QNetworkReply *m_copyrightsReply; QNetworkReply *m_versionReply; - QString m_applicationId; + QString m_apiKey; QGeoUriProvider *m_baseUriProvider; QGeoUriProvider *m_aerialUriProvider; }; diff --git a/qtlocation/src/plugins/geoservices/nokia/qgeouriprovider.cpp b/qtlocation/src/plugins/geoservices/nokia/qgeouriprovider.cpp index 7be90bb2..6a4f6986 100644 --- a/qtlocation/src/plugins/geoservices/nokia/qgeouriprovider.cpp +++ b/qtlocation/src/plugins/geoservices/nokia/qgeouriprovider.cpp @@ -61,7 +61,7 @@ QGeoUriProvider::QGeoUriProvider( QString QGeoUriProvider::getCurrentHost() const { if (m_maxSubdomains) { - QString result(m_firstSubdomain.toLatin1() + QRandomGenerator::global()->bounded(m_maxSubdomains)); + QString result(static_cast(m_firstSubdomain.toLatin1() + QRandomGenerator::global()->bounded(m_maxSubdomains))); result += '.' + m_currentHost; return result; } diff --git a/qtlocation/src/plugins/geoservices/nokia/qplacemanagerengine_nokiav2.cpp b/qtlocation/src/plugins/geoservices/nokia/qplacemanagerengine_nokiav2.cpp index c5c05a2e..4c6e9774 100644 --- a/qtlocation/src/plugins/geoservices/nokia/qplacemanagerengine_nokiav2.cpp +++ b/qtlocation/src/plugins/geoservices/nokia/qplacemanagerengine_nokiav2.cpp @@ -208,8 +208,7 @@ QPlaceManagerEngineNokiaV2::QPlaceManagerEngineNokiaV2( m_locales.append(QLocale()); - m_appId = parameters.value(QStringLiteral("here.app_id")).toString(); - m_appCode = parameters.value(QStringLiteral("here.token")).toString(); + m_apiKey = parameters.value(QStringLiteral("here.apiKey")).toString(); m_theme = parameters.value(IconThemeKey, QString()).toString(); @@ -237,7 +236,7 @@ QPlaceManagerEngineNokiaV2::~QPlaceManagerEngineNokiaV2() {} QPlaceDetailsReply *QPlaceManagerEngineNokiaV2::getPlaceDetails(const QString &placeId) { - QUrl requestUrl(QString::fromLatin1("http://") + m_uriProvider->getCurrentHost() + + QUrl requestUrl(QString::fromLatin1("https://") + m_uriProvider->getCurrentHost() + QStringLiteral("/places/v1/places/") + placeId); QUrlQuery queryItems; @@ -268,7 +267,7 @@ QPlaceContentReply *QPlaceManagerEngineNokiaV2::getPlaceContent(const QPlaceCont networkReply = sendRequest(u); } else { - QUrl requestUrl(QString::fromLatin1("http://") + m_uriProvider->getCurrentHost() + + QUrl requestUrl(QString::fromLatin1("https://") + m_uriProvider->getCurrentHost() + QStringLiteral("/places/v1/places/") + request.placeId() + QStringLiteral("/media/")); @@ -410,7 +409,7 @@ QPlaceSearchReply *QPlaceManagerEngineNokiaV2::search(const QPlaceSearchRequest networkReply = sendRequest(u); } else if (!query.searchTerm().isEmpty()) { // search term query - QUrl requestUrl(QString::fromLatin1("http://") + m_uriProvider->getCurrentHost() + + QUrl requestUrl(QString::fromLatin1("https://") + m_uriProvider->getCurrentHost() + QStringLiteral("/places/v1/discover/search")); queryItems.addQueryItem(QStringLiteral("q"), query.searchTerm()); @@ -432,7 +431,7 @@ QPlaceSearchReply *QPlaceManagerEngineNokiaV2::search(const QPlaceSearchRequest return reply; } else if (!query.recommendationId().isEmpty()) { - QUrl requestUrl(QString::fromLatin1("http://") + m_uriProvider->getCurrentHost() + + QUrl requestUrl(QString::fromLatin1("https://") + m_uriProvider->getCurrentHost() + QStringLiteral("/places/v1/places/") + query.recommendationId() + QStringLiteral("/related/recommended")); @@ -443,7 +442,7 @@ QPlaceSearchReply *QPlaceManagerEngineNokiaV2::search(const QPlaceSearchRequest networkReply = sendRequest(requestUrl); } else { // category search - QUrl requestUrl(QStringLiteral("http://") + m_uriProvider->getCurrentHost() + + QUrl requestUrl(QStringLiteral("https://") + m_uriProvider->getCurrentHost() + QStringLiteral("/places/v1/discover/explore")); QStringList ids; @@ -498,7 +497,7 @@ QPlaceSearchSuggestionReply *QPlaceManagerEngineNokiaV2::searchSuggestions(const return reply; } - QUrl requestUrl(QString::fromLatin1("http://") + m_uriProvider->getCurrentHost() + + QUrl requestUrl(QString::fromLatin1("https://") + m_uriProvider->getCurrentHost() + QStringLiteral("/places/v1/suggest")); QUrlQuery queryItems; @@ -633,7 +632,7 @@ QPlaceReply *QPlaceManagerEngineNokiaV2::initializeCategories() for (auto it = m_tempTree.keyBegin(), end = m_tempTree.keyEnd(); it != end; ++it) { if (*it == QString()) continue; - QUrl requestUrl(QString::fromLatin1("http://") + m_uriProvider->getCurrentHost() + + QUrl requestUrl(QString::fromLatin1("https://") + m_uriProvider->getCurrentHost() + QStringLiteral("/places/v1/categories/places/") + *it); QNetworkReply *networkReply = sendRequest(requestUrl); connect(networkReply, SIGNAL(finished()), this, SLOT(categoryReplyFinished())); @@ -831,8 +830,7 @@ void QPlaceManagerEngineNokiaV2::categoryReplyError() QNetworkReply *QPlaceManagerEngineNokiaV2::sendRequest(const QUrl &url) { QUrlQuery queryItems(url); - queryItems.addQueryItem(QStringLiteral("app_id"), m_appId); - queryItems.addQueryItem(QStringLiteral("app_code"), m_appCode); + queryItems.addQueryItem(QStringLiteral("apiKey"), m_apiKey); QUrl requestUrl = url; requestUrl.setQuery(queryItems); diff --git a/qtlocation/src/plugins/geoservices/nokia/qplacemanagerengine_nokiav2.h b/qtlocation/src/plugins/geoservices/nokia/qplacemanagerengine_nokiav2.h index cd632958..6784ce4f 100644 --- a/qtlocation/src/plugins/geoservices/nokia/qplacemanagerengine_nokiav2.h +++ b/qtlocation/src/plugins/geoservices/nokia/qplacemanagerengine_nokiav2.h @@ -122,8 +122,7 @@ private: QPointer m_categoryReply; QHash m_categoryRequests; - QString m_appId; - QString m_appCode; + QString m_apiKey; QString m_localDataPath; QString m_theme; diff --git a/qtlocation/src/plugins/geoservices/nokia/uri_constants.cpp b/qtlocation/src/plugins/geoservices/nokia/uri_constants.cpp index 8db47beb..030006f5 100644 --- a/qtlocation/src/plugins/geoservices/nokia/uri_constants.cpp +++ b/qtlocation/src/plugins/geoservices/nokia/uri_constants.cpp @@ -37,11 +37,11 @@ QT_BEGIN_NAMESPACE -const QString ROUTING_HOST = QLatin1String("route.api.here.com"); -const QString GEOCODING_HOST = QLatin1String("geocoder.api.here.com"); -const QString REVERSE_GEOCODING_HOST = QLatin1String("reverse.geocoder.api.here.com"); -const QString PLACES_HOST = QLatin1String("places.api.here.com"); -const QString MAP_TILES_HOST = QLatin1String("1-4.base.maps.api.here.com"); -const QString MAP_TILES_HOST_AERIAL = QLatin1String("1-4.aerial.maps.api.here.com"); +const QString ROUTING_HOST = QLatin1String("route.ls.hereapi.com"); +const QString GEOCODING_HOST = QLatin1String("geocoder.ls.hereapi.com"); +const QString REVERSE_GEOCODING_HOST = QLatin1String("reverse.geocoder.ls.hereapi.com"); +const QString PLACES_HOST = QLatin1String("places.ls.hereapi.com"); +const QString MAP_TILES_HOST = QLatin1String("1-4.base.maps.ls.hereapi.com"); +const QString MAP_TILES_HOST_AERIAL = QLatin1String("1-4.aerial.maps.ls.hereapi.com"); QT_END_NAMESPACE Submodule qtmultimedia 374d71e2..75143525: diff --git a/qtmultimedia/src/gsttools/qgstvideorenderersink.cpp b/qtmultimedia/src/gsttools/qgstvideorenderersink.cpp index 4000f2178..a446d93fe 100644 --- a/qtmultimedia/src/gsttools/qgstvideorenderersink.cpp +++ b/qtmultimedia/src/gsttools/qgstvideorenderersink.cpp @@ -368,7 +368,8 @@ static GstGLContext *gstGLDisplayContext(QAbstractVideoSurface *surface) if (!nativeContext) qWarning() << "Could not find resource for" << contextName; - GstGLContext *appContext = gst_gl_context_new_wrapped(display, (guintptr)nativeContext, glPlatform, GST_GL_API_ANY); + GstGLAPI glApi = QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGL ? GST_GL_API_OPENGL : GST_GL_API_GLES2; + GstGLContext *appContext = gst_gl_context_new_wrapped(display, (guintptr)nativeContext, glPlatform, glApi); if (!appContext) qWarning() << "Could not create wrappped context for platform:" << glPlatform; diff --git a/qtmultimedia/src/multimediawidgets/multimediawidgets.pro b/qtmultimedia/src/multimediawidgets/multimediawidgets.pro index 1919e8107..4c30d8fbf 100644 --- a/qtmultimedia/src/multimediawidgets/multimediawidgets.pro +++ b/qtmultimedia/src/multimediawidgets/multimediawidgets.pro @@ -2,8 +2,6 @@ TARGET = QtMultimediaWidgets QT = core gui multimedia widgets-private QT_PRIVATE += multimedia-private -qtHaveModule(opengl): \ - QT_PRIVATE += opengl PRIVATE_HEADERS += \ qvideowidget_p.h \ Submodule qtpim 02efef5e...f9a8f0fc (commits not present) Submodule qtquick3d fbb81863..a0c37ca7: diff --git a/qtquick3d/src/plugins/assetimporters/assimp/assimp.pro b/qtquick3d/src/plugins/assetimporters/assimp/assimp.pro index ca5c499e..174a075b 100644 --- a/qtquick3d/src/plugins/assetimporters/assimp/assimp.pro +++ b/qtquick3d/src/plugins/assetimporters/assimp/assimp.pro @@ -10,7 +10,7 @@ QT_FOR_CONFIG += assetimporters-private include($$OUT_PWD/../qtassetimporters-config.pri) qtConfig(system-assimp):!if(cross_compile:host_build) { - QMAKE_USE_PRIVATE += assimp + QMAKE_USE_PRIVATE += quick3d-assimp } else { include(../../../3rdparty/assimp/assimp.pri) } Submodule qtquickcontrols2 480694ae..1fc98160: diff --git a/qtquickcontrols2/src/imports/platform/widgets/qwidgetplatformmenu.cpp b/qtquickcontrols2/src/imports/platform/widgets/qwidgetplatformmenu.cpp index e5fe734f7..e36922775 100644 --- a/qtquickcontrols2/src/imports/platform/widgets/qwidgetplatformmenu.cpp +++ b/qtquickcontrols2/src/imports/platform/widgets/qwidgetplatformmenu.cpp @@ -38,6 +38,7 @@ #include "qwidgetplatformmenuitem_p.h" #include +#include #include #include @@ -145,7 +146,7 @@ void QWidgetPlatformMenu::showPopup(const QWindow *window, const QRect &targetRe QPoint targetPos = targetRect.bottomLeft(); if (window) - targetPos = window->mapToGlobal(targetPos); + targetPos = window->mapToGlobal(QHighDpi::fromNativeLocalPosition(targetPos, window)); const QWidgetPlatformMenuItem *widgetItem = qobject_cast(item); m_menu->popup(targetPos, widgetItem ? widgetItem->action() : nullptr); diff --git a/qtquickcontrols2/src/quicktemplates2/qquickabstractbutton.cpp b/qtquickcontrols2/src/quicktemplates2/qquickabstractbutton.cpp index 20cf59c1a..43af47a94 100644 --- a/qtquickcontrols2/src/quicktemplates2/qquickabstractbutton.cpp +++ b/qtquickcontrols2/src/quicktemplates2/qquickabstractbutton.cpp @@ -1201,6 +1201,12 @@ QAccessible::Role QQuickAbstractButton::accessibleRole() const } return QAccessible::Button; } + +void QQuickAbstractButton::accessiblePressAction() +{ + Q_D(QQuickAbstractButton); + d->trigger(); +} #endif QT_END_NAMESPACE diff --git a/qtquickcontrols2/src/quicktemplates2/qquickabstractbutton_p.h b/qtquickcontrols2/src/quicktemplates2/qquickabstractbutton_p.h index 0fa48980e..ab66220d0 100644 --- a/qtquickcontrols2/src/quicktemplates2/qquickabstractbutton_p.h +++ b/qtquickcontrols2/src/quicktemplates2/qquickabstractbutton_p.h @@ -209,6 +209,7 @@ protected: #if QT_CONFIG(accessibility) void accessibilityActiveChanged(bool active) override; QAccessible::Role accessibleRole() const override; + Q_INVOKABLE void accessiblePressAction(); #endif private: diff --git a/qtquickcontrols2/src/quicktemplates2/qquickcontainer.cpp b/qtquickcontrols2/src/quicktemplates2/qquickcontainer.cpp index f38c2b09c..6eed2a024 100644 --- a/qtquickcontrols2/src/quicktemplates2/qquickcontainer.cpp +++ b/qtquickcontrols2/src/quicktemplates2/qquickcontainer.cpp @@ -225,6 +225,7 @@ void QQuickContainerPrivate::cleanup() QObject::disconnect(contentModel, &QQmlObjectModel::countChanged, q, &QQuickContainer::countChanged); QObject::disconnect(contentModel, &QQmlObjectModel::childrenChanged, q, &QQuickContainer::contentChildrenChanged); delete contentModel; + contentModel = nullptr; } QQuickItem *QQuickContainerPrivate::itemAt(int index) const @@ -436,7 +437,7 @@ void QQuickContainerPrivate::contentChildren_clear(QQmlListProperty void QQuickContainerPrivate::updateContentWidth() { Q_Q(QQuickContainer); - if (hasContentWidth || qFuzzyCompare(contentWidth, implicitContentWidth)) + if (hasContentWidth || qFuzzyCompare(contentWidth, implicitContentWidth) || !contentModel) return; contentWidth = implicitContentWidth; @@ -446,7 +447,7 @@ void QQuickContainerPrivate::updateContentWidth() void QQuickContainerPrivate::updateContentHeight() { Q_Q(QQuickContainer); - if (hasContentHeight || qFuzzyCompare(contentHeight, implicitContentHeight)) + if (hasContentHeight || qFuzzyCompare(contentHeight, implicitContentHeight) || !contentModel) return; contentHeight = implicitContentHeight; diff --git a/qtquickcontrols2/src/quicktemplates2/qquickcontrol.cpp b/qtquickcontrols2/src/quicktemplates2/qquickcontrol.cpp index a719efd34..768691dac 100644 --- a/qtquickcontrols2/src/quicktemplates2/qquickcontrol.cpp +++ b/qtquickcontrols2/src/quicktemplates2/qquickcontrol.cpp @@ -2334,12 +2334,13 @@ QAccessible::Role QQuickControl::accessibleRole() const void QQuickControl::accessibilityActiveChanged(bool active) { + Q_D(QQuickControl); if (!active) return; QQuickAccessibleAttached *accessibleAttached = qobject_cast(qmlAttachedPropertiesObject(this, true)); Q_ASSERT(accessibleAttached); - accessibleAttached->setRole(accessibleRole()); + accessibleAttached->setRole(d->effectiveAccessibleRole()); } #endif diff --git a/qtquickcontrols2/src/quicktemplates2/qquickdialogbuttonbox.cpp b/qtquickcontrols2/src/quicktemplates2/qquickdialogbuttonbox.cpp index e6db14eb5..6197d1547 100644 --- a/qtquickcontrols2/src/quicktemplates2/qquickdialogbuttonbox.cpp +++ b/qtquickcontrols2/src/quicktemplates2/qquickdialogbuttonbox.cpp @@ -237,7 +237,7 @@ static QRectF alignedRect(Qt::LayoutDirection direction, Qt::Alignment alignment void QQuickDialogButtonBoxPrivate::resizeContent() { Q_Q(QQuickDialogButtonBox); - if (!contentItem) + if (!contentItem || !contentModel) return; QRectF geometry = q->boundingRect().adjusted(q->leftPadding(), q->topPadding(), -q->rightPadding(), -q->bottomPadding()); @@ -322,6 +322,9 @@ void QQuickDialogButtonBoxPrivate::updateLayout() qreal QQuickDialogButtonBoxPrivate::getContentWidth() const { Q_Q(const QQuickDialogButtonBox); + if (!contentModel) + return 0; + const int count = contentModel->count(); const qreal totalSpacing = qMax(0, count - 1) * spacing; qreal totalWidth = totalSpacing; @@ -341,6 +344,9 @@ qreal QQuickDialogButtonBoxPrivate::getContentWidth() const qreal QQuickDialogButtonBoxPrivate::getContentHeight() const { Q_Q(const QQuickDialogButtonBox); + if (!contentModel) + return 0; + const int count = contentModel->count(); qreal maxHeight = 0; for (int i = 0; i < count; ++i) { diff --git a/qtquickcontrols2/src/quicktemplates2/qquicklabel.cpp b/qtquickcontrols2/src/quicktemplates2/qquicklabel.cpp index 71b60a2bc..2bc621674 100644 --- a/qtquickcontrols2/src/quicktemplates2/qquicklabel.cpp +++ b/qtquickcontrols2/src/quicktemplates2/qquicklabel.cpp @@ -263,7 +263,7 @@ void QQuickLabelPrivate::accessibilityActiveChanged(bool active) Q_Q(QQuickLabel); QQuickAccessibleAttached *accessibleAttached = qobject_cast(qmlAttachedPropertiesObject(q, true)); Q_ASSERT(accessibleAttached); - accessibleAttached->setRole(accessibleRole()); + accessibleAttached->setRole(effectiveAccessibleRole()); maybeSetAccessibleName(text); } diff --git a/qtquickcontrols2/src/quicktemplates2/qquickoverlay.cpp b/qtquickcontrols2/src/quicktemplates2/qquickoverlay.cpp index 91bd59184..0ce518f84 100644 --- a/qtquickcontrols2/src/quicktemplates2/qquickoverlay.cpp +++ b/qtquickcontrols2/src/quicktemplates2/qquickoverlay.cpp @@ -399,8 +399,11 @@ void QQuickOverlay::itemChange(ItemChange change, const ItemChangeData &data) Q_D(QQuickOverlay); QQuickItem::itemChange(change, data); - if (change == ItemChildAddedChange || change == ItemChildRemovedChange) + if (change == ItemChildAddedChange || change == ItemChildRemovedChange) { setVisible(!d->allDrawers.isEmpty() || !childItems().isEmpty()); + if (data.item->parent() == d->mouseGrabberPopup) + d->setMouseGrabberPopup(nullptr); + } } void QQuickOverlay::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) diff --git a/qtquickcontrols2/src/quicktemplates2/qquickpopup.cpp b/qtquickcontrols2/src/quicktemplates2/qquickpopup.cpp index 7df80a047..bfaa84e30 100644 --- a/qtquickcontrols2/src/quicktemplates2/qquickpopup.cpp +++ b/qtquickcontrols2/src/quicktemplates2/qquickpopup.cpp @@ -46,6 +46,7 @@ #include #include +#include #include #include @@ -2720,6 +2721,19 @@ QPalette QQuickPopup::defaultPalette() const } #if QT_CONFIG(accessibility) +QAccessible::Role QQuickPopup::effectiveAccessibleRole() const +{ + auto *attached = qmlAttachedPropertiesObject(this, false); + + auto role = QAccessible::NoRole; + if (auto *accessibleAttached = qobject_cast(attached)) + role = accessibleAttached->role(); + if (role == QAccessible::NoRole) + role = accessibleRole(); + + return role; +} + QAccessible::Role QQuickPopup::accessibleRole() const { return QAccessible::Dialog; diff --git a/qtquickcontrols2/src/quicktemplates2/qquickpopup_p.h b/qtquickcontrols2/src/quicktemplates2/qquickpopup_p.h index dc3ebf6f8..a3773be3e 100644 --- a/qtquickcontrols2/src/quicktemplates2/qquickpopup_p.h +++ b/qtquickcontrols2/src/quicktemplates2/qquickpopup_p.h @@ -454,7 +454,10 @@ protected: virtual QPalette defaultPalette() const; #if QT_CONFIG(accessibility) + QAccessible::Role effectiveAccessibleRole() const; +private: virtual QAccessible::Role accessibleRole() const; +protected: virtual void accessibilityActiveChanged(bool active); #endif diff --git a/qtquickcontrols2/src/quicktemplates2/qquickpopupitem.cpp b/qtquickcontrols2/src/quicktemplates2/qquickpopupitem.cpp index 0069b9fc1..143c37fc3 100644 --- a/qtquickcontrols2/src/quicktemplates2/qquickpopupitem.cpp +++ b/qtquickcontrols2/src/quicktemplates2/qquickpopupitem.cpp @@ -404,7 +404,7 @@ QPalette QQuickPopupItem::defaultPalette() const QAccessible::Role QQuickPopupItem::accessibleRole() const { Q_D(const QQuickPopupItem); - return d->popup->accessibleRole(); + return d->popup->effectiveAccessibleRole(); } void QQuickPopupItem::accessibilityActiveChanged(bool active) diff --git a/qtquickcontrols2/src/quicktemplates2/qquicktextarea.cpp b/qtquickcontrols2/src/quicktemplates2/qquicktextarea.cpp index 64fc631dd..fba3f6b70 100644 --- a/qtquickcontrols2/src/quicktemplates2/qquicktextarea.cpp +++ b/qtquickcontrols2/src/quicktemplates2/qquicktextarea.cpp @@ -512,7 +512,7 @@ void QQuickTextAreaPrivate::accessibilityActiveChanged(bool active) Q_Q(QQuickTextArea); QQuickAccessibleAttached *accessibleAttached = qobject_cast(qmlAttachedPropertiesObject(q, true)); Q_ASSERT(accessibleAttached); - accessibleAttached->setRole(accessibleRole()); + accessibleAttached->setRole(effectiveAccessibleRole()); accessibleAttached->set_readOnly(q->isReadOnly()); accessibleAttached->setDescription(placeholder); } diff --git a/qtquickcontrols2/src/quicktemplates2/qquicktextfield.cpp b/qtquickcontrols2/src/quicktemplates2/qquicktextfield.cpp index 8fa04bd3a..e83346cbd 100644 --- a/qtquickcontrols2/src/quicktemplates2/qquicktextfield.cpp +++ b/qtquickcontrols2/src/quicktemplates2/qquicktextfield.cpp @@ -359,7 +359,7 @@ void QQuickTextFieldPrivate::accessibilityActiveChanged(bool active) Q_Q(QQuickTextField); QQuickAccessibleAttached *accessibleAttached = qobject_cast(qmlAttachedPropertiesObject(q, true)); Q_ASSERT(accessibleAttached); - accessibleAttached->setRole(accessibleRole()); + accessibleAttached->setRole(effectiveAccessibleRole()); accessibleAttached->set_readOnly(m_readOnly); accessibleAttached->set_passwordEdit((m_echoMode == QQuickTextField::Password || m_echoMode == QQuickTextField::PasswordEchoOnEdit) ? true : false); accessibleAttached->setDescription(placeholder); diff --git a/qtquickcontrols2/tests/auto/qquickpopup/data/releaseAfterExitTransition.qml b/qtquickcontrols2/tests/auto/qquickpopup/data/releaseAfterExitTransition.qml new file mode 100644 index 000000000..9e4598b9f --- /dev/null +++ b/qtquickcontrols2/tests/auto/qquickpopup/data/releaseAfterExitTransition.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Controls 2.15 + +ApplicationWindow { + id: window + width: 400 + height: 400 + title: "releaseAfterExitTransition" + + property alias popup: popup + property alias modalPopup: modalPopup + + Popup { + id: popup + y: parent.height - height + width: 50 + height: 50 + } + + Popup { + id: modalPopup + modal: true + y: parent.height - height + width: 50 + height: 50 + exit: Transition { PauseAnimation { duration: 100 } } + } +} diff --git a/qtquickcontrols2/tests/auto/qquickpopup/tst_qquickpopup.cpp b/qtquickcontrols2/tests/auto/qquickpopup/tst_qquickpopup.cpp index 54952d128..3d50e2dd4 100644 --- a/qtquickcontrols2/tests/auto/qquickpopup/tst_qquickpopup.cpp +++ b/qtquickcontrols2/tests/auto/qquickpopup/tst_qquickpopup.cpp @@ -100,6 +100,7 @@ private slots: void invisibleToolTipOpen(); void centerInOverlayWithinStackViewItem(); void destroyDuringExitTransition(); + void releaseAfterExitTransition(); }; void tst_QQuickPopup::initTestCase() @@ -1575,6 +1576,34 @@ void tst_QQuickPopup::destroyDuringExitTransition() QVERIFY(!button->isDown()); } +void tst_QQuickPopup::releaseAfterExitTransition() +{ + QQuickApplicationHelper helper(this, "releaseAfterExitTransition.qml"); + QVERIFY2(helper.ready, helper.failureMessage()); + + QQuickWindow *window = helper.window; + window->show(); + QVERIFY(QTest::qWaitForWindowActive(window)); + + QQuickOverlay *overlay = QQuickOverlay::overlay(window); + QQuickPopup *modalPopup = window->property("modalPopup").value(); + QQuickPopup *popup = window->property("popup").value(); + + modalPopup->open(); + QTRY_VERIFY(modalPopup->isOpened()); + + QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1)); + // wait until the transition is finished and the overlay hides itself + QTRY_VERIFY(!overlay->isVisible()); + QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1)); + + popup->open(); + QTRY_VERIFY(popup->isOpened()); + QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1)); + QTRY_VERIFY(!popup->isOpened()); +} + + QTEST_QUICKCONTROLS_MAIN(tst_QQuickPopup) #include "tst_qquickpopup.moc" Submodule qtscript 5be95f96...572daa83 (commits not present) Submodule qtspeech 90e32fa6..9b3738fe: diff --git a/qtspeech/src/plugins/tts/speechdispatcher/qtexttospeech_speechd.cpp b/qtspeech/src/plugins/tts/speechdispatcher/qtexttospeech_speechd.cpp index 6eb74b8..bcc7dd1 100644 --- a/qtspeech/src/plugins/tts/speechdispatcher/qtexttospeech_speechd.cpp +++ b/qtspeech/src/plugins/tts/speechdispatcher/qtexttospeech_speechd.cpp @@ -357,7 +357,9 @@ QVector QTextToSpeechEngineSpeechd::availableLocales() const QVector QTextToSpeechEngineSpeechd::availableVoices() const { - return m_voices.values(m_currentLocale.name()).toVector(); + QList resultList = m_voices.values(m_currentLocale.name()); + std::reverse(resultList.begin(), resultList.end()); + return resultList.toVector(); } // We have no way of knowing our own client_id since speech-dispatcher seems to be incomplete Submodule qtsvg d44607f0..080fed64: diff --git a/qtsvg/src/plugins/imageformats/svg/qsvgiohandler.cpp b/qtsvg/src/plugins/imageformats/svg/qsvgiohandler.cpp index 561e77e..12e0574 100644 --- a/qtsvg/src/plugins/imageformats/svg/qsvgiohandler.cpp +++ b/qtsvg/src/plugins/imageformats/svg/qsvgiohandler.cpp @@ -191,6 +191,8 @@ bool QSvgIOHandler::read(QImage *image) } } if (!finalSize.isEmpty()) { + if (qMax(finalSize.width(), finalSize.height()) > 0xffff) + return false; // Assume corrupted file image->fill(d->backColor.rgba()); QPainter p(image); d->r.render(&p, bounds); diff --git a/qtsvg/src/svg/qsvgfont_p.h b/qtsvg/src/svg/qsvgfont_p.h index fd0a3fa..fcffbe8 100644 --- a/qtsvg/src/svg/qsvgfont_p.h +++ b/qtsvg/src/svg/qsvgfont_p.h @@ -74,6 +74,7 @@ public: class Q_SVG_PRIVATE_EXPORT QSvgFont : public QSvgRefCounted { public: + static constexpr qreal DEFAULT_UNITS_PER_EM = 1000; QSvgFont(qreal horizAdvX); void setFamilyName(const QString &name); @@ -86,9 +87,7 @@ public: void draw(QPainter *p, const QPointF &point, const QString &str, qreal pixelSize, Qt::Alignment alignment) const; public: QString m_familyName; - qreal m_unitsPerEm; - qreal m_ascent; - qreal m_descent; + qreal m_unitsPerEm = DEFAULT_UNITS_PER_EM; qreal m_horizAdvX; QHash m_glyphs; }; diff --git a/qtsvg/src/svg/qsvghandler.cpp b/qtsvg/src/svg/qsvghandler.cpp index c229c3b..222b6d8 100644 --- a/qtsvg/src/svg/qsvghandler.cpp +++ b/qtsvg/src/svg/qsvghandler.cpp @@ -1393,9 +1393,10 @@ static void parseFont(QSvgNode *node, case FontSizeNone: break; case FontSizeValue: { - QSvgHandler::LengthType dummy; // should always be pixel size - fontStyle->setSize(qMin(parseLength(attributes.fontSize, dummy, handler), - qreal(0xffff))); + QSvgHandler::LengthType type; + qreal fs = parseLength(attributes.fontSize, type, handler); + fs = convertToPixels(fs, true, type); + fontStyle->setSize(qMin(fs, qreal(0xffff))); } break; default: @@ -2578,6 +2579,8 @@ static QSvgNode *createCircleNode(QSvgNode *parent, qreal ncx = toDouble(cx); qreal ncy = toDouble(cy); qreal nr = toDouble(r); + if (nr < 0.0) + return nullptr; QRectF rect(ncx-nr, ncy-nr, nr*2, nr*2); QSvgNode *circle = new QSvgCircle(parent, rect); @@ -2668,7 +2671,7 @@ static bool parseFontFaceNode(QSvgStyleProperty *parent, qreal unitsPerEm = toDouble(unitsPerEmStr); if (!unitsPerEm) - unitsPerEm = 1000; + unitsPerEm = QSvgFont::DEFAULT_UNITS_PER_EM; if (!name.isEmpty()) font->setFamilyName(name); @@ -3048,15 +3051,16 @@ static QSvgStyleProperty *createRadialGradientNode(QSvgNode *node, qreal ncx = 0.5; qreal ncy = 0.5; - qreal nr = 0.5; if (!cx.isEmpty()) ncx = toDouble(cx); if (!cy.isEmpty()) ncy = toDouble(cy); + + qreal nr = 0.0; if (!r.isEmpty()) nr = toDouble(r); - if (nr < 0.5) - nr = 0.5; + if (nr <= 0.0) + return nullptr; qreal nfx = ncx; if (!fx.isEmpty()) @@ -3352,7 +3356,9 @@ static QSvgNode *createTextNode(QSvgNode *parent, //### editable and rotate not handled QSvgHandler::LengthType type; qreal nx = parseLength(x, type, handler); + nx = convertToPixels(nx, true, type); qreal ny = parseLength(y, type, handler); + ny = convertToPixels(ny, true, type); QSvgNode *text = new QSvgText(parent, QPointF(nx, ny)); return text; diff --git a/qtsvg/src/svg/qsvgstructure.cpp b/qtsvg/src/svg/qsvgstructure.cpp index b89608b..89c9e4e 100644 --- a/qtsvg/src/svg/qsvgstructure.cpp +++ b/qtsvg/src/svg/qsvgstructure.cpp @@ -255,9 +255,13 @@ inline static bool isSupportedSvgFeature(const QString &str) }; if (str.length() <= MAX_WORD_LENGTH && str.length() >= MIN_WORD_LENGTH) { + const char16_t unicode44 = str.at(44).unicode(); + const char16_t unicode45 = str.at(45).unicode(); + if (unicode44 >= sizeof(asso_values) || unicode45 >= sizeof(asso_values)) + return false; const int key = str.length() - + asso_values[str.at(45).unicode()] - + asso_values[str.at(44).unicode()]; + + asso_values[unicode45] + + asso_values[unicode44]; if (key <= MAX_HASH_VALUE && key >= 0) return str == QLatin1String(wordlist[key]); } Submodule qttools e8c3c391..ba4c633c: diff --git a/qttools/src/assistant/help/help.pro b/qttools/src/assistant/help/help.pro index 800c4a38d..7556f451b 100644 --- a/qttools/src/assistant/help/help.pro +++ b/qttools/src/assistant/help/help.pro @@ -1,7 +1,6 @@ TARGET = QtHelp QT = core-private gui widgets sql -QT_PRIVATE = network DEFINES += QHELP_LIB diff --git a/qttools/src/assistant/qhelpgenerator/helpgenerator.cpp b/qttools/src/assistant/qhelpgenerator/helpgenerator.cpp index feab1e2d5..cbfb82507 100644 --- a/qttools/src/assistant/qhelpgenerator/helpgenerator.cpp +++ b/qttools/src/assistant/qhelpgenerator/helpgenerator.cpp @@ -445,7 +445,9 @@ bool HelpGeneratorPrivate::insertFiles(const QStringList &files, const QString & if (filterSetId < 0) return false; ++filterSetId; - for (int attId : qAsConst(filterAtts)) { + QList attValues = filterAtts.values(); + std::sort(attValues.begin(), attValues.end()); + for (int attId : qAsConst(attValues)) { m_query->prepare(QLatin1String("INSERT INTO FileAttributeSetTable " "VALUES(?, ?)")); m_query->bindValue(0, filterSetId); diff --git a/qttools/src/assistant/qhelpgenerator/qhelpgenerator.pro b/qttools/src/assistant/qhelpgenerator/qhelpgenerator.pro index bb22000c8..415347a00 100644 --- a/qttools/src/assistant/qhelpgenerator/qhelpgenerator.pro +++ b/qttools/src/assistant/qhelpgenerator/qhelpgenerator.pro @@ -1,4 +1,4 @@ -QT += network help-private +QT += help-private QTPLUGIN.platforms = qminimal QTPLUGIN.sqldrivers = qsqlite diff --git a/qttools/src/linguist/Qt5LinguistToolsMacros.cmake b/qttools/src/linguist/Qt5LinguistToolsMacros.cmake index 6a45e57be..0ccf59f3c 100644 --- a/qttools/src/linguist/Qt5LinguistToolsMacros.cmake +++ b/qttools/src/linguist/Qt5LinguistToolsMacros.cmake @@ -68,6 +68,7 @@ function(QT5_CREATE_TRANSLATION _qm_files) if(NOT EXISTS "${stamp_file_dir}") file(MAKE_DIRECTORY "${stamp_file_dir}") endif() + set(stamp_files "") foreach(_ts_file ${_my_tsfiles}) get_filename_component(_ts_name ${_ts_file} NAME) if(_my_sources) @@ -95,7 +96,14 @@ function(QT5_CREATE_TRANSLATION _qm_files) file(WRITE ${_ts_lst_file} "${_lst_file_srcs}") endif() - set(stamp_file "${stamp_file_dir}/${_ts_name}.stamp") + file(RELATIVE_PATH _ts_relative_path ${CMAKE_CURRENT_SOURCE_DIR} ${_ts_file}) + string(REPLACE "../" "__/" _ts_relative_path "${_ts_relative_path}") + set(stamp_file "${stamp_file_dir}/${_ts_relative_path}.stamp") + list(APPEND stamp_files ${stamp_file}) + get_filename_component(full_stamp_file_dir "${stamp_file}" DIRECTORY) + if(NOT EXISTS "${full_stamp_file_dir}") + file(MAKE_DIRECTORY "${full_stamp_file_dir}") + endif() add_custom_command(OUTPUT ${stamp_file} COMMAND ${Qt5_LUPDATE_EXECUTABLE} ARGS ${_lupdate_options} "@${_ts_lst_file}" -ts ${_ts_file} @@ -103,7 +111,7 @@ function(QT5_CREATE_TRANSLATION _qm_files) DEPENDS ${_dependencies} VERBATIM) endforeach() - qt5_add_translation(${_qm_files} __QT_INTERNAL_DEPEND_ON_TIMESTAMP_FILE ${_my_tsfiles}) + qt5_add_translation(${_qm_files} ${_my_tsfiles} __QT_INTERNAL_TIMESTAMP_FILES ${stamp_files}) set(${_qm_files} ${${_qm_files}} PARENT_SCOPE) endfunction() @@ -120,17 +128,17 @@ endif() function(QT5_ADD_TRANSLATION _qm_files) - set(options __QT_INTERNAL_DEPEND_ON_TIMESTAMP_FILE) + set(options) set(oneValueArgs) - set(multiValueArgs OPTIONS) + set(multiValueArgs OPTIONS __QT_INTERNAL_TIMESTAMP_FILES) cmake_parse_arguments(_LRELEASE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) set(_lrelease_files ${_LRELEASE_UNPARSED_ARGUMENTS}) + set(idx 0) foreach(_current_FILE ${_lrelease_files}) get_filename_component(_abs_FILE ${_current_FILE} ABSOLUTE) get_filename_component(qm ${_abs_FILE} NAME) - set(ts_stamp_file "${CMAKE_CURRENT_BINARY_DIR}/.lupdate/${qm}.stamp") # everything before the last dot has to be considered the file name (including other dots) string(REGEX REPLACE "\\.[^.]*$" "" FILE_NAME ${qm}) get_source_file_property(output_location ${_abs_FILE} OUTPUT_LOCATION) @@ -141,7 +149,9 @@ function(QT5_ADD_TRANSLATION _qm_files) set(qm "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}.qm") endif() - if(_LRELEASE___QT_INTERNAL_DEPEND_ON_TIMESTAMP_FILE) + if(_LRELEASE___QT_INTERNAL_TIMESTAMP_FILES) + list(GET _LRELEASE___QT_INTERNAL_TIMESTAMP_FILES ${idx} ts_stamp_file) + math(EXPR idx "${idx} + 1") set(qm_dep "${ts_stamp_file}") else() set(qm_dep "${_abs_FILE}") diff --git a/qttools/src/qdoc/clangcodeparser.cpp b/qttools/src/qdoc/clangcodeparser.cpp index 539a603da..a41b99cec 100644 --- a/qttools/src/qdoc/clangcodeparser.cpp +++ b/qttools/src/qdoc/clangcodeparser.cpp @@ -1395,8 +1395,7 @@ void ClangCodeParser::buildPCH() args_.push_back("-xc++"); CXTranslationUnit tu; QString tmpHeader = pchFileDir_->path() + "/" + module; - QFile tmpHeaderFile(tmpHeader); - if (tmpHeaderFile.open(QIODevice::Text | QIODevice::WriteOnly)) { + { QFile tmpHeaderFile(tmpHeader); if (tmpHeaderFile.open(QIODevice::Text | QIODevice::WriteOnly)) { QTextStream out(&tmpHeaderFile); if (header.isEmpty()) { for (auto it = allHeaders_.constKeyValueBegin(); @@ -1421,8 +1420,7 @@ void ClangCodeParser::buildPCH() out << line << "\n"; } } - tmpHeaderFile.close(); - } + } } if (printParsingErrors_ == 0) qCWarning(lcQdoc) << "clang not printing errors; include paths were guessed"; CXErrorCode err = Submodule qtwayland 163ea1a0..9c82b546: diff --git a/qtwayland/src/client/configure.json b/qtwayland/src/client/configure.json index 2f424580..29222357 100644 --- a/qtwayland/src/client/configure.json +++ b/qtwayland/src/client/configure.json @@ -149,8 +149,7 @@ "#endif" ] }, - "libs": "-ldrm", - "use": "egl" + "use": "drm egl" }, "vulkan-server-buffer": { "label": "Vulkan Buffer Sharing", @@ -168,7 +167,8 @@ "exportAllocInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR;", "return 0;" ] - } + }, + "use": "wayland-client" }, "egl_1_5-wayland": { "label": "EGL 1.5 with Wayland Platform", @@ -183,7 +183,7 @@ "eglGetPlatformDisplay(EGL_PLATFORM_WAYLAND_EXT, (struct wl_display *)(nullptr), nullptr);" ] }, - "use": "egl" + "use": "egl wayland-client" } }, diff --git a/qtwayland/src/client/global/qwaylandclientextension.cpp b/qtwayland/src/client/global/qwaylandclientextension.cpp index 966096a8..36609c08 100644 --- a/qtwayland/src/client/global/qwaylandclientextension.cpp +++ b/qtwayland/src/client/global/qwaylandclientextension.cpp @@ -74,7 +74,10 @@ void QWaylandClientExtensionPrivate::handleRegistryGlobal(void *data, ::wl_regis void QWaylandClientExtension::addRegistryListener() { Q_D(QWaylandClientExtension); - d->waylandIntegration->display()->addRegistryListener(&QWaylandClientExtensionPrivate::handleRegistryGlobal, this); + if (!d->registered) { + d->waylandIntegration->display()->addRegistryListener(&QWaylandClientExtensionPrivate::handleRegistryGlobal, this); + d->registered = true; + } } QWaylandClientExtension::QWaylandClientExtension(const int ver) @@ -88,6 +91,13 @@ QWaylandClientExtension::QWaylandClientExtension(const int ver) QMetaObject::invokeMethod(this, "addRegistryListener", Qt::QueuedConnection); } +QWaylandClientExtension::~QWaylandClientExtension() +{ + Q_D(QWaylandClientExtension); + if (d->registered && !QCoreApplication::closingDown()) + d->waylandIntegration->display()->removeListener(&QWaylandClientExtensionPrivate::handleRegistryGlobal, this); +} + QtWaylandClient::QWaylandIntegration *QWaylandClientExtension::integration() const { Q_D(const QWaylandClientExtension); diff --git a/qtwayland/src/client/global/qwaylandclientextension.h b/qtwayland/src/client/global/qwaylandclientextension.h index 98272e57..5bd28398 100644 --- a/qtwayland/src/client/global/qwaylandclientextension.h +++ b/qtwayland/src/client/global/qwaylandclientextension.h @@ -63,6 +63,7 @@ class Q_WAYLAND_CLIENT_EXPORT QWaylandClientExtension : public QObject Q_PROPERTY(bool active READ isActive NOTIFY activeChanged) public: QWaylandClientExtension(const int version); + ~QWaylandClientExtension(); QtWaylandClient::QWaylandIntegration *integration() const; int version() const; diff --git a/qtwayland/src/client/global/qwaylandclientextension_p.h b/qtwayland/src/client/global/qwaylandclientextension_p.h index 69cc46a0..9091efbe 100644 --- a/qtwayland/src/client/global/qwaylandclientextension_p.h +++ b/qtwayland/src/client/global/qwaylandclientextension_p.h @@ -68,6 +68,7 @@ public: QtWaylandClient::QWaylandIntegration *waylandIntegration = nullptr; int version = -1; bool active = false; + bool registered = false; }; class Q_WAYLAND_CLIENT_EXPORT QWaylandClientExtensionTemplatePrivate : public QWaylandClientExtensionPrivate diff --git a/qtwayland/src/client/qwaylandabstractdecoration.cpp b/qtwayland/src/client/qwaylandabstractdecoration.cpp index b628930d..d15a7f9f 100644 --- a/qtwayland/src/client/qwaylandabstractdecoration.cpp +++ b/qtwayland/src/client/qwaylandabstractdecoration.cpp @@ -122,7 +122,7 @@ const QImage &QWaylandAbstractDecoration::contentImage() if (d->m_isDirty) { // Update the decoration backingstore - const int bufferScale = waylandWindow()->scale(); + const qreal bufferScale = waylandWindow()->scale(); const QSize imageSize = waylandWindow()->surfaceSize() * bufferScale; d->m_decorationContentImage = QImage(imageSize, QImage::Format_ARGB32_Premultiplied); // Only scale by buffer scale, not QT_SCALE_FACTOR etc. diff --git a/qtwayland/src/client/qwaylandclipboard.cpp b/qtwayland/src/client/qwaylandclipboard.cpp index 81f48e05..14561c77 100644 --- a/qtwayland/src/client/qwaylandclipboard.cpp +++ b/qtwayland/src/client/qwaylandclipboard.cpp @@ -54,10 +54,15 @@ namespace QtWaylandClient { QWaylandClipboard::QWaylandClipboard(QWaylandDisplay *display) : mDisplay(display) { + m_clientClipboard[QClipboard::Clipboard] = nullptr; + m_clientClipboard[QClipboard::Selection] = nullptr; } QWaylandClipboard::~QWaylandClipboard() { + if (m_clientClipboard[QClipboard::Clipboard] != m_clientClipboard[QClipboard::Selection]) + delete m_clientClipboard[QClipboard::Clipboard]; + delete m_clientClipboard[QClipboard::Selection]; } QMimeData *QWaylandClipboard::mimeData(QClipboard::Mode mode) @@ -69,8 +74,8 @@ QMimeData *QWaylandClipboard::mimeData(QClipboard::Mode mode) switch (mode) { case QClipboard::Clipboard: if (auto *dataDevice = seat->dataDevice()) { - if (auto *source = dataDevice->selectionSource()) - return source->mimeData(); + if (dataDevice->selectionSource()) + return m_clientClipboard[QClipboard::Clipboard]; if (auto *offer = dataDevice->selectionOffer()) return offer->mimeData(); } @@ -78,8 +83,8 @@ QMimeData *QWaylandClipboard::mimeData(QClipboard::Mode mode) case QClipboard::Selection: #if QT_CONFIG(wayland_client_primary_selection) if (auto *selectionDevice = seat->primarySelectionDevice()) { - if (auto *source = selectionDevice->selectionSource()) - return source->mimeData(); + if (selectionDevice->selectionSource()) + return m_clientClipboard[QClipboard::Selection]; if (auto *offer = selectionDevice->selectionOffer()) return offer->mimeData(); } @@ -104,17 +109,27 @@ void QWaylandClipboard::setMimeData(QMimeData *data, QClipboard::Mode mode) if (data && data->hasFormat(plain) && !data->hasFormat(utf8)) data->setData(utf8, data->data(plain)); + if (m_clientClipboard[mode]) { + if (m_clientClipboard[QClipboard::Clipboard] != m_clientClipboard[QClipboard::Selection]) + delete m_clientClipboard[mode]; + m_clientClipboard[mode] = nullptr; + } + + m_clientClipboard[mode] = data; + switch (mode) { case QClipboard::Clipboard: if (auto *dataDevice = seat->dataDevice()) { - dataDevice->setSelectionSource(data ? new QWaylandDataSource(mDisplay->dndSelectionHandler(), data) : nullptr); + dataDevice->setSelectionSource(data ? new QWaylandDataSource(mDisplay->dndSelectionHandler(), + m_clientClipboard[QClipboard::Clipboard]) : nullptr); emitChanged(mode); } break; case QClipboard::Selection: #if QT_CONFIG(wayland_client_primary_selection) if (auto *selectionDevice = seat->primarySelectionDevice()) { - selectionDevice->setSelectionSource(data ? new QWaylandPrimarySelectionSourceV1(mDisplay->primarySelectionManager(), data) : nullptr); + selectionDevice->setSelectionSource(data ? new QWaylandPrimarySelectionSourceV1(mDisplay->primarySelectionManager(), + m_clientClipboard[QClipboard::Selection]) : nullptr); emitChanged(mode); } #endif diff --git a/qtwayland/src/client/qwaylandclipboard_p.h b/qtwayland/src/client/qwaylandclipboard_p.h index ce14e124..bb52683d 100644 --- a/qtwayland/src/client/qwaylandclipboard_p.h +++ b/qtwayland/src/client/qwaylandclipboard_p.h @@ -80,6 +80,7 @@ public: private: QWaylandDisplay *mDisplay = nullptr; QMimeData m_emptyData; + QMimeData *m_clientClipboard[2]; }; } diff --git a/qtwayland/src/client/qwaylandcursor.cpp b/qtwayland/src/client/qwaylandcursor.cpp index e4eca9d4..ba76ba2d 100644 --- a/qtwayland/src/client/qwaylandcursor.cpp +++ b/qtwayland/src/client/qwaylandcursor.cpp @@ -44,6 +44,7 @@ #include "qwaylandshmbackingstore_p.h" #include +#include #include #include @@ -250,7 +251,27 @@ QWaylandCursor::QWaylandCursor(QWaylandDisplay *display) QSharedPointer QWaylandCursor::cursorBitmapBuffer(QWaylandDisplay *display, const QCursor *cursor) { Q_ASSERT(cursor->shape() == Qt::BitmapCursor); - const QImage &img = cursor->pixmap().toImage(); + + const QBitmap mask = cursor->mask(Qt::ReturnByValue); + QImage img; + if (cursor->pixmap().isNull()) + img = cursor->bitmap(Qt::ReturnByValue).toImage(); + else + img = cursor->pixmap().toImage(); + + // convert to supported format if necessary + if (!display->shm()->formatSupported(img.format())) { + if (mask.isNull()) { + img.convertTo(QImage::Format_RGB32); + } else { + // preserve mask + img.convertTo(QImage::Format_ARGB32); + QPixmap pixmap = QPixmap::fromImage(img); + pixmap.setMask(mask); + img = pixmap.toImage(); + } + } + QSharedPointer buffer(new QWaylandShmBuffer(display, img.size(), img.format())); memcpy(buffer->image()->bits(), img.bits(), size_t(img.sizeInBytes())); return buffer; diff --git a/qtwayland/src/client/qwaylanddatadevice.cpp b/qtwayland/src/client/qwaylanddatadevice.cpp index 1e2db786..07b18ab0 100644 --- a/qtwayland/src/client/qwaylanddatadevice.cpp +++ b/qtwayland/src/client/qwaylanddatadevice.cpp @@ -72,6 +72,8 @@ QWaylandDataDevice::QWaylandDataDevice(QWaylandDataDeviceManager *manager, QWayl QWaylandDataDevice::~QWaylandDataDevice() { + if (wl_data_device_get_version(object()) >= WL_DATA_DEVICE_RELEASE_SINCE_VERSION) + release(); } QWaylandDataOffer *QWaylandDataDevice::selectionOffer() const @@ -110,7 +112,7 @@ QWaylandDataOffer *QWaylandDataDevice::dragOffer() const return m_dragOffer.data(); } -bool QWaylandDataDevice::startDrag(QMimeData *mimeData, QWaylandWindow *icon) +bool QWaylandDataDevice::startDrag(QMimeData *mimeData, Qt::DropActions supportedActions, QWaylandWindow *icon) { auto *seat = m_display->currentInputDevice(); auto *origin = seat->pointerFocus(); @@ -122,8 +124,38 @@ bool QWaylandDataDevice::startDrag(QMimeData *mimeData, QWaylandWindow *icon) return false; } + // dragging data without mimetypes is a legal operation in Qt terms + // but Wayland uses a mimetype to determine if a drag is accepted or not + // In this rare case, insert a placeholder + if (mimeData->formats().isEmpty()) + mimeData->setData(QString::fromLatin1("application/x-qt-avoid-empty-placeholder"), QByteArray("1")); + m_dragSource.reset(new QWaylandDataSource(m_display->dndSelectionHandler(), mimeData)); + + if (wl_data_device_get_version(object()) >= 3) + m_dragSource->set_actions(dropActionsToWl(supportedActions)); + connect(m_dragSource.data(), &QWaylandDataSource::cancelled, this, &QWaylandDataDevice::dragSourceCancelled); + connect(m_dragSource.data(), &QWaylandDataSource::dndResponseUpdated, this, [this](bool accepted, Qt::DropAction action) { + auto drag = static_cast(QGuiApplicationPrivate::platformIntegration()->drag()); + if (!drag->currentDrag()) { + return; + } + // in old versions drop action is not set, so we guess + if (wl_data_source_get_version(m_dragSource->object()) < 3) { + drag->setResponse(accepted); + } else { + QPlatformDropQtResponse response(accepted, action); + drag->setResponse(response); + } + }); + connect(m_dragSource.data(), &QWaylandDataSource::dndDropped, this, [](bool accepted, Qt::DropAction action) { + QPlatformDropQtResponse response(accepted, action); + static_cast(QGuiApplicationPrivate::platformIntegration()->drag())->setDropResponse(response); + }); + connect(m_dragSource.data(), &QWaylandDataSource::finished, this, []() { + static_cast(QGuiApplicationPrivate::platformIntegration()->drag())->finishDrag(); + }); start_drag(m_dragSource->object(), origin->wlSurface(), icon->wlSurface(), m_display->currentInputDevice()->serial()); return true; @@ -152,7 +184,7 @@ void QWaylandDataDevice::data_device_drop() supportedActions = drag->supportedActions(); } else if (m_dragOffer) { dragData = m_dragOffer->mimeData(); - supportedActions = Qt::CopyAction | Qt::MoveAction | Qt::LinkAction; + supportedActions = m_dragOffer->supportedActions(); } else { return; } @@ -162,7 +194,11 @@ void QWaylandDataDevice::data_device_drop() QGuiApplication::keyboardModifiers()); if (drag) { - static_cast(QGuiApplicationPrivate::platformIntegration()->drag())->finishDrag(response); + auto drag = static_cast(QGuiApplicationPrivate::platformIntegration()->drag()); + drag->setDropResponse(response); + drag->finishDrag(); + } else if (m_dragOffer) { + m_dragOffer->finish(); } } @@ -186,7 +222,7 @@ void QWaylandDataDevice::data_device_enter(uint32_t serial, wl_surface *surface, supportedActions = drag->supportedActions(); } else if (m_dragOffer) { dragData = m_dragOffer->mimeData(); - supportedActions = Qt::CopyAction | Qt::MoveAction | Qt::LinkAction; + supportedActions = m_dragOffer->supportedActions(); } const QPlatformDragQtResponse &response = QWindowSystemInterface::handleDrag(m_dragWindow, dragData, m_dragPoint, supportedActions, @@ -197,11 +233,7 @@ void QWaylandDataDevice::data_device_enter(uint32_t serial, wl_surface *surface, static_cast(QGuiApplicationPrivate::platformIntegration()->drag())->setResponse(response); } - if (response.isAccepted()) { - wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, m_dragOffer->firstFormat().toUtf8().constData()); - } else { - wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, nullptr); - } + sendResponse(supportedActions, response); } void QWaylandDataDevice::data_device_leave() @@ -235,10 +267,10 @@ void QWaylandDataDevice::data_device_motion(uint32_t time, wl_fixed_t x, wl_fixe supportedActions = drag->supportedActions(); } else { dragData = m_dragOffer->mimeData(); - supportedActions = Qt::CopyAction | Qt::MoveAction | Qt::LinkAction; + supportedActions = m_dragOffer->supportedActions(); } - QPlatformDragQtResponse response = QWindowSystemInterface::handleDrag(m_dragWindow, dragData, m_dragPoint, supportedActions, + const QPlatformDragQtResponse response = QWindowSystemInterface::handleDrag(m_dragWindow, dragData, m_dragPoint, supportedActions, QGuiApplication::mouseButtons(), QGuiApplication::keyboardModifiers()); @@ -246,11 +278,7 @@ void QWaylandDataDevice::data_device_motion(uint32_t time, wl_fixed_t x, wl_fixe static_cast(QGuiApplicationPrivate::platformIntegration()->drag())->setResponse(response); } - if (response.isAccepted()) { - wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, m_dragOffer->firstFormat().toUtf8().constData()); - } else { - wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, nullptr); - } + sendResponse(supportedActions, response); } #endif // QT_CONFIG(draganddrop) @@ -277,14 +305,10 @@ void QWaylandDataDevice::selectionSourceCancelled() #if QT_CONFIG(draganddrop) void QWaylandDataDevice::dragSourceCancelled() { + static_cast(QGuiApplicationPrivate::platformIntegration()->drag())->finishDrag(); m_dragSource.reset(); } -void QWaylandDataDevice::dragSourceTargetChanged(const QString &mimeType) -{ - static_cast(QGuiApplicationPrivate::platformIntegration()->drag())->updateTarget(mimeType); -} - QPoint QWaylandDataDevice::calculateDragPosition(int x, int y, QWindow *wnd) const { QPoint pnt(wl_fixed_to_int(x), wl_fixed_to_int(y)); @@ -297,6 +321,33 @@ QPoint QWaylandDataDevice::calculateDragPosition(int x, int y, QWindow *wnd) con } return pnt; } + +void QWaylandDataDevice::sendResponse(Qt::DropActions supportedActions, const QPlatformDragQtResponse &response) +{ + if (response.isAccepted()) { + if (wl_data_device_get_version(object()) >= 3) + m_dragOffer->set_actions(dropActionsToWl(supportedActions), dropActionsToWl(response.acceptedAction())); + + m_dragOffer->accept(m_enterSerial, m_dragOffer->firstFormat()); + } else { + m_dragOffer->accept(m_enterSerial, QString()); + } +} + +int QWaylandDataDevice::dropActionsToWl(Qt::DropActions actions) +{ + + int wlActions = WL_DATA_DEVICE_MANAGER_DND_ACTION_NONE; + if (actions & Qt::CopyAction) + wlActions |= WL_DATA_DEVICE_MANAGER_DND_ACTION_COPY; + if (actions & (Qt::MoveAction | Qt::TargetMoveAction)) + wlActions |= WL_DATA_DEVICE_MANAGER_DND_ACTION_MOVE; + + // wayland does not support LinkAction at the time of writing + return wlActions; +} + + #endif // QT_CONFIG(draganddrop) } diff --git a/qtwayland/src/client/qwaylanddatadevice_p.h b/qtwayland/src/client/qwaylanddatadevice_p.h index 16c3ad28..801dcc2c 100644 --- a/qtwayland/src/client/qwaylanddatadevice_p.h +++ b/qtwayland/src/client/qwaylanddatadevice_p.h @@ -64,6 +64,7 @@ QT_REQUIRE_CONFIG(wayland_datadevice); QT_BEGIN_NAMESPACE class QMimeData; +class QPlatformDragQtResponse; class QWindow; namespace QtWaylandClient { @@ -89,7 +90,7 @@ public: #if QT_CONFIG(draganddrop) QWaylandDataOffer *dragOffer() const; - bool startDrag(QMimeData *mimeData, QWaylandWindow *icon); + bool startDrag(QMimeData *mimeData, Qt::DropActions supportedActions, QWaylandWindow *icon); void cancelDrag(); #endif @@ -109,13 +110,16 @@ private Q_SLOTS: #if QT_CONFIG(draganddrop) void dragSourceCancelled(); - void dragSourceTargetChanged(const QString &mimeType); #endif private: #if QT_CONFIG(draganddrop) QPoint calculateDragPosition(int x, int y, QWindow *wnd) const; #endif + void sendResponse(Qt::DropActions supportedActions, const QPlatformDragQtResponse &response); + + static int dropActionsToWl(Qt::DropActions dropActions); + QWaylandDisplay *m_display = nullptr; QWaylandInputDevice *m_inputDevice = nullptr; diff --git a/qtwayland/src/client/qwaylanddatadevicemanager.cpp b/qtwayland/src/client/qwaylanddatadevicemanager.cpp index 35d67307..6dc4f77f 100644 --- a/qtwayland/src/client/qwaylanddatadevicemanager.cpp +++ b/qtwayland/src/client/qwaylanddatadevicemanager.cpp @@ -50,8 +50,8 @@ QT_BEGIN_NAMESPACE namespace QtWaylandClient { -QWaylandDataDeviceManager::QWaylandDataDeviceManager(QWaylandDisplay *display, uint32_t id) - : wl_data_device_manager(display->wl_registry(), id, 1) +QWaylandDataDeviceManager::QWaylandDataDeviceManager(QWaylandDisplay *display, int version, uint32_t id) + : wl_data_device_manager(display->wl_registry(), id, qMin(version, 3)) , m_display(display) { // Create transfer devices for all input devices. diff --git a/qtwayland/src/client/qwaylanddatadevicemanager_p.h b/qtwayland/src/client/qwaylanddatadevicemanager_p.h index bd05c0fb..510d9be4 100644 --- a/qtwayland/src/client/qwaylanddatadevicemanager_p.h +++ b/qtwayland/src/client/qwaylanddatadevicemanager_p.h @@ -68,7 +68,7 @@ class QWaylandInputDevice; class Q_WAYLAND_CLIENT_EXPORT QWaylandDataDeviceManager : public QtWayland::wl_data_device_manager { public: - QWaylandDataDeviceManager(QWaylandDisplay *display, uint32_t id); + QWaylandDataDeviceManager(QWaylandDisplay *display, int version, uint32_t id); ~QWaylandDataDeviceManager() override; QWaylandDataDevice *getDataDevice(QWaylandInputDevice *inputDevice); diff --git a/qtwayland/src/client/qwaylanddataoffer.cpp b/qtwayland/src/client/qwaylanddataoffer.cpp index 2297e8a1..fe0ea8c9 100644 --- a/qtwayland/src/client/qwaylanddataoffer.cpp +++ b/qtwayland/src/client/qwaylanddataoffer.cpp @@ -82,6 +82,15 @@ QMimeData *QWaylandDataOffer::mimeData() return m_mimeData.data(); } +Qt::DropActions QWaylandDataOffer::supportedActions() const +{ + if (wl_data_offer_get_version(const_cast<::wl_data_offer*>(object())) < 3) { + return Qt::MoveAction | Qt::CopyAction; + } + + return m_supportedActions; +} + void QWaylandDataOffer::startReceiving(const QString &mimeType, int fd) { receive(mimeType, fd); @@ -93,6 +102,22 @@ void QWaylandDataOffer::data_offer_offer(const QString &mime_type) m_mimeData->appendFormat(mime_type); } +void QWaylandDataOffer::data_offer_action(uint32_t dnd_action) +{ + Q_UNUSED(dnd_action); + // This is the compositor telling the drag target what action it should perform + // It does not map nicely into Qt final drop semantics, other than pretending there is only one supported action? +} + +void QWaylandDataOffer::data_offer_source_actions(uint32_t source_actions) +{ + m_supportedActions = Qt::DropActions(); + if (source_actions & WL_DATA_DEVICE_MANAGER_DND_ACTION_MOVE) + m_supportedActions |= Qt::MoveAction; + if (source_actions & WL_DATA_DEVICE_MANAGER_DND_ACTION_COPY) + m_supportedActions |= Qt::CopyAction; +} + QWaylandMimeData::QWaylandMimeData(QWaylandAbstractDataOffer *dataOffer) : m_dataOffer(dataOffer) { @@ -163,17 +188,18 @@ QVariant QWaylandMimeData::retrieveData_sys(const QString &mimeType, QVariant::T int QWaylandMimeData::readData(int fd, QByteArray &data) const { - fd_set readset; - FD_ZERO(&readset); - FD_SET(fd, &readset); - struct timeval timeout; + struct pollfd readset; + readset.fd = fd; + readset.events = POLLIN; + struct timespec timeout; timeout.tv_sec = 1; - timeout.tv_usec = 0; + timeout.tv_nsec = 0; + Q_FOREVER { - int ready = select(FD_SETSIZE, &readset, nullptr, nullptr, &timeout); + int ready = qt_safe_poll(&readset, 1, &timeout); if (ready < 0) { - qWarning() << "QWaylandDataOffer: select() failed"; + qWarning() << "QWaylandDataOffer: qt_safe_poll() failed"; return -1; } else if (ready == 0) { qWarning("QWaylandDataOffer: timeout reading from pipe"); diff --git a/qtwayland/src/client/qwaylanddataoffer_p.h b/qtwayland/src/client/qwaylanddataoffer_p.h index 9cf1483c..6f667398 100644 --- a/qtwayland/src/client/qwaylanddataoffer_p.h +++ b/qtwayland/src/client/qwaylanddataoffer_p.h @@ -82,6 +82,7 @@ public: explicit QWaylandDataOffer(QWaylandDisplay *display, struct ::wl_data_offer *offer); ~QWaylandDataOffer() override; QMimeData *mimeData() override; + Qt::DropActions supportedActions() const; QString firstFormat() const; @@ -89,10 +90,13 @@ public: protected: void data_offer_offer(const QString &mime_type) override; + void data_offer_source_actions(uint32_t source_actions) override; + void data_offer_action(uint32_t dnd_action) override; private: QWaylandDisplay *m_display = nullptr; QScopedPointer m_mimeData; + Qt::DropActions m_supportedActions; }; diff --git a/qtwayland/src/client/qwaylanddatasource.cpp b/qtwayland/src/client/qwaylanddatasource.cpp index c2bc9dc4..321170a6 100644 --- a/qtwayland/src/client/qwaylanddatasource.cpp +++ b/qtwayland/src/client/qwaylanddatasource.cpp @@ -72,11 +72,6 @@ QWaylandDataSource::~QWaylandDataSource() destroy(); } -QMimeData * QWaylandDataSource::mimeData() const -{ - return m_mime_data; -} - void QWaylandDataSource::data_source_cancelled() { Q_EMIT cancelled(); @@ -110,7 +105,32 @@ void QWaylandDataSource::data_source_send(const QString &mime_type, int32_t fd) void QWaylandDataSource::data_source_target(const QString &mime_type) { - Q_EMIT targetChanged(mime_type); + m_accepted = !mime_type.isEmpty(); + Q_EMIT dndResponseUpdated(m_accepted, m_dropAction); +} + +void QWaylandDataSource::data_source_action(uint32_t action) +{ + Qt::DropAction qtAction = Qt::IgnoreAction; + + if (action == WL_DATA_DEVICE_MANAGER_DND_ACTION_MOVE) + qtAction = Qt::MoveAction; + else if (action == WL_DATA_DEVICE_MANAGER_DND_ACTION_COPY) + qtAction = Qt::CopyAction; + + m_dropAction = qtAction; + Q_EMIT dndResponseUpdated(m_accepted, m_dropAction); +} + +void QWaylandDataSource::data_source_dnd_finished() +{ + Q_EMIT finished(); +} + +void QWaylandDataSource::data_source_dnd_drop_performed() +{ + + Q_EMIT dndDropped(m_accepted, m_dropAction); } } diff --git a/qtwayland/src/client/qwaylanddatasource_p.h b/qtwayland/src/client/qwaylanddatasource_p.h index 3003da1b..089c5485 100644 --- a/qtwayland/src/client/qwaylanddatasource_p.h +++ b/qtwayland/src/client/qwaylanddatasource_p.h @@ -74,19 +74,25 @@ public: QWaylandDataSource(QWaylandDataDeviceManager *dataDeviceManager, QMimeData *mimeData); ~QWaylandDataSource() override; - QMimeData *mimeData() const; - Q_SIGNALS: - void targetChanged(const QString &mime_type); void cancelled(); + void finished(); + + void dndResponseUpdated(bool accepted, Qt::DropAction action); + void dndDropped(bool accepted, Qt::DropAction action); protected: void data_source_cancelled() override; void data_source_send(const QString &mime_type, int32_t fd) override; void data_source_target(const QString &mime_type) override; + void data_source_dnd_drop_performed() override; + void data_source_dnd_finished() override; + void data_source_action(uint32_t action) override; private: QMimeData *m_mime_data = nullptr; + bool m_accepted = false; + Qt::DropAction m_dropAction = Qt::IgnoreAction; }; } diff --git a/qtwayland/src/client/qwaylanddisplay.cpp b/qtwayland/src/client/qwaylanddisplay.cpp index 8a6d5db1..737b539d 100644 --- a/qtwayland/src/client/qwaylanddisplay.cpp +++ b/qtwayland/src/client/qwaylanddisplay.cpp @@ -87,10 +87,203 @@ #include +#include // for std::tie + +static void checkWaylandError(struct wl_display *display) +{ + int ecode = wl_display_get_error(display); + if ((ecode == EPIPE || ecode == ECONNRESET)) { + // special case this to provide a nicer error + qWarning("The Wayland connection broke. Did the Wayland compositor die?"); + } else { + qWarning("The Wayland connection experienced a fatal error: %s", strerror(ecode)); + } + _exit(1); +} + QT_BEGIN_NAMESPACE namespace QtWaylandClient { +class EventThread : public QThread +{ + Q_OBJECT +public: + enum OperatingMode { + EmitToDispatch, // Emit the signal, allow dispatching in a differnt thread. + SelfDispatch, // Dispatch the events inside this thread. + }; + + EventThread(struct wl_display * wl, struct wl_event_queue * ev_queue, + OperatingMode mode) + : m_fd(wl_display_get_fd(wl)) + , m_pipefd{ -1, -1 } + , m_wldisplay(wl) + , m_wlevqueue(ev_queue) + , m_mode(mode) + , m_reading(true) + , m_quitting(false) + { + setObjectName(QStringLiteral("WaylandEventThread")); + } + + void readAndDispatchEvents() + { + /* + * Dispatch pending events and flush the requests at least once. If the event thread + * is not reading, try to call _prepare_read() to allow the event thread to poll(). + * If that fails, re-try dispatch & flush again until _prepare_read() is successful. + * + * This allow any call to readAndDispatchEvents() to start event thread's polling, + * not only the one issued from event thread's waitForReading(), which means functions + * called from dispatch_pending() can safely spin an event loop. + */ + for (;;) { + if (dispatchQueuePending() < 0) { + checkWaylandError(m_wldisplay); + return; + } + + wl_display_flush(m_wldisplay); + + // We have to check if event thread is reading every time we dispatch + // something, as that may recursively call this function. + if (m_reading.loadAcquire()) + break; + + if (prepareReadQueue() == 0) { + QMutexLocker l(&m_mutex); + m_reading.storeRelease(true); + m_cond.wakeOne(); + break; + } + } + } + + void stop() + { + // We have to both write to the pipe and set the flag, as the thread may be + // either in the poll() or waiting for _prepare_read(). + if (m_pipefd[1] != -1 && write(m_pipefd[1], "\0", 1) == -1) + qWarning("Failed to write to the pipe: %s.", strerror(errno)); + + { + QMutexLocker l(&m_mutex); + m_quitting = true; + m_cond.wakeOne(); + } + + wait(); + } + +Q_SIGNALS: + void needReadAndDispatch(); + +protected: + void run() override + { + // we use this pipe to make the loop exit otherwise if we simply used a flag on the loop condition, if stop() gets + // called while poll() is blocking the thread will never quit since there are no wayland messages coming anymore. + struct Pipe + { + Pipe(int *fds) + : fds(fds) + { + if (qt_safe_pipe(fds) != 0) + qWarning("Pipe creation failed. Quitting may hang."); + } + ~Pipe() + { + if (fds[0] != -1) { + close(fds[0]); + close(fds[1]); + } + } + + int *fds; + } pipe(m_pipefd); + + // Make the main thread call wl_prepare_read(), dispatch the pending messages and flush the + // outbound ones. Wait until it's done before proceeding, unless we're told to quit. + while (waitForReading()) { + pollfd fds[2] = { { m_fd, POLLIN, 0 }, { m_pipefd[0], POLLIN, 0 } }; + poll(fds, 2, -1); + + if (fds[1].revents & POLLIN) { + // we don't really care to read the byte that was written here since we're closing down + wl_display_cancel_read(m_wldisplay); + break; + } + + if (fds[0].revents & POLLIN) + wl_display_read_events(m_wldisplay); + // The polll was succesfull and the event thread did the wl_display_read_events(). On the next iteration of the loop + // the event sent to the main thread will cause it to dispatch the messages just read, unless the loop exits in which + // case we don't care anymore about them. + else + wl_display_cancel_read(m_wldisplay); + } + } + +private: + bool waitForReading() + { + Q_ASSERT(QThread::currentThread() == this); + + m_reading.storeRelease(false); + + if (m_mode == SelfDispatch) { + readAndDispatchEvents(); + } else { + Q_EMIT needReadAndDispatch(); + + QMutexLocker lock(&m_mutex); + // m_reading might be set from our emit or some other invocation of + // readAndDispatchEvents(). + while (!m_reading.loadRelaxed() && !m_quitting) + m_cond.wait(&m_mutex); + } + + return !m_quitting; + } + + int dispatchQueuePending() + { + if (m_wlevqueue) + return wl_display_dispatch_queue_pending(m_wldisplay, m_wlevqueue); + else + return wl_display_dispatch_pending(m_wldisplay); + } + + int prepareReadQueue() + { + if (m_wlevqueue) + return wl_display_prepare_read_queue(m_wldisplay, m_wlevqueue); + else + return wl_display_prepare_read(m_wldisplay); + } + + int m_fd; + int m_pipefd[2]; + wl_display *m_wldisplay; + wl_event_queue *m_wlevqueue; + OperatingMode m_mode; + + /* Concurrency note when operating in EmitToDispatch mode: + * m_reading is set to false inside event thread's waitForReading(), and is + * set to true inside main thread's readAndDispatchEvents(). + * The lock is not taken when setting m_reading to false, as the main thread + * is not actively waiting for it to turn false. However, the lock is taken + * inside readAndDispatchEvents() before setting m_reading to true, + * as the event thread is actively waiting for it under the wait condition. + */ + + QAtomicInteger m_reading; + bool m_quitting; + QMutex m_mutex; + QWaitCondition m_cond; +}; + Q_LOGGING_CATEGORY(lcQpaWayland, "qt.qpa.wayland"); // for general (uncategorized) Wayland platform logging struct wl_surface *QWaylandDisplay::createSurface(void *handle) @@ -160,17 +353,16 @@ QWaylandDisplay::QWaylandDisplay(QWaylandIntegration *waylandIntegration) if (!mXkbContext) qCWarning(lcQpaWayland, "failed to create xkb context"); #endif - - forceRoundTrip(); - - if (!mWaitingScreens.isEmpty()) { - // Give wl_output.done and zxdg_output_v1.done events a chance to arrive - forceRoundTrip(); - } } QWaylandDisplay::~QWaylandDisplay(void) { + if (m_eventThread) + m_eventThread->stop(); + + if (m_frameEventQueueThread) + m_frameEventQueueThread->stop(); + if (mSyncCallback) wl_callback_destroy(mSyncCallback); @@ -187,10 +379,26 @@ QWaylandDisplay::~QWaylandDisplay(void) #if QT_CONFIG(cursor) qDeleteAll(mCursorThemes); #endif + + if (m_frameEventQueue) + wl_event_queue_destroy(m_frameEventQueue); + if (mDisplay) wl_display_disconnect(mDisplay); } +// Steps which is called just after constructor. This separates registry_global() out of the constructor +// so that factory functions in integration can be overridden. +void QWaylandDisplay::initialize() +{ + forceRoundTrip(); + + if (!mWaitingScreens.isEmpty()) { + // Give wl_output.done and zxdg_output_v1.done events a chance to arrive + forceRoundTrip(); + } +} + void QWaylandDisplay::ensureScreen() { if (!mScreens.empty() || mPlaceholderScreen) @@ -205,98 +413,37 @@ void QWaylandDisplay::ensureScreen() void QWaylandDisplay::checkError() const { - int ecode = wl_display_get_error(mDisplay); - if ((ecode == EPIPE || ecode == ECONNRESET)) { - // special case this to provide a nicer error - qWarning("The Wayland connection broke. Did the Wayland compositor die?"); - } else { - qWarning("The Wayland connection experienced a fatal error: %s", strerror(ecode)); - } - _exit(1); + checkWaylandError(mDisplay); } +// Called in main thread, either from queued signal or directly. void QWaylandDisplay::flushRequests() { - if (wl_display_prepare_read(mDisplay) == 0) { - wl_display_read_events(mDisplay); - } - - if (wl_display_dispatch_pending(mDisplay) < 0) - checkError(); - - { - QReadLocker locker(&m_frameQueueLock); - for (const FrameQueue &q : mExternalQueues) { - QMutexLocker locker(q.mutex); - while (wl_display_prepare_read_queue(mDisplay, q.queue) != 0) - wl_display_dispatch_queue_pending(mDisplay, q.queue); - wl_display_read_events(mDisplay); - wl_display_dispatch_queue_pending(mDisplay, q.queue); - } - } - - wl_display_flush(mDisplay); -} - -void QWaylandDisplay::blockingReadEvents() -{ - if (wl_display_dispatch(mDisplay) < 0) - checkError(); -} - -void QWaylandDisplay::destroyFrameQueue(const QWaylandDisplay::FrameQueue &q) -{ - QWriteLocker locker(&m_frameQueueLock); - auto it = std::find_if(mExternalQueues.begin(), - mExternalQueues.end(), - [&q] (const QWaylandDisplay::FrameQueue &other){ return other.queue == q.queue; }); - Q_ASSERT(it != mExternalQueues.end()); - mExternalQueues.erase(it); - if (q.queue != nullptr) - wl_event_queue_destroy(q.queue); - delete q.mutex; + m_eventThread->readAndDispatchEvents(); } -QWaylandDisplay::FrameQueue QWaylandDisplay::createFrameQueue() +// We have to wait until we have an eventDispatcher before creating the eventThread, +// otherwise forceRoundTrip() may block inside _events_read() because eventThread is +// polling. +void QWaylandDisplay::initEventThread() { - QWriteLocker locker(&m_frameQueueLock); - FrameQueue q{createEventQueue()}; - mExternalQueues.append(q); - return q; -} + m_eventThread.reset( + new EventThread(mDisplay, /* default queue */ nullptr, EventThread::EmitToDispatch)); + connect(m_eventThread.get(), &EventThread::needReadAndDispatch, this, + &QWaylandDisplay::flushRequests, Qt::QueuedConnection); + m_eventThread->start(); -wl_event_queue *QWaylandDisplay::createEventQueue() -{ - return wl_display_create_queue(mDisplay); + // wl_display_disconnect() free this. + m_frameEventQueue = wl_display_create_queue(mDisplay); + m_frameEventQueueThread.reset( + new EventThread(mDisplay, m_frameEventQueue, EventThread::SelfDispatch)); + m_frameEventQueueThread->start(); } -void QWaylandDisplay::dispatchQueueWhile(wl_event_queue *queue, std::function condition, int timeout) +void QWaylandDisplay::blockingReadEvents() { - if (!condition()) - return; - - QElapsedTimer timer; - timer.start(); - struct pollfd pFd = qt_make_pollfd(wl_display_get_fd(mDisplay), POLLIN); - while (timeout == -1 || timer.elapsed() < timeout) { - while (wl_display_prepare_read_queue(mDisplay, queue) != 0) - wl_display_dispatch_queue_pending(mDisplay, queue); - - wl_display_flush(mDisplay); - - const int remaining = qMax(timeout - timer.elapsed(), 0ll); - const int pollTimeout = timeout == -1 ? -1 : remaining; - if (qt_poll_msecs(&pFd, 1, pollTimeout) > 0) - wl_display_read_events(mDisplay); - else - wl_display_cancel_read(mDisplay); - - if (wl_display_dispatch_queue_pending(mDisplay, queue) < 0) - checkError(); - - if (!condition()) - break; - } + if (wl_display_dispatch(mDisplay) < 0) + checkWaylandError(mDisplay); } QWaylandScreen *QWaylandDisplay::screenForOutput(struct wl_output *output) const @@ -347,7 +494,7 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin if (interface == QStringLiteral("wl_output")) { mWaitingScreens << new QWaylandScreen(this, version, id); } else if (interface == QStringLiteral("wl_compositor")) { - mCompositorVersion = qMin((int)version, 3); + mCompositorVersion = qMin((int)version, 4); mCompositor.init(registry, id, mCompositorVersion); } else if (interface == QStringLiteral("wl_shm")) { mShm.reset(new QWaylandShm(this, version, id)); @@ -356,7 +503,7 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin mInputDevices.append(inputDevice); #if QT_CONFIG(wayland_datadevice) } else if (interface == QStringLiteral("wl_data_device_manager")) { - mDndSelectionHandler.reset(new QWaylandDataDeviceManager(this, id)); + mDndSelectionHandler.reset(new QWaylandDataDeviceManager(this, version, id)); #endif } else if (interface == QStringLiteral("qt_surface_extension")) { mWindowExtension.reset(new QtWayland::qt_surface_extension(registry, id, 1)); @@ -373,6 +520,8 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin #if QT_CONFIG(wayland_client_primary_selection) } else if (interface == QStringLiteral("zwp_primary_selection_device_manager_v1")) { mPrimarySelectionManager.reset(new QWaylandPrimarySelectionDeviceManagerV1(this, id, 1)); + for (QWaylandInputDevice *inputDevice : qAsConst(mInputDevices)) + inputDevice->setPrimarySelectionDevice(mPrimarySelectionManager->createDevice(inputDevice)); #endif } else if (interface == QStringLiteral("zwp_text_input_manager_v2") && !mClientSideInputContextRequested) { mTextInputManager.reset(new QtWayland::zwp_text_input_manager_v2(registry, id, 1)); @@ -431,6 +580,13 @@ void QWaylandDisplay::registry_global_remove(uint32_t id) inputDevice->setTextInput(nullptr); mWaylandIntegration->reconfigureInputContext(); } +#if QT_CONFIG(wayland_client_primary_selection) + if (global.interface == QStringLiteral("zwp_primary_selection_device_manager_v1")) { + mPrimarySelectionManager.reset(); + for (QWaylandInputDevice *inputDevice : qAsConst(mInputDevices)) + inputDevice->setPrimarySelectionDevice(nullptr); + } +#endif mGlobals.removeAt(i); break; } @@ -456,9 +612,10 @@ void QWaylandDisplay::addRegistryListener(RegistryListener listener, void *data) void QWaylandDisplay::removeListener(RegistryListener listener, void *data) { - std::remove_if(mRegistryListeners.begin(), mRegistryListeners.end(), [=](Listener l){ + auto iter = std::remove_if(mRegistryListeners.begin(), mRegistryListeners.end(), [=](Listener l){ return (l.listener == listener && l.data == data); }); + mRegistryListeners.erase(iter, mRegistryListeners.end()); } uint32_t QWaylandDisplay::currentTimeMillisec() @@ -471,50 +628,9 @@ uint32_t QWaylandDisplay::currentTimeMillisec() return 0; } -static void -sync_callback(void *data, struct wl_callback *callback, uint32_t serial) -{ - Q_UNUSED(serial) - bool *done = static_cast(data); - - *done = true; - - // If the wl_callback done event is received after the condition check in the while loop in - // forceRoundTrip(), but before the call to processEvents, the call to processEvents may block - // forever if no more events are posted (eventhough the callback is handled in response to the - // aboutToBlock signal). Hence, we wake up the event dispatcher so forceRoundTrip may return. - // (QTBUG-64696) - if (auto *dispatcher = QThread::currentThread()->eventDispatcher()) - dispatcher->wakeUp(); - - wl_callback_destroy(callback); -} - -static const struct wl_callback_listener sync_listener = { - sync_callback -}; - void QWaylandDisplay::forceRoundTrip() { - // wl_display_roundtrip() works on the main queue only, - // but we use a separate one, so basically reimplement it here - int ret = 0; - bool done = false; - wl_callback *callback = wl_display_sync(mDisplay); - wl_callback_add_listener(callback, &sync_listener, &done); - flushRequests(); - if (QThread::currentThread()->eventDispatcher()) { - while (!done && ret >= 0) { - QThread::currentThread()->eventDispatcher()->processEvents(QEventLoop::WaitForMoreEvents); - ret = wl_display_dispatch_pending(mDisplay); - } - } else { - while (!done && ret >= 0) - ret = wl_display_dispatch(mDisplay); - } - - if (ret == -1 && !done) - wl_callback_destroy(callback); + wl_display_roundtrip(mDisplay); } bool QWaylandDisplay::supportsWindowDecoration() const @@ -578,14 +694,10 @@ void QWaylandDisplay::handleKeyboardFocusChanged(QWaylandInputDevice *inputDevic if (mLastKeyboardFocus == keyboardFocus) return; - if (mWaylandIntegration->mShellIntegration) { - mWaylandIntegration->mShellIntegration->handleKeyboardFocusChanged(keyboardFocus, mLastKeyboardFocus); - } else { - if (keyboardFocus) - handleWindowActivated(keyboardFocus); - if (mLastKeyboardFocus) - handleWindowDeactivated(mLastKeyboardFocus); - } + if (keyboardFocus) + handleWindowActivated(keyboardFocus); + if (mLastKeyboardFocus) + handleWindowDeactivated(mLastKeyboardFocus); mLastKeyboardFocus = keyboardFocus; } @@ -604,6 +716,19 @@ void QWaylandDisplay::handleWaylandSync() QWindow *activeWindow = mActiveWindows.empty() ? nullptr : mActiveWindows.last()->window(); if (activeWindow != QGuiApplication::focusWindow()) QWindowSystemInterface::handleWindowActivated(activeWindow); + + if (!activeWindow) { + if (lastInputDevice()) { +#if QT_CONFIG(clipboard) + if (auto *dataDevice = lastInputDevice()->dataDevice()) + dataDevice->invalidateSelectionOffer(); +#endif +#if QT_CONFIG(wayland_client_primary_selection) + if (auto *device = lastInputDevice()->primarySelectionDevice()) + device->invalidateSelectionOffer(); +#endif + } + } } const wl_callback_listener QWaylandDisplay::syncCallbackListener = { @@ -630,6 +755,13 @@ QWaylandInputDevice *QWaylandDisplay::defaultInputDevice() const return mInputDevices.isEmpty() ? 0 : mInputDevices.first(); } +bool QWaylandDisplay::isKeyboardAvailable() const +{ + return std::any_of( + mInputDevices.constBegin(), mInputDevices.constEnd(), + [this](const QWaylandInputDevice *device) { return device->keyboard() != nullptr; }); +} + #if QT_CONFIG(cursor) QWaylandCursor *QWaylandDisplay::waylandCursor() @@ -656,6 +788,8 @@ QWaylandCursorTheme *QWaylandDisplay::loadCursorTheme(const QString &name, int p } // namespace QtWaylandClient +#include "qwaylanddisplay.moc" + QT_END_NAMESPACE #include "moc_qwaylanddisplay_p.cpp" diff --git a/qtwayland/src/client/qwaylanddisplay_p.h b/qtwayland/src/client/qwaylanddisplay_p.h index 1bad8b67..cf91b924 100644 --- a/qtwayland/src/client/qwaylanddisplay_p.h +++ b/qtwayland/src/client/qwaylanddisplay_p.h @@ -111,6 +111,7 @@ class QWaylandSurface; class QWaylandShellIntegration; class QWaylandCursor; class QWaylandCursorTheme; +class EventThread; typedef void (*RegistryListener)(void *data, struct wl_registry *registry, @@ -122,15 +123,11 @@ class Q_WAYLAND_CLIENT_EXPORT QWaylandDisplay : public QObject, public QtWayland Q_OBJECT public: - struct FrameQueue { - FrameQueue(wl_event_queue *q = nullptr) : queue(q), mutex(new QMutex) {} - wl_event_queue *queue; - QMutex *mutex; - }; - QWaylandDisplay(QWaylandIntegration *waylandIntegration); ~QWaylandDisplay(void) override; + void initialize(); + #if QT_CONFIG(xkbcommon) struct xkb_context *xkbContext() const { return mXkbContext.get(); } #endif @@ -214,11 +211,11 @@ public: void handleKeyboardFocusChanged(QWaylandInputDevice *inputDevice); void handleWindowDestroyed(QWaylandWindow *window); - wl_event_queue *createEventQueue(); - FrameQueue createFrameQueue(); - void destroyFrameQueue(const FrameQueue &q); - void dispatchQueueWhile(wl_event_queue *queue, std::function condition, int timeout = -1); + wl_event_queue *frameEventQueue() { return m_frameEventQueue; }; + + bool isKeyboardAvailable() const; + void initEventThread(); public slots: void blockingReadEvents(); void flushRequests(); @@ -241,6 +238,9 @@ private: }; struct wl_display *mDisplay = nullptr; + QScopedPointer m_eventThread; + wl_event_queue *m_frameEventQueue = nullptr; + QScopedPointer m_frameEventQueueThread; QtWayland::wl_compositor mCompositor; QScopedPointer mShm; QList mWaitingScreens; @@ -279,11 +279,9 @@ private: QWaylandInputDevice *mLastInputDevice = nullptr; QPointer mLastInputWindow; QPointer mLastKeyboardFocus; - QVector mActiveWindows; - QVector mExternalQueues; + QList mActiveWindows; struct wl_callback *mSyncCallback = nullptr; static const wl_callback_listener syncCallbackListener; - QReadWriteLock m_frameQueueLock; bool mClientSideInputContextRequested = !QPlatformInputContextFactory::requested().isNull(); diff --git a/qtwayland/src/client/qwaylanddnd.cpp b/qtwayland/src/client/qwaylanddnd.cpp index 6535aa16..7c53f5fa 100644 --- a/qtwayland/src/client/qwaylanddnd.cpp +++ b/qtwayland/src/client/qwaylanddnd.cpp @@ -66,7 +66,7 @@ void QWaylandDrag::startDrag() { QBasicDrag::startDrag(); QWaylandWindow *icon = static_cast(shapedPixmapWindow()->handle()); - if (m_display->currentInputDevice()->dataDevice()->startDrag(drag()->mimeData(), icon)) { + if (m_display->currentInputDevice()->dataDevice()->startDrag(drag()->mimeData(), drag()->supportedActions(), icon)) { icon->addAttachOffset(-drag()->hotSpot()); } else { // Cancelling immediately does not work, since the event loop for QDrag::exec is started @@ -80,6 +80,9 @@ void QWaylandDrag::cancel() QBasicDrag::cancel(); m_display->currentInputDevice()->dataDevice()->cancelDrag(); + + if (drag()) + drag()->deleteLater(); } void QWaylandDrag::move(const QPoint &globalPos, Qt::MouseButtons b, Qt::KeyboardModifiers mods) @@ -103,33 +106,41 @@ void QWaylandDrag::endDrag() m_display->currentInputDevice()->handleEndDrag(); } -void QWaylandDrag::updateTarget(const QString &mimeType) +void QWaylandDrag::setResponse(bool accepted) { - setCanDrop(!mimeType.isEmpty()); - - if (canDrop()) { - updateCursor(defaultAction(drag()->supportedActions(), m_display->currentInputDevice()->modifiers())); - } else { - updateCursor(Qt::IgnoreAction); - } + // This method is used for old DataDevices where the drag action is not communicated + Qt::DropAction action = defaultAction(drag()->supportedActions(), m_display->currentInputDevice()->modifiers()); + setResponse(QPlatformDropQtResponse(accepted, action)); } -void QWaylandDrag::setResponse(const QPlatformDragQtResponse &response) +void QWaylandDrag::setResponse(const QPlatformDropQtResponse &response) { setCanDrop(response.isAccepted()); if (canDrop()) { - updateCursor(defaultAction(drag()->supportedActions(), m_display->currentInputDevice()->modifiers())); + updateCursor(response.acceptedAction()); } else { updateCursor(Qt::IgnoreAction); } } -void QWaylandDrag::finishDrag(const QPlatformDropQtResponse &response) +void QWaylandDrag::setDropResponse(const QPlatformDropQtResponse &response) { setExecutedDropAction(response.acceptedAction()); +} + +void QWaylandDrag::finishDrag() +{ QKeyEvent event(QEvent::KeyPress, Qt::Key_Escape, Qt::NoModifier); eventFilter(shapedPixmapWindow(), &event); + + if (drag()) + drag()->deleteLater(); +} + +bool QWaylandDrag::ownsDragObject() const +{ + return true; } } diff --git a/qtwayland/src/client/qwaylanddnd_p.h b/qtwayland/src/client/qwaylanddnd_p.h index 474fe2ab..46f629ac 100644 --- a/qtwayland/src/client/qwaylanddnd_p.h +++ b/qtwayland/src/client/qwaylanddnd_p.h @@ -71,9 +71,10 @@ public: QWaylandDrag(QWaylandDisplay *display); ~QWaylandDrag() override; - void updateTarget(const QString &mimeType); - void setResponse(const QPlatformDragQtResponse &response); - void finishDrag(const QPlatformDropQtResponse &response); + void setResponse(bool accepted); + void setResponse(const QPlatformDropQtResponse &response); + void setDropResponse(const QPlatformDropQtResponse &response); + void finishDrag(); protected: void startDrag() override; @@ -82,6 +83,7 @@ protected: void drop(const QPoint &globalPos, Qt::MouseButtons b, Qt::KeyboardModifiers mods) override; void endDrag() override; + bool ownsDragObject() const override; private: QWaylandDisplay *m_display = nullptr; diff --git a/qtwayland/src/client/qwaylandinputdevice.cpp b/qtwayland/src/client/qwaylandinputdevice.cpp index b0e9692b..ab978d3f 100644 --- a/qtwayland/src/client/qwaylandinputdevice.cpp +++ b/qtwayland/src/client/qwaylandinputdevice.cpp @@ -310,8 +310,7 @@ void QWaylandInputDevice::Pointer::updateCursor() auto shape = seat()->mCursor.shape; if (shape == Qt::BlankCursor) { - if (mCursor.surface) - mCursor.surface->hide(); + getOrCreateCursorSurface()->hide(); return; } @@ -846,7 +845,7 @@ void QWaylandInputDevice::Pointer::releaseButtons() mButtons = Qt::NoButton; if (auto *window = focusWindow()) { - MotionEvent e(focusWindow(), mParent->mTime, mSurfacePos, mGlobalPos, mButtons, mParent->modifiers()); + ReleaseEvent e(focusWindow(), mParent->mTime, mSurfacePos, mGlobalPos, mButtons, Qt::NoButton, mParent->modifiers()); window->handleMouse(mParent, e); } } @@ -1304,14 +1303,6 @@ void QWaylandInputDevice::Keyboard::handleFocusDestroyed() void QWaylandInputDevice::Keyboard::handleFocusLost() { mFocus = nullptr; -#if QT_CONFIG(clipboard) - if (auto *dataDevice = mParent->dataDevice()) - dataDevice->invalidateSelectionOffer(); -#endif -#if QT_CONFIG(wayland_client_primary_selection) - if (auto *device = mParent->primarySelectionDevice()) - device->invalidateSelectionOffer(); -#endif mParent->mQDisplay->handleKeyboardFocusChanged(mParent); mRepeatTimer.stop(); } @@ -1400,6 +1391,7 @@ void QWaylandInputDevice::Touch::touch_cancel() if (touchExt) touchExt->touchCanceled(); + mFocus = nullptr; QWindowSystemInterface::handleTouchCancelEvent(nullptr, mParent->mTouchDevice); } diff --git a/qtwayland/src/client/qwaylandintegration.cpp b/qtwayland/src/client/qwaylandintegration.cpp index d257e2e3..54861600 100644 --- a/qtwayland/src/client/qwaylandintegration.cpp +++ b/qtwayland/src/client/qwaylandintegration.cpp @@ -125,6 +125,9 @@ QWaylandIntegration::QWaylandIntegration() #endif reconfigureInputContext(); + + QWaylandWindow::fixedToplevelPositions = + !qEnvironmentVariableIsSet("QT_WAYLAND_DISABLE_FIXED_POSITIONS"); } QWaylandIntegration::~QWaylandIntegration() @@ -192,14 +195,18 @@ QAbstractEventDispatcher *QWaylandIntegration::createEventDispatcher() const void QWaylandIntegration::initialize() { + mDisplay->initEventThread(); + + // Call after eventDispatcher is fully connected, for QWaylandDisplay::forceRoundTrip() + mDisplay->initialize(); + + // But the aboutToBlock() and awake() should be connected after initializePlatform(). + // Otherwise the connected flushRequests() may consumes up all events before processEvents starts to wait, + // so that processEvents(QEventLoop::WaitForMoreEvents) may be blocked in the forceRoundTrip(). QAbstractEventDispatcher *dispatcher = QGuiApplicationPrivate::eventDispatcher; QObject::connect(dispatcher, SIGNAL(aboutToBlock()), mDisplay.data(), SLOT(flushRequests())); QObject::connect(dispatcher, SIGNAL(awake()), mDisplay.data(), SLOT(flushRequests())); - int fd = wl_display_get_fd(mDisplay->wl_display()); - QSocketNotifier *sn = new QSocketNotifier(fd, QSocketNotifier::Read, mDisplay.data()); - QObject::connect(sn, SIGNAL(activated(QSocketDescriptor)), mDisplay.data(), SLOT(flushRequests())); - // Qt does not support running with no screens mDisplay->ensureScreen(); } @@ -262,6 +269,14 @@ QWaylandDisplay *QWaylandIntegration::display() const return mDisplay.data(); } +Qt::KeyboardModifiers QWaylandIntegration::queryKeyboardModifiers() const +{ + if (auto *seat = mDisplay->currentInputDevice()) { + return seat->modifiers(); + } + return Qt::NoModifier; +} + QList QWaylandIntegration::possibleKeys(const QKeyEvent *event) const { if (auto *seat = mDisplay->currentInputDevice()) diff --git a/qtwayland/src/client/qwaylandintegration_p.h b/qtwayland/src/client/qwaylandintegration_p.h index ff70ae25..73b80658 100644 --- a/qtwayland/src/client/qwaylandintegration_p.h +++ b/qtwayland/src/client/qwaylandintegration_p.h @@ -107,6 +107,8 @@ public: QWaylandDisplay *display() const; + Qt::KeyboardModifiers queryKeyboardModifiers() const override; + QList possibleKeys(const QKeyEvent *event) const override; QStringList themeNames() const override; diff --git a/qtwayland/src/client/qwaylandnativeinterface.cpp b/qtwayland/src/client/qwaylandnativeinterface.cpp index bf54a1a0..9763c312 100644 --- a/qtwayland/src/client/qwaylandnativeinterface.cpp +++ b/qtwayland/src/client/qwaylandnativeinterface.cpp @@ -139,7 +139,7 @@ void *QWaylandNativeInterface::nativeResourceForScreen(const QByteArray &resourc { QByteArray lowerCaseResource = resourceString.toLower(); - if (lowerCaseResource == "output") + if (lowerCaseResource == "output" && !screen->handle()->isPlaceholder()) return ((QWaylandScreen *) screen->handle())->output(); return nullptr; diff --git a/qtwayland/src/client/qwaylandprimaryselectionv1.cpp b/qtwayland/src/client/qwaylandprimaryselectionv1.cpp index 7805dd73..dac532b2 100644 --- a/qtwayland/src/client/qwaylandprimaryselectionv1.cpp +++ b/qtwayland/src/client/qwaylandprimaryselectionv1.cpp @@ -54,11 +54,6 @@ QWaylandPrimarySelectionDeviceManagerV1::QWaylandPrimarySelectionDeviceManagerV1 : zwp_primary_selection_device_manager_v1(display->wl_registry(), id, qMin(version, uint(1))) , m_display(display) { - // Create devices for all seats. - // This only works if we get the global before all devices - const auto seats = m_display->inputDevices(); - for (auto *seat : seats) - seat->setPrimarySelectionDevice(createDevice(seat)); } QWaylandPrimarySelectionDeviceV1 *QWaylandPrimarySelectionDeviceManagerV1::createDevice(QWaylandInputDevice *seat) diff --git a/qtwayland/src/client/qwaylandscreen.cpp b/qtwayland/src/client/qwaylandscreen.cpp index 6cb337de..5537dafd 100644 --- a/qtwayland/src/client/qwaylandscreen.cpp +++ b/qtwayland/src/client/qwaylandscreen.cpp @@ -60,7 +60,7 @@ QWaylandXdgOutputManagerV1::QWaylandXdgOutputManagerV1(QWaylandDisplay* display, } QWaylandScreen::QWaylandScreen(QWaylandDisplay *waylandDisplay, int version, uint32_t id) - : QtWayland::wl_output(waylandDisplay->wl_registry(), id, qMin(version, 2)) + : QtWayland::wl_output(waylandDisplay->wl_registry(), id, qMin(version, 3)) , m_outputId(id) , mWaylandDisplay(waylandDisplay) , mOutputName(QStringLiteral("Screen%1").arg(id)) @@ -72,7 +72,7 @@ QWaylandScreen::QWaylandScreen(QWaylandDisplay *waylandDisplay, int version, uin qCWarning(lcQpaWayland) << "wl_output done event not supported by compositor," << "QScreen may not work correctly"; mWaylandDisplay->forceRoundTrip(); // Give the compositor a chance to send geometry etc. - mOutputDone = true; // Fake the done event + mProcessedEvents |= OutputDoneEvent; // Fake the done event maybeInitialize(); } } @@ -81,16 +81,29 @@ QWaylandScreen::~QWaylandScreen() { if (zxdg_output_v1::isInitialized()) zxdg_output_v1::destroy(); + if (wl_output::isInitialized() && wl_output_get_version(wl_output::object()) >= WL_OUTPUT_RELEASE_SINCE_VERSION) + wl_output::release(); +} + +uint QWaylandScreen::requiredEvents() const +{ + uint ret = OutputDoneEvent; + + if (mWaylandDisplay->xdgOutputManager()) { + ret |= XdgOutputNameEvent; + + if (mWaylandDisplay->xdgOutputManager()->version() < 3) + ret |= XdgOutputDoneEvent; + } + return ret; } void QWaylandScreen::maybeInitialize() { Q_ASSERT(!mInitialized); - if (!mOutputDone) - return; - - if (mWaylandDisplay->xdgOutputManager() && !mXdgOutputDone) + const uint requiredEvents = this->requiredEvents(); + if ((mProcessedEvents & requiredEvents) != requiredEvents) return; mInitialized = true; @@ -276,9 +289,8 @@ void QWaylandScreen::output_scale(int32_t factor) void QWaylandScreen::output_done() { - mOutputDone = true; - if (zxdg_output_v1::isInitialized() && mWaylandDisplay->xdgOutputManager()->version() >= 3) - mXdgOutputDone = true; + mProcessedEvents |= OutputDoneEvent; + if (mInitialized) { updateOutputProperties(); if (zxdg_output_v1::isInitialized()) @@ -339,7 +351,7 @@ void QWaylandScreen::zxdg_output_v1_done() if (Q_UNLIKELY(mWaylandDisplay->xdgOutputManager()->version() >= 3)) qWarning(lcQpaWayland) << "zxdg_output_v1.done received on version 3 or newer, this is most likely a bug in the compositor"; - mXdgOutputDone = true; + mProcessedEvents |= XdgOutputDoneEvent; if (mInitialized) updateXdgOutputProperties(); else @@ -348,7 +360,11 @@ void QWaylandScreen::zxdg_output_v1_done() void QWaylandScreen::zxdg_output_v1_name(const QString &name) { + if (Q_UNLIKELY(mInitialized)) + qWarning(lcQpaWayland) << "zxdg_output_v1.name received after output has been initialized, this is most likely a bug in the compositor"; + mOutputName = name; + mProcessedEvents |= XdgOutputNameEvent; } void QWaylandScreen::updateXdgOutputProperties() diff --git a/qtwayland/src/client/qwaylandscreen_p.h b/qtwayland/src/client/qwaylandscreen_p.h index df1c94f2..050cfdc0 100644 --- a/qtwayland/src/client/qwaylandscreen_p.h +++ b/qtwayland/src/client/qwaylandscreen_p.h @@ -116,6 +116,13 @@ public: static QWaylandScreen *fromWlOutput(::wl_output *output); private: + enum Event : uint { + XdgOutputDoneEvent = 0x1, + OutputDoneEvent = 0x2, + XdgOutputNameEvent = 0x4, + }; + uint requiredEvents() const; + void output_mode(uint32_t flags, int width, int height, int refresh) override; void output_geometry(int32_t x, int32_t y, int32_t width, int32_t height, @@ -148,8 +155,7 @@ private: QSize mPhysicalSize; QString mOutputName; Qt::ScreenOrientation m_orientation = Qt::PrimaryOrientation; - bool mOutputDone = false; - bool mXdgOutputDone = false; + uint mProcessedEvents = 0; bool mInitialized = false; #if QT_CONFIG(cursor) diff --git a/qtwayland/src/client/qwaylandshmbackingstore.cpp b/qtwayland/src/client/qwaylandshmbackingstore.cpp index dc7ff670..145f933b 100644 --- a/qtwayland/src/client/qwaylandshmbackingstore.cpp +++ b/qtwayland/src/client/qwaylandshmbackingstore.cpp @@ -52,6 +52,7 @@ #include +#include #include #include @@ -61,6 +62,9 @@ # ifndef MFD_CLOEXEC # define MFD_CLOEXEC 0x0001U # endif +# ifndef MFD_ALLOW_SEALING +# define MFD_ALLOW_SEALING 0x0002U +# endif #endif QT_BEGIN_NAMESPACE @@ -68,14 +72,16 @@ QT_BEGIN_NAMESPACE namespace QtWaylandClient { QWaylandShmBuffer::QWaylandShmBuffer(QWaylandDisplay *display, - const QSize &size, QImage::Format format, int scale) + const QSize &size, QImage::Format format, qreal scale) { int stride = size.width() * 4; int alloc = stride * size.height(); int fd = -1; -#ifdef SYS_memfd_create - fd = syscall(SYS_memfd_create, "wayland-shm", MFD_CLOEXEC); +#if defined(SYS_memfd_create) && defined(F_SEAL_SEAL) + fd = syscall(SYS_memfd_create, "wayland-shm", MFD_CLOEXEC | MFD_ALLOW_SEALING); + if (fd >= 0) + fcntl(fd, F_ADD_SEALS, F_SEAL_SHRINK | F_SEAL_SEAL); #endif QScopedPointer filePointer; @@ -108,7 +114,7 @@ QWaylandShmBuffer::QWaylandShmBuffer(QWaylandDisplay *display, QWaylandShm* shm = display->shm(); wl_shm_format wl_format = shm->formatFrom(format); mImage = QImage(data, size.width(), size.height(), stride, format); - mImage.setDevicePixelRatio(qreal(scale)); + mImage.setDevicePixelRatio(scale); mShmPool = wl_shm_create_pool(shm->object(), fd, alloc); init(wl_shm_pool_create_buffer(mShmPool,0, size.width(), size.height(), @@ -180,8 +186,6 @@ void QWaylandShmBackingStore::beginPaint(const QRegion ®ion) mPainting = true; ensureSize(); - waylandWindow()->setCanResize(false); - if (mBackBuffer->image()->hasAlphaChannel()) { QPainter p(paintDevice()); p.setCompositionMode(QPainter::CompositionMode_Source); @@ -196,7 +200,6 @@ void QWaylandShmBackingStore::endPaint() mPainting = false; if (mPendingFlush) flush(window(), mPendingRegion, QPoint()); - waylandWindow()->setCanResize(true); } void QWaylandShmBackingStore::ensureSize() @@ -271,7 +274,7 @@ QWaylandShmBuffer *QWaylandShmBackingStore::getBuffer(const QSize &size) void QWaylandShmBackingStore::resize(const QSize &size) { QMargins margins = windowDecorationMargins(); - int scale = waylandWindow()->scale(); + qreal scale = waylandWindow()->scale(); QSize sizeWithMargins = (size + QSize(margins.left()+margins.right(),margins.top()+margins.bottom())) * scale; // We look for a free buffer to draw into. If the buffer is not the last buffer we used, diff --git a/qtwayland/src/client/qwaylandshmbackingstore_p.h b/qtwayland/src/client/qwaylandshmbackingstore_p.h index e01632da..f3fae438 100644 --- a/qtwayland/src/client/qwaylandshmbackingstore_p.h +++ b/qtwayland/src/client/qwaylandshmbackingstore_p.h @@ -71,7 +71,7 @@ class QWaylandWindow; class Q_WAYLAND_CLIENT_EXPORT QWaylandShmBuffer : public QWaylandBuffer { public: QWaylandShmBuffer(QWaylandDisplay *display, - const QSize &size, QImage::Format format, int scale = 1); + const QSize &size, QImage::Format format, qreal scale = 1); ~QWaylandShmBuffer() override; QSize size() const override { return mImage.size(); } int scale() const override { return int(mImage.devicePixelRatio()); } diff --git a/qtwayland/src/client/qwaylandwindow.cpp b/qtwayland/src/client/qwaylandwindow.cpp index d57094a7..7a9bccc1 100644 --- a/qtwayland/src/client/qwaylandwindow.cpp +++ b/qtwayland/src/client/qwaylandwindow.cpp @@ -76,7 +76,6 @@ QWaylandWindow *QWaylandWindow::mMouseGrab = nullptr; QWaylandWindow::QWaylandWindow(QWindow *window, QWaylandDisplay *display) : QPlatformWindow(window) , mDisplay(display) - , mFrameQueue(mDisplay->createFrameQueue()) , mResizeAfterSwap(qEnvironmentVariableIsSet("QT_WAYLAND_RESIZE_AFTER_SWAP")) { { @@ -95,9 +94,6 @@ QWaylandWindow::QWaylandWindow(QWindow *window, QWaylandDisplay *display) QWaylandWindow::~QWaylandWindow() { - mDisplay->destroyFrameQueue(mFrameQueue); - mDisplay->handleWindowDestroyed(this); - delete mWindowDecoration; if (mSurface) @@ -189,7 +185,7 @@ void QWaylandWindow::initWindow() // typically be integer 1 (normal-dpi) or 2 (high-dpi). Call set_buffer_scale() // to inform the compositor that high-resolution buffers will be provided. if (mDisplay->compositorVersion() >= 3) - mSurface->set_buffer_scale(scale()); + mSurface->set_buffer_scale(mScale); if (QScreen *s = window()->screen()) setOrientationMask(s->orientationUpdateMask()); @@ -204,6 +200,8 @@ void QWaylandWindow::initWindow() mShellSurface->requestWindowStates(window()->windowStates()); handleContentOrientationChange(window()->contentOrientation()); mFlags = window()->flags(); + + mSurface->commit(); } void QWaylandWindow::initializeWlSurface() @@ -243,6 +241,7 @@ bool QWaylandWindow::shouldCreateSubSurface() const void QWaylandWindow::reset() { + closeChildPopups(); delete mShellSurface; mShellSurface = nullptr; delete mSubSurfaceWindow; @@ -255,17 +254,22 @@ void QWaylandWindow::reset() mSurface.reset(); } - if (mFrameCallback) { - wl_callback_destroy(mFrameCallback); - mFrameCallback = nullptr; - } + { + QMutexLocker lock(&mFrameSyncMutex); + if (mFrameCallback) { + wl_callback_destroy(mFrameCallback); + mFrameCallback = nullptr; + } - mFrameCallbackElapsedTimer.invalidate(); - mWaitingForFrameCallback = false; + mFrameCallbackElapsedTimer.invalidate(); + mWaitingForFrameCallback = false; + } mFrameCallbackTimedOut = false; mMask = QRegion(); mQueuedBuffer = nullptr; + + mDisplay->handleWindowDestroyed(this); } QWaylandWindow *QWaylandWindow::fromWlSurface(::wl_surface *surface) @@ -351,19 +355,25 @@ void QWaylandWindow::setGeometry_helper(const QRect &rect) } } -void QWaylandWindow::setGeometry(const QRect &rect) +void QWaylandWindow::setGeometry(const QRect &r) { + auto rect = r; + if (fixedToplevelPositions && !QPlatformWindow::parent() && window()->type() != Qt::Popup + && window()->type() != Qt::ToolTip) { + rect.moveTo(screen()->geometry().topLeft()); + } setGeometry_helper(rect); if (window()->isVisible() && rect.isValid()) { if (mWindowDecoration) mWindowDecoration->update(); - if (mResizeAfterSwap && windowType() == Egl && mSentInitialResize) + if (mResizeAfterSwap && windowType() == Egl && mSentInitialResize) { + QMutexLocker lock(&mResizeLock); mResizeDirty = true; - else + } else { QWindowSystemInterface::handleGeometryChange(window(), geometry()); - + } mSentInitialResize = true; } QRect exposeGeometry(QPoint(), geometry().size()); @@ -374,7 +384,7 @@ void QWaylandWindow::setGeometry(const QRect &rect) mShellSurface->setWindowGeometry(windowContentGeometry()); if (isOpaque() && mMask.isEmpty()) - setOpaqueArea(rect); + setOpaqueArea(QRect(QPoint(0, 0), rect.size())); } void QWaylandWindow::resizeFromApplyConfigure(const QSize &sizeWithMargins, const QPoint &offset) @@ -399,21 +409,6 @@ void QWaylandWindow::sendExposeEvent(const QRect &rect) mLastExposeGeometry = rect; } - -static QVector> activePopups; - -void QWaylandWindow::closePopups(QWaylandWindow *parent) -{ - while (!activePopups.isEmpty()) { - auto popup = activePopups.takeLast(); - if (popup.isNull()) - continue; - if (popup.data() == parent) - return; - popup->reset(); - } -} - QPlatformScreen *QWaylandWindow::calculateScreenFromSurfaceEvents() const { QReadLocker lock(&mSurfaceLock); @@ -433,10 +428,7 @@ void QWaylandWindow::setVisible(bool visible) lastVisible = visible; if (visible) { - if (window()->type() == Qt::Popup || window()->type() == Qt::ToolTip) - activePopups << this; initWindow(); - mDisplay->flushRequests(); setGeometry(windowGeometry()); // Don't flush the events here, or else the newly visible window may start drawing, but since @@ -444,7 +436,6 @@ void QWaylandWindow::setVisible(bool visible) // QWaylandShmBackingStore::beginPaint(). } else { sendExposeEvent(QRect()); - closePopups(this); reset(); } } @@ -487,8 +478,6 @@ void QWaylandWindow::setMask(const QRegion &mask) if (isOpaque()) setOpaqueArea(mMask); } - - mSurface->commit(); } void QWaylandWindow::applyConfigureWhenPossible() @@ -556,12 +545,12 @@ void QWaylandWindow::sendRecursiveExposeEvent() void QWaylandWindow::attach(QWaylandBuffer *buffer, int x, int y) { - Q_ASSERT(!buffer->committed()); QReadLocker locker(&mSurfaceLock); if (mSurface == nullptr) return; if (buffer) { + Q_ASSERT(!buffer->committed()); handleUpdate(); buffer->setBusy(); @@ -583,7 +572,16 @@ void QWaylandWindow::damage(const QRect &rect) if (mSurface == nullptr) return; - mSurface->damage(rect.x(), rect.y(), rect.width(), rect.height()); + const qreal s = scale(); + if (mDisplay->compositorVersion() >= 4) { + const QRect bufferRect = + QRectF(s * rect.x(), s * rect.y(), s * rect.width(), s * rect.height()) + .toAlignedRect(); + mSurface->damage_buffer(bufferRect.x(), bufferRect.y(), bufferRect.width(), + bufferRect.height()); + } else { + mSurface->damage(rect.x(), rect.y(), rect.width(), rect.height()); + } } void QWaylandWindow::safeCommit(QWaylandBuffer *buffer, const QRegion &damage) @@ -619,8 +617,19 @@ void QWaylandWindow::commit(QWaylandBuffer *buffer, const QRegion &damage) return; attachOffset(buffer); - for (const QRect &rect: damage) - mSurface->damage(rect.x(), rect.y(), rect.width(), rect.height()); + if (mDisplay->compositorVersion() >= 4) { + const qreal s = scale(); + for (const QRect &rect : damage) { + const QRect bufferRect = + QRectF(s * rect.x(), s * rect.y(), s * rect.width(), s * rect.height()) + .toAlignedRect(); + mSurface->damage_buffer(bufferRect.x(), bufferRect.y(), bufferRect.width(), + bufferRect.height()); + } + } else { + for (const QRect &rect: damage) + mSurface->damage(rect.x(), rect.y(), rect.width(), rect.height()); + } Q_ASSERT(!buffer->committed()); buffer->setCommitted(); mSurface->commit(); @@ -635,42 +644,53 @@ void QWaylandWindow::commit() const wl_callback_listener QWaylandWindow::callbackListener = { [](void *data, wl_callback *callback, uint32_t time) { - Q_UNUSED(callback); Q_UNUSED(time); auto *window = static_cast(data); - window->handleFrameCallback(); + window->handleFrameCallback(callback); } }; -void QWaylandWindow::handleFrameCallback() +void QWaylandWindow::handleFrameCallback(wl_callback* callback) { + QMutexLocker locker(&mFrameSyncMutex); + if (!mFrameCallback) { + // This means the callback is already unset by QWaylandWindow::reset. + // The wl_callback object will be destroyed there too. + return; + } + Q_ASSERT(callback == mFrameCallback); + wl_callback_destroy(callback); + mFrameCallback = nullptr; + mWaitingForFrameCallback = false; mFrameCallbackElapsedTimer.invalidate(); // The rest can wait until we can run it on the correct thread - if (!mWaitingForUpdateDelivery) { - auto doHandleExpose = [this]() { - bool wasExposed = isExposed(); - mFrameCallbackTimedOut = false; - if (!wasExposed && isExposed()) // Did setting mFrameCallbackTimedOut make the window exposed? - sendExposeEvent(QRect(QPoint(), geometry().size())); - if (wasExposed && hasPendingUpdateRequest()) - deliverUpdateRequest(); - - mWaitingForUpdateDelivery = false; - }; + auto doHandleExpose = [this]() { + mWaitingForUpdateDelivery.storeRelease(false); + bool wasExposed = isExposed(); + mFrameCallbackTimedOut = false; + if (!wasExposed && isExposed()) // Did setting mFrameCallbackTimedOut make the window exposed? + sendExposeEvent(QRect(QPoint(), geometry().size())); + if (wasExposed && hasPendingUpdateRequest()) + deliverUpdateRequest(); + }; + if (mWaitingForUpdateDelivery.testAndSetAcquire(false, true)) { // Queued connection, to make sure we don't call handleUpdate() from inside waitForFrameSync() // in the single-threaded case. - mWaitingForUpdateDelivery = true; QMetaObject::invokeMethod(this, doHandleExpose, Qt::QueuedConnection); } + + mFrameSyncWait.notify_all(); } bool QWaylandWindow::waitForFrameSync(int timeout) { - QMutexLocker locker(mFrameQueue.mutex); - mDisplay->dispatchQueueWhile(mFrameQueue.queue, [&]() { return mWaitingForFrameCallback; }, timeout); + QMutexLocker locker(&mFrameSyncMutex); + + QDeadlineTimer deadline(timeout); + while (mWaitingForFrameCallback && mFrameSyncWait.wait(&mFrameSyncMutex, deadline)) { } if (mWaitingForFrameCallback) { qCDebug(lcWaylandBackingstore) << "Didn't receive frame callback in time, window should now be inexposed"; @@ -772,8 +792,6 @@ void QWaylandWindow::handleContentOrientationChange(Qt::ScreenOrientation orient Q_UNREACHABLE(); } mSurface->set_buffer_transform(transform); - // set_buffer_transform is double buffered, we need to commit. - mSurface->commit(); } void QWaylandWindow::setOrientationMask(Qt::ScreenOrientations mask) @@ -1032,8 +1050,17 @@ void QWaylandWindow::handleScreensChanged() if (newScreen == mLastReportedScreen) return; + if (!newScreen->isPlaceholder() && !newScreen->QPlatformScreen::screen()) + mDisplay->forceRoundTrip(); QWindowSystemInterface::handleWindowScreenChanged(window(), newScreen->QPlatformScreen::screen()); mLastReportedScreen = newScreen; + if (fixedToplevelPositions && !QPlatformWindow::parent() && window()->type() != Qt::Popup + && window()->type() != Qt::ToolTip + && geometry().topLeft() != newScreen->geometry().topLeft()) { + auto geometry = this->geometry(); + geometry.moveTo(newScreen->geometry().topLeft()); + setGeometry(geometry); + } int scale = newScreen->isPlaceholder() ? 1 : static_cast(newScreen)->scale(); if (scale != mScale) { @@ -1087,14 +1114,14 @@ bool QWaylandWindow::isActive() const return mDisplay->isWindowActivated(this); } -int QWaylandWindow::scale() const +qreal QWaylandWindow::scale() const { - return mScale; + return devicePixelRatio(); } qreal QWaylandWindow::devicePixelRatio() const { - return mScale; + return qreal(mScale); } bool QWaylandWindow::setMouseGrabEnabled(bool grab) @@ -1108,10 +1135,18 @@ bool QWaylandWindow::setMouseGrabEnabled(bool grab) return true; } +Qt::WindowStates QWaylandWindow::windowStates() const +{ + return mLastReportedWindowStates; +} + void QWaylandWindow::handleWindowStatesChanged(Qt::WindowStates states) { createDecoration(); - QWindowSystemInterface::handleWindowStateChanged(window(), states, mLastReportedWindowStates); + Qt::WindowStates statesWithoutActive = states & ~Qt::WindowActive; + Qt::WindowStates lastStatesWithoutActive = mLastReportedWindowStates & ~Qt::WindowActive; + QWindowSystemInterface::handleWindowStateChanged(window(), statesWithoutActive, + lastStatesWithoutActive); mLastReportedWindowStates = states; } @@ -1153,19 +1188,24 @@ void QWaylandWindow::timerEvent(QTimerEvent *event) if (event->timerId() != mFrameCallbackCheckIntervalTimerId) return; - bool callbackTimerExpired = mFrameCallbackElapsedTimer.hasExpired(mFrameCallbackTimeout); - if (!mFrameCallbackElapsedTimer.isValid() || callbackTimerExpired ) { - killTimer(mFrameCallbackCheckIntervalTimerId); - mFrameCallbackCheckIntervalTimerId = -1; - } - if (mFrameCallbackElapsedTimer.isValid() && callbackTimerExpired) { - mFrameCallbackElapsedTimer.invalidate(); + { + QMutexLocker lock(&mFrameSyncMutex); - qCDebug(lcWaylandBackingstore) << "Didn't receive frame callback in time, window should now be inexposed"; - mFrameCallbackTimedOut = true; - mWaitingForUpdate = false; - sendExposeEvent(QRect()); + bool callbackTimerExpired = mFrameCallbackElapsedTimer.hasExpired(mFrameCallbackTimeout); + if (!mFrameCallbackElapsedTimer.isValid() || callbackTimerExpired ) { + killTimer(mFrameCallbackCheckIntervalTimerId); + mFrameCallbackCheckIntervalTimerId = -1; + } + if (!mFrameCallbackElapsedTimer.isValid() || !callbackTimerExpired) { + return; + } + mFrameCallbackElapsedTimer.invalidate(); } + + qCDebug(lcWaylandBackingstore) << "Didn't receive frame callback in time, window should now be inexposed"; + mFrameCallbackTimedOut = true; + mWaitingForUpdate = false; + sendExposeEvent(QRect()); } void QWaylandWindow::requestUpdate() @@ -1174,8 +1214,11 @@ void QWaylandWindow::requestUpdate() Q_ASSERT(hasPendingUpdateRequest()); // should be set by QPA // If we have a frame callback all is good and will be taken care of there - if (mWaitingForFrameCallback) - return; + { + QMutexLocker locker(&mFrameSyncMutex); + if (mWaitingForFrameCallback) + return; + } // If we've already called deliverUpdateRequest(), but haven't seen any attach+commit/swap yet // This is a somewhat redundant behavior and might indicate a bug in the calling code, so log @@ -1188,7 +1231,12 @@ void QWaylandWindow::requestUpdate() // so use invokeMethod to delay the delivery a bit. QMetaObject::invokeMethod(this, [this] { // Things might have changed in the meantime - if (hasPendingUpdateRequest() && !mWaitingForFrameCallback) + { + QMutexLocker locker(&mFrameSyncMutex); + if (mWaitingForFrameCallback) + return; + } + if (hasPendingUpdateRequest()) deliverUpdateRequest(); }, Qt::QueuedConnection); } @@ -1199,19 +1247,18 @@ void QWaylandWindow::requestUpdate() void QWaylandWindow::handleUpdate() { qCDebug(lcWaylandBackingstore) << "handleUpdate" << QThread::currentThread(); + // TODO: Should sync subsurfaces avoid requesting frame callbacks? QReadLocker lock(&mSurfaceLock); if (!mSurface) return; - if (mFrameCallback) { - wl_callback_destroy(mFrameCallback); - mFrameCallback = nullptr; - } + QMutexLocker locker(&mFrameSyncMutex); + if (mWaitingForFrameCallback) + return; - QMutexLocker locker(mFrameQueue.mutex); struct ::wl_surface *wrappedSurface = reinterpret_cast(wl_proxy_create_wrapper(mSurface->object())); - wl_proxy_set_queue(reinterpret_cast(wrappedSurface), mFrameQueue.queue); + wl_proxy_set_queue(reinterpret_cast(wrappedSurface), mDisplay->frameEventQueue()); mFrameCallback = wl_surface_frame(wrappedSurface); wl_proxy_wrapper_destroy(wrappedSurface); wl_callback_add_listener(mFrameCallback, &QWaylandWindow::callbackListener, this); @@ -1221,6 +1268,8 @@ void QWaylandWindow::handleUpdate() // Start a timer for handling the case when the compositor stops sending frame callbacks. if (mFrameCallbackTimeout > 0) { QMetaObject::invokeMethod(this, [this] { + QMutexLocker locker(&mFrameSyncMutex); + if (mWaitingForFrameCallback) { if (mFrameCallbackCheckIntervalTimerId < 0) mFrameCallbackCheckIntervalTimerId = startTimer(mFrameCallbackTimeout); @@ -1281,6 +1330,20 @@ void QWaylandWindow::setOpaqueArea(const QRegion &opaqueArea) wl_region_destroy(region); } +void QWaylandWindow::addChildPopup(QWaylandWindow *surface) { + mChildPopups.append(surface); +} + +void QWaylandWindow::removeChildPopup(QWaylandWindow *surface) { + mChildPopups.removeAll(surface); +} + +void QWaylandWindow::closeChildPopups() { + while (!mChildPopups.isEmpty()) { + auto popup = mChildPopups.takeLast(); + popup->reset(); + } +} } QT_END_NAMESPACE diff --git a/qtwayland/src/client/qwaylandwindow_p.h b/qtwayland/src/client/qwaylandwindow_p.h index 01337cff..741f9e5c 100644 --- a/qtwayland/src/client/qwaylandwindow_p.h +++ b/qtwayland/src/client/qwaylandwindow_p.h @@ -98,6 +98,9 @@ public: QWaylandWindow(QWindow *window, QWaylandDisplay *display); ~QWaylandWindow() override; + // Keep Toplevels position on the top left corner of their screen + static inline bool fixedToplevelPositions = true; + virtual WindowType windowType() const = 0; virtual void ensureSize(); WId winId() const override; @@ -148,13 +151,14 @@ public: void setWindowState(Qt::WindowStates states) override; void setWindowFlags(Qt::WindowFlags flags) override; void handleWindowStatesChanged(Qt::WindowStates states); + Qt::WindowStates windowStates() const; void raise() override; void lower() override; void setMask(const QRegion ®ion) override; - int scale() const; + qreal scale() const; qreal devicePixelRatio() const override; void requestActivateWindow() override; @@ -206,6 +210,10 @@ public: void handleUpdate(); void deliverUpdateRequest() override; + void addChildPopup(QWaylandWindow* child); + void removeChildPopup(QWaylandWindow* child); + void closeChildPopups(); + public slots: void applyConfigure(); @@ -215,7 +223,11 @@ signals: protected: QWaylandDisplay *mDisplay = nullptr; + + // mSurface can be written by the main thread. Other threads should claim a read lock for access + mutable QReadWriteLock mSurfaceLock; QScopedPointer mSurface; + QWaylandShellSurface *mShellSurface = nullptr; QWaylandSubSurface *mSubSurfaceWindow = nullptr; QVector mChildren; @@ -225,13 +237,14 @@ protected: Qt::MouseButtons mMousePressedInContentArea = Qt::NoButton; WId mWindowId; - bool mWaitingForFrameCallback = false; bool mFrameCallbackTimedOut = false; // Whether the frame callback has timed out - bool mWaitingForUpdateDelivery = false; int mFrameCallbackCheckIntervalTimerId = -1; - QElapsedTimer mFrameCallbackElapsedTimer; - struct ::wl_callback *mFrameCallback = nullptr; - QWaylandDisplay::FrameQueue mFrameQueue; + QAtomicInt mWaitingForUpdateDelivery = false; + + bool mWaitingForFrameCallback = false; // Protected by mFrameSyncMutex + QElapsedTimer mFrameCallbackElapsedTimer; // Protected by mFrameSyncMutex + struct ::wl_callback *mFrameCallback = nullptr; // Protected by mFrameSyncMutex + QMutex mFrameSyncMutex; QWaitCondition mFrameSyncWait; // True when we have called deliverRequestUpdate, but the client has not yet attached a new buffer @@ -261,6 +274,8 @@ protected: QWaylandBuffer *mQueuedBuffer = nullptr; QRegion mQueuedBufferDamage; + QList> mChildPopups; + private: void setGeometry_helper(const QRect &rect); void initWindow(); @@ -283,12 +298,10 @@ private: QRect mLastExposeGeometry; static const wl_callback_listener callbackListener; - void handleFrameCallback(); + void handleFrameCallback(struct ::wl_callback* callback); static QWaylandWindow *mMouseGrab; - mutable QReadWriteLock mSurfaceLock; - friend class QWaylandSubSurface; }; diff --git a/qtwayland/src/client/shellintegration/qwaylandshellintegration_p.h b/qtwayland/src/client/shellintegration/qwaylandshellintegration_p.h index ccad0048..4cc9b3b8 100644 --- a/qtwayland/src/client/shellintegration/qwaylandshellintegration_p.h +++ b/qtwayland/src/client/shellintegration/qwaylandshellintegration_p.h @@ -73,11 +73,10 @@ public: return true; } virtual QWaylandShellSurface *createShellSurface(QWaylandWindow *window) = 0; + // kept for binary compat with layer-shell-qt virtual void handleKeyboardFocusChanged(QWaylandWindow *newFocus, QWaylandWindow *oldFocus) { - if (newFocus) - m_display->handleWindowActivated(newFocus); - if (oldFocus) - m_display->handleWindowDeactivated(oldFocus); + Q_UNUSED(newFocus); + Q_UNUSED(oldFocus); } virtual void *nativeResourceForWindow(const QByteArray &resource, QWindow *window) { Q_UNUSED(resource); diff --git a/qtwayland/src/compositor/configure.json b/qtwayland/src/compositor/configure.json index bcfd5215..da95d07b 100644 --- a/qtwayland/src/compositor/configure.json +++ b/qtwayland/src/compositor/configure.json @@ -7,6 +7,31 @@ "testDir": "../../config.tests", "libraries": { + "wayland-client": { + "label": "Wayland client library", + "headers": "wayland-version.h", + "test": { + "main": [ + "#if WAYLAND_VERSION_MAJOR < 1", + "# error Wayland 1.8.0 or higher required", + "#endif", + "#if WAYLAND_VERSION_MAJOR == 1", + "# if WAYLAND_VERSION_MINOR < 8", + "# error Wayland 1.8.0 or higher required", + "# endif", + "# if WAYLAND_VERSION_MINOR == 8", + "# if WAYLAND_VERSION_MICRO < 0", + "# error Wayland 1.8.0 or higher required", + "# endif", + "# endif", + "#endif" + ] + }, + "sources": [ + { "type": "pkgConfig", "args": "wayland-client" }, + "-lwayland-client" + ] + }, "wayland-server": { "label": "wayland-server", "headers": "wayland-version.h", @@ -151,8 +176,7 @@ "#endif" ] }, - "libs": "-ldrm", - "use": "egl" + "use": "drm egl" }, "dmabuf-client-buffer": { "label": "Linux Client dma-buf Buffer Sharing", @@ -176,8 +200,7 @@ "return 0;" ] }, - "libs": "-ldrm", - "use": "egl" + "use": "drm egl" }, "vulkan-server-buffer": { "label": "Vulkan Buffer Sharing", @@ -195,7 +218,8 @@ "exportAllocInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR;", "return 0;" ] - } + }, + "use": "wayland-client" } }, diff --git a/qtwayland/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp b/qtwayland/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp index e00c28c3..dbe2845a 100644 --- a/qtwayland/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp +++ b/qtwayland/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp @@ -40,6 +40,7 @@ #include "qwaylandeglwindow.h" #include +#include #include "qwaylandglcontext.h" #include @@ -115,6 +116,7 @@ void QWaylandEglWindow::updateSurface(bool create) } mOffset = QPoint(); } else { + QReadLocker locker(&mSurfaceLock); if (m_waylandEglWindow) { int current_width, current_height; static bool disableResizeCheck = qgetenv("QT_WAYLAND_DISABLE_RESIZECHECK").toInt(); @@ -122,14 +124,16 @@ void QWaylandEglWindow::updateSurface(bool create) if (!disableResizeCheck) { wl_egl_window_get_attached_size(m_waylandEglWindow, ¤t_width, ¤t_height); } - if (disableResizeCheck || (current_width != sizeWithMargins.width() || current_height != sizeWithMargins.height())) { + if (disableResizeCheck || (current_width != sizeWithMargins.width() || current_height != sizeWithMargins.height()) || m_requestedSize != sizeWithMargins) { wl_egl_window_resize(m_waylandEglWindow, sizeWithMargins.width(), sizeWithMargins.height(), mOffset.x(), mOffset.y()); + m_requestedSize = sizeWithMargins; mOffset = QPoint(); m_resize = true; } - } else if (create && wlSurface()) { - m_waylandEglWindow = wl_egl_window_create(wlSurface(), sizeWithMargins.width(), sizeWithMargins.height()); + } else if (create && mSurface) { + m_waylandEglWindow = wl_egl_window_create(mSurface->object(), sizeWithMargins.width(), sizeWithMargins.height()); + m_requestedSize = sizeWithMargins; } if (!m_eglSurface && m_waylandEglWindow && create) { diff --git a/qtwayland/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h b/qtwayland/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h index 2fccbcea..ad1e5ee9 100644 --- a/qtwayland/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h +++ b/qtwayland/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h @@ -85,6 +85,7 @@ private: mutable QOpenGLFramebufferObject *m_contentFBO = nullptr; QSurfaceFormat m_format; + QSize m_requestedSize; }; } diff --git a/qtwayland/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp b/qtwayland/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp index c1f45fa6..bbc63444 100644 --- a/qtwayland/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp +++ b/qtwayland/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp @@ -195,7 +195,7 @@ public: QOpenGLTextureCache *cache = QOpenGLTextureCache::cacheForContext(m_context->context()); QSize surfaceSize = window->surfaceSize(); - int scale = window->scale() ; + qreal scale = window->scale() ; glViewport(0, 0, surfaceSize.width() * scale, surfaceSize.height() * scale); //Draw Decoration diff --git a/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgpopupv5.cpp b/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgpopupv5.cpp index 85d25e3c..60bdd491 100644 --- a/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgpopupv5.cpp +++ b/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgpopupv5.cpp @@ -47,18 +47,21 @@ QT_BEGIN_NAMESPACE namespace QtWaylandClient { -QWaylandXdgPopupV5::QWaylandXdgPopupV5(struct ::xdg_popup_v5 *popup, QWaylandWindow *window) +QWaylandXdgPopupV5::QWaylandXdgPopupV5(struct ::xdg_popup_v5 *popup, QWaylandWindow* parent, QWaylandWindow *window) : QWaylandShellSurface(window) , QtWayland::xdg_popup_v5(popup) + , m_parent(parent) , m_window(window) { if (window->display()->windowExtension()) m_extendedWindow = new QWaylandExtendedSurface(window); + m_parent->addChildPopup(m_window); } QWaylandXdgPopupV5::~QWaylandXdgPopupV5() { xdg_popup_destroy(object()); + m_parent->removeChildPopup(m_window); delete m_extendedWindow; } diff --git a/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgpopupv5_p.h b/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgpopupv5_p.h index 7494f6a6..d85f130b 100644 --- a/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgpopupv5_p.h +++ b/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgpopupv5_p.h @@ -70,7 +70,7 @@ class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgPopupV5 : public QWaylandShellSurface { Q_OBJECT public: - QWaylandXdgPopupV5(struct ::xdg_popup_v5 *popup, QWaylandWindow *window); + QWaylandXdgPopupV5(struct ::xdg_popup_v5 *popup, QWaylandWindow* parent, QWaylandWindow *window); ~QWaylandXdgPopupV5() override; protected: @@ -78,6 +78,7 @@ protected: private: QWaylandExtendedSurface *m_extendedWindow = nullptr; + QWaylandWindow *m_parent = nullptr; QWaylandWindow *m_window = nullptr; }; diff --git a/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5.cpp b/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5.cpp index 7e242c4a..def8452a 100644 --- a/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5.cpp +++ b/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5.cpp @@ -84,7 +84,7 @@ QWaylandXdgPopupV5 *QWaylandXdgShellV5::createXdgPopup(QWaylandWindow *window, Q int x = position.x() + parentWindow->frameMargins().left(); int y = position.y() + parentWindow->frameMargins().top(); - auto popup = new QWaylandXdgPopupV5(get_xdg_popup(window->wlSurface(), parentSurface, seat, m_popupSerial, x, y), window); + auto popup = new QWaylandXdgPopupV5(get_xdg_popup(window->wlSurface(), parentSurface, seat, m_popupSerial, x, y), parentWindow, window); m_popups.append(window); QObject::connect(popup, &QWaylandXdgPopupV5::destroyed, [this, window](){ m_popups.removeOne(window); diff --git a/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration.cpp b/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration.cpp index 4e25949f..cfc60939 100644 --- a/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration.cpp +++ b/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration.cpp @@ -85,13 +85,6 @@ QWaylandShellSurface *QWaylandXdgShellV5Integration::createShellSurface(QWayland return m_xdgShell->createXdgSurface(window); } -void QWaylandXdgShellV5Integration::handleKeyboardFocusChanged(QWaylandWindow *newFocus, QWaylandWindow *oldFocus) { - if (newFocus && qobject_cast(newFocus->shellSurface())) - m_display->handleWindowActivated(newFocus); - if (oldFocus && qobject_cast(oldFocus->shellSurface())) - m_display->handleWindowDeactivated(oldFocus); -} - } QT_END_NAMESPACE diff --git a/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration_p.h b/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration_p.h index ce6bdb9e..aed88670 100644 --- a/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration_p.h +++ b/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration_p.h @@ -67,7 +67,6 @@ public: QWaylandXdgShellV5Integration() {} bool initialize(QWaylandDisplay *display) override; QWaylandShellSurface *createShellSurface(QWaylandWindow *window) override; - void handleKeyboardFocusChanged(QWaylandWindow *newFocus, QWaylandWindow *oldFocus) override; private: QScopedPointer m_xdgShell; diff --git a/qtwayland/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp b/qtwayland/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp index 8c371661..151c78e3 100644 --- a/qtwayland/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp +++ b/qtwayland/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp @@ -174,6 +174,7 @@ QWaylandXdgSurfaceV6::Popup::Popup(QWaylandXdgSurfaceV6 *xdgSurface, QWaylandXdg , m_xdgSurface(xdgSurface) , m_parent(parent) { + m_parent->window()->addChildPopup(m_xdgSurface->window()); } QWaylandXdgSurfaceV6::Popup::~Popup() @@ -181,6 +182,8 @@ QWaylandXdgSurfaceV6::Popup::~Popup() if (isInitialized()) destroy(); + m_parent->window()->removeChildPopup(m_xdgSurface->window()); + if (m_grabbing) { auto *shell = m_xdgSurface->m_shell; Q_ASSERT(shell->m_topmostGrabbingPopup == this); diff --git a/qtwayland/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6integration.cpp b/qtwayland/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6integration.cpp index 03164316..e8da8ba1 100644 --- a/qtwayland/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6integration.cpp +++ b/qtwayland/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6integration.cpp @@ -68,20 +68,6 @@ QWaylandShellSurface *QWaylandXdgShellV6Integration::createShellSurface(QWayland return m_xdgShell->getXdgSurface(window); } -void QWaylandXdgShellV6Integration::handleKeyboardFocusChanged(QWaylandWindow *newFocus, QWaylandWindow *oldFocus) -{ - if (newFocus) { - auto *xdgSurface = qobject_cast(newFocus->shellSurface()); - if (xdgSurface && !xdgSurface->handlesActiveState()) - m_display->handleWindowActivated(newFocus); - } - if (oldFocus && qobject_cast(oldFocus->shellSurface())) { - auto *xdgSurface = qobject_cast(oldFocus->shellSurface()); - if (xdgSurface && !xdgSurface->handlesActiveState()) - m_display->handleWindowDeactivated(oldFocus); - } -} - } QT_END_NAMESPACE diff --git a/qtwayland/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6integration_p.h b/qtwayland/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6integration_p.h index 261f8cbb..c1bcd5c6 100644 --- a/qtwayland/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6integration_p.h +++ b/qtwayland/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6integration_p.h @@ -65,7 +65,6 @@ public: QWaylandXdgShellV6Integration() {} bool initialize(QWaylandDisplay *display) override; QWaylandShellSurface *createShellSurface(QWaylandWindow *window) override; - void handleKeyboardFocusChanged(QWaylandWindow *newFocus, QWaylandWindow *oldFocus) override; private: QScopedPointer m_xdgShell; diff --git a/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp index 94ea573e..9c6cbb81 100644 --- a/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp +++ b/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp @@ -44,6 +44,7 @@ #include #include #include +#include #include #include @@ -67,11 +68,6 @@ QWaylandXdgSurface::Toplevel::Toplevel(QWaylandXdgSurface *xdgSurface) QWaylandXdgSurface::Toplevel::~Toplevel() { - if (m_applied.states & Qt::WindowActive) { - QWaylandWindow *window = m_xdgSurface->window(); - window->display()->handleWindowDeactivated(window); - } - // The protocol spec requires that the decoration object is deleted before xdg_toplevel. delete m_decoration; m_decoration = nullptr; @@ -85,16 +81,15 @@ void QWaylandXdgSurface::Toplevel::applyConfigure() if (!(m_applied.states & (Qt::WindowMaximized|Qt::WindowFullScreen))) m_normalSize = m_xdgSurface->m_window->windowFrameGeometry().size(); - if ((m_pending.states & Qt::WindowActive) && !(m_applied.states & Qt::WindowActive)) + if ((m_pending.states & Qt::WindowActive) && !(m_applied.states & Qt::WindowActive) + && !m_xdgSurface->m_window->display()->isKeyboardAvailable()) m_xdgSurface->m_window->display()->handleWindowActivated(m_xdgSurface->m_window); - if (!(m_pending.states & Qt::WindowActive) && (m_applied.states & Qt::WindowActive)) + if (!(m_pending.states & Qt::WindowActive) && (m_applied.states & Qt::WindowActive) + && !m_xdgSurface->m_window->display()->isKeyboardAvailable()) m_xdgSurface->m_window->display()->handleWindowDeactivated(m_xdgSurface->m_window); - // TODO: none of the other plugins send WindowActive either, but is it on purpose? - Qt::WindowStates statesWithoutActive = m_pending.states & ~Qt::WindowActive; - - m_xdgSurface->m_window->handleWindowStatesChanged(statesWithoutActive); + m_xdgSurface->m_window->handleWindowStatesChanged(m_pending.states); if (m_pending.size.isEmpty()) { // An empty size in the configure means it's up to the client to choose the size @@ -105,8 +100,6 @@ void QWaylandXdgSurface::Toplevel::applyConfigure() m_xdgSurface->m_window->resizeFromApplyConfigure(m_pending.size); } - m_xdgSurface->setSizeHints(); - m_applied = m_pending; qCDebug(lcQpaWayland) << "Applied pending xdg_toplevel configure event:" << m_applied.size << m_applied.states; } @@ -203,12 +196,17 @@ QtWayland::xdg_toplevel::resize_edge QWaylandXdgSurface::Toplevel::convertToResi | ((edges & Qt::RightEdge) ? resize_edge_right : 0)); } -QWaylandXdgSurface::Popup::Popup(QWaylandXdgSurface *xdgSurface, QWaylandXdgSurface *parent, +QWaylandXdgSurface::Popup::Popup(QWaylandXdgSurface *xdgSurface, QWaylandWindow *parent, QtWayland::xdg_positioner *positioner) - : xdg_popup(xdgSurface->get_popup(parent->object(), positioner->object())) - , m_xdgSurface(xdgSurface) + : m_xdgSurface(xdgSurface) + , m_parentXdgSurface(qobject_cast(parent->shellSurface())) , m_parent(parent) { + + init(xdgSurface->get_popup(m_parentXdgSurface ? m_parentXdgSurface->object() : nullptr, positioner->object())); + if (m_parent) { + m_parent->addChildPopup(m_xdgSurface->window()); + } } QWaylandXdgSurface::Popup::~Popup() @@ -216,10 +214,14 @@ QWaylandXdgSurface::Popup::~Popup() if (isInitialized()) destroy(); + if (m_parent) { + m_parent->removeChildPopup(m_xdgSurface->window()); + } + if (m_grabbing) { auto *shell = m_xdgSurface->m_shell; Q_ASSERT(shell->m_topmostGrabbingPopup == this); - shell->m_topmostGrabbingPopup = m_parent->m_popup; + shell->m_topmostGrabbingPopup = m_parentXdgSurface ? m_parentXdgSurface->m_popup : nullptr; m_grabbing = false; // Synthesize Qt enter/leave events for popup @@ -228,8 +230,10 @@ QWaylandXdgSurface::Popup::~Popup() leave = m_xdgSurface->window()->window(); QWindowSystemInterface::handleLeaveEvent(leave); - if (QWindow *enter = QGuiApplication::topLevelAt(QCursor::pos())) - QWindowSystemInterface::handleEnterEvent(enter, enter->mapFromGlobal(QCursor::pos()), QCursor::pos()); + if (QWindow *enter = QGuiApplication::topLevelAt(QCursor::pos())) { + const auto pos = m_xdgSurface->window()->display()->waylandCursor()->pos(); + QWindowSystemInterface::handleEnterEvent(enter, enter->handle()->mapFromGlobal(pos), pos); + } } } @@ -267,6 +271,7 @@ QWaylandXdgSurface::QWaylandXdgSurface(QWaylandXdgShell *shell, ::xdg_surface *s m_toplevel->set_parent(parentXdgSurface->m_toplevel->object()); } } + setSizeHints(); } QWaylandXdgSurface::~QWaylandXdgSurface() @@ -365,9 +370,6 @@ bool QWaylandXdgSurface::wantsDecorations() const void QWaylandXdgSurface::propagateSizeHints() { setSizeHints(); - - if (m_toplevel && m_window) - m_window->commit(); } void QWaylandXdgSurface::setWindowGeometry(const QRect &rect) @@ -382,10 +384,10 @@ void QWaylandXdgSurface::setSizeHints() const int minHeight = qMax(0, m_window->windowMinimumSize().height()); m_toplevel->set_min_size(minWidth, minHeight); - int maxWidth = qMax(0, m_window->windowMaximumSize().width()); + int maxWidth = qMax(minWidth, m_window->windowMaximumSize().width()); if (maxWidth == QWINDOWSIZE_MAX) maxWidth = 0; - int maxHeight = qMax(0, m_window->windowMaximumSize().height()); + int maxHeight = qMax(minHeight, m_window->windowMaximumSize().height()); if (maxHeight == QWINDOWSIZE_MAX) maxHeight = 0; m_toplevel->set_max_size(maxWidth, maxHeight); @@ -410,8 +412,6 @@ void QWaylandXdgSurface::setPopup(QWaylandWindow *parent) { Q_ASSERT(!m_toplevel && !m_popup); - auto parentXdgSurface = static_cast(parent->shellSurface()); - auto positioner = new QtWayland::xdg_positioner(m_shell->create_positioner()); // set_popup expects a position relative to the parent QPoint transientPos = m_window->geometry().topLeft(); // this is absolute @@ -425,11 +425,10 @@ void QWaylandXdgSurface::setPopup(QWaylandWindow *parent) positioner->set_gravity(QtWayland::xdg_positioner::gravity_bottom_right); positioner->set_size(m_window->geometry().width(), m_window->geometry().height()); positioner->set_constraint_adjustment(QtWayland::xdg_positioner::constraint_adjustment_slide_x - | QtWayland::xdg_positioner::constraint_adjustment_slide_y - | QtWayland::xdg_positioner::constraint_adjustment_flip_x - | QtWayland::xdg_positioner::constraint_adjustment_flip_y); - m_popup = new Popup(this, parentXdgSurface, positioner); + | QtWayland::xdg_positioner::constraint_adjustment_slide_y); + m_popup = new Popup(this, parent, positioner); positioner->destroy(); + delete positioner; } @@ -466,8 +465,10 @@ void QWaylandXdgSurface::setGrabPopup(QWaylandWindow *parent, QWaylandInputDevic if (m_popup && m_popup->m_xdgSurface && m_popup->m_xdgSurface->window()) enter = m_popup->m_xdgSurface->window()->window(); - if (enter) - QWindowSystemInterface::handleEnterEvent(enter, enter->mapFromGlobal(QCursor::pos()), QCursor::pos()); + if (enter) { + const auto pos = m_popup->m_xdgSurface->window()->display()->waylandCursor()->pos(); + QWindowSystemInterface::handleEnterEvent(enter, enter->handle()->mapFromGlobal(pos), pos); + } } void QWaylandXdgSurface::xdg_surface_configure(uint32_t serial) diff --git a/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h b/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h index 96785205..4b518f0a 100644 --- a/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h +++ b/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h @@ -131,14 +131,15 @@ private: class Popup : public QtWayland::xdg_popup { public: - Popup(QWaylandXdgSurface *xdgSurface, QWaylandXdgSurface *parent, QtWayland::xdg_positioner *positioner); + Popup(QWaylandXdgSurface *xdgSurface, QWaylandWindow *parent, QtWayland::xdg_positioner *positioner); ~Popup() override; void grab(QWaylandInputDevice *seat, uint serial); void xdg_popup_popup_done() override; QWaylandXdgSurface *m_xdgSurface = nullptr; - QWaylandXdgSurface *m_parent = nullptr; + QWaylandXdgSurface *m_parentXdgSurface = nullptr; + QWaylandWindow *m_parent = nullptr; bool m_grabbing = false; }; diff --git a/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshellintegration.cpp b/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshellintegration.cpp index 8769d971..da0dd6a7 100644 --- a/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshellintegration.cpp +++ b/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshellintegration.cpp @@ -69,20 +69,6 @@ QWaylandShellSurface *QWaylandXdgShellIntegration::createShellSurface(QWaylandWi return m_xdgShell->getXdgSurface(window); } -void QWaylandXdgShellIntegration::handleKeyboardFocusChanged(QWaylandWindow *newFocus, QWaylandWindow *oldFocus) -{ - if (newFocus) { - auto *xdgSurface = qobject_cast(newFocus->shellSurface()); - if (xdgSurface && !xdgSurface->handlesActiveState()) - m_display->handleWindowActivated(newFocus); - } - if (oldFocus && qobject_cast(oldFocus->shellSurface())) { - auto *xdgSurface = qobject_cast(oldFocus->shellSurface()); - if (xdgSurface && !xdgSurface->handlesActiveState()) - m_display->handleWindowDeactivated(oldFocus); - } -} - } QT_END_NAMESPACE diff --git a/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshellintegration_p.h b/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshellintegration_p.h index b6caa6c9..2f929f98 100644 --- a/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshellintegration_p.h +++ b/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshellintegration_p.h @@ -65,7 +65,6 @@ public: QWaylandXdgShellIntegration() {} bool initialize(QWaylandDisplay *display) override; QWaylandShellSurface *createShellSurface(QWaylandWindow *window) override; - void handleKeyboardFocusChanged(QWaylandWindow *newFocus, QWaylandWindow *oldFocus) override; private: QScopedPointer m_xdgShell; diff --git a/qtwayland/src/shared/qwaylandmimehelper.cpp b/qtwayland/src/shared/qwaylandmimehelper.cpp index c5266ab3..e2fe1928 100644 --- a/qtwayland/src/shared/qwaylandmimehelper.cpp +++ b/qtwayland/src/shared/qwaylandmimehelper.cpp @@ -60,7 +60,7 @@ QByteArray QWaylandMimeHelper::getByteArray(QMimeData *mimeData, const QString & buf.open(QIODevice::ReadWrite); QByteArray fmt = "BMP"; if (mimeType.startsWith(QLatin1String("image/"))) { - QByteArray imgFmt = mimeType.mid(6).toUpper().toLatin1(); + QByteArray imgFmt = mimeType.mid(6).toLower().toLatin1(); if (QImageWriter::supportedImageFormats().contains(imgFmt)) fmt = imgFmt; } diff --git a/qtwayland/tests/auto/client/datadevicev1/tst_datadevicev1.cpp b/qtwayland/tests/auto/client/datadevicev1/tst_datadevicev1.cpp index 1568b3b9..067410d0 100644 --- a/qtwayland/tests/auto/client/datadevicev1/tst_datadevicev1.cpp +++ b/qtwayland/tests/auto/client/datadevicev1/tst_datadevicev1.cpp @@ -35,7 +35,7 @@ using namespace MockCompositor; -constexpr int dataDeviceVersion = 1; +constexpr int dataDeviceVersion = 3; class DataDeviceCompositor : public DefaultCompositor { public: diff --git a/qtwayland/tests/auto/client/seatv5/tst_seatv5.cpp b/qtwayland/tests/auto/client/seatv5/tst_seatv5.cpp index 9312c2e5..2ea382f1 100644 --- a/qtwayland/tests/auto/client/seatv5/tst_seatv5.cpp +++ b/qtwayland/tests/auto/client/seatv5/tst_seatv5.cpp @@ -73,6 +73,7 @@ private slots: void multiTouch(); void multiTouchUpAndMotionFrame(); void tapAndMoveInSameFrame(); + void cancelTouch(); }; void tst_seatv5::bindsToSeat() @@ -646,5 +647,34 @@ void tst_seatv5::tapAndMoveInSameFrame() QTRY_COMPARE(window.m_events.last().touchPoints.first().state(), Qt::TouchPointState::TouchPointReleased); } +void tst_seatv5::cancelTouch() +{ + TouchWindow window; + QCOMPOSITOR_TRY_VERIFY(xdgSurface() && xdgSurface()->m_committedConfigureSerial); + + exec([=] { + auto *t = touch(); + auto *c = client(); + t->sendDown(xdgToplevel()->surface(), {32, 32}, 1); + t->sendFrame(c); + t->sendCancel(c); + t->sendFrame(c); + }); + + QTRY_VERIFY(!window.m_events.empty()); + { + auto e = window.m_events.takeFirst(); + QCOMPARE(e.type, QEvent::TouchBegin); + QCOMPARE(e.touchPointStates, Qt::TouchPointPressed); + QCOMPARE(e.touchPoints.length(), 1); + QCOMPARE(e.touchPoints.first().pos(), QPointF(32-window.frameMargins().left(), 32-window.frameMargins().top())); + } + { + auto e = window.m_events.takeFirst(); + QCOMPARE(e.type, QEvent::TouchCancel); + QCOMPARE(e.touchPoints.length(), 0); + } +} + QCOMPOSITOR_TEST_MAIN(tst_seatv5) #include "tst_seatv5.moc" diff --git a/qtwayland/tests/auto/client/shared/coreprotocol.cpp b/qtwayland/tests/auto/client/shared/coreprotocol.cpp index 0d988521..53e12291 100644 --- a/qtwayland/tests/auto/client/shared/coreprotocol.cpp +++ b/qtwayland/tests/auto/client/shared/coreprotocol.cpp @@ -185,6 +185,8 @@ void Output::output_bind_resource(QtWaylandServer::wl_output::Resource *resource if (m_version >= WL_OUTPUT_DONE_SINCE_VERSION) wl_output::send_done(resource->handle); + + Q_EMIT outputBound(resource); } // Seat stuff @@ -451,6 +453,13 @@ void Touch::sendFrame(wl_client *client) send_frame(r->handle); } +void Touch::sendCancel(wl_client *client) +{ + const auto touchResources = resourceMap().values(client); + for (auto *r : touchResources) + send_cancel(r->handle); +} + uint Keyboard::sendEnter(Surface *surface) { auto serial = m_seat->m_compositor->nextSerial(); diff --git a/qtwayland/tests/auto/client/shared/coreprotocol.h b/qtwayland/tests/auto/client/shared/coreprotocol.h index a1af137a..00c439e1 100644 --- a/qtwayland/tests/auto/client/shared/coreprotocol.h +++ b/qtwayland/tests/auto/client/shared/coreprotocol.h @@ -158,7 +158,7 @@ class WlCompositor : public Global, public QtWaylandServer::wl_compositor { Q_OBJECT public: - explicit WlCompositor(CoreCompositor *compositor, int version = 3) + explicit WlCompositor(CoreCompositor *compositor, int version = 4) : QtWaylandServer::wl_compositor(compositor->m_display, version) , m_compositor(compositor) {} @@ -273,6 +273,9 @@ public: OutputData m_data; int m_version = 1; // TODO: remove on libwayland upgrade +Q_SIGNALS: + void outputBound(Resource *resource); + protected: void output_bind_resource(Resource *resource) override; }; @@ -364,6 +367,7 @@ public: uint sendUp(wl_client *client, int id); void sendMotion(wl_client *client, const QPointF &position, int id); void sendFrame(wl_client *client); + void sendCancel(wl_client *client); Seat *m_seat = nullptr; }; diff --git a/qtwayland/tests/auto/client/shared_old/mockcompositor.cpp b/qtwayland/tests/auto/client/shared_old/mockcompositor.cpp index a415cbf5..b1d3d07d 100644 --- a/qtwayland/tests/auto/client/shared_old/mockcompositor.cpp +++ b/qtwayland/tests/auto/client/shared_old/mockcompositor.cpp @@ -342,7 +342,7 @@ Compositor::Compositor(MockCompositor *mockCompositor) exit(EXIT_FAILURE); } - wl_global_create(m_display, &wl_compositor_interface, 1, this, bindCompositor); + wl_global_create(m_display, &wl_compositor_interface, 4, this, bindCompositor); m_data_device_manager.reset(new DataDeviceManager(this, m_display)); diff --git a/qtwayland/tests/auto/client/shared_old/mocksurface.cpp b/qtwayland/tests/auto/client/shared_old/mocksurface.cpp index e9df5f90..c3246e4a 100644 --- a/qtwayland/tests/auto/client/shared_old/mocksurface.cpp +++ b/qtwayland/tests/auto/client/shared_old/mocksurface.cpp @@ -125,6 +125,16 @@ void Surface::surface_damage(Resource *resource, Q_UNUSED(height); } +void Surface::surface_damage_buffer(Resource *resource, + int32_t x, int32_t y, int32_t width, int32_t height) +{ + Q_UNUSED(resource); + Q_UNUSED(x); + Q_UNUSED(y); + Q_UNUSED(width); + Q_UNUSED(height); +} + void Surface::surface_frame(Resource *resource, uint32_t callback) { diff --git a/qtwayland/tests/auto/client/shared_old/mocksurface.h b/qtwayland/tests/auto/client/shared_old/mocksurface.h index 949dc23d..d176837e 100644 --- a/qtwayland/tests/auto/client/shared_old/mocksurface.h +++ b/qtwayland/tests/auto/client/shared_old/mocksurface.h @@ -65,6 +65,8 @@ protected: struct wl_resource *buffer, int x, int y) override; void surface_damage(Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height) override; + void surface_damage_buffer(Resource *resource, + int32_t x, int32_t y, int32_t width, int32_t height) override; void surface_frame(Resource *resource, uint32_t callback) override; void surface_commit(Resource *resource) override; diff --git a/qtwayland/tests/auto/client/xdgoutput/tst_xdgoutput.cpp b/qtwayland/tests/auto/client/xdgoutput/tst_xdgoutput.cpp index 80429608..68e8d77a 100644 --- a/qtwayland/tests/auto/client/xdgoutput/tst_xdgoutput.cpp +++ b/qtwayland/tests/auto/client/xdgoutput/tst_xdgoutput.cpp @@ -55,6 +55,7 @@ private slots: void primaryScreen(); void overrideGeometry(); void changeGeometry(); + void outputCreateEnterRace(); }; void tst_xdgoutput::cleanup() @@ -134,5 +135,39 @@ void tst_xdgoutput::changeGeometry() exec([=] { remove(output(1)); }); } +void tst_xdgoutput::outputCreateEnterRace() +{ + m_config.autoConfigure = true; + m_config.autoEnter = false; + QRasterWindow window; + QSignalSpy screenChanged(&window, &QWindow::screenChanged); + window.resize(400, 320); + window.show(); + QCOMPOSITOR_TRY_VERIFY(xdgSurface() && xdgSurface()->m_committedConfigureSerial); + exec([=] { xdgToplevel()->surface()->sendEnter(output(0));}); + + QTRY_COMPARE(QGuiApplication::screens().size(), 1); + QScreen *primaryScreen = QGuiApplication::screens().first(); + QCOMPARE(window.screen(), primaryScreen); + + auto *out = exec([=] { + return add(); + }); + + // In Compositor Thread + connect(out, &Output::outputBound, this, [this](QtWaylandServer::wl_output::Resource *resource){ + auto surface = xdgToplevel()->surface(); + surface->sendLeave(output(0)); + surface->QtWaylandServer::wl_surface::send_enter(surface->resource()->handle, resource->handle); + }, Qt::DirectConnection); + + QTRY_COMPARE(QGuiApplication::screens().size(), 2); + QTRY_COMPARE(window.screen(), QGuiApplication::screens()[1]); + + exec([=] { remove(out); }); + m_config.autoConfigure = false; + m_config.autoEnter = true; +} + QCOMPOSITOR_TEST_MAIN(tst_xdgoutput) #include "tst_xdgoutput.moc" diff --git a/qtwayland/tests/auto/client/xdgshell/tst_xdgshell.cpp b/qtwayland/tests/auto/client/xdgshell/tst_xdgshell.cpp index 2277bbb8..afbeef53 100644 --- a/qtwayland/tests/auto/client/xdgshell/tst_xdgshell.cpp +++ b/qtwayland/tests/auto/client/xdgshell/tst_xdgshell.cpp @@ -31,6 +31,7 @@ #include #include #include +#include using namespace MockCompositor; @@ -45,6 +46,7 @@ private slots: void configureStates(); void popup(); void tooltipOnPopup(); + void tooltipAndSiblingPopup(); void switchPopups(); void hidePopupParent(); void pongs(); @@ -138,6 +140,7 @@ void tst_xdgshell::configureSize() void tst_xdgshell::configureStates() { + QVERIFY(qputenv("QT_WAYLAND_FRAME_CALLBACK_TIMEOUT", "0")); QRasterWindow window; window.resize(64, 48); window.show(); @@ -154,9 +157,12 @@ void tst_xdgshell::configureStates() // Toplevel windows don't know their position on xdg-shell // QCOMPARE(window.frameGeometry().topLeft(), QPoint()); // TODO: this doesn't currently work when window decorations are enabled -// QEXPECT_FAIL("", "configure has already been acked, we shouldn't have to wait for isActive", Continue); -// QVERIFY(window.isActive()); - QTRY_VERIFY(window.isActive()); // Just make sure it eventually get's set correctly + // window.windowstate() is driven by keyboard focus, however for decorations we want to follow + // XDGShell this is internal to QtWayland so it is queried directly + auto waylandWindow = static_cast(window.handle()); + Q_ASSERT(waylandWindow); + QTRY_VERIFY(waylandWindow->windowStates().testFlag( + Qt::WindowActive)); // Just make sure it eventually get's set correctly const QSize screenSize(640, 480); const uint maximizedSerial = exec([=] { @@ -186,6 +192,7 @@ void tst_xdgshell::configureStates() QCOMPARE(window.windowStates(), Qt::WindowNoState); QCOMPARE(window.frameGeometry().size(), windowedSize); // QCOMPARE(window.frameGeometry().topLeft(), QPoint()); // TODO: this doesn't currently work when window decorations are enabled + QVERIFY(qunsetenv("QT_WAYLAND_FRAME_CALLBACK_TIMEOUT")); } void tst_xdgshell::popup() @@ -340,6 +347,92 @@ void tst_xdgshell::tooltipOnPopup() QCOMPOSITOR_TRY_COMPARE(xdgPopup(0), nullptr); } +void tst_xdgshell::tooltipAndSiblingPopup() +{ + class ToolTip : public QRasterWindow { + public: + explicit ToolTip(QWindow *parent) { + setTransientParent(parent); + setFlags(Qt::ToolTip); + resize(100, 100); + show(); + } + void mousePressEvent(QMouseEvent *event) override { + QRasterWindow::mousePressEvent(event); + m_popup = new QRasterWindow; + m_popup->setTransientParent(transientParent()); + m_popup->setFlags(Qt::Popup); + m_popup->resize(100, 100); + m_popup->show(); + } + + QRasterWindow *m_popup = nullptr; + }; + + class Window : public QRasterWindow { + public: + void mousePressEvent(QMouseEvent *event) override { + QRasterWindow::mousePressEvent(event); + m_tooltip = new ToolTip(this); + } + ToolTip *m_tooltip = nullptr; + }; + + Window window; + window.resize(200, 200); + window.show(); + + QCOMPOSITOR_TRY_VERIFY(xdgToplevel()); + exec([=] { xdgToplevel()->sendCompleteConfigure(); }); + QCOMPOSITOR_TRY_VERIFY(xdgToplevel()->m_xdgSurface->m_committedConfigureSerial); + + exec([=] { + auto *surface = xdgToplevel()->surface(); + auto *p = pointer(); + auto *c = client(); + p->sendEnter(surface, {100, 100}); + p->sendFrame(c); + p->sendButton(client(), BTN_LEFT, Pointer::button_state_pressed); + p->sendButton(client(), BTN_LEFT, Pointer::button_state_released); + p->sendFrame(c); + p->sendLeave(surface); + p->sendFrame(c); + }); + + QCOMPOSITOR_TRY_VERIFY(xdgPopup()); + exec([=] { xdgPopup()->sendCompleteConfigure(QRect(100, 100, 100, 100)); }); + QCOMPOSITOR_TRY_VERIFY(xdgPopup()->m_xdgSurface->m_committedConfigureSerial); + QCOMPOSITOR_TRY_VERIFY(!xdgPopup()->m_grabbed); + + exec([=] { + auto *surface = xdgPopup()->surface(); + auto *p = pointer(); + auto *c = client(); + p->sendEnter(surface, {100, 100}); + p->sendFrame(c); + p->sendButton(client(), BTN_LEFT, Pointer::button_state_pressed); + p->sendButton(client(), BTN_LEFT, Pointer::button_state_released); + p->sendFrame(c); + }); + + QCOMPOSITOR_TRY_VERIFY(xdgPopup(1)); + exec([=] { xdgPopup(1)->sendCompleteConfigure(QRect(100, 100, 100, 100)); }); + QCOMPOSITOR_TRY_VERIFY(xdgPopup(1)->m_xdgSurface->m_committedConfigureSerial); + QCOMPOSITOR_TRY_VERIFY(xdgPopup(1)->m_grabbed); + + // Close the middle tooltip (it should not close the sibling popup) + window.m_tooltip->close(); + + QCOMPOSITOR_TRY_COMPARE(xdgPopup(1), nullptr); + // Verify the remaining xdg surface is a grab popup.. + QCOMPOSITOR_TRY_VERIFY(xdgPopup(0)); + QCOMPOSITOR_TRY_VERIFY(xdgPopup(0)->m_grabbed); + + window.m_tooltip->m_popup->close(); + QCOMPOSITOR_TRY_COMPARE(xdgPopup(1), nullptr); + QCOMPOSITOR_TRY_COMPARE(xdgPopup(0), nullptr); +} + // QTBUG-65680 void tst_xdgshell::switchPopups() { @@ -505,15 +598,17 @@ void tst_xdgshell::minMaxSize() window.show(); QCOMPOSITOR_TRY_VERIFY(xdgToplevel()); - exec([=] { xdgToplevel()->sendCompleteConfigure(); }); + // we don't roundtrip with our configuration the initial commit should be correct QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.minSize, QSize(100, 100)); QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.maxSize, QSize(1000, 1000)); window.setMaximumSize(QSize(500, 400)); + window.update(); QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.maxSize, QSize(500, 400)); window.setMinimumSize(QSize(50, 40)); + window.update(); QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.minSize, QSize(50, 40)); } Submodule qtwebchannel d5eb0142..c78ad286: diff --git a/qtwebchannel/src/webchannel/qmetaobjectpublisher.cpp b/qtwebchannel/src/webchannel/qmetaobjectpublisher.cpp index 536eb5c..898d769 100644 --- a/qtwebchannel/src/webchannel/qmetaobjectpublisher.cpp +++ b/qtwebchannel/src/webchannel/qmetaobjectpublisher.cpp @@ -186,8 +186,6 @@ Q_DECLARE_TYPEINFO(OverloadResolutionCandidate, Q_MOVABLE_TYPE); QMetaObjectPublisher::QMetaObjectPublisher(QWebChannel *webChannel) : QObject(webChannel) , webChannel(webChannel) - , signalHandler(this) - , clientIsIdle(false) , blockUpdates(false) , propertyUpdatesInitialized(false) { @@ -301,17 +299,17 @@ QJsonObject QMetaObjectPublisher::classInfoForObject(const QObject *object, QWeb return data; } -void QMetaObjectPublisher::setClientIsIdle(bool isIdle) +void QMetaObjectPublisher::setClientIsIdle(bool isIdle, QWebChannelAbstractTransport *transport) { - if (clientIsIdle == isIdle) { - return; - } - clientIsIdle = isIdle; - if (!isIdle && timer.isActive()) { - timer.stop(); - } else if (isIdle && !timer.isActive()) { - timer.start(PROPERTY_UPDATE_INTERVAL, this); - } + transportState[transport].clientIsIdle = isIdle; + if (isIdle) + sendEnqueuedPropertyUpdates(transport); +} + +bool QMetaObjectPublisher::isClientIdle(QWebChannelAbstractTransport *transport) +{ + auto found = transportState.find(transport); + return found != transportState.end() && found.value().clientIsIdle; } QJsonObject QMetaObjectPublisher::initializeClient(QWebChannelAbstractTransport *transport) @@ -333,6 +331,7 @@ QJsonObject QMetaObjectPublisher::initializeClient(QWebChannelAbstractTransport void QMetaObjectPublisher::initializePropertyUpdates(const QObject *const object, const QJsonObject &objectInfo) { + auto *signalHandler = signalHandlerFor(object); foreach (const QJsonValue &propertyInfoVar, objectInfo[KEY_PROPERTIES].toArray()) { const QJsonArray &propertyInfo = propertyInfoVar.toArray(); if (propertyInfo.size() < 2) { @@ -353,19 +352,19 @@ void QMetaObjectPublisher::initializePropertyUpdates(const QObject *const object // Only connect for a property update once if (connectedProperties.isEmpty()) { - signalHandler.connectTo(object, signalIndex); + signalHandler->connectTo(object, signalIndex); } connectedProperties.insert(propertyIndex); } // also always connect to destroyed signal - signalHandler.connectTo(object, s_destroyedSignalIndex); + signalHandler->connectTo(object, s_destroyedSignalIndex); } void QMetaObjectPublisher::sendPendingPropertyUpdates() { - if (blockUpdates || !clientIsIdle || pendingPropertyUpdates.isEmpty()) { + if (blockUpdates) { return; } @@ -415,18 +414,19 @@ void QMetaObjectPublisher::sendPendingPropertyUpdates() // data does not contain specific updates if (!data.isEmpty()) { - setClientIsIdle(false); - message[KEY_DATA] = data; - broadcastMessage(message); + enqueueBroadcastMessage(message); } // send every property update which is not supposed to be broadcasted const QHash::const_iterator suend = specificUpdates.constEnd(); for (QHash::const_iterator it = specificUpdates.constBegin(); it != suend; ++it) { message[KEY_DATA] = it.value(); - it.key()->sendMessage(message); + enqueueMessage(message, it.key()); } + + for (auto state = transportState.begin(); state != transportState.end(); ++state) + sendEnqueuedPropertyUpdates(state.key()); } QVariant QMetaObjectPublisher::invokeMethod(QObject *const object, const QMetaMethod &method, @@ -572,7 +572,7 @@ void QMetaObjectPublisher::signalEmitted(const QObject *object, const int signal } } else { pendingPropertyUpdates[object][signalIndex] = arguments; - if (clientIsIdle && !blockUpdates && !timer.isActive()) { + if (!blockUpdates && !timer.isActive()) { timer.start(PROPERTY_UPDATE_INTERVAL, this); } } @@ -590,7 +590,7 @@ void QMetaObjectPublisher::objectDestroyed(const QObject *object) // only remove from handler when we initialized the property updates // cf: https://bugreports.qt.io/browse/QTBUG-60250 if (propertyUpdatesInitialized) { - signalHandler.remove(object); + signalHandlerFor(object)->remove(object); signalToPropertyMap.remove(object); } pendingPropertyUpdates.remove(object); @@ -852,6 +852,52 @@ void QMetaObjectPublisher::broadcastMessage(const QJsonObject &message) const } } +void QMetaObjectPublisher::enqueueBroadcastMessage(const QJsonObject &message) +{ + if (webChannel->d_func()->transports.isEmpty()) { + qWarning("QWebChannel is not connected to any transports, cannot send message: %s", + QJsonDocument(message).toJson().constData()); + return; + } + + for (auto *transport : webChannel->d_func()->transports) { + auto &state = transportState[transport]; + state.queuedMessages.append(message); + } +} + +void QMetaObjectPublisher::enqueueMessage(const QJsonObject &message, + QWebChannelAbstractTransport *transport) +{ + auto &state = transportState[transport]; + state.queuedMessages.append(message); +} + +void QMetaObjectPublisher::sendEnqueuedPropertyUpdates(QWebChannelAbstractTransport *transport) +{ + auto found = transportState.find(transport); + if (found != transportState.end() && found.value().clientIsIdle + && !found.value().queuedMessages.isEmpty()) { + + // If the client is connected with an in-process transport, it can + // happen that a message triggers a subsequent property change. In + // that case, we need to ensure that the queued messages have already + // been cleared; otherwise the recursive call will send everythig again. + // Case in point: The qmlwebchannel tests fail if we don't clear the + // queued messages before sending them out. + // For that same reason set the client to "busy" (aka non-idle) just + // right before sending out the messages; otherwise a potential + // "Idle" type message will not correctly restore the Idle state. + const auto messages = std::move(found.value().queuedMessages); + Q_ASSERT(found.value().queuedMessages.isEmpty()); + found.value().clientIsIdle = false; + + for (const auto &message : messages) { + transport->sendMessage(message); + } + } +} + void QMetaObjectPublisher::handleMessage(const QJsonObject &message, QWebChannelAbstractTransport *transport) { if (!webChannel->d_func()->transports.contains(transport)) { @@ -866,7 +912,7 @@ void QMetaObjectPublisher::handleMessage(const QJsonObject &message, QWebChannel const MessageType type = toType(message.value(KEY_TYPE)); if (type == TypeIdle) { - setClientIsIdle(true); + setClientIsIdle(true, transport); } else if (type == TypeInit) { if (!message.contains(KEY_ID)) { qWarning("JSON message object is missing the id property: %s", @@ -913,9 +959,9 @@ void QMetaObjectPublisher::handleMessage(const QJsonObject &message, QWebChannel return; transport->sendMessage(createResponse(message.value(KEY_ID), wrapResult(result, transport))); } else if (type == TypeConnectToSignal) { - signalHandler.connectTo(object, message.value(KEY_SIGNAL).toInt(-1)); + signalHandlerFor(object)->connectTo(object, message.value(KEY_SIGNAL).toInt(-1)); } else if (type == TypeDisconnectFromSignal) { - signalHandler.disconnectFrom(object, message.value(KEY_SIGNAL).toInt(-1)); + signalHandlerFor(object)->disconnectFrom(object, message.value(KEY_SIGNAL).toInt(-1)); } else if (type == TypeSetProperty) { setProperty(object, message.value(KEY_PROPERTY).toInt(-1), message.value(KEY_VALUE)); @@ -931,6 +977,7 @@ void QMetaObjectPublisher::setBlockUpdates(bool block) blockUpdates = block; if (!blockUpdates) { + timer.start(PROPERTY_UPDATE_INTERVAL, this); sendPendingPropertyUpdates(); } else if (timer.isActive()) { timer.stop(); @@ -948,4 +995,15 @@ void QMetaObjectPublisher::timerEvent(QTimerEvent *event) } } +SignalHandler *QMetaObjectPublisher::signalHandlerFor(const QObject *object) +{ + auto thread = object->thread(); + auto it = signalHandlers.find(thread); + if (it == signalHandlers.end()) { + it = signalHandlers.emplace(thread, this).first; + it->second.moveToThread(thread); + } + return &it->second; +} + QT_END_NAMESPACE diff --git a/qtwebchannel/src/webchannel/qmetaobjectpublisher_p.h b/qtwebchannel/src/webchannel/qmetaobjectpublisher_p.h index bbd9875..4713ef1 100644 --- a/qtwebchannel/src/webchannel/qmetaobjectpublisher_p.h +++ b/qtwebchannel/src/webchannel/qmetaobjectpublisher_p.h @@ -59,6 +59,9 @@ #include #include #include +#include + +#include #include "qwebchannelglobal.h" @@ -109,17 +112,36 @@ public: */ void broadcastMessage(const QJsonObject &message) const; + /** + * Enqueue the given @p message to all known transports. + */ + void enqueueBroadcastMessage(const QJsonObject &message); + + /** + * Enqueue the given @p message to @p transport. + */ + void enqueueMessage(const QJsonObject &message, QWebChannelAbstractTransport *transport); + + /** + * If client for given @p transport is idle, send queued messaged to @p transport and then mark + * the client as not idle. + */ + void sendEnqueuedPropertyUpdates(QWebChannelAbstractTransport *transport); + /** * Serialize the QMetaObject of @p object and return it in JSON form. */ QJsonObject classInfoForObject(const QObject *object, QWebChannelAbstractTransport *transport); /** - * Set the client to idle or busy, based on the value of @p isIdle. - * - * When the value changed, start/stop the property update timer accordingly. + * Set the client to idle or busy for a single @p transport, based on the value of @p isIdle. + */ + void setClientIsIdle(bool isIdle, QWebChannelAbstractTransport *transport); + + /** + * Check that client is idle for @p transport. */ - void setClientIsIdle(bool isIdle); + bool isClientIdle(QWebChannelAbstractTransport *transport); /** * Initialize clients by sending them the class information of the registered objects. @@ -272,10 +294,18 @@ private: friend class TestWebChannel; QWebChannel *webChannel; - SignalHandler signalHandler; + std::unordered_map> signalHandlers; + SignalHandler *signalHandlerFor(const QObject *object); - // true when the client is idle, false otherwise - bool clientIsIdle; + struct TransportState + { + TransportState() : clientIsIdle(false) { } + // true when the client is idle, false otherwise + bool clientIsIdle; + // messages to send + QQueue queuedMessages; + }; + QHash transportState; // true when no property updates should be sent, false otherwise bool blockUpdates; diff --git a/qtwebchannel/src/webchannel/signalhandler_p.h b/qtwebchannel/src/webchannel/signalhandler_p.h index 27afadb..d77373c 100644 --- a/qtwebchannel/src/webchannel/signalhandler_p.h +++ b/qtwebchannel/src/webchannel/signalhandler_p.h @@ -56,6 +56,7 @@ #include #include #include +#include QT_BEGIN_NAMESPACE @@ -71,6 +72,7 @@ static const int s_destroyedSignalIndex = QObject::staticMetaObject.indexOfMetho template class SignalHandler : public QObject { + Q_DISABLE_COPY(SignalHandler) public: SignalHandler(Receiver *receiver, QObject *parent = 0); @@ -268,6 +270,7 @@ int SignalHandler::qt_metacall(QMetaObject::Call call, int methodId, v if (call == QMetaObject::InvokeMetaMethod) { const QObject *object = sender(); Q_ASSERT(object); + Q_ASSERT(QThread::currentThread() == object->thread()); Q_ASSERT(senderSignalIndex() == methodId); Q_ASSERT(m_connectionsCounter.contains(object)); Q_ASSERT(m_connectionsCounter.value(object).contains(methodId)); diff --git a/qtwebchannel/tests/auto/qml/testwebchannel.cpp b/qtwebchannel/tests/auto/qml/testwebchannel.cpp index 9891687..3ca81c2 100644 --- a/qtwebchannel/tests/auto/qml/testwebchannel.cpp +++ b/qtwebchannel/tests/auto/qml/testwebchannel.cpp @@ -46,7 +46,11 @@ TestWebChannel::~TestWebChannel() bool TestWebChannel::clientIsIdle() const { - return QWebChannel::d_func()->publisher->clientIsIdle; + for (auto *transport : QWebChannel::d_func()->transports) { + if (QWebChannel::d_func()->publisher->isClientIdle(transport)) + return true; + } + return false; } QT_END_NAMESPACE diff --git a/qtwebchannel/tests/auto/webchannel/tst_webchannel.cpp b/qtwebchannel/tests/auto/webchannel/tst_webchannel.cpp index 181da9e..37f989a 100644 --- a/qtwebchannel/tests/auto/webchannel/tst_webchannel.cpp +++ b/qtwebchannel/tests/auto/webchannel/tst_webchannel.cpp @@ -785,7 +785,7 @@ void TestWebChannel::testTransportWrapObjectProperties() DummyTransport *dummyTransport = new DummyTransport(this); channel.connectTo(dummyTransport); channel.d_func()->publisher->initializeClient(dummyTransport); - channel.d_func()->publisher->setClientIsIdle(true); + channel.d_func()->publisher->setClientIsIdle(true, dummyTransport); QCOMPARE(channel.d_func()->publisher->transportedWrappedObjects.size(), 0); @@ -943,8 +943,6 @@ void TestWebChannel::testInfiniteRecursion() void TestWebChannel::testAsyncObject() { - QSKIP("This test is broken. See QTBUG-80729"); - QWebChannel channel; channel.connectTo(m_dummyTransport); @@ -990,6 +988,50 @@ void TestWebChannel::testAsyncObject() thread.wait(); } +void TestWebChannel::testPropertyMultipleTransports() +{ + DummyTransport transport1; + DummyTransport transport2; + + QWebChannel channel; + QMetaObjectPublisher *publisher = channel.d_func()->publisher; + + TestObject testObj; + testObj.setObjectName("testObject"); + channel.registerObject(testObj.objectName(), &testObj); + channel.connectTo(&transport1); + channel.connectTo(&transport2); + + testObj.setProp("Hello"); + + publisher->initializeClient(&transport1); + publisher->initializeClient(&transport2); + publisher->setClientIsIdle(true, &transport1); + QCOMPARE(publisher->isClientIdle(&transport1), true); + QCOMPARE(publisher->isClientIdle(&transport2), false); + QVERIFY(transport1.messagesSent().isEmpty()); + QVERIFY(transport2.messagesSent().isEmpty()); + + testObj.setProp("World"); + QTRY_COMPARE_WITH_TIMEOUT(transport1.messagesSent().size(), 1u, 2000); + QCOMPARE(transport2.messagesSent().size(), 0u); + publisher->setClientIsIdle(true, &transport2); + QTRY_COMPARE_WITH_TIMEOUT(transport2.messagesSent().size(), 1u, 2000); + QCOMPARE(publisher->isClientIdle(&transport1), false); + QCOMPARE(publisher->isClientIdle(&transport2), false); + + testObj.setProp("!!!"); + publisher->setClientIsIdle(true, &transport2); + QCOMPARE(publisher->isClientIdle(&transport2), true); + QCOMPARE(publisher->isClientIdle(&transport1), false); + QTRY_COMPARE_WITH_TIMEOUT(transport2.messagesSent().size(), 2u, 2000); + QCOMPARE(transport1.messagesSent().size(), 1u); + publisher->setClientIsIdle(true, &transport1); + QTRY_COMPARE_WITH_TIMEOUT(transport1.messagesSent().size(), 2u, 2000); + QCOMPARE(publisher->isClientIdle(&transport1), false); + QCOMPARE(publisher->isClientIdle(&transport2), false); +} + class FunctionWrapper : public QObject { Q_OBJECT @@ -1082,7 +1124,7 @@ void TestWebChannel::benchInitializeClients() publisher->propertyUpdatesInitialized = false; publisher->signalToPropertyMap.clear(); - publisher->signalHandler.clear(); + publisher->signalHandlers.clear(); } } @@ -1107,7 +1149,7 @@ void TestWebChannel::benchPropertyUpdates() obj->change(); } - channel.d_func()->publisher->clientIsIdle = true; + channel.d_func()->publisher->setClientIsIdle(true, m_dummyTransport); channel.d_func()->publisher->sendPendingPropertyUpdates(); } } diff --git a/qtwebchannel/tests/auto/webchannel/tst_webchannel.h b/qtwebchannel/tests/auto/webchannel/tst_webchannel.h index eae21f4..dd4e690 100644 --- a/qtwebchannel/tests/auto/webchannel/tst_webchannel.h +++ b/qtwebchannel/tests/auto/webchannel/tst_webchannel.h @@ -348,6 +348,7 @@ private slots: void testJsonToVariant(); void testInfiniteRecursion(); void testAsyncObject(); + void testPropertyMultipleTransports(); void testDeletionDuringMethodInvocation_data(); void testDeletionDuringMethodInvocation(); Submodule qtwebengine f328054d...3a11b385 (commits not present) Submodule qtwebsockets 6edf8323..2c2b7691: diff --git a/qtwebsockets/src/websockets/qwebsocket_p.cpp b/qtwebsockets/src/websockets/qwebsocket_p.cpp index cf3087f..0dd0fa6 100644 --- a/qtwebsockets/src/websockets/qwebsocket_p.cpp +++ b/qtwebsockets/src/websockets/qwebsocket_p.cpp @@ -1100,6 +1100,8 @@ void QWebSocketPrivate::processHandshake(QTcpSocket *pSocket) m_handshakeState = AllDoneState; setErrorString(errorDescription); Q_EMIT q->error(QAbstractSocket::ConnectionRefusedError); + if (m_pSocket->state() != QAbstractSocket::UnconnectedState) + m_pSocket->disconnectFromHost(); } } diff --git a/qtwebsockets/src/websockets/qwebsocketdataprocessor.cpp b/qtwebsockets/src/websockets/qwebsocketdataprocessor.cpp index 2affdd5..95f1194 100644 --- a/qtwebsockets/src/websockets/qwebsocketdataprocessor.cpp +++ b/qtwebsockets/src/websockets/qwebsocketdataprocessor.cpp @@ -273,6 +273,7 @@ void QWebSocketDataProcessor::clear() if (!m_pConverterState) m_pConverterState = new QTextCodec::ConverterState(QTextCodec::ConvertInvalidToNull | QTextCodec::IgnoreHeader); + frame.clear(); } /*!