From: Ivailo Monev Date: Wed, 10 Feb 2021 23:36:04 +0000 (+0200) Subject: reimplement QJsonDocument via Jansson X-Git-Tag: 4.12.0~2571 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=31f76bdcd184b8df449f398960b7d30f5d29e7a8;p=kde%2FKatie.git reimplement QJsonDocument via Jansson Signed-off-by: Ivailo Monev --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 3300fc9ed..ede9a4943 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -215,6 +215,15 @@ set_package_properties(ZSTD PROPERTIES TYPE REQUIRED ) +# v2.0+ required for json_loads() with three arguments +find_package(Jansson 2.0) +set_package_properties(Jansson PROPERTIES + PURPOSE "Required for JSON support" + DESCRIPTION "C library for encoding, decoding and manipulating JSON data" + URL "https://github.com/akheron/jansson" + TYPE REQUIRED +) + # v0.9.8+ required for SHA-224...SHA-512 support find_package(OpenSSL 0.9.8) set_package_properties(OpenSSL PROPERTIES @@ -742,7 +751,6 @@ katie_generate_obsolete(QItemEditorCreatorBase QtGui qitemeditorfactory.h) katie_generate_obsolete(QItemEditorCreator QtGui qitemeditorfactory.h) katie_generate_obsolete(QItemSelection QtGui qitemselectionmodel.h) katie_generate_obsolete(QItemSelectionRange QtGui qitemselectionmodel.h) -katie_generate_obsolete(QJsonParseError QtCore qjsondocument.h) katie_generate_obsolete(QKeyEvent QtGui qevent.h) katie_generate_obsolete(QLatin1Char QtCore qchar.h) katie_generate_obsolete(QLatin1String QtCore qstring.h) diff --git a/appveyor.yml b/appveyor.yml index ef8e08261..cf590168b 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -12,7 +12,7 @@ build_script: sudo apt-get install -qq libpcre3-dev libssl-dev zlib1g-dev libzstd-dev libc6-dev libpng-dev \ libjpeg-dev libtiff-dev libcups2-dev libfreetype6-dev libfontconfig1-dev libdbus-1-dev \ libicu-dev unixodbc-dev libpq-dev libmariadbclient-dev libmariadbd-dev liblz4-dev \ - libsqlite3-dev xorg-dev dbus-x11 + libsqlite3-dev xorg-dev dbus-x11 libjansson-dev cmake . -Wno-dev -DKATIE_TESTS=ON -DKATIE_BENCHMARKS=ON -DKATIE_UTILS=ON -DKATIE_PCH=ON -DCMAKE_UNITY_BUILD=ON diff --git a/cmake/modules/FindJansson.cmake b/cmake/modules/FindJansson.cmake new file mode 100644 index 000000000..da0555cbe --- /dev/null +++ b/cmake/modules/FindJansson.cmake @@ -0,0 +1,32 @@ +# - Try to find Jansson +# Once done this will define +# +# JANSSON_FOUND - system has Jansson +# JANSSON_INCLUDES - the Jansson include directory +# JANSSON_LIBRARIES - the libraries needed to use Jansson +# +# Copyright (C) 2021, Ivailo Monev, +# +# Redistribution and use is allowed according to the terms of the BSD license. + +include(FindPkgConfig) +include(FindPackageHandleStandardArgs) + +pkg_check_modules(PC_JANSSON QUIET jansson) + +find_path(JANSSON_INCLUDES + NAMES jansson.h + HINTS $ENV{JANSSONDIR}/include ${PC_JANSSON_INCLUDEDIR} +) + +find_library(JANSSON_LIBRARIES + NAMES jansson + HINTS $ENV{JANSSONDIR}/lib ${PC_JANSSON_LIBDIR} +) + +find_package_handle_standard_args(Jansson + VERSION_VAR PC_JANSSON_VERSION + REQUIRED_VARS JANSSON_LIBRARIES JANSSON_INCLUDES +) + +mark_as_advanced(JANSSON_INCLUDES JANSSON_LIBRARIES) diff --git a/package/archlinux/PKGBUILD b/package/archlinux/PKGBUILD index 33d2b96f9..2b70b8fed 100644 --- a/package/archlinux/PKGBUILD +++ b/package/archlinux/PKGBUILD @@ -10,8 +10,8 @@ pkgdesc='C++ toolkit derived from the Qt 4.8 framework' arch=('i486' 'i686' 'pentium4' 'x86_64' 'arm') url='https://github.com/fluxer/katie' license=('LGPL' 'BSD') -depends=('libsm' 'libxcursor' 'libxinerama' 'icu' 'libcups' 'libxrandr' 'sqlite' 'fontconfig' - 'xdg-utils') +depends=('libsm' 'libxcursor' 'libxinerama' 'icu' 'libcups' 'libxrandr' 'sqlite' + 'fontconfig' 'xdg-utils' 'jansson') makedepends=('cmake' 'git' 'postgresql' 'mariadb-libs' 'unixodbc' 'unifdef') optdepends=('postgresql-libs: PostgreSQL driver' 'mariadb-libs: MariaDB driver' diff --git a/package/debian/control b/package/debian/control index 3672e6731..9e852ca33 100644 --- a/package/debian/control +++ b/package/debian/control @@ -6,11 +6,12 @@ Vcs-Git: git://github.com/fluxer/katie.git Vcs-browser: https://github.com/fluxer/katie Standards-Version: 4.10.0 Build-Depends: debhelper (>= 9~), libssl-dev, zlib1g-dev, libzstd-dev, - libc6-dev, libpng-dev, libjpeg-dev, libtiff5-dev, libcups2-dev, - libfreetype6-dev, libfontconfig1-dev, libpcre3-dev, libdbus-1-dev, - unixodbc-dev, libicu-dev, libsqlite3-dev, cmake, git, xserver-xorg-dev, - libxinerama-dev, libxrandr-dev, libxrender-dev, libxcursor-dev, libsm-dev, - libpq-dev, libmariadbclient-dev, libmariadbd-dev, unifdef | dpkg + libc6-dev, libjansson-dev, libpng-dev, libjpeg-dev, libtiff5-dev, + libcups2-dev, libfreetype6-dev, libfontconfig1-dev, libpcre3-dev, + libdbus-1-dev, unixodbc-dev, libicu-dev, libsqlite3-dev, cmake, git, + xserver-xorg-dev, libxinerama-dev, libxrandr-dev, libxrender-dev, + libxcursor-dev, libsm-dev, libpq-dev, libmariadbclient-dev, libmariadbd-dev, + unifdef | dpkg Package: katie-runtime Architecture: amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x hurd-i386 diff --git a/package/fedora/katie.spec b/package/fedora/katie.spec index 9e1dd25fa..d2286ebc5 100644 --- a/package/fedora/katie.spec +++ b/package/fedora/katie.spec @@ -7,7 +7,7 @@ Summary: C++ toolkit derived from the Qt 4.8 framework License: BSD and LGPLv2+ URL: https://github.com/fluxer/katie -BuildRequires: gcc-c++ cmake libicu-devel libzstd-devel zlib-devel libsq3-devel libpng-devel freetype-devel pcre-devel openssl-devel libX11-devel libXinerama-devel libXrandr-devel libXrender-devel libXfixes-devel libXcursor-devel libSM-devel libICE-devel dbus-devel libtiff-devel libjpeg-turbo-devel fontconfig-devel cups-devel libiodbc-devel libpq-devel mariadb-embedded-devel unifdef +BuildRequires: gcc-c++ cmake libicu-devel libzstd-devel jansson-devel zlib-devel libsq3-devel libpng-devel freetype-devel pcre-devel openssl-devel libX11-devel libXinerama-devel libXrandr-devel libXrender-devel libXfixes-devel libXcursor-devel libSM-devel libICE-devel dbus-devel libtiff-devel libjpeg-turbo-devel fontconfig-devel cups-devel libiodbc-devel libpq-devel mariadb-embedded-devel unifdef Requires: xdg-utils Requires(post): /sbin/ldconfig Requires(postun): /sbin/ldconfig diff --git a/package/freebsd/Makefile b/package/freebsd/Makefile index 7f9b0daba..1fb4b86c9 100644 --- a/package/freebsd/Makefile +++ b/package/freebsd/Makefile @@ -19,10 +19,12 @@ USES = compiler:c++11-lang pkgconfig cmake ssl xorg sqlite:3 desktop-file-utils USE_XORG = xinerama xrandr xrender xfixes xcursor xext sm ice USE_LDCONFIG = yes RUN_DEPENDS = xdg-open:devel/xdg-utils -LIB_DEPENDS = libzstd.so:archivers/zstd libicuuc.so:devel/icu libicui18n.so:devel/icu \ - libpcre.so:devel/pcre libpng.so:graphics/png libjpeg.so:graphics/jpeg-turbo \ - libtiff.so:graphics/tiff libfreetype.so:print/freetype2 \ - libfontconfig.so:x11-fonts/fontconfig libdbus-1.so:devel/dbus libcups.so:print/cups \ +LIB_DEPENDS = libzstd.so:archivers/zstd libicuuc.so:devel/icu \ + libicui18n.so:devel/icu libjansson.so:devel/jansson \ + libpcre.so:devel/pcre libpng.so:graphics/png \ + libjpeg.so:graphics/jpeg-turbo libtiff.so:graphics/tiff \ + libfreetype.so:print/freetype2 libfontconfig.so:x11-fonts/fontconfig \ + libdbus-1.so:devel/dbus libcups.so:print/cups \ libiodbc.so:databases/libiodbc CMAKE_ARGS = -DKATIE_TOOLS_SUFFIX="-katie" diff --git a/package/freebsd/pkg-plist b/package/freebsd/pkg-plist index a3bcf7977..2c98d5490 100644 --- a/package/freebsd/pkg-plist +++ b/package/freebsd/pkg-plist @@ -71,11 +71,7 @@ include/katie/QtCore/QHashNode include/katie/QtCore/QIODevice include/katie/QtCore/QIncompatibleFlag include/katie/QtCore/QInternal -include/katie/QtCore/QJsonArray include/katie/QtCore/QJsonDocument -include/katie/QtCore/QJsonObject -include/katie/QtCore/QJsonParseError -include/katie/QtCore/QJsonValue include/katie/QtCore/QLatin1Char include/katie/QtCore/QLatin1String include/katie/QtCore/QLibrary @@ -256,10 +252,7 @@ include/katie/QtCore/qglobal.h include/katie/QtCore/qhash.h include/katie/QtCore/qiodevice.h include/katie/QtCore/qiterator.h -include/katie/QtCore/qjsonarray.h include/katie/QtCore/qjsondocument.h -include/katie/QtCore/qjsonobject.h -include/katie/QtCore/qjsonvalue.h include/katie/QtCore/qlibrary.h include/katie/QtCore/qlibraryinfo.h include/katie/QtCore/qline.h diff --git a/package/netbsd/Makefile b/package/netbsd/Makefile index d57b50f3a..9be4151fb 100644 --- a/package/netbsd/Makefile +++ b/package/netbsd/Makefile @@ -26,6 +26,7 @@ DEPENDS = xdg-utils-[0-9]*:../../misc/xdg-utils .include "../../sysutils/desktop-file-utils/desktopdb.mk" .include "../../archivers/zstd/buildlink3.mk" +.include "../../textproc/jansson/buildlink3.mk" .include "../../textproc/icu/buildlink3.mk" .include "../../devel/pcre/buildlink3.mk" .include "../../devel/zlib/buildlink3.mk" diff --git a/package/netbsd/PLIST.common b/package/netbsd/PLIST.common index 05624ecd6..6c2962aac 100644 --- a/package/netbsd/PLIST.common +++ b/package/netbsd/PLIST.common @@ -74,11 +74,7 @@ include/katie/QtCore/QHashNode include/katie/QtCore/QIODevice include/katie/QtCore/QIncompatibleFlag include/katie/QtCore/QInternal -include/katie/QtCore/QJsonArray include/katie/QtCore/QJsonDocument -include/katie/QtCore/QJsonObject -include/katie/QtCore/QJsonParseError -include/katie/QtCore/QJsonValue include/katie/QtCore/QLatin1Char include/katie/QtCore/QLatin1String include/katie/QtCore/QLibrary @@ -259,10 +255,7 @@ include/katie/QtCore/qglobal.h include/katie/QtCore/qhash.h include/katie/QtCore/qiodevice.h include/katie/QtCore/qiterator.h -include/katie/QtCore/qjsonarray.h include/katie/QtCore/qjsondocument.h -include/katie/QtCore/qjsonobject.h -include/katie/QtCore/qjsonvalue.h include/katie/QtCore/qlibrary.h include/katie/QtCore/qlibraryinfo.h include/katie/QtCore/qline.h diff --git a/package/openbsd/Makefile b/package/openbsd/Makefile index 74b3fe712..6a151d9bd 100644 --- a/package/openbsd/Makefile +++ b/package/openbsd/Makefile @@ -21,9 +21,9 @@ COMPILER = base-clang ports-gcc MODULES = devel/cmake BUILD_DEPENDS = devel/gettext,-tools RUN_DEPENDS = devel/desktop-file-utils devel/xdg-utils -LIB_DEPENDS = archivers/zstd textproc/icu4c devel/pcre graphics/png \ - graphics/jpeg graphics/tiff x11/dbus print/cups,-libs databases/iodbc \ - databases/sqlite3 devel/gettext,-runtime +LIB_DEPENDS = archivers/zstd textproc/icu4c devel/jansson devel/pcre \ + graphics/png graphics/jpeg graphics/tiff x11/dbus print/cups,-libs \ + databases/iodbc databases/sqlite3 devel/gettext,-runtime WANTLIB = ${COMPILER_LIBCXX} ICE SM X11 Xcursor Xext Xfixes Xinerama Xrandr \ Xrender fontconfig freetype zstd icui18n icuuc pcre png jpeg tiff \ dbus-1 cups iodbc sqlite3 intl ssl z c crypto m diff --git a/package/openbsd/pkg/PLIST b/package/openbsd/pkg/PLIST index 3dfa2c7a5..59d303abc 100644 --- a/package/openbsd/pkg/PLIST +++ b/package/openbsd/pkg/PLIST @@ -74,11 +74,7 @@ include/katie/QtCore/QHashNode include/katie/QtCore/QIODevice include/katie/QtCore/QIncompatibleFlag include/katie/QtCore/QInternal -include/katie/QtCore/QJsonArray include/katie/QtCore/QJsonDocument -include/katie/QtCore/QJsonObject -include/katie/QtCore/QJsonParseError -include/katie/QtCore/QJsonValue include/katie/QtCore/QLatin1Char include/katie/QtCore/QLatin1String include/katie/QtCore/QLibrary @@ -259,10 +255,7 @@ include/katie/QtCore/qglobal.h include/katie/QtCore/qhash.h include/katie/QtCore/qiodevice.h include/katie/QtCore/qiterator.h -include/katie/QtCore/qjsonarray.h include/katie/QtCore/qjsondocument.h -include/katie/QtCore/qjsonobject.h -include/katie/QtCore/qjsonvalue.h include/katie/QtCore/qlibrary.h include/katie/QtCore/qlibraryinfo.h include/katie/QtCore/qline.h diff --git a/scripts/incfsck.py b/scripts/incfsck.py index db7e82868..642b38df6 100755 --- a/scripts/incfsck.py +++ b/scripts/incfsck.py @@ -36,7 +36,6 @@ incmap = { 'QHashNode': 'qhash.h', 'QIncompatibleFlag': 'qglobal.h', 'QInternal': 'qnamespace.h', - 'QJsonParseError': 'qjsondocument.h', 'QLatin1Char': 'qchar.h', 'QLatin1String': 'qstring.h', 'QLineF': 'qline.h', diff --git a/scripts/namefsck.py b/scripts/namefsck.py index a88209d50..86de7729c 100755 --- a/scripts/namefsck.py +++ b/scripts/namefsck.py @@ -362,11 +362,7 @@ classlist = [ "QItemSelection", "QItemSelectionModel", "QItemSelectionRange", - "QJsonArray", "QJsonDocument", - "QJsonObject", - "QJsonParseError", - "QJsonValue", "QKeyEvent", "QKeySequence", "QLabel", diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index e9e740278..defff6c07 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -3,6 +3,7 @@ set(EXTRA_CORE_LIBS ${ZLIB_LIBRARIES} ${ICU_LIBRARIES} ${ZSTD_LIBRARIES} + ${JANSSON_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} # libm should be present by default becaue this is C++ m @@ -101,10 +102,7 @@ set(CORE_PUBLIC_HEADERS QBasicTimer QThread QSocketNotifier - QJsonArray QJsonDocument - QJsonObject - QJsonValue ) include_directories( @@ -114,6 +112,7 @@ include_directories( ${ZLIB_INCLUDE_DIRS} ${ICU_INCLUDES} ${ZSTD_INCLUDES} + ${JANSSON_INCLUDES} ) set(CORE_HEADERS @@ -188,13 +187,6 @@ set(CORE_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/io/qfilesystemengine_p.h ${CMAKE_CURRENT_SOURCE_DIR}/io/qfilesystemmetadata_p.h ${CMAKE_CURRENT_SOURCE_DIR}/io/qfilesystemiterator_p.h - ${CMAKE_CURRENT_SOURCE_DIR}/json/qjsonarray.h - ${CMAKE_CURRENT_SOURCE_DIR}/json/qjsondocument.h - ${CMAKE_CURRENT_SOURCE_DIR}/json/qjsonobject.h - ${CMAKE_CURRENT_SOURCE_DIR}/json/qjsonparser_p.h - ${CMAKE_CURRENT_SOURCE_DIR}/json/qjson_p.h - ${CMAKE_CURRENT_SOURCE_DIR}/json/qjsonvalue.h - ${CMAKE_CURRENT_SOURCE_DIR}/json/qjsonwriter_p.h ${CMAKE_CURRENT_SOURCE_DIR}/kernel/qabstracteventdispatcher.h ${CMAKE_CURRENT_SOURCE_DIR}/kernel/qabstractitemmodel.h ${CMAKE_CURRENT_SOURCE_DIR}/kernel/qabstractitemmodel_p.h @@ -255,6 +247,7 @@ set(CORE_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/tools/qdatetime_p.h ${CMAKE_CURRENT_SOURCE_DIR}/tools/qeasingcurve.h ${CMAKE_CURRENT_SOURCE_DIR}/tools/qhash.h + ${CMAKE_CURRENT_SOURCE_DIR}/tools/qjsondocument.h ${CMAKE_CURRENT_SOURCE_DIR}/tools/qline.h ${CMAKE_CURRENT_SOURCE_DIR}/tools/qlinkedlist.h ${CMAKE_CURRENT_SOURCE_DIR}/tools/qlist.h @@ -339,13 +332,6 @@ set(CORE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/io/qprocess_unix.cpp ${CMAKE_CURRENT_SOURCE_DIR}/io/qfilesystemiterator_unix.cpp ${CMAKE_CURRENT_SOURCE_DIR}/io/qstandardpaths_unix.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/json/qjsonarray.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/json/qjson.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/json/qjsondocument.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/json/qjsonobject.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/json/qjsonparser.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/json/qjsonvalue.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/json/qjsonwriter.cpp ${CMAKE_CURRENT_SOURCE_DIR}/kernel/qabstracteventdispatcher.cpp ${CMAKE_CURRENT_SOURCE_DIR}/kernel/qabstractitemmodel.cpp ${CMAKE_CURRENT_SOURCE_DIR}/kernel/qbasictimer.cpp @@ -390,6 +376,7 @@ set(CORE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/tools/qeasingcurve.cpp ${CMAKE_CURRENT_SOURCE_DIR}/tools/qelapsedtimer.cpp ${CMAKE_CURRENT_SOURCE_DIR}/tools/qhash.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/tools/qjsondocument.cpp ${CMAKE_CURRENT_SOURCE_DIR}/tools/qline.cpp ${CMAKE_CURRENT_SOURCE_DIR}/tools/qlinkedlist.cpp ${CMAKE_CURRENT_SOURCE_DIR}/tools/qlist.cpp diff --git a/src/core/io/qsettings.cpp b/src/core/io/qsettings.cpp index 51cdb60d4..7582952e3 100644 --- a/src/core/io/qsettings.cpp +++ b/src/core/io/qsettings.cpp @@ -23,7 +23,6 @@ #include "qplatformdefs.h" #include "qsettings.h" #include "qjsondocument.h" -#include "qjsonobject.h" #include "qstandardpaths.h" #include "qmutex.h" #include "qcoreapplication.h" @@ -63,14 +62,13 @@ static bool json_settings_read(QIODevice &device, QSettings::SettingsMap &map) return false; } - QJsonParseError error; - QJsonDocument jsondoc = QJsonDocument::fromJson(data, &error); + QJsonDocument jsondoc = QJsonDocument::fromJson(data); if (Q_UNLIKELY(jsondoc.isNull())) { - qWarning("json_settings_read: %s", error.errorString().toUtf8().constData()); + qWarning("json_settings_read: %s", jsondoc.errorString().toUtf8().constData()); return false; } - map = jsondoc.object().toVariantMap(); + map = jsondoc.toVariant().toMap(); // qDebug() << "json_settings_read" << jsondoc.toJson(); return true; @@ -78,7 +76,7 @@ static bool json_settings_read(QIODevice &device, QSettings::SettingsMap &map) static bool json_settings_write(QIODevice &device, const QSettings::SettingsMap &map) { - QJsonDocument jsondoc = QJsonDocument(QJsonObject::fromVariantMap(map)); + QJsonDocument jsondoc = QJsonDocument::fromVariant(map); QByteArray jsondata = jsondoc.toJson(); if (Q_UNLIKELY(jsondoc.isNull() || jsondata.isNull())) { return false; diff --git a/src/core/json/qjson.cpp b/src/core/json/qjson.cpp deleted file mode 100644 index 292131db1..000000000 --- a/src/core/json/qjson.cpp +++ /dev/null @@ -1,438 +0,0 @@ -/**************************************************************************** -** -** Copyright (c) 2012-2015 Barbara Geller -** Copyright (c) 2012-2015 Ansel Sermersheim -** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies). -** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies). -** Copyright (C) 2016 Ivailo Monev -** -** This file is part of the QtCore module of the Katie Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qjson_p.h" -#include "qalgorithms.h" - -QT_BEGIN_NAMESPACE - -namespace QJsonPrivate { - -#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN -#define Q_TO_LITTLE_ENDIAN(x) (x) -#else -#define Q_TO_LITTLE_ENDIAN(x) ( ((x & 0xff) << 24) | ((x & 0xff00) << 8) | ((x & 0xff0000) >> 8) | ((x & 0xff000000) >> 24) ) -#endif - -static const Base emptyArray = { { Q_TO_LITTLE_ENDIAN(sizeof(Base)) }, { 0 }, { 0 } }; -static const Base emptyObject = { { Q_TO_LITTLE_ENDIAN(sizeof(Base)) }, { 0 }, { 0 } }; - - -void Data::compact() -{ - Q_ASSERT(sizeof(Value) == sizeof(offset)); - - if (!compactionCounter) { - return; - } - - Base *base = header->root(); - int reserve = 0; - if (base->is_object) { - Object *o = static_cast(base); - for (int i = 0; i < (int)o->length; ++i) { - reserve += o->entryAt(i)->usedStorage(o); - } - } else { - Array *a = static_cast(base); - for (int i = 0; i < (int)a->length; ++i) { - reserve += (*a)[i].usedStorage(a); - } - } - - int size = sizeof(Base) + reserve + base->length * sizeof(offset); - int alloc = sizeof(Header) + size; - Header *h = (Header *) malloc(alloc); - h->tag = QJsonDocument::BinaryFormatTag; - h->version = 1; - Base *b = h->root(); - b->size = size; - b->is_object = header->root()->is_object; - b->length = base->length; - b->tableOffset = reserve + sizeof(Array); - - int offset = sizeof(Base); - if (b->is_object) { - Object *o = static_cast(base); - Object *no = static_cast(b); - - for (int i = 0; i < (int)o->length; ++i) { - no->table()[i] = offset; - - const Entry *e = o->entryAt(i); - Entry *ne = no->entryAt(i); - int s = e->size(); - memcpy(ne, e, s); - offset += s; - int dataSize = e->value.usedStorage(o); - if (dataSize) { - memcpy((char *)no + offset, e->value.data(o), dataSize); - ne->value.value = offset; - offset += dataSize; - } - } - } else { - Array *a = static_cast(base); - Array *na = static_cast(b); - - for (int i = 0; i < (int)a->length; ++i) { - const Value &v = (*a)[i]; - Value &nv = (*na)[i]; - nv = v; - int dataSize = v.usedStorage(a); - if (dataSize) { - memcpy((char *)na + offset, v.data(a), dataSize); - nv.value = offset; - offset += dataSize; - } - } - } - Q_ASSERT(offset == (int)b->tableOffset); - - free(header); - header = h; - this->alloc = alloc; - compactionCounter = 0; -} - -bool Data::valid() const -{ - if (header->tag != QJsonDocument::BinaryFormatTag || header->version != 1u) { - return false; - } - - bool res = false; - if (header->root()->is_object) { - res = static_cast(header->root())->isValid(); - } else { - res = static_cast(header->root())->isValid(); - } - - return res; -} - - -int Base::reserveSpace(uint dataSize, int posInTable, uint numItems, bool replace) -{ - Q_ASSERT(posInTable >= 0 && posInTable <= (int)length); - if (size + dataSize >= Value::MaxSize) { - qWarning("QJson: Document too large to store in data structure %d %d %d", (uint)size, dataSize, Value::MaxSize); - return 0; - } - - offset off = tableOffset; - // move table to new position - if (replace) { - memmove((char *)(table()) + dataSize, table(), length * sizeof(offset)); - } else { - memmove((char *)(table() + posInTable + numItems) + dataSize, table() + posInTable, - (length - posInTable)*sizeof(offset)); - memmove((char *)(table()) + dataSize, table(), posInTable * sizeof(offset)); - } - tableOffset += dataSize; - for (int i = 0; i < (int)numItems; ++i) { - table()[posInTable + i] = off; - } - size += dataSize; - if (!replace) { - length += numItems; - size += numItems * sizeof(offset); - } - return off; -} - -void Base::removeItems(int pos, int numItems) -{ - Q_ASSERT(pos >= 0 && pos <= (int)length); - if (pos + numItems < (int)length) { - memmove(table() + pos, table() + pos + numItems, (length - pos - numItems)*sizeof(offset)); - } - length -= numItems; -} - -int Object::indexOf(const QString &key, bool *exists) -{ - int min = 0; - int n = length; - while (n > 0) { - int half = n >> 1; - int middle = min + half; - if (*entryAt(middle) >= key) { - n = half; - } else { - min = middle + 1; - n -= half + 1; - } - } - if (min < (int)length && *entryAt(min) == key) { - *exists = true; - return min; - } - *exists = false; - return min; -} - -bool Object::isValid() const -{ - if (tableOffset + length * sizeof(offset) > size) { - return false; - } - - for (uint i = 0; i < length; ++i) { - offset entryOffset = table()[i]; - if (entryOffset + sizeof(Entry) >= tableOffset) { - return false; - } - Entry *e = entryAt(i); - int s = e->size(); - if (table()[i] + s > tableOffset) { - return false; - } - if (!e->value.isValid(this)) { - return false; - } - } - return true; -} - - - -bool Array::isValid() const -{ - if (tableOffset + length * sizeof(offset) > size) { - return false; - } - - for (uint i = 0; i < length; ++i) { - if (!at(i).isValid(this)) { - return false; - } - } - return true; -} - - -bool Entry::operator ==(const QString &key) const -{ - if (value.latinKey) { - return (shallowLatin1Key() == key); - } else { - return (shallowKey() == key); - } -} - -bool Entry::operator ==(const Entry &other) const -{ - if (value.latinKey) { - if (other.value.latinKey) { - return shallowLatin1Key() == other.shallowLatin1Key(); - } - return shallowLatin1Key() == other.shallowKey(); - } else if (other.value.latinKey) { - return shallowKey() == other.shallowLatin1Key(); - } - return shallowKey() == other.shallowKey(); -} - -bool Entry::operator >=(const Entry &other) const -{ - if (value.latinKey) { - if (other.value.latinKey) { - return shallowLatin1Key() >= other.shallowLatin1Key(); - } - return shallowLatin1Key() >= other.shallowKey(); - } else if (other.value.latinKey) { - return shallowKey() >= other.shallowLatin1Key(); - } - return shallowKey() >= other.shallowKey(); -} - - -int Value::usedStorage(const Base *b) const -{ - int s = 0; - switch (type) { - case QJsonValue::Double: - if (latinOrIntValue) { - break; - } - s = sizeof(double); - break; - case QJsonValue::String: { - char *d = data(b); - if (latinOrIntValue) { - s = sizeof(ushort) + qFromLittleEndian(*(ushort *)d); - } else { - s = sizeof(int) + sizeof(ushort) * qFromLittleEndian(*(int *)d); - } - break; - } - case QJsonValue::Array: - case QJsonValue::Object: - s = base(b)->size; - break; - case QJsonValue::Null: - case QJsonValue::Bool: - default: - break; - } - return alignedSize(s); -} - -bool Value::isValid(const Base *b) const -{ - int offset = 0; - switch (type) { - case QJsonValue::Double: - if (latinOrIntValue) { - break; - } - // fall through - case QJsonValue::String: - case QJsonValue::Array: - case QJsonValue::Object: - offset = value; - break; - case QJsonValue::Null: - case QJsonValue::Bool: - default: - break; - } - - if (!offset) { - return true; - } - if (offset + sizeof(uint) > b->tableOffset) { - return false; - } - - int s = usedStorage(b); - if (!s) { - return true; - } - if (s < 0 || offset + s > (int)b->tableOffset) { - return false; - } - if (type == QJsonValue::Array) { - return static_cast(base(b))->isValid(); - } - if (type == QJsonValue::Object) { - return static_cast(base(b))->isValid(); - } - return true; -} - -/*! - \internal - */ -int Value::requiredStorage(QJsonValue &v, bool *compressed) -{ - *compressed = false; - switch (v.t) { - case QJsonValue::Double: - if (QJsonPrivate::compressedNumber(v.dbl) != INT_MAX) { - *compressed = true; - return 0; - } - return sizeof(double); - case QJsonValue::String: { - QString s = v.toString(); - *compressed = QJsonPrivate::useCompressed(s); - return QJsonPrivate::qStringSize(s, *compressed); - } - case QJsonValue::Array: - case QJsonValue::Object: - if (v.d && v.d->compactionCounter) { - v.detach(); - v.d->compact(); - v.base = static_cast(v.d->header->root()); - } - return v.base ? v.base->size : sizeof(QJsonPrivate::Base); - case QJsonValue::Undefined: - case QJsonValue::Null: - case QJsonValue::Bool: - break; - } - return 0; -} - -/*! - \internal - */ -uint Value::valueToStore(const QJsonValue &v, uint offset) -{ - switch (v.t) { - case QJsonValue::Undefined: - case QJsonValue::Null: - break; - case QJsonValue::Bool: - return v.b; - case QJsonValue::Double: { - int c = QJsonPrivate::compressedNumber(v.dbl); - if (c != INT_MAX) { - return c; - } - } - // fall through - case QJsonValue::String: - case QJsonValue::Array: - case QJsonValue::Object: - return offset; - } - return 0; -} - -/*! - \internal - */ -void Value::copyData(const QJsonValue &v, char *dest, bool compressed) -{ - switch (v.t) { - case QJsonValue::Double: - if (!compressed) { - qToLittleEndian(v.dbl, (uchar *)dest); - } - break; - case QJsonValue::String: { - QString str = v.toString(); - QJsonPrivate::copyString(dest, str, compressed); - break; - } - case QJsonValue::Array: - case QJsonValue::Object: { - const QJsonPrivate::Base *b = v.base; - if (!b) { - b = (v.t == QJsonValue::Array ? &emptyArray : &emptyObject); - } - memcpy(dest, b, b->size); - break; - } - default: - break; - } -} - -} // namespace QJsonPrivate - -QT_END_NAMESPACE diff --git a/src/core/json/qjson_p.h b/src/core/json/qjson_p.h deleted file mode 100644 index 1cc5c2726..000000000 --- a/src/core/json/qjson_p.h +++ /dev/null @@ -1,849 +0,0 @@ -/**************************************************************************** -** -** Copyright (c) 2012-2015 Barbara Geller -** Copyright (c) 2012-2015 Ansel Sermersheim -** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies). -** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies). -** Copyright (C) 2016 Ivailo Monev -** -** This file is part of the QtCore module of the Katie Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QJSON_P_H -#define QJSON_P_H - -#include "qjsonobject.h" -#include "qjsonvalue.h" -#include "qjsondocument.h" -#include "qjsonarray.h" -#include "qatomic.h" -#include "qstring.h" -#include "qendian.h" -#include "qnumeric.h" -#include -#include - -QT_BEGIN_NAMESPACE - -/* - This defines a binary data structure for Json data. The data structure is optimised for fast reading - and minimum allocations. The whole data structure can be mmap'ed and used directly. - - In most cases the binary structure is not as space efficient as a utf8 encoded text representation, but - much faster to access. - - The size requirements are: - - String: - Latin1 data: 2 bytes header + string.length() - Full Unicode: 4 bytes header + 2*(string.length()) - - Values: 4 bytes + size of data (size can be 0 for some data) - bool: 0 bytes - double: 8 bytes (0 if integer with less than 27bits) - string: see above - array: size of array - object: size of object - Array: 12 bytes + 4*length + size of Value data - Object: 12 bytes + 8*length + size of Key Strings + size of Value data - - For an example such as - - { // object: 12 + 5*8 = 52 - "firstName": "John", // key 12, value 8 = 20 - "lastName" : "Smith", // key 12, value 8 = 20 - "age" : 25, // key 8, value 0 = 8 - "address" : // key 12, object below = 140 - { // object: 12 + 4*8 - "streetAddress": "21 2nd Street", // key 16, value 16 - "city" : "New York", // key 8, value 12 - "state" : "NY", // key 8, value 4 - "postalCode" : "10021" // key 12, value 8 - }, // object total: 128 - "phoneNumber": // key: 16, value array below = 172 - [ // array: 12 + 2*4 + values below: 156 - { // object 12 + 2*8 - "type" : "home", // key 8, value 8 - "number": "212 555-1234" // key 8, value 16 - }, // object total: 68 - { // object 12 + 2*8 - "type" : "fax", // key 8, value 8 - "number": "646 555-4567" // key 8, value 16 - } // object total: 68 - ] // array total: 156 - } // great total: 412 bytes - - The uncompressed text file used roughly 500 bytes, so in this case we end up using about - the same space as the text representation. - - Other measurements have shown a slightly bigger binary size than a compact text - representation where all possible whitespace was stripped out. -*/ -namespace QJsonPrivate { - -class Array; -class Object; -class Value; -class Entry; - -template -class q_littleendian -{ - public: - T val; - - q_littleendian &operator =(T i) { - val = qToLittleEndian(i); - return *this; - } - operator T() const { - return qFromLittleEndian(val); - } - - bool operator ==(T i) { - return qFromLittleEndian(val) == i; - } - bool operator !=(T i) { - return qFromLittleEndian(val) != i; - } - bool operator ==(q_littleendian i) { - return val == i.val; - } - bool operator !=(q_littleendian i) { - return val != i.val; - } - bool operator <(T i) { - return qFromLittleEndian(val) < i; - } - bool operator >(T i) { - return qFromLittleEndian(val) > i; - } - bool operator <=(T i) { - return qFromLittleEndian(val) <= i; - } - bool operator >=(T i) { - return qFromLittleEndian(val) >= i; - } - q_littleendian &operator +=(T i) { - val = qToLittleEndian(qFromLittleEndian(val) + i); - return *this; - } -}; - -typedef q_littleendian qle_short; -typedef q_littleendian qle_ushort; -typedef q_littleendian qle_int; -typedef q_littleendian qle_uint; - -template -class qle_bitfield -{ - public: - uint val; - - enum { - mask = ((1u << width) - 1) << pos - }; - - void operator =(uint t) { - uint i = qFromLittleEndian(val); - i &= ~mask; - i |= t << pos; - val = qToLittleEndian(i); - } - operator uint() const { - uint t = qFromLittleEndian(val); - t &= mask; - t >>= pos; - return t; - } - bool operator !() const { - return !operator uint(); - } - - bool operator ==(uint t) { - return uint(*this) == t; - } - bool operator !=(uint t) { - return uint(*this) != t; - } - bool operator <(uint t) { - return uint(*this) < t; - } - bool operator >(uint t) { - return uint(*this) > t; - } - bool operator <=(uint t) { - return uint(*this) <= t; - } - bool operator >=(uint t) { - return uint(*this) >= t; - } - qle_bitfield &operator +=(uint i) { - *this = (uint(*this) + i); - return *this; - } - qle_bitfield &operator -=(uint i) { - *this = (uint(*this) - i); - return *this; - } -}; - -template -class qle_signedbitfield -{ - public: - uint val; - - enum { - mask = ((1u << width) - 1) << pos - }; - - void operator =(int t) { - uint i = qFromLittleEndian(val); - i &= ~mask; - i |= t << pos; - val = qToLittleEndian(i); - } - operator int() const { - uint i = qFromLittleEndian(val); - i <<= 32 - width - pos; - int t = (int) i; - t >>= pos; - return t; - } - bool operator !() const { - return !operator int(); - } - - bool operator ==(int t) { - return int(*this) == t; - } - bool operator !=(int t) { - return int(*this) != t; - } - bool operator <(int t) { - return int(*this) < t; - } - bool operator >(int t) { - return int(*this) > t; - } - bool operator <=(int t) { - return int(*this) <= t; - } - bool operator >=(int t) { - return int(*this) >= t; - } - qle_signedbitfield &operator +=(int i) { - *this = (int(*this) + i); - return *this; - } - qle_signedbitfield &operator -=(int i) { - *this = (int(*this) - i); - return *this; - } -}; - -typedef qle_uint offset; - -// round the size up to the next 4 byte boundary -inline int alignedSize(int size) -{ - return (size + 3) & ~3; -} - -static inline bool useCompressed(const QString &s) -{ - if (s.length() >= 0x8000) { - return false; - } - const ushort *uc = (const ushort *)s.constData(); - const ushort *e = uc + s.length(); - while (uc < e) { - if (*uc > 0xff) { - return false; - } - ++uc; - } - return true; -} - -static inline int qStringSize(const QString &string, bool compress) -{ - int l = 2 + string.length(); - if (!compress) { - l *= 2; - } - return alignedSize(l); -} - -// returns INT_MAX if it can't compress it into 28 bits -static inline int compressedNumber(double d) -{ - // this relies on details of how ieee floats are represented - const int exponent_off = 52; - const quint64 fraction_mask = 0x000fffffffffffffull; - const quint64 exponent_mask = 0x7ff0000000000000ull; - - quint64 val; - memcpy (&val, &d, sizeof(double)); - int exp = (int)((val & exponent_mask) >> exponent_off) - 1023; - if (exp < 0 || exp > 25) { - return INT_MAX; - } - - quint64 non_int = val & (fraction_mask >> exp); - if (non_int) { - return INT_MAX; - } - - bool neg = (val >> 63); - val &= fraction_mask; - val |= ((quint64)1 << 52); - int res = (int)(val >> (52 - exp)); - return neg ? -res : res; -} - -class Latin1String; - -class String -{ - public: - String(const char *data) { - d = (Data *)data; - } - - struct Data { - qle_int length; - qle_ushort utf16[1]; - }; - - Data *d; - - inline String &operator=(const QString &str) { - d->length = str.length(); -#if Q_BYTE_ORDER == Q_BIG_ENDIAN - const qle_ushort *uc = (const qle_ushort *)str.unicode(); - for (int i = 0; i < str.length(); ++i) { - d->utf16[i] = uc[i]; - } -#else - memcpy(d->utf16, str.unicode(), str.length()*sizeof(ushort)); -#endif - if (str.length() & 1) { - d->utf16[str.length()] = 0; - } - return *this; - } - - inline bool operator ==(const QString &str) const { - int slen = str.length(); - int l = d->length; - if (slen != l) { - return false; - } - const ushort *s = (const ushort *)str.constData(); - const qle_ushort *a = d->utf16; - const ushort *b = s; - while (l-- && *a == *b) { - a++, b++; - } - return (l == -1); - } - inline bool operator !=(const QString &str) const { - return !operator ==(str); - } - inline bool operator >=(const QString &str) const { - // ### - return toString() >= str; - } - - inline bool operator<(const Latin1String &str) const; - inline bool operator>=(const Latin1String &str) const { - return !operator <(str); - } - inline bool operator ==(const Latin1String &str) const; - - inline bool operator ==(const String &str) const { - if (d->length != str.d->length) { - return false; - } - return !memcmp(d->utf16, str.d->utf16, d->length * sizeof(ushort)); - } - inline bool operator<(const String &other) const; - inline bool operator >=(const String &other) const { - return other < *this; - } - - inline QString toString() const { -#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN - return QString((QChar *)d->utf16, d->length); -#else - int l = d->length; - QString str(l, Qt::Uninitialized); - QChar *ch = str.data(); - for (int i = 0; i < l; ++i) { - ch[i] = QChar(d->utf16[i]); - } - return str; -#endif - } - -}; - -class Latin1String -{ - public: - Latin1String(const char *data) { - d = (Data *)data; - } - - struct Data { - qle_short length; - char latin1[1]; - }; - Data *d; - - inline Latin1String &operator=(const QString &str) { - d->length = str.length(); - uchar *l = (uchar *)d->latin1; - const ushort *uc = (const ushort *)str.unicode(); - for (int i = 0; i < str.length(); ++i) { - *l++ = uc[i]; - } - while ((quintptr)l & 0x3) { - *l++ = 0; - } - return *this; - } - - inline bool operator ==(const QString &str) const { - return QLatin1String(d->latin1) == str; - } - inline bool operator !=(const QString &str) const { - return !operator ==(str); - } - inline bool operator >=(const QString &str) const { - // ### - return toString() >= str; - } - - inline bool operator ==(const Latin1String &str) const { - return d->length == str.d->length && !strcmp(d->latin1, str.d->latin1); - } - inline bool operator >=(const Latin1String &str) const { - int l = qMin(d->length, str.d->length); - int val = strncmp(d->latin1, str.d->latin1, l); - if (!val) { - val = d->length - str.d->length; - } - return val >= 0; - } - - inline bool operator ==(const String &str) const { - return (str == *this); - } - inline bool operator >=(const String &str) const { - return (str < *this); - } - - inline QString toString() const { - return QString::fromLatin1(d->latin1, d->length); - } -}; - -inline bool String::operator ==(const Latin1String &str) const -{ - if ((int)d->length != (int)str.d->length) { - return false; - } - const qle_ushort *uc = d->utf16; - const qle_ushort *e = uc + d->length; - const uchar *c = (uchar *)str.d->latin1; - - while (uc < e) { - if (*uc != *c) { - return false; - } - ++uc; - ++c; - } - return true; -} - -inline bool String::operator <(const String &other) const -{ - int alen = d->length; - int blen = other.d->length; - int l = qMin(alen, blen); - qle_ushort *a = d->utf16; - qle_ushort *b = other.d->utf16; - - while (l-- && *a == *b) { - a++, b++; - } - if (l == -1) { - return (alen < blen); - } - return (ushort) * a - (ushort) * b; -} - -inline bool String::operator<(const Latin1String &str) const -{ - const uchar *c = (uchar *) str.d->latin1; - if (!c || *c == 0) { - return false; - } - - const qle_ushort *uc = d->utf16; - const qle_ushort *e = uc + qMin((int)d->length, (int)str.d->length); - - while (uc < e) { - if (*uc != *c) { - break; - } - ++uc; - ++c; - } - return (uc == e ? (int)d->length < (int)str.d->length : (ushort) * uc < *c); - -} - -static inline void copyString(char *dest, const QString &str, bool compress) -{ - if (compress) { - Latin1String string(dest); - string = str; - } else { - String string(dest); - string = str; - } -} - - -/* - Base is the base class for both Object and Array. Both classe work more or less the same way. - The class starts with a header (defined by the struct below), then followed by data (the data for - values in the Array case and Entry's (see below) for objects. - - After the data a table follows (tableOffset points to it) containing Value objects for Arrays, and - offsets from the beginning of the object to Entry's in the case of Object. - - Entry's in the Object's table are lexicographically sorted by key in the table(). This allows the usage - of a binary search over the keys in an Object. - */ -class Base -{ - public: - qle_uint size; - union { - uint _dummy; - qle_bitfield<0, 1> is_object; - qle_bitfield<1, 31> length; - }; - offset tableOffset; - // content follows here - - inline bool isObject() const { - return is_object; - } - inline bool isArray() const { - return !isObject(); - } - - inline offset *table() const { - return (offset *) (((char *) this) + tableOffset); - } - - int reserveSpace(uint dataSize, int posInTable, uint numItems, bool replace); - void removeItems(int pos, int numItems); -}; - -class Object : public Base -{ - public: - Entry *entryAt(int i) const { - return reinterpret_cast(((char *)this) + table()[i]); - } - int indexOf(const QString &key, bool *exists); - - bool isValid() const; -}; - - -class Array : public Base -{ - public: - inline Value at(int i) const; - inline Value &operator [](int i); - - bool isValid() const; -}; - - -class Value -{ - public: - enum { - MaxSize = (1 << 27) - 1 - }; - union { - uint _dummy; - qle_bitfield<0, 3> type; - qle_bitfield<3, 1> latinOrIntValue; - qle_bitfield<4, 1> latinKey; - qle_bitfield<5, 27> value; - qle_signedbitfield<5, 27> int_value; - }; - - inline char *data(const Base *b) const { - return ((char *)b) + value; - } - int usedStorage(const Base *b) const; - - bool toBoolean() const; - double toDouble(const Base *b) const; - QString toString(const Base *b) const; - String asString(const Base *b) const; - Latin1String asLatin1String(const Base *b) const; - Base *base(const Base *b) const; - - bool isValid(const Base *b) const; - - static int requiredStorage(QJsonValue &v, bool *compressed); - static uint valueToStore(const QJsonValue &v, uint offset); - static void copyData(const QJsonValue &v, char *dest, bool compressed); -}; - -inline Value Array::at(int i) const -{ - return *(Value *) (table() + i); -} - -inline Value &Array::operator [](int i) -{ - return *(Value *) (table() + i); -} - - - -class Entry -{ - public: - Value value; - // key - // value data follows key - - int size() const { - int s = sizeof(Entry); - if (value.latinKey) { - s += sizeof(ushort) + qFromLittleEndian(*(ushort *) ((const char *)this + sizeof(Entry))); - } else { - s += sizeof(uint) + qFromLittleEndian(*(int *) ((const char *)this + sizeof(Entry))); - } - return alignedSize(s); - } - - int usedStorage(Base *b) const { - return size() + value.usedStorage(b); - } - - String shallowKey() const { - Q_ASSERT(!value.latinKey); - return String((const char *)this + sizeof(Entry)); - } - Latin1String shallowLatin1Key() const { - Q_ASSERT(value.latinKey); - return Latin1String((const char *)this + sizeof(Entry)); - } - QString key() const { - if (value.latinKey) { - return shallowLatin1Key().toString(); - } - return shallowKey().toString(); - } - - bool operator ==(const QString &key) const; - inline bool operator !=(const QString &key) const { - return !operator ==(key); - } - inline bool operator >=(const QString &key) const; - - bool operator ==(const Entry &other) const; - bool operator >=(const Entry &other) const; -}; - -inline bool Entry::operator >=(const QString &key) const -{ - if (value.latinKey) { - return (shallowLatin1Key() >= key); - } else { - return (shallowKey() >= key); - } -} - -inline bool operator <(const QString &key, const Entry &e) -{ - return e >= key; -} - - -class Header -{ - public: - qle_uint tag; // 'qbjs' - qle_uint version; // 1 - Base *root() { - return (Base *)(this + 1); - } -}; - - -inline bool Value::toBoolean() const -{ - Q_ASSERT(type == QJsonValue::Bool); - return value != 0; -} - -inline double Value::toDouble(const Base *b) const -{ - Q_ASSERT(type == QJsonValue::Double); - if (latinOrIntValue) { - return int_value; - } - - quint64 i = qFromLittleEndian((const uchar *)b + value); - double d; - memcpy(&d, &i, sizeof(double)); - return d; -} - -inline String Value::asString(const Base *b) const -{ - Q_ASSERT(type == QJsonValue::String && !latinOrIntValue); - return String(data(b)); -} - -inline Latin1String Value::asLatin1String(const Base *b) const -{ - Q_ASSERT(type == QJsonValue::String && latinOrIntValue); - return Latin1String(data(b)); -} - -inline QString Value::toString(const Base *b) const -{ - if (latinOrIntValue) { - return asLatin1String(b).toString(); - } else { - return asString(b).toString(); - } -} - -inline Base *Value::base(const Base *b) const -{ - Q_ASSERT(type == QJsonValue::Array || type == QJsonValue::Object); - return reinterpret_cast(data(b)); -} - -class Data -{ - public: - enum Validation { - Unchecked, - Validated, - Invalid - }; - - QAtomicInt ref; - int alloc; - union { - char *rawData; - Header *header; - }; - uint compactionCounter; - bool ownsData; - - inline Data(char *raw, int a) - : alloc(a), rawData(raw), compactionCounter(0), ownsData(true) { - } - inline Data(int reserved, QJsonValue::Type valueType) - : rawData(0), compactionCounter(0), ownsData(true) { - Q_ASSERT(valueType == QJsonValue::Array || valueType == QJsonValue::Object); - - alloc = sizeof(Header) + sizeof(Base) + reserved + sizeof(offset); - header = (Header *)malloc(alloc); - Q_CHECK_PTR(header); - header->tag = QJsonDocument::BinaryFormatTag; - header->version = 1; - Base *b = header->root(); - b->size = sizeof(Base); - b->is_object = (valueType == QJsonValue::Object); - b->tableOffset = sizeof(Base); - b->length = 0; - } - inline ~Data() { - if (ownsData) { - free(rawData); - } - } - - uint offsetOf(const void *ptr) const { - return (uint)(((char *)ptr - rawData)); - } - - QJsonObject toObject(Object *o) const { - return QJsonObject(const_cast(this), o); - } - - QJsonArray toArray(Array *a) const { - return QJsonArray(const_cast(this), a); - } - - Data *clone(Base *b, int reserve = 0) { - int size = sizeof(Header) + b->size; - if (b == header->root() && ref == 1 && alloc >= size + reserve) { - return this; - } - - if (reserve) { - if (reserve < 128) { - reserve = 128; - } - size = qMax(size + reserve, size * 2); - } - char *raw = (char *)malloc(size); - Q_CHECK_PTR(raw); - memcpy(raw + sizeof(Header), b, b->size); - Header *h = (Header *)raw; - h->tag = QJsonDocument::BinaryFormatTag; - h->version = 1; - Data *d = new Data(raw, size); - d->compactionCounter = (b == header->root()) ? compactionCounter : 0; - return d; - } - - void compact(); - bool valid() const; - - private: - Q_DISABLE_COPY(Data) -}; - -} - -QT_END_NAMESPACE - -#endif // QJSON_P_H diff --git a/src/core/json/qjsonarray.cpp b/src/core/json/qjsonarray.cpp deleted file mode 100644 index cb015904a..000000000 --- a/src/core/json/qjsonarray.cpp +++ /dev/null @@ -1,1117 +0,0 @@ -/**************************************************************************** -** -** Copyright (c) 2012-2015 Barbara Geller -** Copyright (c) 2012-2015 Ansel Sermersheim -** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies). -** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies). -** Copyright (C) 2016 Ivailo Monev -** -** This file is part of the QtCore module of the Katie Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qjsonobject.h" -#include "qjsonarray.h" -#include "qjsonvalue.h" -#include "qstringlist.h" -#include "qvariant.h" -#include "qdebug.h" -#include "qjsonwriter_p.h" -#include "qjson_p.h" - -QT_BEGIN_NAMESPACE - -/*! - \class QJsonArray - \inmodule QtCore - \ingroup json - \reentrant - \since 4.9 - - \brief The QJsonArray class encapsulates a JSON array. - - A JSON array is a list of values. The list can be manipulated by inserting and - removing QJsonValue's from the array. - - A QJsonArray can be converted to and from a QVariantList. You can query the - number of entries with size(), insert(), and remove() entries from it - and iterate over its content using the standard C++ iterator pattern. - - QJsonArray is an implicitly shared class and shares the data with the document - it has been created from as long as it is not being modified. - - You can convert the array to and from text based JSON through QJsonDocument. -*/ - -/*! - \typedef QJsonArray::Iterator - - Qt-style synonym for QJsonArray::iterator. -*/ - -/*! - \typedef QJsonArray::ConstIterator - - Qt-style synonym for QJsonArray::const_iterator. -*/ - -/*! - \typedef QJsonArray::size_type - - Typedef for int. Provided for STL compatibility. -*/ - -/*! - \typedef QJsonArray::value_type - - Typedef for QJsonValue. Provided for STL compatibility. -*/ - -/*! - \typedef QJsonArray::difference_type - - Typedef for int. Provided for STL compatibility. -*/ - -/*! - \typedef QJsonArray::pointer - - Typedef for QJsonValue *. Provided for STL compatibility. -*/ - -/*! - \typedef QJsonArray::const_pointer - - Typedef for const QJsonValue *. Provided for STL compatibility. -*/ - -/*! - \typedef QJsonArray::reference - - Typedef for QJsonValue &. Provided for STL compatibility. -*/ - -/*! - \typedef QJsonArray::const_reference - - Typedef for const QJsonValue &. Provided for STL compatibility. -*/ - -/*! - Creates an empty array. - */ -QJsonArray::QJsonArray() - : d(0), a(0) -{ -} - -/*! - \internal - */ -QJsonArray::QJsonArray(QJsonPrivate::Data *data, QJsonPrivate::Array *array) - : d(data), a(array) -{ - Q_ASSERT(data); - Q_ASSERT(array); - d->ref.ref(); -} - -/*! - Deletes the array. - */ -QJsonArray::~QJsonArray() -{ - if (d && !d->ref.deref()) { - delete d; - } -} - -/*! - Creates a copy of \a other. - - Since QJsonArray is implicitly shared, the copy is shallow - as long as the object doesn't get modified. - */ -QJsonArray::QJsonArray(const QJsonArray &other) -{ - d = other.d; - a = other.a; - if (d) { - d->ref.ref(); - } -} - -/*! - Assigns \a other to this array. - */ -QJsonArray &QJsonArray::operator =(const QJsonArray &other) -{ - if (d != other.d) { - if (d && !d->ref.deref()) { - delete d; - } - d = other.d; - if (d) { - d->ref.ref(); - } - } - a = other.a; - - return *this; -} - -/*! - Converts the string list \a list to a QJsonArray. - - The values in \a list will be converted to JSON values. - - \sa toVariantList(), QJsonValue::fromVariant() - */ -QJsonArray QJsonArray::fromStringList(const QStringList &list) -{ - QJsonArray array; - for (QStringList::const_iterator it = list.constBegin(); it != list.constEnd(); ++it) { - array.append(QJsonValue(*it)); - } - return array; -} - -/*! - Converts the variant list \a list to a QJsonArray. - - The QVariant values in \a list will be converted to JSON values. - - \sa toVariantList(), QJsonValue::fromVariant() - */ -QJsonArray QJsonArray::fromVariantList(const QVariantList &list) -{ - QJsonArray array; - for (QVariantList::const_iterator it = list.constBegin(); it != list.constEnd(); ++it) { - array.append(QJsonValue::fromVariant(*it)); - } - return array; -} - -/*! - Converts this object to a QVariantList. - - Returns the created map. - */ -QVariantList QJsonArray::toVariantList() const -{ - QVariantList list; - - if (a) { - list.reserve(a->length); - for (int i = 0; i < (int)a->length; ++i) { - list.append(QJsonValue(d, a, a->at(i)).toVariant()); - } - } - return list; -} - - -/*! - Returns the number of values stored in the array. - */ -int QJsonArray::size() const -{ - if (!d) { - return 0; - } - - return (int)a->length; -} - -/*! - \fn QJsonArray::count() const - - Same as size(). - - \sa size() -*/ - -/*! - Returns \c true if the object is empty. This is the same as size() == 0. - - \sa size() - */ -bool QJsonArray::isEmpty() const -{ - if (!d) { - return true; - } - - return !a->length; -} - -/*! - Returns a QJsonValue representing the value for index \a i. - - The returned QJsonValue is \c Undefined, if \a i is out of bounds. - - */ -QJsonValue QJsonArray::at(int i) const -{ - if (!a || i < 0 || i >= (int)a->length) { - return QJsonValue(QJsonValue::Undefined); - } - - return QJsonValue(d, a, a->at(i)); -} - -/*! - Returns the first value stored in the array. - - Same as \c at(0). - - \sa at() - */ -QJsonValue QJsonArray::first() const -{ - return at(0); -} - -/*! - Returns the last value stored in the array. - - Same as \c{at(size() - 1)}. - - \sa at() - */ -QJsonValue QJsonArray::last() const -{ - return at(a ? (a->length - 1) : 0); -} - -/*! - Inserts \a value at the beginning of the array. - - This is the same as \c{insert(0, value)} and will prepend \a value to the array. - - \sa append(), insert() - */ -void QJsonArray::prepend(const QJsonValue &value) -{ - insert(0, value); -} - -/*! - Inserts \a value at the end of the array. - - \sa prepend(), insert() - */ -void QJsonArray::append(const QJsonValue &value) -{ - insert(a ? (int)a->length : 0, value); -} - -/*! - Removes the value at index position \a i. \a i must be a valid - index position in the array (i.e., \c{0 <= i < size()}). - - \sa insert(), replace() - */ -void QJsonArray::removeAt(int i) -{ - if (!a || i < 0 || i >= (int)a->length) { - return; - } - - detach(); - a->removeItems(i, 1); - ++d->compactionCounter; - if (d->compactionCounter > 32u && d->compactionCounter >= unsigned(a->length) / 2u) { - compact(); - } -} - -/*! \fn void QJsonArray::removeFirst() - - Removes the first item in the array. Calling this function is - equivalent to calling \c{removeAt(0)}. The array must not be empty. If - the array can be empty, call isEmpty() before calling this - function. - - \sa removeAt(), removeLast() -*/ - -/*! \fn void QJsonArray::removeLast() - - Removes the last item in the array. Calling this function is - equivalent to calling \c{removeAt(size() - 1)}. The array must not be - empty. If the array can be empty, call isEmpty() before calling - this function. - - \sa removeAt(), removeFirst() -*/ - -/*! - Removes the item at index position \a i and returns it. \a i must - be a valid index position in the array (i.e., \c{0 <= i < size()}). - - If you don't use the return value, removeAt() is more efficient. - - \sa removeAt() - */ -QJsonValue QJsonArray::takeAt(int i) -{ - if (!a || i < 0 || i >= (int)a->length) { - return QJsonValue(QJsonValue::Undefined); - } - - QJsonValue v(d, a, a->at(i)); - removeAt(i); // detaches - return v; -} - -/*! - Inserts \a value at index position \a i in the array. If \a i - is \c 0, the value is prepended to the array. If \a i is size(), the - value is appended to the array. - - \sa append(), prepend(), replace(), removeAt() - */ -void QJsonArray::insert(int i, const QJsonValue &value) -{ - Q_ASSERT (i >= 0 && i <= (a ? (int)a->length : 0)); - QJsonValue val = value; - - bool compressed; - int valueSize = QJsonPrivate::Value::requiredStorage(val, &compressed); - - detach(valueSize + sizeof(QJsonPrivate::Value)); - - if (!a->length) { - a->tableOffset = sizeof(QJsonPrivate::Array); - } - - int valueOffset = a->reserveSpace(valueSize, i, 1, false); - if (!valueOffset) { - return; - } - - QJsonPrivate::Value &v = (*a)[i]; - v.type = (val.t == QJsonValue::Undefined ? QJsonValue::Null : val.t); - v.latinOrIntValue = compressed; - v.latinKey = false; - v.value = QJsonPrivate::Value::valueToStore(val, valueOffset); - if (valueSize) { - QJsonPrivate::Value::copyData(val, (char *)a + valueOffset, compressed); - } -} - -/*! - \fn QJsonArray::iterator QJsonArray::insert(iterator before, const QJsonValue &value) - - Inserts \a value before the position pointed to by \a before, and returns an iterator - pointing to the newly inserted item. - - \sa erase(), insert() -*/ - -/*! - \fn QJsonArray::iterator QJsonArray::erase(iterator it) - - Removes the item pointed to by \a it, and returns an iterator pointing to the - next item. - - \sa removeAt() -*/ - -/*! - Replaces the item at index position \a i with \a value. \a i must - be a valid index position in the array (i.e., \c{0 <= i < size()}). - - \sa operator[](), removeAt() - */ -void QJsonArray::replace(int i, const QJsonValue &value) -{ - Q_ASSERT (a && i >= 0 && i < (int)(a->length)); - QJsonValue val = value; - - bool compressed; - int valueSize = QJsonPrivate::Value::requiredStorage(val, &compressed); - - detach(valueSize); - - if (!a->length) { - a->tableOffset = sizeof(QJsonPrivate::Array); - } - - int valueOffset = a->reserveSpace(valueSize, i, 1, true); - if (!valueOffset) { - return; - } - - QJsonPrivate::Value &v = (*a)[i]; - v.type = (val.t == QJsonValue::Undefined ? QJsonValue::Null : val.t); - v.latinOrIntValue = compressed; - v.latinKey = false; - v.value = QJsonPrivate::Value::valueToStore(val, valueOffset); - if (valueSize) { - QJsonPrivate::Value::copyData(val, (char *)a + valueOffset, compressed); - } - - ++d->compactionCounter; - if (d->compactionCounter > 32u && d->compactionCounter >= unsigned(a->length) / 2u) { - compact(); - } -} - -/*! - Returns \c true if the array contains an occurrence of \a value, otherwise \c false. - - \sa count() - */ -bool QJsonArray::contains(const QJsonValue &value) const -{ - for (int i = 0; i < size(); i++) { - if (at(i) == value) { - return true; - } - } - return false; -} - -/*! - Returns the value at index position \a i as a modifiable reference. - \a i must be a valid index position in the array (i.e., \c{0 <= i < - size()}). - - The return value is of type QJsonValueRef, a helper class for QJsonArray - and QJsonObject. When you get an object of type QJsonValueRef, you can - use it as if it were a reference to a QJsonValue. If you assign to it, - the assignment will apply to the character in the QJsonArray of QJsonObject - from which you got the reference. - - \sa at() - */ -QJsonValueRef QJsonArray::operator [](int i) -{ - Q_ASSERT(a && i >= 0 && i < (int)a->length); - return QJsonValueRef(this, i); -} - -/*! - \overload - - Same as at(). - */ -QJsonValue QJsonArray::operator[](int i) const -{ - return at(i); -} - -/*! - Returns \c true if this array is equal to \a other. - */ -bool QJsonArray::operator==(const QJsonArray &other) const -{ - if (a == other.a) { - return true; - } - - if (!a) { - return !other.a->length; - } - if (!other.a) { - return !a->length; - } - if (a->length != other.a->length) { - return false; - } - - for (int i = 0; i < (int)a->length; ++i) { - if (QJsonValue(d, a, a->at(i)) != QJsonValue(other.d, other.a, other.a->at(i))) { - return false; - } - } - return true; -} - -/*! - Returns \c true if this array is not equal to \a other. - */ -bool QJsonArray::operator!=(const QJsonArray &other) const -{ - return !(*this == other); -} - -/*! \fn QJsonArray::iterator QJsonArray::begin() - - Returns an \l{STL-style iterator} pointing to the first item in - the array. - - \sa constBegin(), end() -*/ - -/*! \fn QJsonArray::const_iterator QJsonArray::begin() const - - \overload -*/ - -/*! \fn QJsonArray::const_iterator QJsonArray::constBegin() const - - Returns a const \l{STL-style iterator} pointing to the first item - in the array. - - \sa begin(), constEnd() -*/ - -/*! \fn QJsonArray::iterator QJsonArray::end() - - Returns an \l{STL-style iterator} pointing to the imaginary item - after the last item in the array. - - \sa begin(), constEnd() -*/ - -/*! \fn const_iterator QJsonArray::end() const - - \overload -*/ - -/*! \fn QJsonArray::const_iterator QJsonArray::constEnd() const - - Returns a const \l{STL-style iterator} pointing to the imaginary - item after the last item in the array. - - \sa constBegin(), end() -*/ - -/*! \fn void QJsonArray::push_back(const QJsonValue &value) - - This function is provided for STL compatibility. It is equivalent - to \l{QJsonArray::append()}{append(value)} and will append \a value to the array. -*/ - -/*! \fn void QJsonArray::push_front(const QJsonValue &value) - - This function is provided for STL compatibility. It is equivalent - to \l{QJsonArray::prepend()}{prepend(value)} and will prepend \a value to the array. -*/ - -/*! \fn void QJsonArray::pop_front() - - This function is provided for STL compatibility. It is equivalent - to removeFirst(). The array must not be empty. If the array can be - empty, call isEmpty() before calling this function. -*/ - -/*! \fn void QJsonArray::pop_back() - - This function is provided for STL compatibility. It is equivalent - to removeLast(). The array must not be empty. If the array can be - empty, call isEmpty() before calling this function. -*/ - -/*! \fn bool QJsonArray::empty() const - - This function is provided for STL compatibility. It is equivalent - to isEmpty() and returns \c true if the array is empty. -*/ - -/*! \class QJsonArray::iterator - \inmodule QtCore - \brief The QJsonArray::iterator class provides an STL-style non-const iterator for QJsonArray. - - QJsonArray::iterator allows you to iterate over a QJsonArray - and to modify the array item associated with the - iterator. If you want to iterate over a const QJsonArray, use - QJsonArray::const_iterator instead. It is generally a good practice to - use QJsonArray::const_iterator on a non-const QJsonArray as well, unless - you need to change the QJsonArray through the iterator. Const - iterators are slightly faster and improves code readability. - - The default QJsonArray::iterator constructor creates an uninitialized - iterator. You must initialize it using a QJsonArray function like - QJsonArray::begin(), QJsonArray::end(), or QJsonArray::insert() before you can - start iterating. - - Most QJsonArray functions accept an integer index rather than an - iterator. For that reason, iterators are rarely useful in - connection with QJsonArray. One place where STL-style iterators do - make sense is as arguments to \l{generic algorithms}. - - Multiple iterators can be used on the same array. However, be - aware that any non-const function call performed on the QJsonArray - will render all existing iterators undefined. - - \sa QJsonArray::const_iterator -*/ - -/*! \typedef QJsonArray::iterator::iterator_category - - A synonym for \e {std::random_access_iterator_tag} indicating - this iterator is a random access iterator. -*/ - -/*! \typedef QJsonArray::iterator::difference_type - - \internal -*/ - -/*! \typedef QJsonArray::iterator::value_type - - \internal -*/ - -/*! \typedef QJsonArray::iterator::reference - - \internal -*/ - -/*! \fn QJsonArray::iterator::iterator() - - Constructs an uninitialized iterator. - - Functions like operator*() and operator++() should not be called - on an uninitialized iterator. Use operator=() to assign a value - to it before using it. - - \sa QJsonArray::begin(), QJsonArray::end() -*/ - -/*! \fn QJsonArray::iterator::iterator(QJsonArray *array, int index) - \internal -*/ - -/*! \fn QJsonValueRef QJsonArray::iterator::operator*() const - - Returns a modifiable reference to the current item. - - You can change the value of an item by using operator*() on the - left side of an assignment. - - The return value is of type QJsonValueRef, a helper class for QJsonArray - and QJsonObject. When you get an object of type QJsonValueRef, you can - use it as if it were a reference to a QJsonValue. If you assign to it, - the assignment will apply to the character in the QJsonArray of QJsonObject - from which you got the reference. -*/ - -/*! \fn QJsonValueRef QJsonArray::iterator::operator[](int j) const - - Returns a modifiable reference to the item at offset \a j from the - item pointed to by this iterator (the item at position \c{*this + j}). - - This function is provided to make QJsonArray iterators behave like C++ - pointers. - - The return value is of type QJsonValueRef, a helper class for QJsonArray - and QJsonObject. When you get an object of type QJsonValueRef, you can - use it as if it were a reference to a QJsonValue. If you assign to it, - the assignment will apply to the character in the QJsonArray of QJsonObject - from which you got the reference. - - \sa operator+() -*/ - -/*! - \fn bool QJsonArray::iterator::operator==(const iterator &other) const - \fn bool QJsonArray::iterator::operator==(const const_iterator &other) const - - Returns \c true if \a other points to the same item as this - iterator; otherwise returns \c false. - - \sa operator!=() -*/ - -/*! - \fn bool QJsonArray::iterator::operator!=(const iterator &other) const - \fn bool QJsonArray::iterator::operator!=(const const_iterator &other) const - - Returns \c true if \a other points to a different item than this - iterator; otherwise returns \c false. - - \sa operator==() -*/ - -/*! - \fn bool QJsonArray::iterator::operator<(const iterator& other) const - \fn bool QJsonArray::iterator::operator<(const const_iterator& other) const - - Returns \c true if the item pointed to by this iterator is less than - the item pointed to by the \a other iterator. -*/ - -/*! - \fn bool QJsonArray::iterator::operator<=(const iterator& other) const - \fn bool QJsonArray::iterator::operator<=(const const_iterator& other) const - - Returns \c true if the item pointed to by this iterator is less than - or equal to the item pointed to by the \a other iterator. -*/ - -/*! - \fn bool QJsonArray::iterator::operator>(const iterator& other) const - \fn bool QJsonArray::iterator::operator>(const const_iterator& other) const - - Returns \c true if the item pointed to by this iterator is greater - than the item pointed to by the \a other iterator. -*/ - -/*! - \fn bool QJsonArray::iterator::operator>=(const iterator& other) const - \fn bool QJsonArray::iterator::operator>=(const const_iterator& other) const - - Returns \c true if the item pointed to by this iterator is greater - than or equal to the item pointed to by the \a other iterator. -*/ - -/*! \fn QJsonArray::iterator &QJsonArray::iterator::operator++() - - The prefix ++ operator, \c{++it}, advances the iterator to the - next item in the array and returns an iterator to the new current - item. - - Calling this function on QJsonArray::end() leads to undefined results. - - \sa operator--() -*/ - -/*! \fn QJsonArray::iterator QJsonArray::iterator::operator++(int) - - \overload - - The postfix ++ operator, \c{it++}, advances the iterator to the - next item in the array and returns an iterator to the previously - current item. -*/ - -/*! \fn QJsonArray::iterator &QJsonArray::iterator::operator--() - - The prefix -- operator, \c{--it}, makes the preceding item - current and returns an iterator to the new current item. - - Calling this function on QJsonArray::begin() leads to undefined results. - - \sa operator++() -*/ - -/*! \fn QJsonArray::iterator QJsonArray::iterator::operator--(int) - - \overload - - The postfix -- operator, \c{it--}, makes the preceding item - current and returns an iterator to the previously current item. -*/ - -/*! \fn QJsonArray::iterator &QJsonArray::iterator::operator+=(int j) - - Advances the iterator by \a j items. If \a j is negative, the - iterator goes backward. - - \sa operator-=(), operator+() -*/ - -/*! \fn QJsonArray::iterator &QJsonArray::iterator::operator-=(int j) - - Makes the iterator go back by \a j items. If \a j is negative, - the iterator goes forward. - - \sa operator+=(), operator-() -*/ - -/*! \fn QJsonArray::iterator QJsonArray::iterator::operator+(int j) const - - Returns an iterator to the item at \a j positions forward from - this iterator. If \a j is negative, the iterator goes backward. - - \sa operator-(), operator+=() -*/ - -/*! \fn QJsonArray::iterator QJsonArray::iterator::operator-(int j) const - - Returns an iterator to the item at \a j positions backward from - this iterator. If \a j is negative, the iterator goes forward. - - \sa operator+(), operator-=() -*/ - -/*! \fn int QJsonArray::iterator::operator-(iterator other) const - - Returns the number of items between the item pointed to by \a - other and the item pointed to by this iterator. -*/ - -/*! \class QJsonArray::const_iterator - \inmodule QtCore - \brief The QJsonArray::const_iterator class provides an STL-style const iterator for QJsonArray. - - QJsonArray::const_iterator allows you to iterate over a - QJsonArray. If you want to modify the QJsonArray as - you iterate over it, use QJsonArray::iterator instead. It is generally a - good practice to use QJsonArray::const_iterator on a non-const QJsonArray - as well, unless you need to change the QJsonArray through the - iterator. Const iterators are slightly faster and improves - code readability. - - The default QJsonArray::const_iterator constructor creates an - uninitialized iterator. You must initialize it using a QJsonArray - function like QJsonArray::constBegin(), QJsonArray::constEnd(), or - QJsonArray::insert() before you can start iterating. - - Most QJsonArray functions accept an integer index rather than an - iterator. For that reason, iterators are rarely useful in - connection with QJsonArray. One place where STL-style iterators do - make sense is as arguments to \l{generic algorithms}. - - Multiple iterators can be used on the same array. However, be - aware that any non-const function call performed on the QJsonArray - will render all existing iterators undefined. - - \sa QJsonArray::iterator -*/ - -/*! \fn QJsonArray::const_iterator::const_iterator() - - Constructs an uninitialized iterator. - - Functions like operator*() and operator++() should not be called - on an uninitialized iterator. Use operator=() to assign a value - to it before using it. - - \sa QJsonArray::constBegin(), QJsonArray::constEnd() -*/ - -/*! \fn QJsonArray::const_iterator::const_iterator(const QJsonArray *array, int index) - \internal -*/ - -/*! \typedef QJsonArray::const_iterator::iterator_category - - A synonym for \e {std::random_access_iterator_tag} indicating - this iterator is a random access iterator. -*/ - -/*! \typedef QJsonArray::const_iterator::difference_type - - \internal -*/ - -/*! \typedef QJsonArray::const_iterator::value_type - - \internal -*/ - -/*! \typedef QJsonArray::const_iterator::reference - - \internal -*/ - -/*! \fn QJsonArray::const_iterator::const_iterator(const const_iterator &other) - - Constructs a copy of \a other. -*/ - -/*! \fn QJsonArray::const_iterator::const_iterator(const iterator &other) - - Constructs a copy of \a other. -*/ - -/*! \fn QJsonValue QJsonArray::const_iterator::operator*() const - - Returns the current item. -*/ - -/*! \fn QJsonValue QJsonArray::const_iterator::operator[](int j) const - - Returns the item at offset \a j from the item pointed to by this iterator (the item at - position \c{*this + j}). - - This function is provided to make QJsonArray iterators behave like C++ - pointers. - - \sa operator+() -*/ - -/*! \fn bool QJsonArray::const_iterator::operator==(const const_iterator &other) const - - Returns \c true if \a other points to the same item as this - iterator; otherwise returns \c false. - - \sa operator!=() -*/ - -/*! \fn bool QJsonArray::const_iterator::operator!=(const const_iterator &other) const - - Returns \c true if \a other points to a different item than this - iterator; otherwise returns \c false. - - \sa operator==() -*/ - -/*! - \fn bool QJsonArray::const_iterator::operator<(const const_iterator& other) const - - Returns \c true if the item pointed to by this iterator is less than - the item pointed to by the \a other iterator. -*/ - -/*! - \fn bool QJsonArray::const_iterator::operator<=(const const_iterator& other) const - - Returns \c true if the item pointed to by this iterator is less than - or equal to the item pointed to by the \a other iterator. -*/ - -/*! - \fn bool QJsonArray::const_iterator::operator>(const const_iterator& other) const - - Returns \c true if the item pointed to by this iterator is greater - than the item pointed to by the \a other iterator. -*/ - -/*! - \fn bool QJsonArray::const_iterator::operator>=(const const_iterator& other) const - - Returns \c true if the item pointed to by this iterator is greater - than or equal to the item pointed to by the \a other iterator. -*/ - -/*! \fn QJsonArray::const_iterator &QJsonArray::const_iterator::operator++() - - The prefix ++ operator, \c{++it}, advances the iterator to the - next item in the array and returns an iterator to the new current - item. - - Calling this function on QJsonArray::end() leads to undefined results. - - \sa operator--() -*/ - -/*! \fn QJsonArray::const_iterator QJsonArray::const_iterator::operator++(int) - - \overload - - The postfix ++ operator, \c{it++}, advances the iterator to the - next item in the array and returns an iterator to the previously - current item. -*/ - -/*! \fn QJsonArray::const_iterator &QJsonArray::const_iterator::operator--() - - The prefix -- operator, \c{--it}, makes the preceding item - current and returns an iterator to the new current item. - - Calling this function on QJsonArray::begin() leads to undefined results. - - \sa operator++() -*/ - -/*! \fn QJsonArray::const_iterator QJsonArray::const_iterator::operator--(int) - - \overload - - The postfix -- operator, \c{it--}, makes the preceding item - current and returns an iterator to the previously current item. -*/ - -/*! \fn QJsonArray::const_iterator &QJsonArray::const_iterator::operator+=(int j) - - Advances the iterator by \a j items. If \a j is negative, the - iterator goes backward. - - \sa operator-=(), operator+() -*/ - -/*! \fn QJsonArray::const_iterator &QJsonArray::const_iterator::operator-=(int j) - - Makes the iterator go back by \a j items. If \a j is negative, - the iterator goes forward. - - \sa operator+=(), operator-() -*/ - -/*! \fn QJsonArray::const_iterator QJsonArray::const_iterator::operator+(int j) const - - Returns an iterator to the item at \a j positions forward from - this iterator. If \a j is negative, the iterator goes backward. - - \sa operator-(), operator+=() -*/ - -/*! \fn QJsonArray::const_iterator QJsonArray::const_iterator::operator-(int j) const - - Returns an iterator to the item at \a j positions backward from - this iterator. If \a j is negative, the iterator goes forward. - - \sa operator+(), operator-=() -*/ - -/*! \fn int QJsonArray::const_iterator::operator-(const_iterator other) const - - Returns the number of items between the item pointed to by \a - other and the item pointed to by this iterator. -*/ - - -/*! - \internal - */ -void QJsonArray::detach(uint reserve) -{ - if (!d) { - d = new QJsonPrivate::Data(reserve, QJsonValue::Array); - a = static_cast(d->header->root()); - d->ref.ref(); - return; - } - if (reserve == 0 && d->ref == 1) { - return; - } - - QJsonPrivate::Data *x = d->clone(a, reserve); - x->ref.ref(); - if (!d->ref.deref()) { - delete d; - } - d = x; - a = static_cast(d->header->root()); -} - -/*! - \internal - */ -void QJsonArray::compact() -{ - if (!d || !d->compactionCounter) { - return; - } - - detach(); - d->compact(); - a = static_cast(d->header->root()); -} - - -QDebug operator<<(QDebug dbg, const QJsonArray &a) -{ - if (!a.a) { - dbg << "QJsonArray()"; - return dbg; - } - QByteArray json; - QJsonPrivate::Writer::arrayToJson(a.a, json, 0, true); - dbg.nospace() << "QJsonArray(" - << json.constData() // print as utf-8 string without extra quotation marks - << ")"; - return dbg.space(); -} - -QT_END_NAMESPACE - diff --git a/src/core/json/qjsonarray.h b/src/core/json/qjsonarray.h deleted file mode 100644 index 7a7153e2f..000000000 --- a/src/core/json/qjsonarray.h +++ /dev/null @@ -1,340 +0,0 @@ -/**************************************************************************** -** -** Copyright (c) 2012-2015 Barbara Geller -** Copyright (c) 2012-2015 Ansel Sermersheim -** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies). -** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies). -** Copyright (C) 2016 Ivailo Monev -** -** This file is part of the QtCore module of the Katie Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QJSONARRAY_H -#define QJSONARRAY_H - -#include - -QT_BEGIN_NAMESPACE - - -class QDebug; -class QStringList; - -template class QList; -typedef QList QVariantList; - -class Q_CORE_EXPORT QJsonArray -{ - public: - QJsonArray(); - ~QJsonArray(); - - QJsonArray(const QJsonArray &other); - QJsonArray &operator =(const QJsonArray &other); - - static QJsonArray fromStringList(const QStringList &list); - static QJsonArray fromVariantList(const QVariantList &list); - QVariantList toVariantList() const; - - int size() const; - inline int count() const { - return size(); - } - - bool isEmpty() const; - QJsonValue at(int i) const; - QJsonValue first() const; - QJsonValue last() const; - - void prepend(const QJsonValue &value); - void append(const QJsonValue &value); - void removeAt(int i); - QJsonValue takeAt(int i); - inline void removeFirst() { - removeAt(0); - } - inline void removeLast() { - removeAt(size() - 1); - } - - void insert(int i, const QJsonValue &value); - void replace(int i, const QJsonValue &value); - - bool contains(const QJsonValue &element) const; - QJsonValueRef operator[](int i); - QJsonValue operator[](int i) const; - - bool operator==(const QJsonArray &other) const; - bool operator!=(const QJsonArray &other) const; - - class const_iterator; - - class iterator - { - public: - QJsonArray *a; - int i; - typedef std::random_access_iterator_tag iterator_category; - typedef int difference_type; - typedef QJsonValue value_type; - typedef QJsonValueRefPtr pointer; - typedef QJsonValueRef reference; - - inline iterator() : a(0), i(0) { } - explicit inline iterator(QJsonArray *array, int index) : a(array), i(index) { } - - inline QJsonValueRef operator*() const { - return QJsonValueRef(a, i); - } - inline QJsonValueRefPtr operator->() const { - return QJsonValueRefPtr(a, i); - } - inline QJsonValueRef operator[](int j) const { - return QJsonValueRef(a, i + j); - } - - inline bool operator==(const iterator &o) const { - return i == o.i; - } - inline bool operator!=(const iterator &o) const { - return i != o.i; - } - inline bool operator<(const iterator &other) const { - return i < other.i; - } - inline bool operator<=(const iterator &other) const { - return i <= other.i; - } - inline bool operator>(const iterator &other) const { - return i > other.i; - } - inline bool operator>=(const iterator &other) const { - return i >= other.i; - } - inline bool operator==(const const_iterator &o) const { - return i == o.i; - } - inline bool operator!=(const const_iterator &o) const { - return i != o.i; - } - inline bool operator<(const const_iterator &other) const { - return i < other.i; - } - inline bool operator<=(const const_iterator &other) const { - return i <= other.i; - } - inline bool operator>(const const_iterator &other) const { - return i > other.i; - } - inline bool operator>=(const const_iterator &other) const { - return i >= other.i; - } - inline iterator &operator++() { - ++i; - return *this; - } - inline iterator operator++(int) { - iterator n = *this; - ++i; - return n; - } - inline iterator &operator--() { - i--; - return *this; - } - inline iterator operator--(int) { - iterator n = *this; - i--; - return n; - } - inline iterator &operator+=(int j) { - i += j; - return *this; - } - inline iterator &operator-=(int j) { - i -= j; - return *this; - } - inline iterator operator+(int j) const { - return iterator(a, i + j); - } - inline iterator operator-(int j) const { - return iterator(a, i - j); - } - inline int operator-(iterator j) const { - return i - j.i; - } - }; - friend class iterator; - - class const_iterator - { - public: - const QJsonArray *a; - int i; - typedef std::random_access_iterator_tag iterator_category; - typedef qptrdiff difference_type; - typedef QJsonValue value_type; - typedef QJsonValuePtr pointer; - typedef QJsonValue reference; - - inline const_iterator() : a(0), i(0) { } - explicit inline const_iterator(const QJsonArray *array, int index) : a(array), i(index) { } - inline const_iterator(const const_iterator &o) : a(o.a), i(o.i) {} - inline const_iterator(const iterator &o) : a(o.a), i(o.i) {} - - inline QJsonValue operator*() const { - return a->at(i); - } - inline QJsonValuePtr operator->() const { - return QJsonValuePtr(a->at(i)); - } - inline QJsonValue operator[](int j) const { - return a->at(i + j); - } - inline bool operator==(const const_iterator &o) const { - return i == o.i; - } - inline bool operator!=(const const_iterator &o) const { - return i != o.i; - } - inline bool operator<(const const_iterator &other) const { - return i < other.i; - } - inline bool operator<=(const const_iterator &other) const { - return i <= other.i; - } - inline bool operator>(const const_iterator &other) const { - return i > other.i; - } - inline bool operator>=(const const_iterator &other) const { - return i >= other.i; - } - inline const_iterator &operator++() { - ++i; - return *this; - } - inline const_iterator operator++(int) { - const_iterator n = *this; - ++i; - return n; - } - inline const_iterator &operator--() { - i--; - return *this; - } - inline const_iterator operator--(int) { - const_iterator n = *this; - i--; - return n; - } - inline const_iterator &operator+=(int j) { - i += j; - return *this; - } - inline const_iterator &operator-=(int j) { - i -= j; - return *this; - } - inline const_iterator operator+(int j) const { - return const_iterator(a, i + j); - } - inline const_iterator operator-(int j) const { - return const_iterator(a, i - j); - } - inline int operator-(const_iterator j) const { - return i - j.i; - } - }; - friend class const_iterator; - - // stl style - inline iterator begin() { - detach(); - return iterator(this, 0); - } - inline const_iterator begin() const { - return const_iterator(this, 0); - } - inline const_iterator constBegin() const { - return const_iterator(this, 0); - } - inline iterator end() { - detach(); - return iterator(this, size()); - } - inline const_iterator end() const { - return const_iterator(this, size()); - } - inline const_iterator constEnd() const { - return const_iterator(this, size()); - } - iterator insert(iterator before, const QJsonValue &value) { - insert(before.i, value); - return before; - } - iterator erase(iterator it) { - removeAt(it.i); - return it; - } - - // more Qt - typedef iterator Iterator; - typedef const_iterator ConstIterator; - - // stl compatibility - inline void push_back(const QJsonValue &t) { - append(t); - } - inline void push_front(const QJsonValue &t) { - prepend(t); - } - inline void pop_front() { - removeFirst(); - } - inline void pop_back() { - removeLast(); - } - inline bool empty() const { - return isEmpty(); - } - typedef int size_type; - typedef QJsonValue value_type; - typedef value_type *pointer; - typedef const value_type *const_pointer; - typedef QJsonValueRef reference; - typedef QJsonValue const_reference; - typedef int difference_type; - - private: - friend class QJsonPrivate::Data; - friend class QJsonValue; - friend class QJsonDocument; - friend Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonArray &); - - QJsonArray(QJsonPrivate::Data *data, QJsonPrivate::Array *array); - void compact(); - void detach(uint reserve = 0); - - QJsonPrivate::Data *d; - QJsonPrivate::Array *a; -}; - -Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonArray &); - -QT_END_NAMESPACE - -#endif // QJSONARRAY_H diff --git a/src/core/json/qjsondocument.cpp b/src/core/json/qjsondocument.cpp deleted file mode 100644 index 57dca3d3f..000000000 --- a/src/core/json/qjsondocument.cpp +++ /dev/null @@ -1,503 +0,0 @@ -/**************************************************************************** -** -** Copyright (c) 2012-2015 Barbara Geller -** Copyright (c) 2012-2015 Ansel Sermersheim -** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies). -** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies). -** Copyright (C) 2016 Ivailo Monev -** -** This file is part of the QtCore module of the Katie Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qjsondocument.h" -#include "qjsonobject.h" -#include "qjsonvalue.h" -#include "qjsonarray.h" -#include "qstringlist.h" -#include "qvariant.h" -#include "qdebug.h" -#include "qjsonwriter_p.h" -#include "qjsonparser_p.h" -#include "qjson_p.h" - -QT_BEGIN_NAMESPACE - -QJsonDocument::QJsonDocument() - : d(0) -{ -} - -QJsonDocument::QJsonDocument(const QJsonObject &object) - : d(0) -{ - setObject(object); -} - -QJsonDocument::QJsonDocument(const QJsonArray &array) - : d(0) -{ - setArray(array); -} - -QJsonDocument::QJsonDocument(QJsonPrivate::Data *data) - : d(data) -{ - Q_ASSERT(d); - d->ref.ref(); -} - -QJsonDocument::~QJsonDocument() -{ - if (d && !d->ref.deref()) { - delete d; - } -} - -QJsonDocument::QJsonDocument(const QJsonDocument &other) -{ - d = other.d; - if (d) { - d->ref.ref(); - } -} - -/*! - * Assigns the \a other document to this QJsonDocument. - * Returns a reference to this object. - */ -QJsonDocument &QJsonDocument::operator =(const QJsonDocument &other) -{ - if (d != other.d) { - if (d && !d->ref.deref()) { - delete d; - } - d = other.d; - if (d) { - d->ref.ref(); - } - } - - return *this; -} - -/*! \enum QJsonDocument::DataValidation - - This value is used to tell QJsonDocument whether to validate the binary data - when converting to a QJsonDocument using fromBinaryData() or fromRawData(). - - \value Validate Validate the data before using it. This is the default. - \value BypassValidation Bypasses data validation. Only use if you received the - data from a trusted place and know it's valid, as using of invalid data can crash - the application. - */ - -/*! - Creates a QJsonDocument that uses the first \a size bytes from - \a data. It assumes \a data contains a binary encoded JSON document. - The created document does not take ownership of \a data and the caller - has to guarantee that \a data will not be deleted or modified as long as - any QJsonDocument, QJsonObject or QJsonArray still references the data. - - \a data has to be aligned to a 4 byte boundary. - - \a validation decides whether the data is checked for validity before being used. - By default the data is validated. If the \a data is not valid, the method returns - a null document. - - Returns a QJsonDocument representing the data. - - \sa rawData(), fromBinaryData(), isNull(), DataValidation - */ -QJsonDocument QJsonDocument::fromRawData(const char *data, int size, DataValidation validation) -{ - if (quintptr(data) & 3) { - qWarning() << "QJsonDocument::fromRawData: data has to have 4 byte alignment"; - return QJsonDocument(); - } - - QJsonPrivate::Data *d = new QJsonPrivate::Data((char *)data, size); - d->ownsData = false; - - if (validation != BypassValidation && !d->valid()) { - delete d; - return QJsonDocument(); - } - - return QJsonDocument(d); -} - -/*! - Returns the raw binary representation of the data - \a size will contain the size of the returned data. - - This method is useful to e.g. stream the JSON document - in it's binary form to a file. - */ -const char *QJsonDocument::rawData(int *size) const -{ - if (!d) { - *size = 0; - return 0; - } - *size = d->alloc; - return d->rawData; -} - -/*! - Creates a QJsonDocument from \a data. - - \a validation decides whether the data is checked for validity before being used. - By default the data is validated. If the \a data is not valid, the method returns - a null document. - - \sa toBinaryData(), fromRawData(), isNull(), DataValidation - */ -QJsonDocument QJsonDocument::fromBinaryData(const QByteArray &data, DataValidation validation) -{ - if (data.size() < (int)(sizeof(QJsonPrivate::Header) + sizeof(QJsonPrivate::Base))) { - return QJsonDocument(); - } - - QJsonPrivate::Header h; - memcpy(&h, data.constData(), sizeof(QJsonPrivate::Header)); - QJsonPrivate::Base root; - memcpy(&root, data.constData() + sizeof(QJsonPrivate::Header), sizeof(QJsonPrivate::Base)); - - // do basic checks here, so we don't try to allocate more memory than we can. - if (h.tag != QJsonDocument::BinaryFormatTag || h.version != 1u || - sizeof(QJsonPrivate::Header) + root.size > (uint)data.size()) { - return QJsonDocument(); - } - - const uint size = sizeof(QJsonPrivate::Header) + root.size; - char *raw = (char *)malloc(size); - if (!raw) { - return QJsonDocument(); - } - - memcpy(raw, data.constData(), size); - QJsonPrivate::Data *d = new QJsonPrivate::Data(raw, size); - - if (validation != BypassValidation && !d->valid()) { - delete d; - return QJsonDocument(); - } - - return QJsonDocument(d); -} - -/*! - Creates a QJsonDocument from the QVariant \a variant. - - If the \a variant contains any other type than a QVariant::Map, - QVariant::List or QVariant::StringList, the returned document - document is invalid. - - \sa toVariant() - */ -QJsonDocument QJsonDocument::fromVariant(const QVariant &variant) -{ - QJsonDocument doc; - if (variant.type() == QVariant::Map) { - doc.setObject(QJsonObject::fromVariantMap(variant.toMap())); - } else if (variant.type() == QVariant::List) { - doc.setArray(QJsonArray::fromVariantList(variant.toList())); - } else if (variant.type() == QVariant::StringList) { - doc.setArray(QJsonArray::fromStringList(variant.toStringList())); - } - return doc; -} - -/*! - Returns a QVariant representing the Json document. - - The returned variant will be a QVariantList if the document is - a QJsonArray and a QVariantMap if the document is a QJsonObject. - - \sa fromVariant(), QJsonValue::toVariant() - */ -QVariant QJsonDocument::toVariant() const -{ - if (!d) { - return QVariant(); - } - - if (d->header->root()->isArray()) { - return QJsonArray(d, static_cast(d->header->root())).toVariantList(); - } else { - return QJsonObject(d, static_cast(d->header->root())).toVariantMap(); - } -} - -QByteArray QJsonDocument::toJson(JsonFormat format) const -{ - if (!d) { - return QByteArray(); - } - - QByteArray json; - - if (d->header->root()->isArray()) { - QJsonPrivate::Writer::arrayToJson(static_cast(d->header->root()), json, 0, (format == Compact)); - } else { - QJsonPrivate::Writer::objectToJson(static_cast(d->header->root()), json, 0, - (format == Compact)); - } - - return json; -} - -/*! - Parses a UTF-8 encoded JSON document and creates a QJsonDocument - from it. - - \a json contains the json document to be parsed. - - The optional \a error variable can be used to pass in a QJsonParseError data - structure that will contain information about possible errors encountered during - parsing. - - \sa toJson(), QJsonParseError - */ -QJsonDocument QJsonDocument::fromJson(const QByteArray &json, QJsonParseError *error) -{ - QJsonPrivate::Parser parser(json.constData(), json.length()); - return parser.parse(error); -} - -/*! - Returns true if the document doesn't contain any data. - */ -bool QJsonDocument::isEmpty() const -{ - if (!d) { - return true; - } - - return false; -} - -/*! - Returns a binary representation of the document. - - The binary representation is also the native format used internally in Qt, - and is very efficient and fast to convert to and from. - - The binary format can be stored on disk and interchanged with other applications - or computers. fromBinaryData() can be used to convert it back into a - JSON document. - - \sa fromBinaryData() - */ -QByteArray QJsonDocument::toBinaryData() const -{ - if (!d || !d->rawData) { - return QByteArray(); - } - - return QByteArray(d->rawData, d->header->root()->size + sizeof(QJsonPrivate::Header)); -} - -/*! - Returns true if the document contains an array. - - \sa array(), isObject() - */ -bool QJsonDocument::isArray() const -{ - if (!d) { - return false; - } - - QJsonPrivate::Header *h = (QJsonPrivate::Header *)d->rawData; - return h->root()->isArray(); -} - -/*! - Returns true if the document contains an object. - - \sa object(), isArray() - */ -bool QJsonDocument::isObject() const -{ - if (!d) { - return false; - } - - QJsonPrivate::Header *h = (QJsonPrivate::Header *)d->rawData; - return h->root()->isObject(); -} - -/*! - Returns the QJsonObject contained in the document. - - Returns an empty object if the document contains an - array. - - \sa isObject(), array(), setObject() - */ -QJsonObject QJsonDocument::object() const -{ - if (d) { - QJsonPrivate::Base *b = d->header->root(); - if (b->isObject()) { - return QJsonObject(d, static_cast(b)); - } - } - return QJsonObject(); -} - -/*! - Returns the QJsonArray contained in the document. - - Returns an empty array if the document contains an - object. - - \sa isArray(), object(), setArray() - */ -QJsonArray QJsonDocument::array() const -{ - if (d) { - QJsonPrivate::Base *b = d->header->root(); - if (b->isArray()) { - return QJsonArray(d, static_cast(b)); - } - } - return QJsonArray(); -} - -/*! - Sets \a object as the main object of this document. - - \sa setArray(), object() - */ -void QJsonDocument::setObject(const QJsonObject &object) -{ - if (d && !d->ref.deref()) { - delete d; - } - - d = object.d; - - if (!d) { - d = new QJsonPrivate::Data(0, QJsonValue::Object); - } else if (d->compactionCounter || object.o != d->header->root()) { - QJsonObject o(object); - if (d->compactionCounter) { - o.compact(); - } else { - o.detach(); - } - d = o.d; - d->ref.ref(); - return; - } - d->ref.ref(); -} - -/*! - Sets \a array as the main object of this document. - - \sa setObject(), array() - */ -void QJsonDocument::setArray(const QJsonArray &array) -{ - if (d && !d->ref.deref()) { - delete d; - } - - d = array.d; - - if (!d) { - d = new QJsonPrivate::Data(0, QJsonValue::Array); - } else if (d->compactionCounter || array.a != d->header->root()) { - QJsonArray a(array); - if (d->compactionCounter) { - a.compact(); - } else { - a.detach(); - } - d = a.d; - d->ref.ref(); - return; - } - d->ref.ref(); -} - -/*! - Returns \c true if the \a other document is equal to this document. - */ -bool QJsonDocument::operator==(const QJsonDocument &other) const -{ - if (d == other.d) { - return true; - } - - if (!d || !other.d) { - return false; - } - - if (d->header->root()->isArray() != other.d->header->root()->isArray()) { - return false; - } - - if (d->header->root()->isObject()) - return QJsonObject(d, static_cast(d->header->root())) - == QJsonObject(other.d, static_cast(other.d->header->root())); - else - return QJsonArray(d, static_cast(d->header->root())) - == QJsonArray(other.d, static_cast(other.d->header->root())); -} - -/*! - \fn bool QJsonDocument::operator!=(const QJsonDocument &other) const - - returns \c true if \a other is not equal to this document - */ - -/*! - returns true if this document is null. - - Null documents are documents created through the default constructor. - - Documents created from UTF-8 encoded text or the binary format are - validated during parsing. If validation fails, the returned document - will also be null. - */ -bool QJsonDocument::isNull() const -{ - return (d == 0); -} - -QDebug operator<<(QDebug dbg, const QJsonDocument &o) -{ - if (!o.d) { - dbg << "QJsonDocument()"; - return dbg; - } - QByteArray json; - if (o.d->header->root()->isArray()) { - QJsonPrivate::Writer::arrayToJson(static_cast(o.d->header->root()), json, 0, true); - } else { - QJsonPrivate::Writer::objectToJson(static_cast(o.d->header->root()), json, 0, true); - } - dbg.nospace() << "QJsonDocument(" - << json.constData() // print as utf-8 string without extra quotation marks - << ")"; - return dbg.space(); -} - -QT_END_NAMESPACE diff --git a/src/core/json/qjsondocument.h b/src/core/json/qjsondocument.h deleted file mode 100644 index cc8868c18..000000000 --- a/src/core/json/qjsondocument.h +++ /dev/null @@ -1,136 +0,0 @@ -/**************************************************************************** -** -** Copyright (c) 2012-2015 Barbara Geller -** Copyright (c) 2012-2015 Ansel Sermersheim -** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies). -** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies). -** Copyright (C) 2016 Ivailo Monev -** -** This file is part of the QtCore module of the Katie Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QJSONDOCUMENT_H -#define QJSONDOCUMENT_H - -#include - -QT_BEGIN_NAMESPACE - - -class QDebug; - -namespace QJsonPrivate { -class Parser; -} - -struct Q_CORE_EXPORT QJsonParseError { - enum ParseError { - NoError = 0, - UnterminatedObject, - MissingNameSeparator, - UnterminatedArray, - MissingValueSeparator, - IllegalValue, - TerminationByNumber, - IllegalNumber, - IllegalEscapeSequence, - IllegalUTF8String, - UnterminatedString, - MissingObject, - DeepNesting, - DocumentTooLarge - }; - - QString errorString() const; - - int offset; - ParseError error; -}; - -class Q_CORE_EXPORT QJsonDocument -{ - public: - -#ifdef Q_LITTLE_ENDIAN - static const uint BinaryFormatTag = ('q') | ('b' << 8) | ('j' << 16) | ('s' << 24); -#else - static const uint BinaryFormatTag = ('q' << 24) | ('b' << 16) | ('j' << 8) | ('s'); -#endif - - QJsonDocument(); - explicit QJsonDocument(const QJsonObject &object); - explicit QJsonDocument(const QJsonArray &array); - ~QJsonDocument(); - - QJsonDocument(const QJsonDocument &other); - QJsonDocument &operator =(const QJsonDocument &other); - - enum DataValidation { - Validate, - BypassValidation - }; - - static QJsonDocument fromRawData(const char *data, int size, DataValidation validation = Validate); - const char *rawData(int *size) const; - - static QJsonDocument fromBinaryData(const QByteArray &data, DataValidation validation = Validate); - QByteArray toBinaryData() const; - - static QJsonDocument fromVariant(const QVariant &variant); - QVariant toVariant() const; - - enum JsonFormat { - Indented, - Compact - }; - - static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error = 0); - - QByteArray toJson(JsonFormat format = Indented) const; - - bool isEmpty() const; - bool isArray() const; - bool isObject() const; - - QJsonObject object() const; - QJsonArray array() const; - - void setObject(const QJsonObject &object); - void setArray(const QJsonArray &array); - - bool operator==(const QJsonDocument &other) const; - bool operator!=(const QJsonDocument &other) const { - return !(*this == other); - } - - bool isNull() const; - - private: - friend class QJsonValue; - friend class QJsonPrivate::Data; - friend class QJsonPrivate::Parser; - friend Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonDocument &); - - QJsonDocument(QJsonPrivate::Data *data); - - QJsonPrivate::Data *d; -}; - -Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonDocument &); - -QT_END_NAMESPACE - -#endif // QJSONDOCUMENT_H diff --git a/src/core/json/qjsonobject.cpp b/src/core/json/qjsonobject.cpp deleted file mode 100644 index 16a1fc5e0..000000000 --- a/src/core/json/qjsonobject.cpp +++ /dev/null @@ -1,1052 +0,0 @@ -/**************************************************************************** -** -** Copyright (c) 2012-2015 Barbara Geller -** Copyright (c) 2012-2015 Ansel Sermersheim -** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies). -** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies). -** Copyright (C) 2016 Ivailo Monev -** -** This file is part of the QtCore module of the Katie Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qjsonobject.h" -#include "qjsonvalue.h" -#include "qjsonarray.h" -#include "qstringlist.h" -#include "qdebug.h" -#include "qvariant.h" -#include "qjson_p.h" -#include "qjsonwriter_p.h" - -QT_BEGIN_NAMESPACE - -QJsonObject::QJsonObject() - : d(0), o(0) -{ -} - -/*! - \internal - */ -QJsonObject::QJsonObject(QJsonPrivate::Data *data, QJsonPrivate::Object *object) - : d(data), o(object) -{ - Q_ASSERT(d); - Q_ASSERT(o); - d->ref.ref(); -} - - -/*! - Destroys the object. - */ -QJsonObject::~QJsonObject() -{ - if (d && !d->ref.deref()) { - delete d; - } -} - -/*! - Creates a copy of \a other. - - Since QJsonObject is implicitly shared, the copy is shallow - as long as the object does not get modified. - */ -QJsonObject::QJsonObject(const QJsonObject &other) -{ - d = other.d; - o = other.o; - if (d) { - d->ref.ref(); - } -} - -/*! - Assigns \a other to this object. - */ -QJsonObject &QJsonObject::operator =(const QJsonObject &other) -{ - if (d != other.d) { - if (d && !d->ref.deref()) { - delete d; - } - d = other.d; - if (d) { - d->ref.ref(); - } - } - o = other.o; - - return *this; -} - -/*! - Converts the variant map \a map to a QJsonObject. - - The keys in \a map will be used as the keys in the JSON object, - and the QVariant values will be converted to JSON values. - - \sa toVariantMap(), QJsonValue::fromVariant() - */ -QJsonObject QJsonObject::fromVariantMap(const QVariantMap &map) -{ - // ### this is implemented the trivial way, not the most efficient way - - QJsonObject object; - for (QVariantMap::const_iterator it = map.constBegin(); it != map.constEnd(); ++it) { - object.insert(it.key(), QJsonValue::fromVariant(it.value())); - } - return object; -} - -/*! - Converts this object to a QVariantMap. - - Returns the created map. - */ -QVariantMap QJsonObject::toVariantMap() const -{ - QVariantMap map; - if (o) { - for (uint i = 0; i < o->length; ++i) { - const QJsonPrivate::Entry *e = o->entryAt(i); - map.insert(e->key(), QJsonValue(d, o, e->value).toVariant()); - } - } - return map; -} - -/*! - Converts the variant hash \a hash to a QJsonObject. - \since 4.9 - - The keys in \a hash will be used as the keys in the JSON object, - and the QVariant values will be converted to JSON values. - - \sa fromVariantMap(), toVariantHash(), QJsonValue::fromVariant() - */ -QJsonObject QJsonObject::fromVariantHash(const QVariantHash &hash) -{ - // ### this is implemented the trivial way, not the most efficient way - - QJsonObject object; - for (QVariantHash::const_iterator it = hash.constBegin(); it != hash.constEnd(); ++it) - object.insert(it.key(), QJsonValue::fromVariant(it.value())); - return object; -} - -/*! - Converts this object to a QVariantHash. - \since 4.9 - - Returns the created hash. - - \sa toVariantMap() - */ -QVariantHash QJsonObject::toVariantHash() const -{ - QVariantHash hash; - if (o) { - for (uint i = 0; i < o->length; ++i) { - const QJsonPrivate::Entry *e = o->entryAt(i); - hash.insert(e->key(), QJsonValue(d, o, e->value).toVariant()); - } - } - return hash; -} - - -/*! - Returns a list of all keys in this object. - */ -QStringList QJsonObject::keys() const -{ - if (!d) { - return QStringList(); - } - - QStringList keys; - keys.reserve(o->length); - for (uint i = 0; i < o->length; ++i) { - const QJsonPrivate::Entry *e = o->entryAt(i); - keys.append(e->key()); - } - - return keys; -} - -/*! - Returns the the number of (key, value) pairs stored in the object. - */ -int QJsonObject::size() const -{ - if (!d) { - return 0; - } - - return o->length; -} - -/*! - Returns \c true if the object is empty. This is the same as size() == 0. - - \sa size() - */ -bool QJsonObject::isEmpty() const -{ - if (!d) { - return true; - } - - return !o->length; -} - -/*! - Returns a QJsonValue representing the value for the key \a key. - - The returned QJsonValue is \c Undefined, if the key does not exist. - - \sa QJsonValue, QJsonValue::isUndefined() - */ -QJsonValue QJsonObject::value(const QString &key) const -{ - if (!d) { - return QJsonValue(); - } - - bool keyExists; - int i = o->indexOf(key, &keyExists); - if (!keyExists) { - return QJsonValue(QJsonValue::Undefined); - } - return QJsonValue(d, o, o->entryAt(i)->value); -} - -/*! - Returns a QJsonValue representing the value for the key \a key. - - This does the same as value(). - - The returned QJsonValue is \c Undefined, if the key does not exist. - - \sa value(), QJsonValue, QJsonValue::isUndefined() - */ -QJsonValue QJsonObject::operator [](const QString &key) const -{ - return value(key); -} - -/*! - Returns a reference to the value for \a key. - - The return value is of type QJsonValueRef, a helper class for QJsonArray - and QJsonObject. When you get an object of type QJsonValueRef, you can - use it as if it were a reference to a QJsonValue. If you assign to it, - the assignment will apply to the character in the QJsonArray of QJsonObject - from which you got the reference. - - \sa value() - */ -QJsonValueRef QJsonObject::operator [](const QString &key) -{ - // ### somewhat inefficient, as we lookup the key twice if it doesn't yet exist - bool keyExists = false; - int index = o ? o->indexOf(key, &keyExists) : -1; - if (!keyExists) { - iterator i = insert(key, QJsonValue()); - index = i.i; - } - return QJsonValueRef(this, index); -} - -/*! - Inserts a new item with the key \a key and a value of \a value. - - If there is already an item with the key \a key then that item's value - is replaced with \a value. - - Returns an iterator pointing to the inserted item. - - If the value is QJsonValue::Undefined, it will cause the key to get removed - from the object. The returned iterator will then point to end() - - \sa remove(), take(), QJsonObject::iterator, end() - */ -QJsonObject::iterator QJsonObject::insert(const QString &key, const QJsonValue &value) -{ - if (value.t == QJsonValue::Undefined) { - remove(key); - return end(); - } - QJsonValue val = value; - - bool latinOrIntValue; - int valueSize = QJsonPrivate::Value::requiredStorage(val, &latinOrIntValue); - - bool latinKey = QJsonPrivate::useCompressed(key); - int valueOffset = sizeof(QJsonPrivate::Entry) + QJsonPrivate::qStringSize(key, latinKey); - int requiredSize = valueOffset + valueSize; - - detach(requiredSize + sizeof(QJsonPrivate::offset)); // offset for the new index entry - - if (!o->length) { - o->tableOffset = sizeof(QJsonPrivate::Object); - } - - bool keyExists = false; - int pos = o->indexOf(key, &keyExists); - if (keyExists) { - ++d->compactionCounter; - } - - uint off = o->reserveSpace(requiredSize, pos, 1, keyExists); - if (!off) { - return end(); - } - - QJsonPrivate::Entry *e = o->entryAt(pos); - e->value.type = val.t; - e->value.latinKey = latinKey; - e->value.latinOrIntValue = latinOrIntValue; - e->value.value = QJsonPrivate::Value::valueToStore(val, (char *)e - (char *)o + valueOffset); - QJsonPrivate::copyString((char *)(e + 1), key, latinKey); - if (valueSize) { - QJsonPrivate::Value::copyData(val, (char *)e + valueOffset, latinOrIntValue); - } - - if (d->compactionCounter > 32u && d->compactionCounter >= unsigned(o->length) / 2u) { - compact(); - } - - return iterator(this, pos); -} - -/*! - Removes \a key from the object. - - \sa insert(), take() - */ -void QJsonObject::remove(const QString &key) -{ - if (!d) { - return; - } - - bool keyExists; - int index = o->indexOf(key, &keyExists); - if (!keyExists) { - return; - } - - detach(); - o->removeItems(index, 1); - ++d->compactionCounter; - if (d->compactionCounter > 32u && d->compactionCounter >= unsigned(o->length) / 2u) { - compact(); - } -} - -/*! - Removes \a key from the object. - - Returns a QJsonValue containing the value referenced by \a key. - If \a key was not contained in the object, the returned QJsonValue - is Undefined. - - \sa insert(), remove(), QJsonValue - */ -QJsonValue QJsonObject::take(const QString &key) -{ - if (!o) { - return QJsonValue(QJsonValue::Undefined); - } - - bool keyExists; - int index = o->indexOf(key, &keyExists); - if (!keyExists) { - return QJsonValue(QJsonValue::Undefined); - } - - QJsonValue v(d, o, o->entryAt(index)->value); - detach(); - o->removeItems(index, 1); - ++d->compactionCounter; - if (d->compactionCounter > 32u && d->compactionCounter >= unsigned(o->length) / 2u) { - compact(); - } - - return v; -} - -/*! - Returns \c true if the object contains key \a key. - - \sa insert(), remove(), take() - */ -bool QJsonObject::contains(const QString &key) const -{ - if (!o) { - return false; - } - - bool keyExists; - o->indexOf(key, &keyExists); - return keyExists; -} - -/*! - Returns \c true if \a other is equal to this object - */ -bool QJsonObject::operator==(const QJsonObject &other) const -{ - if (o == other.o) { - return true; - } - - if (!o) { - return !other.o->length; - } - if (!other.o) { - return !o->length; - } - if (o->length != other.o->length) { - return false; - } - - for (uint i = 0; i < o->length; ++i) { - const QJsonPrivate::Entry *e = o->entryAt(i); - const QJsonValue v(d, o, e->value); - if (other.value(e->key()) != v) { - return false; - } - } - - return true; -} - -/*! - Returns \c true if \a other is not equal to this object - */ -bool QJsonObject::operator!=(const QJsonObject &other) const -{ - return !(*this == other); -} - -/*! - Removes the (key, value) pair pointed to by the iterator \a it - from the map, and returns an iterator to the next item in the - map. - - \sa remove() - */ -QJsonObject::iterator QJsonObject::erase(QJsonObject::iterator it) -{ - Q_ASSERT(d && d->ref == 1); - - if (it.o != this || it.i < 0 || it.i >= (int)o->length) { - return iterator(this, o->length); - } - - const int index = it.i; - - o->removeItems(index, 1); - ++d->compactionCounter; - if (d->compactionCounter > 32u && d->compactionCounter >= unsigned(o->length) / 2u) { - compact(); - } - - // iterator hasn't changed - return it; -} - -/*! - Returns an iterator pointing to the item with key \a key in the - map. - - If the map contains no item with key \a key, the function - returns end(). - */ -QJsonObject::iterator QJsonObject::find(const QString &key) -{ - bool keyExists = false; - int index = o ? o->indexOf(key, &keyExists) : 0; - if (!keyExists) { - return end(); - } - detach(); - return iterator(this, index); -} - -/*! \fn QJsonObject::const_iterator QJsonObject::find(const QString &key) const - - \overload -*/ - -/*! - Returns an const iterator pointing to the item with key \a key in the - map. - - If the map contains no item with key \a key, the function - returns constEnd(). - */ -QJsonObject::const_iterator QJsonObject::constFind(const QString &key) const -{ - bool keyExists = false; - int index = o ? o->indexOf(key, &keyExists) : 0; - if (!keyExists) { - return end(); - } - return const_iterator(this, index); -} - -/*! \fn int QJsonObject::count() const - - \overload - - Same as size(). -*/ - -/*! \fn int QJsonObject::length() const - - \overload - - Same as size(). -*/ - -/*! \fn QJsonObject::iterator QJsonObject::begin() - - Returns an \l{STL-style iterator} pointing to the first item in - the object. - - \sa constBegin(), end() -*/ - -/*! \fn QJsonObject::const_iterator QJsonObject::begin() const - - \overload -*/ - -/*! \fn QJsonObject::const_iterator QJsonObject::constBegin() const - - Returns a const \l{STL-style iterator} pointing to the first item - in the object. - - \sa begin(), constEnd() -*/ - -/*! \fn QJsonObject::iterator QJsonObject::end() - - Returns an \l{STL-style iterator} pointing to the imaginary item - after the last item in the object. - - \sa begin(), constEnd() -*/ - -/*! \fn QJsonObject::const_iterator QJsonObject::end() const - - \overload -*/ - -/*! \fn QJsonObject::const_iterator QJsonObject::constEnd() const - - Returns a const \l{STL-style iterator} pointing to the imaginary - item after the last item in the object. - - \sa constBegin(), end() -*/ - -/*! - \fn bool QJsonObject::empty() const - - This function is provided for STL compatibility. It is equivalent - to isEmpty(), returning \c true if the object is empty; otherwise - returning \c false. -*/ - -/*! \class QJsonObject::iterator - \inmodule QtCore - \ingroup json - \reentrant - \since 4.9 - - \brief The QJsonObject::iterator class provides an STL-style non-const iterator for QJsonObject. - - QJsonObject::iterator allows you to iterate over a QJsonObject - and to modify the value (but not the key) stored under - a particular key. If you want to iterate over a const QJsonObject, you - should use QJsonObject::const_iterator. It is generally good practice to - use QJsonObject::const_iterator on a non-const QJsonObject as well, unless you - need to change the QJsonObject through the iterator. Const iterators are - slightly faster, and improves code readability. - - The default QJsonObject::iterator constructor creates an uninitialized - iterator. You must initialize it using a QJsonObject function like - QJsonObject::begin(), QJsonObject::end(), or QJsonObject::find() before you can - start iterating. - - Multiple iterators can be used on the same object. Existing iterators will however - become dangling once the object gets modified. - - \sa QJsonObject::const_iterator -*/ - -/*! \typedef QJsonObject::iterator::difference_type - - \internal -*/ - -/*! \typedef QJsonObject::iterator::iterator_category - - A synonym for \e {std::bidirectional_iterator_tag} indicating - this iterator is a bidirectional iterator. -*/ - -/*! \typedef QJsonObject::iterator::reference - - \internal -*/ - -/*! \typedef QJsonObject::iterator::value_type - - \internal -*/ - -/*! \fn QJsonObject::iterator::iterator() - - Constructs an uninitialized iterator. - - Functions like key(), value(), and operator++() must not be - called on an uninitialized iterator. Use operator=() to assign a - value to it before using it. - - \sa QJsonObject::begin(), QJsonObject::end() -*/ - -/*! \fn QJsonObject::iterator::iterator(QJsonObject *obj, int index) - \internal -*/ - -/*! \fn QString QJsonObject::iterator::key() const - - Returns the current item's key. - - There is no direct way of changing an item's key through an - iterator, although it can be done by calling QJsonObject::erase() - followed by QJsonObject::insert(). - - \sa value() -*/ - -/*! \fn QJsonValueRef QJsonObject::iterator::value() const - - Returns a modifiable reference to the current item's value. - - You can change the value of an item by using value() on - the left side of an assignment. - - The return value is of type QJsonValueRef, a helper class for QJsonArray - and QJsonObject. When you get an object of type QJsonValueRef, you can - use it as if it were a reference to a QJsonValue. If you assign to it, - the assignment will apply to the character in the QJsonArray of QJsonObject - from which you got the reference. - - \sa key(), operator*() -*/ - -/*! \fn QJsonValueRef QJsonObject::iterator::operator*() const - - Returns a modifiable reference to the current item's value. - - Same as value(). - - The return value is of type QJsonValueRef, a helper class for QJsonArray - and QJsonObject. When you get an object of type QJsonValueRef, you can - use it as if it were a reference to a QJsonValue. If you assign to it, - the assignment will apply to the character in the QJsonArray of QJsonObject - from which you got the reference. - - \sa key() -*/ - -/*! - \fn bool QJsonObject::iterator::operator==(const iterator &other) const - \fn bool QJsonObject::iterator::operator==(const const_iterator &other) const - - Returns \c true if \a other points to the same item as this - iterator; otherwise returns \c false. - - \sa operator!=() -*/ - -/*! - \fn bool QJsonObject::iterator::operator!=(const iterator &other) const - \fn bool QJsonObject::iterator::operator!=(const const_iterator &other) const - - Returns \c true if \a other points to a different item than this - iterator; otherwise returns \c false. - - \sa operator==() -*/ - -/*! \fn QJsonObject::iterator QJsonObject::iterator::operator++() - - The prefix ++ operator, \c{++i}, advances the iterator to the - next item in the object and returns an iterator to the new current - item. - - Calling this function on QJsonObject::end() leads to undefined results. - - \sa operator--() -*/ - -/*! \fn QJsonObject::iterator QJsonObject::iterator::operator++(int) - - \overload - - The postfix ++ operator, \c{i++}, advances the iterator to the - next item in the object and returns an iterator to the previously - current item. -*/ - -/*! \fn QJsonObject::iterator QJsonObject::iterator::operator--() - - The prefix -- operator, \c{--i}, makes the preceding item - current and returns an iterator pointing to the new current item. - - Calling this function on QJsonObject::begin() leads to undefined - results. - - \sa operator++() -*/ - -/*! \fn QJsonObject::iterator QJsonObject::iterator::operator--(int) - - \overload - - The postfix -- operator, \c{i--}, makes the preceding item - current and returns an iterator pointing to the previously - current item. -*/ - -/*! \fn QJsonObject::iterator QJsonObject::iterator::operator+(int j) const - - Returns an iterator to the item at \a j positions forward from - this iterator. If \a j is negative, the iterator goes backward. - - \sa operator-() - -*/ - -/*! \fn QJsonObject::iterator QJsonObject::iterator::operator-(int j) const - - Returns an iterator to the item at \a j positions backward from - this iterator. If \a j is negative, the iterator goes forward. - - \sa operator+() -*/ - -/*! \fn QJsonObject::iterator &QJsonObject::iterator::operator+=(int j) - - Advances the iterator by \a j items. If \a j is negative, the - iterator goes backward. - - \sa operator-=(), operator+() -*/ - -/*! \fn QJsonObject::iterator &QJsonObject::iterator::operator-=(int j) - - Makes the iterator go back by \a j items. If \a j is negative, - the iterator goes forward. - - \sa operator+=(), operator-() -*/ - -/*! - \class QJsonObject::const_iterator - \inmodule QtCore - \brief The QJsonObject::const_iterator class provides an STL-style const iterator for QJsonObject. - - QJsonObject::const_iterator allows you to iterate over a QJsonObject. - If you want to modify the QJsonObject as you iterate - over it, you must use QJsonObject::iterator instead. It is generally - good practice to use QJsonObject::const_iterator on a non-const QJsonObject as - well, unless you need to change the QJsonObject through the iterator. - Const iterators are slightly faster and improves code - readability. - - The default QJsonObject::const_iterator constructor creates an - uninitialized iterator. You must initialize it using a QJsonObject - function like QJsonObject::constBegin(), QJsonObject::constEnd(), or - QJsonObject::find() before you can start iterating. - - Multiple iterators can be used on the same object. Existing iterators - will however become dangling if the object gets modified. - - \sa QJsonObject::iterator -*/ - -/*! \typedef QJsonObject::const_iterator::difference_type - - \internal -*/ - -/*! \typedef QJsonObject::const_iterator::iterator_category - - A synonym for \e {std::bidirectional_iterator_tag} indicating - this iterator is a bidirectional iterator. -*/ - -/*! \typedef QJsonObject::const_iterator::reference - - \internal -*/ - -/*! \typedef QJsonObject::const_iterator::value_type - - \internal -*/ - -/*! \fn QJsonObject::const_iterator::const_iterator() - - Constructs an uninitialized iterator. - - Functions like key(), value(), and operator++() must not be - called on an uninitialized iterator. Use operator=() to assign a - value to it before using it. - - \sa QJsonObject::constBegin(), QJsonObject::constEnd() -*/ - -/*! \fn QJsonObject::const_iterator::const_iterator(const QJsonObject *obj, int index) - \internal -*/ - -/*! \fn QJsonObject::const_iterator::const_iterator(const iterator &other) - - Constructs a copy of \a other. -*/ - -/*! \fn QString QJsonObject::const_iterator::key() const - - Returns the current item's key. - - \sa value() -*/ - -/*! \fn QJsonValue QJsonObject::const_iterator::value() const - - Returns the current item's value. - - \sa key(), operator*() -*/ - -/*! \fn QJsonValue QJsonObject::const_iterator::operator*() const - - Returns the current item's value. - - Same as value(). - - \sa key() -*/ - -/*! \fn bool QJsonObject::const_iterator::operator==(const const_iterator &other) const - \fn bool QJsonObject::const_iterator::operator==(const iterator &other) const - - Returns \c true if \a other points to the same item as this - iterator; otherwise returns \c false. - - \sa operator!=() -*/ - -/*! \fn bool QJsonObject::const_iterator::operator!=(const const_iterator &other) const - \fn bool QJsonObject::const_iterator::operator!=(const iterator &other) const - - Returns \c true if \a other points to a different item than this - iterator; otherwise returns \c false. - - \sa operator==() -*/ - -/*! \fn QJsonObject::const_iterator QJsonObject::const_iterator::operator++() - - The prefix ++ operator, \c{++i}, advances the iterator to the - next item in the object and returns an iterator to the new current - item. - - Calling this function on QJsonObject::end() leads to undefined results. - - \sa operator--() -*/ - -/*! \fn QJsonObject::const_iterator QJsonObject::const_iterator::operator++(int) - - \overload - - The postfix ++ operator, \c{i++}, advances the iterator to the - next item in the object and returns an iterator to the previously - current item. -*/ - -/*! \fn QJsonObject::const_iterator &QJsonObject::const_iterator::operator--() - - The prefix -- operator, \c{--i}, makes the preceding item - current and returns an iterator pointing to the new current item. - - Calling this function on QJsonObject::begin() leads to undefined - results. - - \sa operator++() -*/ - -/*! \fn QJsonObject::const_iterator QJsonObject::const_iterator::operator--(int) - - \overload - - The postfix -- operator, \c{i--}, makes the preceding item - current and returns an iterator pointing to the previously - current item. -*/ - -/*! \fn QJsonObject::const_iterator QJsonObject::const_iterator::operator+(int j) const - - Returns an iterator to the item at \a j positions forward from - this iterator. If \a j is negative, the iterator goes backward. - - This operation can be slow for large \a j values. - - \sa operator-() -*/ - -/*! \fn QJsonObject::const_iterator QJsonObject::const_iterator::operator-(int j) const - - Returns an iterator to the item at \a j positions backward from - this iterator. If \a j is negative, the iterator goes forward. - - This operation can be slow for large \a j values. - - \sa operator+() -*/ - -/*! \fn QJsonObject::const_iterator &QJsonObject::const_iterator::operator+=(int j) - - Advances the iterator by \a j items. If \a j is negative, the - iterator goes backward. - - This operation can be slow for large \a j values. - - \sa operator-=(), operator+() -*/ - -/*! \fn QJsonObject::const_iterator &QJsonObject::const_iterator::operator-=(int j) - - Makes the iterator go back by \a j items. If \a j is negative, - the iterator goes forward. - - This operation can be slow for large \a j values. - - \sa operator+=(), operator-() -*/ - - -/*! - \internal - */ -void QJsonObject::detach(uint reserve) -{ - if (!d) { - d = new QJsonPrivate::Data(reserve, QJsonValue::Object); - o = static_cast(d->header->root()); - d->ref.ref(); - return; - } - if (reserve == 0 && d->ref == 1) { - return; - } - - QJsonPrivate::Data *x = d->clone(o, reserve); - x->ref.ref(); - if (!d->ref.deref()) { - delete d; - } - d = x; - o = static_cast(d->header->root()); -} - -/*! - \internal - */ -void QJsonObject::compact() -{ - if (!d || !d->compactionCounter) { - return; - } - - detach(); - d->compact(); - o = static_cast(d->header->root()); -} - -/*! - \internal - */ -QString QJsonObject::keyAt(int i) const -{ - Q_ASSERT(o && i >= 0 && i < (int)o->length); - - const QJsonPrivate::Entry *e = o->entryAt(i); - return e->key(); -} - -/*! - \internal - */ -QJsonValue QJsonObject::valueAt(int i) const -{ - if (!o || i < 0 || i >= (int)o->length) { - return QJsonValue(QJsonValue::Undefined); - } - - const QJsonPrivate::Entry *e = o->entryAt(i); - return QJsonValue(d, o, e->value); -} - -/*! - \internal - */ -void QJsonObject::setValueAt(int i, const QJsonValue &val) -{ - Q_ASSERT(o && i >= 0 && i < (int)o->length); - - const QJsonPrivate::Entry *e = o->entryAt(i); - insert(e->key(), val); -} - -QDebug operator<<(QDebug dbg, const QJsonObject &o) -{ - if (!o.o) { - dbg << "QJsonObject()"; - return dbg; - } - QByteArray json; - QJsonPrivate::Writer::objectToJson(o.o, json, 0, true); - dbg.nospace() << "QJsonObject(" - << json.constData() // print as utf-8 string without extra quotation marks - << ")"; - return dbg.space(); -} - -QT_END_NAMESPACE diff --git a/src/core/json/qjsonobject.h b/src/core/json/qjsonobject.h deleted file mode 100644 index 42fa0e4e5..000000000 --- a/src/core/json/qjsonobject.h +++ /dev/null @@ -1,305 +0,0 @@ -/**************************************************************************** -** -** Copyright (c) 2012-2015 Barbara Geller -** Copyright (c) 2012-2015 Ansel Sermersheim -** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies). -** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies). -** Copyright (C) 2016 Ivailo Monev -** -** This file is part of the QtCore module of the Katie Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QJSONOBJECT_H -#define QJSONOBJECT_H - -#include "qjsonvalue.h" -#include -#include - -QT_BEGIN_NAMESPACE - - -class QDebug; -typedef QMap QVariantMap; -typedef QHash QVariantHash; - -class Q_CORE_EXPORT QJsonObject -{ - public: - QJsonObject(); - ~QJsonObject(); - - QJsonObject(const QJsonObject &other); - QJsonObject &operator =(const QJsonObject &other); - - static QJsonObject fromVariantMap(const QVariantMap &map); - QVariantMap toVariantMap() const; - static QJsonObject fromVariantHash(const QVariantHash &map); - QVariantHash toVariantHash() const; - - QStringList keys() const; - int size() const; - inline int count() const { - return size(); - } - inline int length() const { - return size(); - } - bool isEmpty() const; - - QJsonValue value(const QString &key) const; - QJsonValue operator[] (const QString &key) const; - QJsonValueRef operator[] (const QString &key); - - void remove(const QString &key); - QJsonValue take(const QString &key); - bool contains(const QString &key) const; - - bool operator==(const QJsonObject &other) const; - bool operator!=(const QJsonObject &other) const; - - class const_iterator; - - class iterator - { - friend class const_iterator; - friend class QJsonObject; - QJsonObject *o; - int i; - - public: - typedef std::bidirectional_iterator_tag iterator_category; - typedef int difference_type; - typedef QJsonValue value_type; - typedef QJsonValueRefPtr pointer; - typedef QJsonValueRef reference; - - inline iterator() : o(0), i(0) {} - inline iterator(QJsonObject *obj, int index) : o(obj), i(index) {} - - inline QString key() const { - return o->keyAt(i); - } - inline QJsonValueRef value() const { - return QJsonValueRef(o, i); - } - inline QJsonValueRef operator*() const { - return QJsonValueRef(o, i); - } - inline QJsonValueRefPtr operator->() const { - return QJsonValueRefPtr(o, i); - } - inline bool operator==(const iterator &other) const { - return i == other.i; - } - inline bool operator!=(const iterator &other) const { - return i != other.i; - } - - inline iterator &operator++() { - ++i; - return *this; - } - inline iterator operator++(int) { - iterator r = *this; - ++i; - return r; - } - inline iterator &operator--() { - --i; - return *this; - } - inline iterator operator--(int) { - iterator r = *this; - --i; - return r; - } - inline iterator operator+(int j) const { - iterator r = *this; - r.i += j; - return r; - } - inline iterator operator-(int j) const { - return operator+(-j); - } - inline iterator &operator+=(int j) { - i += j; - return *this; - } - inline iterator &operator-=(int j) { - i -= j; - return *this; - } - - public: - inline bool operator==(const const_iterator &other) const { - return i == other.i; - } - inline bool operator!=(const const_iterator &other) const { - return i != other.i; - } - }; - friend class iterator; - - class const_iterator - { - friend class iterator; - const QJsonObject *o; - int i; - - public: - typedef std::bidirectional_iterator_tag iterator_category; - typedef int difference_type; - typedef QJsonValue* value_type; - typedef QJsonValuePtr pointer; - typedef QJsonValue reference; - - inline const_iterator() : o(0), i(0) {} - inline const_iterator(const QJsonObject *obj, int index) - : o(obj), i(index) {} - inline const_iterator(const iterator &other) - : o(other.o), i(other.i) {} - - inline QString key() const { - return o->keyAt(i); - } - inline QJsonValue value() const { - return o->valueAt(i); - } - inline QJsonValue operator*() const { - return o->valueAt(i); - } - inline QJsonValuePtr operator->() const { - return QJsonValuePtr(o->valueAt(i)); - } - inline bool operator==(const const_iterator &other) const { - return i == other.i; - } - inline bool operator!=(const const_iterator &other) const { - return i != other.i; - } - - inline const_iterator &operator++() { - ++i; - return *this; - } - inline const_iterator operator++(int) { - const_iterator r = *this; - ++i; - return r; - } - inline const_iterator &operator--() { - --i; - return *this; - } - inline const_iterator operator--(int) { - const_iterator r = *this; - --i; - return r; - } - inline const_iterator operator+(int j) const { - const_iterator r = *this; - r.i += j; - return r; - } - inline const_iterator operator-(int j) const { - return operator+(-j); - } - inline const_iterator &operator+=(int j) { - i += j; - return *this; - } - inline const_iterator &operator-=(int j) { - i -= j; - return *this; - } - - inline bool operator==(const iterator &other) const { - return i == other.i; - } - inline bool operator!=(const iterator &other) const { - return i != other.i; - } - }; - friend class const_iterator; - - // STL style - inline iterator begin() { - detach(); - return iterator(this, 0); - } - inline const_iterator begin() const { - return const_iterator(this, 0); - } - inline const_iterator constBegin() const { - return const_iterator(this, 0); - } - inline iterator end() { - detach(); - return iterator(this, size()); - } - inline const_iterator end() const { - return const_iterator(this, size()); - } - inline const_iterator constEnd() const { - return const_iterator(this, size()); - } - iterator erase(iterator it); - - // more Qt - typedef iterator Iterator; - typedef const_iterator ConstIterator; - iterator find(const QString &key); - const_iterator find(const QString &key) const { - return constFind(key); - } - const_iterator constFind(const QString &key) const; - iterator insert(const QString &key, const QJsonValue &value); - - // STL compatibility - typedef QJsonValue mapped_type; - typedef QString key_type; - typedef int size_type; - - inline bool empty() const { - return isEmpty(); - } - - private: - friend class QJsonPrivate::Data; - friend class QJsonValue; - friend class QJsonDocument; - friend class QJsonValueRef; - - friend Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonObject &); - - QJsonObject(QJsonPrivate::Data *data, QJsonPrivate::Object *object); - void detach(uint reserve = 0); - void compact(); - - QString keyAt(int i) const; - QJsonValue valueAt(int i) const; - void setValueAt(int i, const QJsonValue &val); - - QJsonPrivate::Data *d; - QJsonPrivate::Object *o; -}; - -Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonObject &); - -QT_END_NAMESPACE - -#endif // QJSONOBJECT_H diff --git a/src/core/json/qjsonparser.cpp b/src/core/json/qjsonparser.cpp deleted file mode 100644 index 06d123c37..000000000 --- a/src/core/json/qjsonparser.cpp +++ /dev/null @@ -1,984 +0,0 @@ -/**************************************************************************** -** -** Copyright (c) 2012-2015 Barbara Geller -** Copyright (c) 2012-2015 Ansel Sermersheim -** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies). -** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies). -** Copyright (C) 2016 Ivailo Monev -** -** This file is part of the QtCore module of the Katie Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qcoreapplication.h" -#include "qdebug.h" -#include "qjsonparser_p.h" -#include "qjson_p.h" - -//#define PARSER_DEBUG -#ifdef PARSER_DEBUG -static int indent = 0; -#define BEGIN qDebug() << QByteArray(4*indent++, ' ').constData() << "pos=" << current -#define END --indent -#define DEBUG qDebug() << QByteArray(4*indent, ' ').constData() -#else -#define BEGIN if (1) ; else qDebug() -#define END do {} while (0) -#define DEBUG if (1) ; else qDebug() -#endif - -static const int nestingLimit = 1024; - -QT_BEGIN_NAMESPACE - -// error strings for the JSON parser -#define JSONERR_OK QT_TRANSLATE_NOOP("QJsonParseError", "no error occurred") -#define JSONERR_UNTERM_OBJ QT_TRANSLATE_NOOP("QJsonParseError", "unterminated object") -#define JSONERR_MISS_NSEP QT_TRANSLATE_NOOP("QJsonParseError", "missing name separator") -#define JSONERR_UNTERM_AR QT_TRANSLATE_NOOP("QJsonParseError", "unterminated array") -#define JSONERR_MISS_VSEP QT_TRANSLATE_NOOP("QJsonParseError", "missing value separator") -#define JSONERR_ILLEGAL_VAL QT_TRANSLATE_NOOP("QJsonParseError", "illegal value") -#define JSONERR_END_OF_NUM QT_TRANSLATE_NOOP("QJsonParseError", "invalid termination by number") -#define JSONERR_ILLEGAL_NUM QT_TRANSLATE_NOOP("QJsonParseError", "illegal number") -#define JSONERR_STR_ESC_SEQ QT_TRANSLATE_NOOP("QJsonParseError", "invalid escape sequence") -#define JSONERR_STR_UTF8 QT_TRANSLATE_NOOP("QJsonParseError", "invalid UTF8 string") -#define JSONERR_UTERM_STR QT_TRANSLATE_NOOP("QJsonParseError", "unterminated string") -#define JSONERR_MISS_OBJ QT_TRANSLATE_NOOP("QJsonParseError", "object is missing after a comma") -#define JSONERR_DEEP_NEST QT_TRANSLATE_NOOP("QJsonParseError", "too deeply nested document") -#define JSONERR_DOC_LARGE QT_TRANSLATE_NOOP("QJsonParseError", "too large document") - -/*! - \class QJsonParseError - \inmodule QtCore - \ingroup json - \reentrant - \since 4.9 - - \brief The QJsonParseError class is used to report errors during JSON parsing. -*/ - -/*! - \enum QJsonParseError::ParseError - - This enum describes the type of error that occurred during the parsing of a JSON document. - - \value NoError No error occurred - \value UnterminatedObject An object is not correctly terminated with a closing curly bracket - \value MissingNameSeparator A comma separating different items is missing - \value UnterminatedArray The array is not correctly terminated with a closing square bracket - \value MissingValueSeparator A colon separating keys from values inside objects is missing - \value IllegalValue The value is illegal - \value TerminationByNumber The input stream ended while parsing a number - \value IllegalNumber The number is not well formed - \value IllegalEscapeSequence An illegal escape sequence occurred in the input - \value IllegalUTF8String An illegal UTF8 sequence occurred in the input - \value UnterminatedString A string wasn't terminated with a quote - \value MissingObject An object was expected but couldn't be found - \value DeepNesting The JSON document is too deeply nested for the parser to parse it - \value DocumentTooLarge The JSON document is too large for the parser to parse it -*/ - -/*! - \variable QJsonParseError::error - - Contains the type of the parse error. Is equal to QJsonParseError::NoError if the document - was parsed correctly. - - \sa ParseError, errorString() -*/ - - -/*! - \variable QJsonParseError::offset - - Contains the offset in the input string where the parse error occurred. - - \sa error, errorString() -*/ - -/*! - Returns the human-readable message appropriate to the reported JSON parsing error. - - \sa error - */ -QString QJsonParseError::errorString() const -{ - const char *sz = ""; - switch (error) { - case NoError: - sz = JSONERR_OK; - break; - case UnterminatedObject: - sz = JSONERR_UNTERM_OBJ; - break; - case MissingNameSeparator: - sz = JSONERR_MISS_NSEP; - break; - case UnterminatedArray: - sz = JSONERR_UNTERM_AR; - break; - case MissingValueSeparator: - sz = JSONERR_MISS_VSEP; - break; - case IllegalValue: - sz = JSONERR_ILLEGAL_VAL; - break; - case TerminationByNumber: - sz = JSONERR_END_OF_NUM; - break; - case IllegalNumber: - sz = JSONERR_ILLEGAL_NUM; - break; - case IllegalEscapeSequence: - sz = JSONERR_STR_ESC_SEQ; - break; - case IllegalUTF8String: - sz = JSONERR_STR_UTF8; - break; - case UnterminatedString: - sz = JSONERR_UTERM_STR; - break; - case MissingObject: - sz = JSONERR_MISS_OBJ; - break; - case DeepNesting: - sz = JSONERR_DEEP_NEST; - break; - case DocumentTooLarge: - sz = JSONERR_DOC_LARGE; - break; - } - - return QCoreApplication::translate("QJsonParseError", sz); -} - -using namespace QJsonPrivate; - -Parser::Parser(const char *json, int length) - : head(json), json(json), data(0), dataLength(0), current(0), nestingLevel(0), lastError(QJsonParseError::NoError) -{ - end = json + length; -} - - - -/* - -begin-array = ws %x5B ws ; [ left square bracket - -begin-object = ws %x7B ws ; { left curly bracket - -end-array = ws %x5D ws ; ] right square bracket - -end-object = ws %x7D ws ; } right curly bracket - -name-separator = ws %x3A ws ; : colon - -value-separator = ws %x2C ws ; , comma - -Insignificant whitespace is allowed before or after any of the six -structural characters. - -ws = *( - %x20 / ; WhiteSpace - %x09 / ; Horizontal tab - %x0A / ; Line feed or New line - %x0D ; Carriage return - ) - -*/ - -enum { - WhiteSpace = 0x20, - Tab = 0x09, - LineFeed = 0x0a, - Return = 0x0d, - BeginArray = 0x5b, - BeginObject = 0x7b, - EndArray = 0x5d, - EndObject = 0x7d, - NameSeparator = 0x3a, - ValueSeparator = 0x2c, - Quote = 0x22 -}; - -void Parser::eatBOM() -{ - // eat UTF-8 byte order mark - uchar utf8bom[3] = { 0xef, 0xbb, 0xbf }; - if (end - json > 3 && - (uchar)json[0] == utf8bom[0] && - (uchar)json[1] == utf8bom[1] && - (uchar)json[2] == utf8bom[2]) { - json += 3; - } -} - -bool Parser::eatSpace() -{ - while (json < end) { - if (*json > WhiteSpace) { - break; - } - if (*json != WhiteSpace && - *json != Tab && - *json != LineFeed && - *json != Return) { - break; - } - ++json; - } - return (json < end); -} - -char Parser::nextToken() -{ - if (!eatSpace()) { - return 0; - } - char token = *json++; - switch (token) { - case BeginArray: - case BeginObject: - case NameSeparator: - case ValueSeparator: - case EndArray: - case EndObject: - eatSpace(); - case Quote: - break; - default: - token = 0; - break; - } - return token; -} - -/* - JSON-text = object / array -*/ -QJsonDocument Parser::parse(QJsonParseError *error) -{ -#ifdef PARSER_DEBUG - indent = 0; - qDebug() << ">>>>> parser begin"; -#endif - // allocate some space - dataLength = qMax(end - json, (ptrdiff_t) 256); - data = (char *)malloc(dataLength); - - // fill in Header data - QJsonPrivate::Header *h = (QJsonPrivate::Header *)data; - h->tag = QJsonDocument::BinaryFormatTag; - h->version = 1u; - - current = sizeof(QJsonPrivate::Header); - - eatBOM(); - char token = nextToken(); - - DEBUG << hex << (uint)token; - if (token == BeginArray) { - if (!parseArray()) { - goto error; - } - } else if (token == BeginObject) { - if (!parseObject()) { - goto error; - } - } else { - lastError = QJsonParseError::IllegalValue; - goto error; - } - - END; - { - if (error) { - error->offset = 0; - error->error = QJsonParseError::NoError; - } - return QJsonDocument(new QJsonPrivate::Data(data, current)); - } - -error: -#ifdef PARSER_DEBUG - qDebug() << ">>>>> parser error"; -#endif - if (error) { - error->offset = json - head; - error->error = lastError; - } - free(data); - return QJsonDocument(); -} - - -void Parser::ParsedObject::insert(uint offset) -{ - const QJsonPrivate::Entry *newEntry = reinterpret_cast(parser->data + objectPosition + - offset); - int min = 0; - int n = offsets.size(); - while (n > 0) { - int half = n >> 1; - int middle = min + half; - if (*entryAt(middle) >= *newEntry) { - n = half; - } else { - min = middle + 1; - n -= half + 1; - } - } - if (min < offsets.size() && *entryAt(min) == *newEntry) { - offsets[min] = offset; - } else { - offsets.insert(min, offset); - } -} - -/* - object = begin-object [ member *( value-separator member ) ] - end-object -*/ - -bool Parser::parseObject() -{ - if (++nestingLevel > nestingLimit) { - lastError = QJsonParseError::DeepNesting; - return false; - } - - int objectOffset = reserveSpace(sizeof(QJsonPrivate::Object)); - BEGIN << "parseObject pos=" << objectOffset << current << json; - - ParsedObject parsedObject(this, objectOffset); - - char token = nextToken(); - while (token == Quote) { - int off = current - objectOffset; - if (!parseMember(objectOffset)) { - return false; - } - parsedObject.insert(off); - token = nextToken(); - if (token != ValueSeparator) { - break; - } - token = nextToken(); - if (token == EndObject) { - lastError = QJsonParseError::MissingObject; - return false; - } - } - - DEBUG << "end token=" << token; - if (token != EndObject) { - lastError = QJsonParseError::UnterminatedObject; - return false; - } - - DEBUG << "numEntries" << parsedObject.offsets.size(); - int table = objectOffset; - // finalize the object - if (parsedObject.offsets.size()) { - int tableSize = parsedObject.offsets.size() * sizeof(uint); - table = reserveSpace(tableSize); -#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN - memcpy(data + table, parsedObject.offsets.constData(), tableSize); -#else - offset *o = (offset *)(data + table); - for (int i = 0; i < tableSize; ++i) { - o[i] = parsedObject.offsets[i]; - } - -#endif - } - - QJsonPrivate::Object *o = (QJsonPrivate::Object *)(data + objectOffset); - o->tableOffset = table - objectOffset; - o->size = current - objectOffset; - o->is_object = true; - o->length = parsedObject.offsets.size(); - - DEBUG << "current=" << current; - END; - - --nestingLevel; - return true; -} - -/* - member = string name-separator value -*/ -bool Parser::parseMember(int baseOffset) -{ - int entryOffset = reserveSpace(sizeof(QJsonPrivate::Entry)); - BEGIN << "parseMember pos=" << entryOffset; - - bool latin1; - if (!parseString(&latin1)) { - return false; - } - char token = nextToken(); - if (token != NameSeparator) { - lastError = QJsonParseError::MissingNameSeparator; - return false; - } - QJsonPrivate::Value val; - if (!parseValue(&val, baseOffset)) { - return false; - } - - // finalize the entry - QJsonPrivate::Entry *e = (QJsonPrivate::Entry *)(data + entryOffset); - e->value = val; - e->value.latinKey = latin1; - - END; - return true; -} - -/* - array = begin-array [ value *( value-separator value ) ] end-array -*/ -bool Parser::parseArray() -{ - BEGIN << "parseArray"; - - if (++nestingLevel > nestingLimit) { - lastError = QJsonParseError::DeepNesting; - return false; - } - - int arrayOffset = reserveSpace(sizeof(QJsonPrivate::Array)); - - QVarLengthArray values; - - if (!eatSpace()) { - lastError = QJsonParseError::UnterminatedArray; - return false; - } - if (*json == EndArray) { - nextToken(); - } else { - while (1) { - QJsonPrivate::Value val; - if (!parseValue(&val, arrayOffset)) { - return false; - } - values.append(val); - char token = nextToken(); - if (token == EndArray) { - break; - } else if (token != ValueSeparator) { - if (!eatSpace()) { - lastError = QJsonParseError::UnterminatedArray; - } else { - lastError = QJsonParseError::MissingValueSeparator; - } - return false; - } - } - } - - DEBUG << "size =" << values.size(); - int table = arrayOffset; - // finalize the object - if (values.size()) { - int tableSize = values.size() * sizeof(QJsonPrivate::Value); - table = reserveSpace(tableSize); - memcpy(data + table, values.constData(), tableSize); - } - - QJsonPrivate::Array *a = (QJsonPrivate::Array *)(data + arrayOffset); - a->tableOffset = table - arrayOffset; - a->size = current - arrayOffset; - a->is_object = false; - a->length = values.size(); - - DEBUG << "current=" << current; - END; - - --nestingLevel; - return true; -} - -/* -value = false / null / true / object / array / number / string - -*/ - -bool Parser::parseValue(QJsonPrivate::Value *val, int baseOffset) -{ - BEGIN << "parse Value" << json; - val->_dummy = 0; - - switch (*json++) { - case 'n': - if (end - json < 4) { - lastError = QJsonParseError::IllegalValue; - return false; - } - if (*json++ == 'u' && - *json++ == 'l' && - *json++ == 'l') { - val->type = QJsonValue::Null; - DEBUG << "value: null"; - END; - return true; - } - lastError = QJsonParseError::IllegalValue; - return false; - case 't': - if (end - json < 4) { - lastError = QJsonParseError::IllegalValue; - return false; - } - if (*json++ == 'r' && - *json++ == 'u' && - *json++ == 'e') { - val->type = QJsonValue::Bool; - val->value = true; - DEBUG << "value: true"; - END; - return true; - } - lastError = QJsonParseError::IllegalValue; - return false; - case 'f': - if (end - json < 5) { - lastError = QJsonParseError::IllegalValue; - return false; - } - if (*json++ == 'a' && - *json++ == 'l' && - *json++ == 's' && - *json++ == 'e') { - val->type = QJsonValue::Bool; - val->value = false; - DEBUG << "value: false"; - END; - return true; - } - lastError = QJsonParseError::IllegalValue; - return false; - case Quote: { - val->type = QJsonValue::String; - if (current - baseOffset >= Value::MaxSize) { - lastError = QJsonParseError::DocumentTooLarge; - return false; - } - val->value = current - baseOffset; - bool latin1; - if (!parseString(&latin1)) { - return false; - } - val->latinOrIntValue = latin1; - DEBUG << "value: string"; - END; - return true; - } - case BeginArray: - val->type = QJsonValue::Array; - if (current - baseOffset >= Value::MaxSize) { - lastError = QJsonParseError::DocumentTooLarge; - return false; - } - val->value = current - baseOffset; - if (!parseArray()) { - return false; - } - DEBUG << "value: array"; - END; - return true; - case BeginObject: - val->type = QJsonValue::Object; - if (current - baseOffset >= Value::MaxSize) { - lastError = QJsonParseError::DocumentTooLarge; - return false; - } - val->value = current - baseOffset; - if (!parseObject()) { - return false; - } - DEBUG << "value: object"; - END; - return true; - case EndArray: - lastError = QJsonParseError::MissingObject; - return false; - default: - --json; - if (!parseNumber(val, baseOffset)) { - return false; - } - DEBUG << "value: number"; - END; - } - - return true; -} - - - - - -/* - number = [ minus ] int [ frac ] [ exp ] - decimal-point = %x2E ; . - digit1-9 = %x31-39 ; 1-9 - e = %x65 / %x45 ; e E - exp = e [ minus / plus ] 1*DIGIT - frac = decimal-point 1*DIGIT - int = zero / ( digit1-9 *DIGIT ) - minus = %x2D ; - - plus = %x2B ; + - zero = %x30 ; 0 - -*/ - -bool Parser::parseNumber(QJsonPrivate::Value *val, int baseOffset) -{ - BEGIN << "parseNumber" << json; - val->type = QJsonValue::Double; - - const char *start = json; - bool isInt = true; - - // minus - if (json < end && *json == '-') { - ++json; - } - - // int = zero / ( digit1-9 *DIGIT ) - if (json < end && *json == '0') { - ++json; - } else { - while (json < end && *json >= '0' && *json <= '9') { - ++json; - } - } - - // frac = decimal-point 1*DIGIT - if (json < end && *json == '.') { - isInt = false; - ++json; - while (json < end && *json >= '0' && *json <= '9') { - ++json; - } - } - - // exp = e [ minus / plus ] 1*DIGIT - if (json < end && (*json == 'e' || *json == 'E')) { - isInt = false; - ++json; - if (json < end && (*json == '-' || *json == '+')) { - ++json; - } - while (json < end && *json >= '0' && *json <= '9') { - ++json; - } - } - - if (json >= end) { - lastError = QJsonParseError::TerminationByNumber; - return false; - } - - QByteArray number(start, json - start); - DEBUG << "numberstring" << number; - - if (isInt) { - bool ok; - int n = number.toInt(&ok); - if (ok && n < (1 << 25) && n > -(1 << 25)) { - val->int_value = n; - val->latinOrIntValue = true; - END; - return true; - } - } - - bool ok; - union { - quint64 ui; - double d; - }; - d = number.toDouble(&ok); - - if (!ok) { - lastError = QJsonParseError::IllegalNumber; - return false; - } - - int pos = reserveSpace(sizeof(double)); - *(quint64 *)(data + pos) = qToLittleEndian(ui); - if (current - baseOffset >= Value::MaxSize) { - lastError = QJsonParseError::DocumentTooLarge; - return false; - } - val->value = pos - baseOffset; - val->latinOrIntValue = false; - - END; - return true; -} - -/* - - string = quotation-mark *char quotation-mark - - char = unescaped / - escape ( - %x22 / ; " quotation mark U+0022 - %x5C / ; \ reverse solidus U+005C - %x2F / ; / solidus U+002F - %x62 / ; b backspace U+0008 - %x66 / ; f form feed U+000C - %x6E / ; n line feed U+000A - %x72 / ; r carriage return U+000D - %x74 / ; t tab U+0009 - %x75 4HEXDIG ) ; uXXXX U+XXXX - - escape = %x5C ; \ - - quotation-mark = %x22 ; " - - unescaped = %x20-21 / %x23-5B / %x5D-10FFFF - */ -static inline bool addHexDigit(char digit, uint *result) -{ - *result <<= 4; - if (digit >= '0' && digit <= '9') { - *result |= (digit - '0'); - } else if (digit >= 'a' && digit <= 'f') { - *result |= (digit - 'a') + 10; - } else if (digit >= 'A' && digit <= 'F') { - *result |= (digit - 'A') + 10; - } else { - return false; - } - return true; -} - -static inline bool scanEscapeSequence(const char *&json, const char *end, uint *ch) -{ - ++json; - if (json >= end) { - return false; - } - - DEBUG << "scan escape" << (char)*json; - uint escaped = *json++; - switch (escaped) { - case '"': - *ch = '"'; - break; - case '\\': - *ch = '\\'; - break; - case '/': - *ch = '/'; - break; - case 'b': - *ch = 0x8; - break; - case 'f': - *ch = 0xc; - break; - case 'n': - *ch = 0xa; - break; - case 'r': - *ch = 0xd; - break; - case 't': - *ch = 0x9; - break; - case 'u': { - *ch = 0; - if (json > end - 4) { - return false; - } - for (int i = 0; i < 4; ++i) { - if (!addHexDigit(*json, ch)) { - return false; - } - ++json; - } - return true; - } - default: - // this is not as strict as one could be, but allows for more Json files - // to be parsed correctly. - *ch = escaped; - return true; - } - return true; -} - -static inline bool scanUtf8Char(const char *&json, const char *end, uint *result) -{ - int need; - uint min_uc; - uint uc; - uchar ch = *json++; - if (ch < 128) { - *result = ch; - return true; - } else if ((ch & 0xe0) == 0xc0) { - uc = ch & 0x1f; - need = 1; - min_uc = 0x80; - } else if ((ch & 0xf0) == 0xe0) { - uc = ch & 0x0f; - need = 2; - min_uc = 0x800; - } else if ((ch & 0xf8) == 0xf0) { - uc = ch & 0x07; - need = 3; - min_uc = 0x10000; - } else { - return false; - } - - if (json >= end - need) { - return false; - } - - for (int i = 0; i < need; ++i) { - ch = *json++; - if ((ch & 0xc0) != 0x80) { - return false; - } - uc = (uc << 6) | (ch & 0x3f); - } - - /* Qt 5 Beta 1 - if (uc < min_uc || QChar::isNonCharacter(uc) || - QChar::isSurrogate(uc) || uc > QChar::LastValidCodePoint) { - */ - // Temporary for missing QChar methods. Does not check for non-characters - // or past last valid code point. - if (uc < min_uc || - QChar::isHighSurrogate(uc) || QChar::isLowSurrogate(uc)) { - return false; - } - - *result = uc; - return true; -} - -bool Parser::parseString(bool *latin1) -{ - *latin1 = true; - - const char *start = json; - int outStart = current; - - // try to write out a latin1 string - - int stringPos = reserveSpace(2); - BEGIN << "parse string stringPos=" << stringPos << json; - while (json < end) { - uint ch = 0; - if (*json == '"') { - break; - } else if (*json == '\\') { - if (!scanEscapeSequence(json, end, &ch)) { - lastError = QJsonParseError::IllegalEscapeSequence; - return false; - } - } else { - if (!scanUtf8Char(json, end, &ch)) { - lastError = QJsonParseError::IllegalUTF8String; - return false; - } - } - if (ch > 0xff) { - *latin1 = false; - break; - } - int pos = reserveSpace(1); - DEBUG << " " << ch << (char)ch; - data[pos] = (uchar)ch; - } - ++json; - DEBUG << "end of string"; - if (json >= end) { - lastError = QJsonParseError::UnterminatedString; - return false; - } - - // no unicode string, we are done - if (*latin1) { - // write string length - *(QJsonPrivate::qle_ushort *)(data + stringPos) = ushort(current - outStart - sizeof(ushort)); - int pos = reserveSpace((4 - current) & 3); - while (pos & 3) { - data[pos++] = 0; - } - END; - return true; - } - - *latin1 = false; - DEBUG << "not latin"; - - json = start; - current = outStart + sizeof(int); - - while (json < end) { - uint ch = 0; - if (*json == '"') { - break; - } else if (*json == '\\') { - if (!scanEscapeSequence(json, end, &ch)) { - lastError = QJsonParseError::IllegalEscapeSequence; - return false; - } - } else { - if (!scanUtf8Char(json, end, &ch)) { - lastError = QJsonParseError::IllegalUTF8String; - return false; - } - } - if (QChar::requiresSurrogates(ch)) { - int pos = reserveSpace(4); - *(QJsonPrivate::qle_ushort *)(data + pos) = QChar::highSurrogate(ch); - *(QJsonPrivate::qle_ushort *)(data + pos + 2) = QChar::lowSurrogate(ch); - } else { - int pos = reserveSpace(2); - *(QJsonPrivate::qle_ushort *)(data + pos) = (ushort)ch; - } - } - ++json; - - if (json >= end) { - lastError = QJsonParseError::UnterminatedString; - return false; - } - - // write string length - *(QJsonPrivate::qle_int *)(data + stringPos) = (current - outStart - sizeof(int)) / 2; - int pos = reserveSpace((4 - current) & 3); - while (pos & 3) { - data[pos++] = 0; - } - END; - return true; -} - -QT_END_NAMESPACE diff --git a/src/core/json/qjsonparser_p.h b/src/core/json/qjsonparser_p.h deleted file mode 100644 index 68aa3b5d7..000000000 --- a/src/core/json/qjsonparser_p.h +++ /dev/null @@ -1,94 +0,0 @@ -/**************************************************************************** -** -** Copyright (c) 2012-2015 Barbara Geller -** Copyright (c) 2012-2015 Ansel Sermersheim -** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies). -** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies). -** Copyright (C) 2016 Ivailo Monev -** -** This file is part of the QtCore module of the Katie Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QJSONPARSER_P_H -#define QJSONPARSER_P_H - -#include "qjsondocument.h" -#include "qvarlengtharray.h" - -QT_BEGIN_NAMESPACE - -namespace QJsonPrivate { - -class Parser -{ - public: - Parser(const char *json, int length); - - QJsonDocument parse(QJsonParseError *error); - - class ParsedObject - { - public: - ParsedObject(Parser *p, int pos) : parser(p), objectPosition(pos) {} - void insert(uint offset); - - Parser *parser; - int objectPosition; - QVarLengthArray offsets; - - inline QJsonPrivate::Entry *entryAt(int i) const { - return reinterpret_cast(parser->data + objectPosition + offsets[i]); - } - }; - - - private: - inline void eatBOM(); - inline bool eatSpace(); - inline char nextToken(); - - bool parseObject(); - bool parseArray(); - bool parseMember(int baseOffset); - bool parseString(bool *latin1); - bool parseValue(QJsonPrivate::Value *val, int baseOffset); - bool parseNumber(QJsonPrivate::Value *val, int baseOffset); - const char *head; - const char *json; - const char *end; - - char *data; - int dataLength; - int current; - int nestingLevel; - QJsonParseError::ParseError lastError; - - inline int reserveSpace(int space) { - if (current + space >= dataLength) { - dataLength = 2 * dataLength + space; - data = (char *)realloc(data, dataLength); - } - int pos = current; - current += space; - return pos; - } -}; - -} - -QT_END_NAMESPACE - -#endif diff --git a/src/core/json/qjsonvalue.cpp b/src/core/json/qjsonvalue.cpp deleted file mode 100644 index 42c1e5a17..000000000 --- a/src/core/json/qjsonvalue.cpp +++ /dev/null @@ -1,693 +0,0 @@ -/**************************************************************************** -** -** Copyright (c) 2012-2015 Barbara Geller -** Copyright (c) 2012-2015 Ansel Sermersheim -** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies). -** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies). -** Copyright (C) 2016 Ivailo Monev -** -** This file is part of the QtCore module of the Katie Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qjsonobject.h" -#include "qjsonvalue.h" -#include "qjsonarray.h" -#include "qvariant.h" -#include "qstringlist.h" -#include "qdebug.h" -#include "qjson_p.h" - -QT_BEGIN_NAMESPACE - -/*! - \class QJsonValue - \inmodule QtCore - \ingroup json - \reentrant - \since 4.9 - - \brief The QJsonValue class encapsulates a value in JSON. - - A value in JSON can be one of 6 basic types: - - JSON is a format to store structured data. It has 6 basic data types: - - \list - \li bool QJsonValue::Bool - \li double QJsonValue::Double - \li string QJsonValue::String - \li array QJsonValue::Array - \li object QJsonValue::Object - \li null QJsonValue::Null - \endlist - - A value can represent any of the above data types. In addition, QJsonValue has one special - flag to represent undefined values. This can be queried with isUndefined(). - - The type of the value can be queried with type() or accessors like isBool(), isString(), and so on. - Likewise, the value can be converted to the type stored in it using the toBool(), toString() and so on. - - Values are strictly typed internally and contrary to QVariant will not attempt to do any implicit type - conversions. This implies that converting to a type that is not stored in the value will return a default - constructed return value. -*/ - -/*! - Creates a QJsonValue of type \a type. - - The default is to create a Null value. - */ -QJsonValue::QJsonValue(Type type) - : b(false), dbl(0), stringData(Q_NULLPTR), base(Q_NULLPTR), d(Q_NULLPTR), t(type) -{ -} - -/*! - \internal - */ -QJsonValue::QJsonValue(QJsonPrivate::Data *data, QJsonPrivate::Base *privbase, const QJsonPrivate::Value &v) - : b(false), dbl(0), stringData(Q_NULLPTR), base(Q_NULLPTR), d(Q_NULLPTR), t(static_cast(uint(v.type))) -{ - switch (t) { - case Undefined: - case Null: - break; - case Bool: - b = v.toBoolean(); - break; - case Double: - dbl = v.toDouble(privbase); - break; - case String: { - stringData = new QString(v.toString(privbase)); - break; - } - case Array: - case Object: - d = data; - base = v.base(privbase); - break; - } - if (d) { - d->ref.ref(); - } -} - -/*! - Creates a value of type Bool, with value \a a. - */ -QJsonValue::QJsonValue(bool a) - : b(a), dbl(0), stringData(Q_NULLPTR), base(Q_NULLPTR), d(Q_NULLPTR), t(Bool) -{ -} - -/*! - Creates a value of type Double, with value \a n. - */ -QJsonValue::QJsonValue(double n) - : b(false), dbl(n), stringData(Q_NULLPTR), base(Q_NULLPTR), d(Q_NULLPTR), t(Double) -{ -} - -/*! - \overload - Creates a value of type Double, with value \a n. - */ -QJsonValue::QJsonValue(int n) - : b(false), dbl(n), stringData(Q_NULLPTR), base(Q_NULLPTR), d(Q_NULLPTR), t(Double) -{ -} - -/*! - \overload - Creates a value of type Double, with value \a n. - NOTE: the integer limits for IEEE 754 double precision data is 2^53 (-9007199254740992 to +9007199254740992). - If you pass in values outside this range expect a loss of precision to occur. - */ -QJsonValue::QJsonValue(qint64 n) - : b(false), dbl(n), stringData(Q_NULLPTR), base(Q_NULLPTR), d(Q_NULLPTR), t(Double) -{ -} - -/*! - Creates a value of type String, with value \a s. - */ -QJsonValue::QJsonValue(const QString &s) - : b(false), dbl(0), stringData(new QString(s)), base(Q_NULLPTR), d(Q_NULLPTR), t(String) -{ -} - -/*! - Creates a value of type String, with value \a s. - */ -QJsonValue::QJsonValue(QLatin1String s) - : b(false), dbl(0), stringData(new QString(s)), base(Q_NULLPTR), d(Q_NULLPTR), t(String) -{ -} - -/*! - Creates a value of type Array, with value \a a. - */ -QJsonValue::QJsonValue(const QJsonArray &a) - : b(false), dbl(0), stringData(Q_NULLPTR), base(a.a), d(a.d), t(Array) -{ - if (d) { - d->ref.ref(); - } -} - -/*! - Creates a value of type Object, with value \a o. - */ -QJsonValue::QJsonValue(const QJsonObject &o) - : b(false), dbl(0), stringData(Q_NULLPTR), base(o.o), d(o.d), t(Object) -{ - if (d) { - d->ref.ref(); - } -} - - -/*! - Destroys the value. - */ -QJsonValue::~QJsonValue() -{ - if (t == String) { - delete stringData; - } - - if (d && !d->ref.deref()) { - delete d; - } -} - -/*! - Creates a copy of \a other. - */ -QJsonValue::QJsonValue(const QJsonValue &other) - : b(other.b), dbl(other.dbl), stringData(Q_NULLPTR), base(Q_NULLPTR), d(other.d), t(other.t) -{ - if (d) { - d->ref.ref(); - } - - if (t == String && other.stringData) { - stringData = new QString(*other.stringData); - } -} - -/*! - Assigns the value stored in \a other to this object. - */ -QJsonValue &QJsonValue::operator =(const QJsonValue &other) -{ - if (t == String) { - delete stringData; - stringData = Q_NULLPTR; - } - - t = other.t; - b = other.b; - dbl = other.dbl; - - qAtomicAssign(d, other.d); - - if (t == String && other.stringData) { - stringData = new QString(*other.stringData); - } - - return *this; -} - -/*! - \fn bool QJsonValue::isNull() const - - Returns true if the value is null. -*/ - -/*! - \fn bool QJsonValue::isBool() const - - Returns true if the value contains a boolean. - - \sa toBool() - */ - -/*! - \fn bool QJsonValue::isDouble() const - - Returns true if the value contains a double. - - \sa toDouble() - */ - -/*! - \fn bool QJsonValue::isString() const - - Returns true if the value contains a string. - - \sa toString() - */ - -/*! - \fn bool QJsonValue::isArray() const - - Returns true if the value contains an array. - - \sa toArray() - */ - -/*! - \fn bool QJsonValue::isObject() const - - Returns true if the value contains an object. - - \sa toObject() - */ - -/*! - \fn bool QJsonValue::isUndefined() const - - Returns true if the value is undefined. This can happen in certain - error cases as e.g. accessing a non existing key in a QJsonObject. - */ - - -/*! - Converts \a variant to a QJsonValue and returns it. - - The conversion will convert QVariant types as follows: - - \list - \li QVariant::Bool to Bool - \li QVariant::Int - \li QVariant::Double - \li QVariant::LongLong - \li QVariant::ULongLong - \li QVariant::UInt to Double - \li QVariant::String to String - \li QVariant::StringList - \li QVariant::VariantList to Array - \li QVariant::VariantMap to Object - \endlist - - For all other QVariant types a conversion to a QString will be attempted. If the returned string - is empty, a Null QJsonValue will be stored, otherwise a String value using the returned QString. - - \sa toVariant() - */ -QJsonValue QJsonValue::fromVariant(const QVariant &variant) -{ - switch (variant.type()) { - case QVariant::Bool: - return QJsonValue(variant.toBool()); - case QVariant::Int: - case QVariant::Double: - case QVariant::LongLong: - case QVariant::ULongLong: - case QVariant::UInt: - return QJsonValue(variant.toDouble()); - case QVariant::String: - return QJsonValue(variant.toString()); - case QVariant::StringList: - return QJsonValue(QJsonArray::fromStringList(variant.toStringList())); - case QVariant::List: - return QJsonValue(QJsonArray::fromVariantList(variant.toList())); - case QVariant::Map: - return QJsonValue(QJsonObject::fromVariantMap(variant.toMap())); - default: - break; - } - - QByteArray a; - { - QDataStream s(&a, QIODevice::WriteOnly); - s << variant; - } - if (a.isEmpty()) { - return QJsonValue(); - } - - QString result = QLatin1String("@("); - result += QString::fromLatin1(a.constData(), a.size()); - result += QLatin1String(")@"); - return QJsonValue(result); -} - -/*! - Converts the value to a QVariant. - - The QJsonValue types will be converted as follows: - - \value Null QVariant() - \value Bool QVariant::Bool - \value Double QVariant::Double - \value String QVariant::String - \value Array QVariantList - \value Object QVariantMap - \value Undefined QVariant() - - \sa fromVariant() - */ -QVariant QJsonValue::toVariant() const -{ - switch (t) { - case Bool: - return b; - case Double: - return dbl; - case String: { - QVariant variant = toString(); - QString string = variant.toString(); - if (string.startsWith(QLatin1String("@(")) && string.endsWith(")@")) { - QByteArray a(string.toLatin1()); - a.remove(0, 2); - a.chop(2); - QDataStream stream(&a, QIODevice::ReadOnly); - QVariant result; - stream >> result; - return result; - } - return variant; - } - case Array: - return d ? - QJsonArray(d, static_cast(base)).toVariantList() : - QVariantList(); - case Object: - return d ? - QJsonObject(d, static_cast(base)).toVariantMap() : - QVariantMap(); - case Null: - case Undefined: - return QVariant(); - } - - return QVariant(); -} - -/*! - \enum QJsonValue::Type - - This enum describes the type of the JSON value. - - \value Null A Null value - \value Bool A boolean value. Use toBool() to convert to a bool. - \value Double A double. Use toDouble() to convert to a double. - \value String A string. Use toString() to convert to a QString. - \value Array An array. Use toArray() to convert to a QJsonArray. - \value Object An object. Use toObject() to convert to a QJsonObject. - \value Undefined The value is undefined. This is usually returned as an - error condition, when trying to read an out of bounds value - in an array or a non existent key in an object. -*/ - -/*! - Returns the type of the value. - - \sa QJsonValue::Type - */ -QJsonValue::Type QJsonValue::type() const -{ - return t; -} - -/*! - Converts the value to a bool and returns it. - - If type() is not bool, the \a defaultValue will be returned. - */ -bool QJsonValue::toBool(bool defaultValue) const -{ - if (t != Bool) { - return defaultValue; - } - return b; -} - -/*! - Converts the value to an int and returns it. - - If type() is not Double or the value is not a whole number, - the \a defaultValue will be returned. - */ -int QJsonValue::toInt(int defaultValue) const -{ - if (t == Double && int(dbl) == dbl) { - return dbl; - } - return defaultValue; -} - -/*! - Converts the value to a double and returns it. - - If type() is not Double, the \a defaultValue will be returned. - */ -double QJsonValue::toDouble(double defaultValue) const -{ - if (t != Double) { - return defaultValue; - } - return dbl; -} - -/*! - Converts the value to a QString and returns it. - - If type() is not String, the \a defaultValue will be returned. - */ -QString QJsonValue::toString(const QString &defaultValue) const -{ - if (t != String) { - return defaultValue; - } - return *stringData; -} - -/*! - Converts the value to an array and returns it. - - If type() is not Array, the \a defaultValue will be returned. - */ -QJsonArray QJsonValue::toArray(const QJsonArray &defaultValue) const -{ - if (!d || t != Array) { - return defaultValue; - } - - return QJsonArray(d, static_cast(base)); -} - -/*! - \overload - - Converts the value to an array and returns it. - - If type() is not Array, a QJsonArray() will be returned. - */ -QJsonArray QJsonValue::toArray() const -{ - return toArray(QJsonArray()); -} - -/*! - Converts the value to an object and returns it. - - If type() is not Object, the \a defaultValue will be returned. - */ -QJsonObject QJsonValue::toObject(const QJsonObject &defaultValue) const -{ - if (!d || t != Object) { - return defaultValue; - } - - return QJsonObject(d, static_cast(base)); -} - -/*! - \overload - - Converts the value to an object and returns it. - - If type() is not Object, the QJsonObject() will be returned. - */ -QJsonObject QJsonValue::toObject() const -{ - return toObject(QJsonObject()); -} - -/*! - Returns true if the value is equal to \a other. - */ -bool QJsonValue::operator==(const QJsonValue &other) const -{ - if (t != other.t) { - return false; - } - - switch (t) { - case Undefined: - case Null: - break; - case Bool: - return b == other.b; - case Double: - return dbl == other.dbl; - case String: - return toString() == other.toString(); - case Array: - if (base == other.base) { - return true; - } - if (!base || !other.base) { - return false; - } - return QJsonArray(d, static_cast(base)) - == QJsonArray(other.d, static_cast(other.base)); - case Object: - if (base == other.base) { - return true; - } - if (!base || !other.base) { - return false; - } - return QJsonObject(d, static_cast(base)) - == QJsonObject(other.d, static_cast(other.base)); - } - return true; -} - -/*! - Returns true if the value is not equal to \a other. - */ -bool QJsonValue::operator!=(const QJsonValue &other) const -{ - return !(*this == other); -} - -/*! - \internal - */ -void QJsonValue::detach() -{ - if (!d) { - return; - } - - qAtomicAssign(d, d->clone(base)); - base = static_cast(d->header->root()); -} - - -/*! - \class QJsonValueRef - \inmodule QtCore - \reentrant - \brief The QJsonValueRef class is a helper class for QJsonValue. - - \internal - - \ingroup json - - When you get an object of type QJsonValueRef, if you can assign to it, - the assignment will apply to the character in the string from - which you got the reference. That is its whole purpose in life. - - You can use it exactly in the same way as a reference to a QJsonValue. - - The QJsonValueRef becomes invalid once modifications are made to the - string: if you want to keep the character, copy it into a QJsonValue. - - Most of the QJsonValue member functions also exist in QJsonValueRef. - However, they are not explicitly documented here. -*/ - - -QJsonValueRef &QJsonValueRef::operator =(const QJsonValue &val) -{ - if (is_object) { - o->setValueAt(index, val); - } else { - a->replace(index, val); - } - - return *this; -} - -QJsonValueRef &QJsonValueRef::operator =(const QJsonValueRef &ref) -{ - if (is_object) { - o->setValueAt(index, ref); - } else { - a->replace(index, ref); - } - - return *this; -} - -QJsonArray QJsonValueRef::toArray() const -{ - return toValue().toArray(); -} - -QJsonObject QJsonValueRef::toObject() const -{ - return toValue().toObject(); -} - -QJsonValue QJsonValueRef::toValue() const -{ - if (!is_object) { - return a->at(index); - } - return o->valueAt(index); -} - -QDebug operator<<(QDebug dbg, const QJsonValue &o) -{ - switch (o.t) { - case QJsonValue::Undefined: - dbg.nospace() << "QJsonValue(undefined)"; - break; - case QJsonValue::Null: - dbg.nospace() << "QJsonValue(null)"; - break; - case QJsonValue::Bool: - dbg.nospace() << "QJsonValue(bool, " << o.toBool() << ")"; - break; - case QJsonValue::Double: - dbg.nospace() << "QJsonValue(double, " << o.toDouble() << ")"; - break; - case QJsonValue::String: - dbg.nospace() << "QJsonValue(string, " << o.toString() << ")"; - break; - case QJsonValue::Array: - dbg.nospace() << "QJsonValue(array, "; - dbg.nospace() << o.toArray(); - dbg.nospace() << ")"; - break; - case QJsonValue::Object: - dbg.nospace() << "QJsonValue(object, "; - dbg.nospace() << o.toObject(); - dbg.nospace() << ")"; - break; - } - return dbg.space(); -} - -QT_END_NAMESPACE diff --git a/src/core/json/qjsonvalue.h b/src/core/json/qjsonvalue.h deleted file mode 100644 index 049f67946..000000000 --- a/src/core/json/qjsonvalue.h +++ /dev/null @@ -1,235 +0,0 @@ -/**************************************************************************** -** -** Copyright (c) 2012-2015 Barbara Geller -** Copyright (c) 2012-2015 Ansel Sermersheim -** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies). -** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies). -** Copyright (C) 2016 Ivailo Monev -** -** This file is part of the QtCore module of the Katie Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QJSONVALUE_H -#define QJSONVALUE_H - -#include -#include - -QT_BEGIN_NAMESPACE - - -class QDebug; -class QVariant; -class QJsonArray; -class QJsonObject; - -namespace QJsonPrivate { -class Data; -class Base; -class Object; -class Header; -class Array; -class Value; -class Entry; -} - -class Q_CORE_EXPORT QJsonValue -{ - public: - enum Type { - Null = 0x0, - Bool = 0x1, - Double = 0x2, - String = 0x3, - Array = 0x4, - Object = 0x5, - Undefined = 0x80 - }; - - QJsonValue(Type = Null); - QJsonValue(bool b); - QJsonValue(double n); - QJsonValue(int n); - QJsonValue(qint64 n); - QJsonValue(const QString &s); - QJsonValue(QLatin1String s); - QJsonValue(const QJsonArray &a); - QJsonValue(const QJsonObject &o); - - ~QJsonValue(); - - QJsonValue(const QJsonValue &other); - QJsonValue &operator =(const QJsonValue &other); - - static QJsonValue fromVariant(const QVariant &variant); - QVariant toVariant() const; - - Type type() const; - inline bool isNull() const { - return type() == Null; - } - inline bool isBool() const { - return type() == Bool; - } - inline bool isDouble() const { - return type() == Double; - } - inline bool isString() const { - return type() == String; - } - inline bool isArray() const { - return type() == Array; - } - inline bool isObject() const { - return type() == Object; - } - inline bool isUndefined() const { - return type() == Undefined; - } - - bool toBool(bool defaultValue = false) const; - int toInt(int defaultValue = 0) const; - double toDouble(double defaultValue = 0) const; - QString toString(const QString &defaultValue = QString()) const; - QJsonArray toArray() const; - QJsonArray toArray(const QJsonArray &defaultValue) const; - QJsonObject toObject() const; - QJsonObject toObject(const QJsonObject &defaultValue) const; - - bool operator==(const QJsonValue &other) const; - bool operator!=(const QJsonValue &other) const; - - private: - // avoid implicit conversions from char * to bool - inline QJsonValue(const void *) {} - friend class QJsonPrivate::Value; - friend class QJsonArray; - friend class QJsonObject; - friend Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonValue &); - - QJsonValue(QJsonPrivate::Data *d, QJsonPrivate::Base *b, const QJsonPrivate::Value &v); - - void detach(); - - bool b; - double dbl; - QString *stringData; - QJsonPrivate::Base *base; - QJsonPrivate::Data *d; // needed for Objects and Arrays - Type t; -}; - -class Q_CORE_EXPORT QJsonValueRef -{ - public: - QJsonValueRef(QJsonArray *array, int idx) - : a(array), is_object(false), index(idx) {} - QJsonValueRef(QJsonObject *object, int idx) - : o(object), is_object(true), index(idx) {} - - inline operator QJsonValue() const { - return toValue(); - } - QJsonValueRef &operator = (const QJsonValue &val); - QJsonValueRef &operator = (const QJsonValueRef &val); - - inline QJsonValue::Type type() const { - return toValue().type(); - } - inline bool isNull() const { - return type() == QJsonValue::Null; - } - inline bool isBool() const { - return type() == QJsonValue::Bool; - } - inline bool isDouble() const { - return type() == QJsonValue::Double; - } - inline bool isString() const { - return type() == QJsonValue::String; - } - inline bool isArray() const { - return type() == QJsonValue::Array; - } - inline bool isObject() const { - return type() == QJsonValue::Object; - } - inline bool isUndefined() const { - return type() == QJsonValue::Undefined; - } - - inline bool toBool() const { - return toValue().toBool(); - } - inline int toInt() const { - return toValue().toInt(); - } - inline double toDouble() const { - return toValue().toDouble(); - } - inline QString toString() const { - return toValue().toString(); - } - QJsonArray toArray() const; - QJsonObject toObject() const; - - inline bool operator==(const QJsonValue &other) const { - return toValue() == other; - } - inline bool operator!=(const QJsonValue &other) const { - return toValue() != other; - } - - private: - QJsonValue toValue() const; - - union { - QJsonArray *a; - QJsonObject *o; - }; - bool is_object; - int index; -}; - -class Q_CORE_EXPORT QJsonValueRefPtr { - public: - template - QJsonValueRefPtr(T1 a, T2 b) - : m_ref(a, b) { } - - QJsonValueRef* operator->() const { return &m_ref; }; - - private: - mutable QJsonValueRef m_ref; -}; - -class Q_CORE_EXPORT QJsonValuePtr { - public: - - QJsonValuePtr(QJsonValue val) - : m_value(val) { } - - const QJsonValue * operator->() const { return &m_value; }; - - private: - const QJsonValue m_value; -}; - -Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonValue &); - -QT_END_NAMESPACE - -#endif // QJSONVALUE_H diff --git a/src/core/json/qjsonwriter.cpp b/src/core/json/qjsonwriter.cpp deleted file mode 100644 index a6e7627e0..000000000 --- a/src/core/json/qjsonwriter.cpp +++ /dev/null @@ -1,255 +0,0 @@ -/**************************************************************************** -** -** Copyright (c) 2012-2015 Barbara Geller -** Copyright (c) 2012-2015 Ansel Sermersheim -** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies). -** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies). -** Copyright (C) 2016 Ivailo Monev -** -** This file is part of the QtCore module of the Katie Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qjsonwriter_p.h" -#include "qjson_p.h" - -QT_BEGIN_NAMESPACE - -using namespace QJsonPrivate; - -static void objectContentToJson(const QJsonPrivate::Object *o, QByteArray &json, int indent, bool compact); -static void arrayContentToJson(const QJsonPrivate::Array *a, QByteArray &json, int indent, bool compact); - -static inline uchar hexdig(uint u) -{ - return (u < 0xa ? '0' + u : 'a' + u - 0xa); -} - -static QByteArray escapedString(const QString &s) -{ - const uchar replacement = '?'; - QByteArray ba(s.length(), Qt::Uninitialized); - - uchar *cursor = (uchar *)ba.data(); - const uchar *ba_end = cursor + ba.length(); - - const QChar *ch = (const QChar *)s.constData(); - const QChar *end = ch + s.length(); - - int surrogate_high = -1; - - while (ch < end) { - if (cursor >= ba_end - 6) { - // ensure we have enough space - int pos = cursor - (const uchar *)ba.constData(); - ba.resize(ba.size() * 2); - cursor = (uchar *)ba.data() + pos; - ba_end = (const uchar *)ba.constData() + ba.length(); - } - - uint u = ch->unicode(); - if (surrogate_high >= 0) { - if (ch->isLowSurrogate()) { - u = QChar::surrogateToUcs4(surrogate_high, u); - surrogate_high = -1; - } else { - // high surrogate without low - *cursor = replacement; - ++ch; - surrogate_high = -1; - continue; - } - } else if (ch->isLowSurrogate()) { - // low surrogate without high - *cursor = replacement; - ++ch; - continue; - } else if (ch->isHighSurrogate()) { - surrogate_high = u; - ++ch; - continue; - } - - if (u < 0x80) { - if (u < 0x20 || u == 0x22 || u == 0x5c) { - *cursor++ = '\\'; - switch (u) { - case 0x22: - *cursor++ = '"'; - break; - case 0x5c: - *cursor++ = '\\'; - break; - case 0x8: - *cursor++ = 'b'; - break; - case 0xc: - *cursor++ = 'f'; - break; - case 0xa: - *cursor++ = 'n'; - break; - case 0xd: - *cursor++ = 'r'; - break; - case 0x9: - *cursor++ = 't'; - break; - default: - *cursor++ = 'u'; - *cursor++ = '0'; - *cursor++ = '0'; - *cursor++ = hexdig(u >> 4); - *cursor++ = hexdig(u & 0xf); - } - } else { - *cursor++ = (uchar)u; - } - } else { - if (u < 0x0800) { - *cursor++ = 0xc0 | ((uchar) (u >> 6)); - } else { - /* Qt 5 Beta 1 - // is it one of the Unicode non-characters? - if (QChar::isNonCharacter(u)) { - *cursor++ = replacement; - ++ch; - continue; - } - */ - - if (QChar::requiresSurrogates(u)) { - *cursor++ = 0xf0 | ((uchar) (u >> 18)); - *cursor++ = 0x80 | (((uchar) (u >> 12)) & 0x3f); - } else { - *cursor++ = 0xe0 | (((uchar) (u >> 12)) & 0x3f); - } - *cursor++ = 0x80 | (((uchar) (u >> 6)) & 0x3f); - } - *cursor++ = 0x80 | ((uchar) (u & 0x3f)); - } - ++ch; - } - - ba.resize(cursor - (const uchar *)ba.constData()); - return ba; -} - -static void valueToJson(const QJsonPrivate::Base *b, const QJsonPrivate::Value &v, QByteArray &json, int indent, - bool compact) -{ - QJsonValue::Type type = (QJsonValue::Type)(uint)v.type; - switch (type) { - case QJsonValue::Bool: - json += v.toBoolean() ? "true" : "false"; - break; - case QJsonValue::Double: - json += QByteArray::number(v.toDouble(b), 'g', 17); - break; - case QJsonValue::String: - json += '"'; - json += escapedString(v.toString(b)); - json += '"'; - break; - case QJsonValue::Array: - json += compact ? "[" : "[\n"; - arrayContentToJson(static_cast(v.base(b)), json, indent + (compact ? 0 : 1), compact); - json += QByteArray(4 * indent, ' '); - json += "]"; - break; - case QJsonValue::Object: - json += compact ? "{" : "{\n"; - objectContentToJson(static_cast(v.base(b)), json, indent + (compact ? 0 : 1), compact); - json += QByteArray(4 * indent, ' '); - json += "}"; - break; - case QJsonValue::Null: - default: - json += "null"; - } -} - -static void arrayContentToJson(const QJsonPrivate::Array *a, QByteArray &json, int indent, bool compact) -{ - if (!a || !a->length) { - return; - } - - QByteArray indentString(4 * indent, ' '); - - uint i = 0; - while (1) { - json += indentString; - valueToJson(a, a->at(i), json, indent, compact); - - if (++i == a->length) { - if (!compact) { - json += '\n'; - } - break; - } - - json += compact ? "," : ",\n"; - } -} - - -static void objectContentToJson(const QJsonPrivate::Object *o, QByteArray &json, int indent, bool compact) -{ - if (!o || !o->length) { - return; - } - - QByteArray indentString(4 * indent, ' '); - - uint i = 0; - while (1) { - QJsonPrivate::Entry *e = o->entryAt(i); - json += indentString; - json += '"'; - json += escapedString(e->key()); - json += "\": "; - valueToJson(o, e->value, json, indent, compact); - - if (++i == o->length) { - if (!compact) { - json += '\n'; - } - break; - } - - json += compact ? "," : ",\n"; - } -} - -void Writer::objectToJson(const QJsonPrivate::Object *o, QByteArray &json, int indent, bool compact) -{ - json.reserve(json.size() + (o ? (int)o->size : 16)); - json += compact ? "{" : "{\n"; - objectContentToJson(o, json, indent + (compact ? 0 : 1), compact); - json += QByteArray(4 * indent, ' '); - json += compact ? "}" : "}\n"; -} - -void Writer::arrayToJson(const QJsonPrivate::Array *a, QByteArray &json, int indent, bool compact) -{ - json.reserve(json.size() + (a ? (int)a->size : 16)); - json += compact ? "[" : "[\n"; - arrayContentToJson(a, json, indent + (compact ? 0 : 1), compact); - json += QByteArray(4 * indent, ' '); - json += compact ? "]" : "]\n"; -} - -QT_END_NAMESPACE diff --git a/src/core/json/qjsonwriter_p.h b/src/core/json/qjsonwriter_p.h deleted file mode 100644 index c11769a59..000000000 --- a/src/core/json/qjsonwriter_p.h +++ /dev/null @@ -1,45 +0,0 @@ -/**************************************************************************** -** -** Copyright (c) 2012-2015 Barbara Geller -** Copyright (c) 2012-2015 Ansel Sermersheim -** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies). -** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies). -** Copyright (C) 2016 Ivailo Monev -** -** This file is part of the QtCore module of the Katie Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QJSONWRITER_P_H -#define QJSONWRITER_P_H - -#include "qjsonvalue.h" - -QT_BEGIN_NAMESPACE - -namespace QJsonPrivate { - -class Writer -{ - public: - static void objectToJson(const QJsonPrivate::Object *o, QByteArray &json, int indent, bool compact = false); - static void arrayToJson(const QJsonPrivate::Array *a, QByteArray &json, int indent, bool compact = false); -}; - -} - -QT_END_NAMESPACE - -#endif diff --git a/src/core/kernel/qmetatype.cpp b/src/core/kernel/qmetatype.cpp index 89319e980..978ba7b86 100644 --- a/src/core/kernel/qmetatype.cpp +++ b/src/core/kernel/qmetatype.cpp @@ -31,9 +31,6 @@ #ifndef QT_BOOTSTRAPPED # include "qeasingcurve.h" -# include "qjsonvalue.h" -# include "qjsonobject.h" -# include "qjsonarray.h" # include "qjsondocument.h" # include "qbitarray.h" # include "qurl.h" @@ -117,9 +114,6 @@ QT_BEGIN_NAMESPACE \value QPointF QPointF \value QRegExp QRegExp \value QEasingCurve QEasingCurve - \value QJsonValue QJsonValue - \value QJsonObject QJsonObject - \value QJsonArray QJsonArray \value QJsonDocument QJsonDocument \value QVariantHash QVariantHash \value QVariantList QVariantList @@ -244,9 +238,6 @@ static const struct MetaTypeTblData { QT_ADD_STATIC_METATYPE("QPointF", QMetaType::QPointF), QT_ADD_STATIC_METATYPE("QRegExp", QMetaType::QRegExp), QT_ADD_STATIC_METATYPE("QEasingCurve", QMetaType::QEasingCurve), - QT_ADD_STATIC_METATYPE("QJsonValue", QMetaType:: QJsonValue), - QT_ADD_STATIC_METATYPE("QJsonObject", QMetaType::QJsonObject), - QT_ADD_STATIC_METATYPE("QJsonArray", QMetaType::QJsonArray), QT_ADD_STATIC_METATYPE("QJsonDocument", QMetaType::QJsonDocument), QT_ADD_STATIC_METATYPE("QVariantHash", QMetaType::QVariantHash), QT_ADD_STATIC_METATYPE("QVariantList", QMetaType::QVariantList), @@ -621,9 +612,6 @@ bool QMetaType::save(QDataStream &stream, int type, const void *data) case QMetaType::VoidStar: case QMetaType::QObjectStar: case QMetaType::QWidgetStar: - case QMetaType::QJsonValue: - case QMetaType::QJsonObject: - case QMetaType::QJsonArray: case QMetaType::QJsonDocument: return false; case QMetaType::Long: @@ -818,9 +806,6 @@ bool QMetaType::load(QDataStream &stream, int type, void *data) case QMetaType::VoidStar: case QMetaType::QObjectStar: case QMetaType::QWidgetStar: - case QMetaType::QJsonValue: - case QMetaType::QJsonObject: - case QMetaType::QJsonArray: case QMetaType::QJsonDocument: return false; case QMetaType::Long: { @@ -1094,12 +1079,6 @@ void *QMetaType::construct(int type, const void *copy) #ifndef QT_BOOTSTRAPPED case QMetaType::QEasingCurve: return new NS(QEasingCurve)(*static_cast(copy)); - case QMetaType::QJsonValue: - return new NS(QJsonValue)(*static_cast(copy)); - case QMetaType::QJsonObject: - return new NS(QJsonObject)(*static_cast(copy)); - case QMetaType::QJsonArray: - return new NS(QJsonArray)(*static_cast(copy)); case QMetaType::QJsonDocument: return new NS(QJsonDocument)(*static_cast(copy)); #endif @@ -1362,15 +1341,6 @@ void QMetaType::destroy(int type, void *data) case QMetaType::QEasingCurve: delete static_cast< NS(QEasingCurve)* >(data); break; - case QMetaType::QJsonValue: - delete static_cast< NS(QJsonValue)* >(data); - break; - case QMetaType::QJsonObject: - delete static_cast< NS(QJsonObject)* >(data); - break; - case QMetaType::QJsonArray: - delete static_cast< NS(QJsonArray)* >(data); - break; case QMetaType::QJsonDocument: delete static_cast< NS(QJsonDocument)* >(data); break; diff --git a/src/core/kernel/qmetatype.h b/src/core/kernel/qmetatype.h index 7b7e1af0d..5679e86b8 100644 --- a/src/core/kernel/qmetatype.h +++ b/src/core/kernel/qmetatype.h @@ -45,9 +45,8 @@ public: QByteArray = 11, QBitArray = 12, QDate = 13, QTime = 14, QDateTime = 15, QUrl = 16, QLocale = 17, QRect = 18, QRectF = 19, QSize = 20, QSizeF = 21, QLine = 22, QLineF = 23, QPoint = 24, - QPointF = 25, QRegExp = 26, QEasingCurve = 27, QJsonValue = 28, - QJsonObject = 29, QJsonArray = 30, QJsonDocument = 31, - QVariantHash = 32, QVariantList = 33, QVariantMap = 34, + QPointF = 25, QRegExp = 26, QEasingCurve = 27, QJsonDocument = 28, + QVariantHash = 29, QVariantList = 30, QVariantMap = 31, LastCoreType = QVariantMap, FirstGuiType = 64 /* QFont */, @@ -262,9 +261,6 @@ class QPointF; #ifndef QT_NO_REGEXP class QRegExp; #endif -class QJsonValue; -class QJsonObject; -class QJsonArray; class QJsonDocument; class QEasingCurve; class QWidget; @@ -327,9 +323,6 @@ Q_DECLARE_BUILTIN_METATYPE(QPointF, QPointF) Q_DECLARE_BUILTIN_METATYPE(QRegExp, QRegExp) #endif Q_DECLARE_BUILTIN_METATYPE(QEasingCurve, QEasingCurve) -Q_DECLARE_BUILTIN_METATYPE(QJsonValue, QJsonValue) -Q_DECLARE_BUILTIN_METATYPE(QJsonObject, QJsonObject) -Q_DECLARE_BUILTIN_METATYPE(QJsonArray, QJsonArray) Q_DECLARE_BUILTIN_METATYPE(QJsonDocument, QJsonDocument) // QVariantHash // QVariantList diff --git a/src/core/kernel/qvariant.cpp b/src/core/kernel/qvariant.cpp index 10265fbbf..0283f6c15 100644 --- a/src/core/kernel/qvariant.cpp +++ b/src/core/kernel/qvariant.cpp @@ -36,9 +36,6 @@ #ifndef QT_BOOTSTRAPPED # include "qeasingcurve.h" -# include "qjsonvalue.h" -# include "qjsonobject.h" -# include "qjsonarray.h" # include "qjsondocument.h" # include "qsize.h" # include "qpoint.h" @@ -133,15 +130,6 @@ static void construct(QVariant::Private *x, const void *copy) case QVariant::EasingCurve: v_construct(x, copy); break; - case QVariant::JsonValue: - v_construct(x, copy); - break; - case QVariant::JsonObject: - v_construct(x, copy); - break; - case QVariant::JsonArray: - v_construct(x, copy); - break; case QVariant::JsonDocument: v_construct(x, copy); break; @@ -265,15 +253,6 @@ static void clear(QVariant::Private *d) case QVariant::EasingCurve: v_clear(d); break; - case QVariant::JsonValue: - v_clear(d); - break; - case QVariant::JsonObject: - v_clear(d); - break; - case QVariant::JsonArray: - v_clear(d); - break; case QVariant::JsonDocument: v_clear(d); break; @@ -335,12 +314,8 @@ static bool isNull(const QVariant::Private *d) return v_cast(d)->isNull(); case QVariant::PointF: return v_cast(d)->isNull(); - case QVariant::JsonValue: - return v_cast(d)->isNull(); case QVariant::JsonDocument: return v_cast(d)->isNull(); - case QVariant::JsonObject: - case QVariant::JsonArray: case QVariant::EasingCurve: case QVariant::Url: #endif @@ -464,12 +439,6 @@ static bool compare(const QVariant::Private *a, const QVariant::Private *b) #ifndef QT_BOOTSTRAPPED case QVariant::EasingCurve: return *v_cast(a) == *v_cast(b); - case QVariant::JsonValue: - return *v_cast(a) == *v_cast(b); - case QVariant::JsonObject: - return *v_cast(a) == *v_cast(b); - case QVariant::JsonArray: - return *v_cast(a) == *v_cast(b); case QVariant::JsonDocument: return *v_cast(a) == *v_cast(b); #endif @@ -534,10 +503,6 @@ static qlonglong qMetaTypeNumber(const QVariant::Private *d) return qRound64(d->data.f); case QVariant::Double: return qRound64(d->data.d); -#ifndef QT_BOOTSTRAPPED - case QMetaType::QJsonValue: - return v_cast(d)->toDouble(0.0); -#endif } Q_ASSERT(false); return 0; @@ -574,12 +539,6 @@ static qlonglong qConvertToNumber(const QVariant::Private *d, bool *ok) return v_cast(d)->toLongLong(ok); case QVariant::Bool: return qlonglong(d->data.b); -#ifndef QT_BOOTSTRAPPED - case QVariant::JsonValue: - if (!v_cast(d)->isDouble()) - break; - return qlonglong(v_cast(d)->toDouble(0.0)); -#endif case QVariant::Double: case QVariant::Int: case QMetaType::Char: @@ -613,12 +572,6 @@ static qulonglong qConvertToUnsignedNumber(const QVariant::Private *d, bool *ok) return v_cast(d)->toULongLong(ok); case QVariant::Bool: return qulonglong(d->data.b); -#ifndef QT_BOOTSTRAPPED - case QVariant::JsonValue: - if (!v_cast(d)->isDouble()) - break; - return qulonglong(v_cast(d)->toDouble(0.0)); -#endif case QVariant::Double: case QVariant::Int: case QMetaType::Char: @@ -716,12 +669,6 @@ static bool convert(const QVariant::Private *d, int t, void *result, bool *ok) case QVariant::Url: *str = v_cast(d)->toString(); return true; - case QMetaType::QJsonValue: - if (v_cast(d)->isString()) { - *str = v_cast(d)->toString(); - return true; - } - return false; #endif default: return false; @@ -946,13 +893,6 @@ static bool convert(const QVariant::Private *d, int t, void *result, bool *ok) case QMetaType::ULong: *static_cast(result) = qMetaTypeUNumber(d) != Q_UINT64_C(0); return true; -#ifndef QT_BOOTSTRAPPED - case QMetaType::QJsonValue: - if (!v_cast(d)->isBool()) - return false; - *static_cast(result) = v_cast(d)->toBool(false); - return true; -#endif default: return false; } @@ -986,13 +926,6 @@ static bool convert(const QVariant::Private *d, int t, void *result, bool *ok) case QMetaType::ULong: *static_cast(result) = double(qMetaTypeUNumber(d)); return true; -#ifndef QT_BOOTSTRAPPED - case QMetaType::QJsonValue: - if (!v_cast(d)->isDouble()) - return false; - *static_cast(result) = v_cast(d)->toDouble(0.0); - return true; -#endif default: return false; } @@ -1026,13 +959,6 @@ static bool convert(const QVariant::Private *d, int t, void *result, bool *ok) case QMetaType::ULong: *static_cast(result) = float(qMetaTypeUNumber(d)); return true; -#ifndef QT_BOOTSTRAPPED - case QMetaType::QJsonValue: - if (!v_cast(d)->isDouble()) - return false; - *static_cast(result) = v_cast(d)->toDouble(0.0); - return true; -#endif default: return false; } @@ -1047,48 +973,18 @@ static bool convert(const QVariant::Private *d, int t, void *result, bool *ok) } else if (d->type == QVariant::List) { *static_cast(result) = *static_cast *>(d->data.shared->ptr); return true; -#ifndef QT_BOOTSTRAPPED - } else if (d->type == QMetaType::QJsonValue) { - if (!v_cast(d)->isArray()) - return false; - *static_cast(result) = v_cast(d)->toArray().toVariantList(); - return true; - } else if (d->type == QMetaType::QJsonArray) { - *static_cast(result) = v_cast(d)->toVariantList(); - return true; -#endif } return false; case QVariant::Map: if (d->type == QVariant::Map) { *static_cast(result) = *static_cast *>(d->data.shared->ptr); return true; -#ifndef QT_BOOTSTRAPPED - } else if (d->type == QMetaType::QJsonValue) { - if (!v_cast(d)->isObject()) - return false; - *static_cast(result) = v_cast(d)->toObject().toVariantMap(); - return true; - } else if (d->type == QMetaType::QJsonObject) { - *static_cast(result) = v_cast(d)->toVariantMap(); - return true; -#endif } return false; case QVariant::Hash: if (d->type == QVariant::Hash) { *static_cast(result) = *static_cast *>(d->data.shared->ptr); return true; -#ifndef QT_BOOTSTRAPPED - } else if (d->type == QMetaType::QJsonValue) { - if (!v_cast(d)->isObject()) - return false; - *static_cast(result) = v_cast(d)->toObject().toVariantHash(); - return true; - } else if (d->type == QMetaType::QJsonObject) { - *static_cast(result) = v_cast(d)->toVariantHash(); - return true; -#endif } return false; #ifndef QT_BOOTSTRAPPED @@ -1187,15 +1083,6 @@ static void streamDebug(QDebug dbg, const QVariant &v) case QVariant::EasingCurve: dbg.nospace() << v.toEasingCurve(); break; - case QVariant::JsonValue: - dbg.nospace() << v.toJsonValue(); - break; - case QVariant::JsonObject: - dbg.nospace() << v.toJsonObject(); - break; - case QVariant::JsonArray: - dbg.nospace() << v.toJsonArray(); - break; case QVariant::JsonDocument: dbg.nospace() << v.toJsonDocument(); break; @@ -1368,9 +1255,6 @@ const QVariant::Handler *QVariant::handler = &qt_kernel_variant_handler; \value DateTime a QDateTime \value Double a double \value EasingCurve a QEasingCurve - \value QJsonValue QJsonValue - \value QJsonObject QJsonObject - \value QJsonArray QJsonArray \value QJsonDocument QJsonDocument \value Font a QFont \value Hash a QVariantHash @@ -1588,27 +1472,6 @@ QVariant::QVariant(const char *val) /*! \since 4.9 - \fn QVariant::QVariant(const QJsonValue &val) - - Constructs a new variant with a json value, \a val. -*/ - -/*! - \since 4.9 - \fn QVariant::QVariant(const QJsonObject &val) - - Constructs a new variant with a json object value, \a val. -*/ - -/*! - \since 4.9 - \fn QVariant::QVariant(const QJsonArray &val) - - Constructs a new variant with a json array value, \a val. -*/ - -/*! - \since 4.9 \fn QVariant::QVariant(const QJsonDocument &val) Constructs a new variant with a json document value, \a val. @@ -1812,9 +1675,6 @@ QVariant::QVariant(const QDateTime &val) #ifndef QT_BOOTSTRAPPED QVariant::QVariant(const QEasingCurve &val) { d.is_null = false; d.type = EasingCurve; v_construct(&d, val); } -QVariant::QVariant(const QJsonValue &jsonValue) { d.is_null = false; d.type = JsonValue; v_construct(&d, jsonValue); } -QVariant::QVariant(const QJsonObject &jsonObject) { d.is_null = false; d.type = JsonObject; v_construct(&d, jsonObject); } -QVariant::QVariant(const QJsonArray &jsonArray) { d.is_null = false; d.type = JsonArray; v_construct(&d, jsonArray); } QVariant::QVariant(const QJsonDocument &jsonDocument) { d.is_null = false; d.type = JsonDocument; v_construct(&d, jsonDocument); } #endif QVariant::QVariant(const QList &list) @@ -2254,45 +2114,6 @@ QEasingCurve QVariant::toEasingCurve() const /*! \since 4.9 - Returns the variant as a QJsonValue if the variant has userType() \l - QJsonValue; otherwise returns a default constructed QJsonValue. - - \sa canConvert(), convert() -*/ -QJsonValue QVariant::toJsonValue() const -{ - return qVariantToHelper(d, JsonValue, handler); -} - -/*! - \since 4.9 - - Returns the variant as a QJsonObject if the variant has userType() \l - QJsonObject; otherwise returns a default constructed QJsonObject. - - \sa canConvert(), convert() -*/ -QJsonObject QVariant::toJsonObject() const -{ - return qVariantToHelper(d, JsonObject, handler); -} - -/*! - \since 4.9 - - Returns the variant as a QJsonArray if the variant has userType() \l - QJsonArray; otherwise returns a default constructed QJsonArray. - - \sa canConvert(), convert() -*/ -QJsonArray QVariant::toJsonArray() const -{ - return qVariantToHelper(d, JsonArray, handler); -} - -/*! - \since 4.9 - Returns the variant as a QJsonDocument if the variant has userType() \l QJsonDocument; otherwise returns a default constructed QJsonDocument. @@ -2972,44 +2793,6 @@ bool QVariant::canConvert(Type t) const /* RegExp */ /* Hash */ /* EasingCurve */ - } else if (d.type == QVariant::JsonValue) { - switch (int(t)) { - case QVariant::String: - case QVariant::Bool: - case QVariant::Int: - case QVariant::UInt: - case QVariant::Double: - case QVariant::Float: - case QMetaType::ULong: - case QMetaType::Long: - case QVariant::LongLong: - case QVariant::ULongLong: - case QMetaType::UShort: - case QMetaType::UChar: - case QMetaType::Char: - case QMetaType::Short: - case QVariant::List: - case QVariant::Map: - case QVariant::Hash: - return true; - default: - return false; - } - } else if (d.type == QVariant::JsonObject) { - switch (t) { - case QVariant::Map: - case QVariant::Hash: - return true; - default: - return false; - } - } else if (d.type == QVariant::JsonArray) { - switch (t) { - case QVariant::List: - return true; - default: - return false; - } /* JsonDocument */ } else if (t == QVariant::Font) { switch (d.type) { diff --git a/src/core/kernel/qvariant.h b/src/core/kernel/qvariant.h index b182f3397..7aabac2b0 100644 --- a/src/core/kernel/qvariant.h +++ b/src/core/kernel/qvariant.h @@ -36,9 +36,6 @@ class QDate; class QDateTime; #ifndef QT_BOOTSTRAPPED class QEasingCurve; -class QJsonValue; -class QJsonObject; -class QJsonArray; class QJsonDocument; #endif class QLine; @@ -105,9 +102,6 @@ class Q_CORE_EXPORT QVariant RegExp = QMetaType::QRegExp, Hash = QMetaType::QVariantHash, EasingCurve = QMetaType::QEasingCurve, - JsonValue = QMetaType::QJsonValue, - JsonObject = QMetaType::QJsonObject, - JsonArray = QMetaType::QJsonArray, JsonDocument = QMetaType::QJsonDocument, LastCoreType = QMetaType::LastCoreType, @@ -191,9 +185,6 @@ class Q_CORE_EXPORT QVariant #endif #ifndef QT_BOOTSTRAPPED QVariant(const QEasingCurve &easing); - QVariant(const QJsonValue &jsonValue); - QVariant(const QJsonObject &jsonObject); - QVariant(const QJsonArray &jsonArray); QVariant(const QJsonDocument &jsonDocument); #endif @@ -258,9 +249,6 @@ class Q_CORE_EXPORT QVariant #endif #ifndef QT_BOOTSTRAPPED QEasingCurve toEasingCurve() const; - QJsonValue toJsonValue() const; - QJsonObject toJsonObject() const; - QJsonArray toJsonArray() const; QJsonDocument toJsonDocument() const; #endif diff --git a/src/core/tools/qjsondocument.cpp b/src/core/tools/qjsondocument.cpp new file mode 100644 index 000000000..23f4d40e7 --- /dev/null +++ b/src/core/tools/qjsondocument.cpp @@ -0,0 +1,408 @@ +/**************************************************************************** +** +** Copyright (C) 2020 Ivailo Monev +** +** This file is part of the QtCore module of the Katie Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qjsondocument.h" +#include "qstringlist.h" +#include "qvariant.h" +#include "qscopedpointer.h" +#include "qcoreapplication.h" + +#include + +QT_BEGIN_NAMESPACE + +class QJsonDocumentPrivate { +public: + QJsonDocumentPrivate() : ref(1) { } + + QVariantMap jsonToMap(const QByteArray &jsondata); + QByteArray mapToJson(const QVariantMap &jsonmap); + + QAtomicInt ref; + QByteArray json; + QVariantMap map; + QString error; +}; + +QVariantMap QJsonDocumentPrivate::jsonToMap(const QByteArray &jsondata) +{ + QVariantMap result; + + if (jsondata.isEmpty()) { + error = QCoreApplication::translate("QJsonDocument", "Data is empty"); + return result; + } + + json_error_t jerror; + json_t *jroot = json_loads(jsondata.constData(), 0, &jerror); + + if (!jroot) { + error = jerror.text; + return result; + } + + switch(json_typeof(jroot)) { + case JSON_OBJECT: { + const char *jkey; + json_t *jobject; + json_object_foreach(jroot, jkey, jobject) { + switch(json_typeof(jobject)) { + case JSON_OBJECT: { + result.insert(jkey, jsonToMap(json_dumps(jobject, 0))); + break; + } + case JSON_ARRAY: { + QVariantList listvalue; + for (size_t i = 0; i < json_array_size(jobject); i++) { + json_t *jarray = json_array_get(jobject, i); + switch(json_typeof(jarray)) { + case JSON_OBJECT: { + listvalue.append(jsonToMap(json_dumps(jarray, 0))); + break; + } + case JSON_STRING: { + listvalue.append(QVariant(json_string_value(jarray))); + break; + } + case JSON_INTEGER: { + listvalue.append(QVariant(json_integer_value(jarray))); + break; + } + case JSON_REAL: { + listvalue.append(QVariant(json_real_value(jarray))); + break; + } + case JSON_TRUE: { + listvalue.append(QVariant(true)); + break; + } + case JSON_FALSE: { + listvalue.append(QVariant(false)); + break; + } + case JSON_NULL: { + listvalue.append(QVariant()); + break; + } + default: { + error = QCoreApplication::translate("QJsonDocument", "Unknown JSON type in array"); + break; + } + } + } + result.insert(jkey, listvalue); + break; + } + case JSON_STRING: { + result.insert(jkey, QVariant(json_string_value(jobject))); + break; + } + case JSON_INTEGER: { + result.insert(jkey, QVariant(json_integer_value(jobject))); + break; + } + case JSON_REAL: { + result.insert(jkey, QVariant(json_real_value(jobject))); + break; + } + case JSON_TRUE: { + result.insert(jkey, QVariant(true)); + break; + } + case JSON_FALSE: { + result.insert(jkey, QVariant(false)); + break; + } + case JSON_NULL: { + result.insert(jkey, QVariant()); + break; + } + default: { + error = QCoreApplication::translate("QJsonDocument", "Unknown JSON type"); + break; + } + } + } + break; + } + default: { + error = QCoreApplication::translate("QJsonDocument", "Rootless array/values are not supported"); + break; + } + } + + json_decref(jroot); + + // qDebug() << "converted" << jsondata << "to" << result; + + return result; +} + +QByteArray QJsonDocumentPrivate::mapToJson(const QVariantMap &jsonmap) +{ + QByteArray result; + + if (jsonmap.isEmpty()) { + error = QCoreApplication::translate("QJsonDocument", "Data map is empty"); + return result; + } + + static const size_t jflags = JSON_SORT_KEYS | JSON_INDENT(4); + json_t *jroot = json_object(); + + foreach(const QString &key, jsonmap.keys()) { + const QVariant value = jsonmap.value(key); + const QByteArray bytearraykey = key.toUtf8(); + switch(value.type()) { + case QVariant::Invalid: { + json_object_set_new_nocheck(jroot, bytearraykey.constData(), json_null()); + break; + } + case QVariant::Bool: { + json_object_set_new_nocheck(jroot, bytearraykey.constData(), value.toBool() ? json_true() : json_false()); + break; + } + case QVariant::Int: + case QVariant::LongLong: { + json_object_set_new_nocheck(jroot, bytearraykey.constData(), json_integer(value.toLongLong())); + break; + } + case QVariant::UInt: + case QVariant::ULongLong: { + json_object_set_new_nocheck(jroot, bytearraykey.constData(), json_integer(value.toULongLong())); + break; + } + case QVariant::Float: + case QVariant::Double: { + json_object_set_new_nocheck(jroot, bytearraykey.constData(), json_real(value.toReal())); + break; + } + case QVariant::Char: + case QVariant::ByteArray: + case QVariant::String: { + const QByteArray bytearrayvalue = value.toByteArray(); + json_object_set_new_nocheck(jroot, bytearraykey.constData(), json_string(bytearrayvalue.constData())); + break; + } + case QVariant::List: // TODO: this works only for QString-convertable types + case QVariant::StringList: { + json_t *jarray = json_array(); + foreach(const QString &listvalue, value.toStringList()) { + const QByteArray bytearrayvalue = listvalue.toUtf8(); + json_array_append_new(jarray, json_stringn_nocheck(bytearrayvalue.constData(), bytearrayvalue.size())); + } + json_object_set_new_nocheck(jroot, bytearraykey.constData(), jarray); + break; + } + case QVariant::Hash: + case QVariant::Map: { + result += mapToJson(value.toMap()); + break; + } + + default: { + error = QCoreApplication::translate("QJsonDocument", "Unknown JSON type"); + break; + } + } + } + + result += json_dumps(jroot, jflags); + json_decref(jroot); + + // qDebug() << "converted" << jsonmap << "to" << result; + + return result; +} + +QJsonDocument::QJsonDocument() + : d_ptr(Q_NULLPTR) +{ +} + +QJsonDocument::~QJsonDocument() +{ + Q_D(QJsonDocument); + if (d && !d->ref.deref()) { + delete d; + } +} + +QJsonDocument::QJsonDocument(const QJsonDocument &other) +{ + qAtomicAssign(d_ptr, other.d_ptr); +} + +/*! + Assigns the \a other document to this QJsonDocument. + Returns a reference to this object. +*/ +QJsonDocument &QJsonDocument::operator =(const QJsonDocument &other) +{ + qAtomicAssign(d_ptr, other.d_ptr); + return *this; +} + +/*! + Creates a QJsonDocument from the QVariant \a variant. + + If the \a variant contains any other type than a QVariant::Invalid, + QVariant::Bool, QVariant::Int, QVariant::LongLong, QVariant::UInt, + QVariant::ULongLong, QVariant::Float, QVariant::Double, QVariant::Char, + QVariant::ByteArray, QVariant::String, QVariant::List, + QVariant::StringList, QVariant::Hash or QVariant::Map the returned document + is null. + + \sa toVariant() + */ +QJsonDocument QJsonDocument::fromVariant(const QVariant &variant) +{ + QScopedPointer d(new QJsonDocumentPrivate()); + d->map = variant.toMap(); + d->json = d->mapToJson(d->map); + + QJsonDocument jd; + if (Q_UNLIKELY(!d->error.isEmpty())) { + d->json.clear(); + d->map.clear(); + } + + jd.d_ptr = d.take(); + + // qDebug() << "QJsonDocument::fromVariant" << jd.errorString(); + + return jd; +} + +/*! + Returns a QVariant representing the Json document. + + The returned variant will be a QVariantList if the document is + a array and a QVariantMap if the document is a object. + + \sa fromVariant() + */ +QVariant QJsonDocument::toVariant() const +{ + Q_D(const QJsonDocument); + if (!d) { + return QVariant(); + } + + return d->map; +} + +/*! + Parses a UTF-8 encoded JSON document and creates a QJsonDocument + from it. + + \a json contains the json document to be parsed. + + \sa toJson(), errorString() + */ +QJsonDocument QJsonDocument::fromJson(const QByteArray &json) +{ + QScopedPointer d(new QJsonDocumentPrivate()); + d->json = json; + d->map = d->jsonToMap(json); + + if (Q_UNLIKELY(!d->error.isEmpty())) { + d->json.clear(); + d->map.clear(); + } + + QJsonDocument jd; + jd.d_ptr = d.take(); + + // qDebug() << "QJsonDocument::fromJson" << jd.errorString(); + + return jd; +} + +QByteArray QJsonDocument::toJson() const +{ + Q_D(const QJsonDocument); + if (!d) { + return QByteArray(); + } + + return d->json; +} + +/*! + Returns \c true if the \a other document is equal to this document. + */ +bool QJsonDocument::operator==(const QJsonDocument &other) const +{ + Q_D(const QJsonDocument); + if (d == other.d_ptr) { + return true; + } + + if (!d || !other.d_ptr) { + return false; + } + + return (d->json == other.d_ptr->json && d->map == other.d_ptr->map); +} + +/*! + \fn bool QJsonDocument::operator!=(const QJsonDocument &other) const + + returns \c true if \a other is not equal to this document + */ + +/*! + returns true if this document is null. + + Null documents are documents created through the default constructor. + + Documents created from UTF-8 encoded text are validated during parsing. If + validation fails, the returned document will be null. + */ +bool QJsonDocument::isNull() const +{ + Q_D(const QJsonDocument); + return (!d || (d->json.isEmpty() && d->map.isEmpty())); +} + +QString QJsonDocument::errorString() const +{ + Q_D(const QJsonDocument); + if (!d) { + return QString(); + } + + return d->error; +} + +QDebug operator<<(QDebug dbg, const QJsonDocument &jd) +{ + if (jd.isNull()) { + dbg << "QJsonDocument()"; + return dbg; + } + dbg.nospace() << "QJsonDocument(" + << jd.toJson().constData() + << ")"; + return dbg.space(); +} + +QT_END_NAMESPACE diff --git a/src/core/tools/qjsondocument.h b/src/core/tools/qjsondocument.h new file mode 100644 index 000000000..debe1e416 --- /dev/null +++ b/src/core/tools/qjsondocument.h @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2020 Ivailo Monev +** +** This file is part of the QtCore module of the Katie Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QJSONDOCUMENT_H +#define QJSONDOCUMENT_H + +#include + +QT_BEGIN_NAMESPACE + +class QJsonDocumentPrivate; + +class Q_CORE_EXPORT QJsonDocument +{ + Q_DECLARE_PRIVATE(QJsonDocument) +public: + QJsonDocument(); + ~QJsonDocument(); + + QJsonDocument(const QJsonDocument &other); + QJsonDocument &operator =(const QJsonDocument &other); + + static QJsonDocument fromVariant(const QVariant &variant); + QVariant toVariant() const; + + static QJsonDocument fromJson(const QByteArray &json); + QByteArray toJson() const; + + bool isNull() const; + QString errorString() const; + + bool operator==(const QJsonDocument &other) const; + bool operator!=(const QJsonDocument &other) const { + return !(*this == other); + } + +private: + friend Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonDocument &); + + QJsonDocumentPrivate *d_ptr; +}; + +Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonDocument &); + +QT_END_NAMESPACE + +#endif // QJSONDOCUMENT_H diff --git a/src/tools/uic/cpp/cppwriteincludes.cpp b/src/tools/uic/cpp/cppwriteincludes.cpp index f846c91f9..f54625c44 100644 --- a/src/tools/uic/cpp/cppwriteincludes.cpp +++ b/src/tools/uic/cpp/cppwriteincludes.cpp @@ -371,14 +371,7 @@ static const struct ClassTblData { { QLatin1String("QItemSelection"), QLatin1String("QtGui/qitemselectionmodel.h") }, { QLatin1String("QItemSelectionModel"), QLatin1String("QtGui/qitemselectionmodel.h") }, { QLatin1String("QItemSelectionRange"), QLatin1String("QtGui/qitemselectionmodel.h") }, - { QLatin1String("QJsonArray"), QLatin1String("QtCore/qjsonarray.h") }, { QLatin1String("QJsonDocument"), QLatin1String("QtCore/qjsondocument.h") }, - { QLatin1String("QJsonObject"), QLatin1String("QtCore/qjsonobject.h") }, - { QLatin1String("QJsonParseError"), QLatin1String("QtCore/qjsondocument.h") }, - { QLatin1String("QJsonValue"), QLatin1String("QtCore/qjsonvalue.h") }, - { QLatin1String("QJsonValuePtr"), QLatin1String("QtCore/qjsonvalue.h") }, - { QLatin1String("QJsonValueRef"), QLatin1String("QtCore/qjsonvalue.h") }, - { QLatin1String("QJsonValueRefPtr"), QLatin1String("QtCore/qjsonvalue.h") }, { QLatin1String("QKeyEvent"), QLatin1String("QtGui/qevent.h") }, { QLatin1String("QKeySequence"), QLatin1String("QtGui/qkeysequence.h") }, { QLatin1String("QLCDNumber"), QLatin1String("QtGui/qlcdnumber.h") }, diff --git a/tests/auto/qjsondocument/CMakeLists.txt b/tests/auto/qjsondocument/CMakeLists.txt new file mode 100644 index 000000000..cc714ba84 --- /dev/null +++ b/tests/auto/qjsondocument/CMakeLists.txt @@ -0,0 +1,3 @@ +katie_test(tst_qjsondocument + ${CMAKE_CURRENT_SOURCE_DIR}/tst_qjsondocument.cpp +) diff --git a/tests/auto/qjsondocument/invalidjson.json b/tests/auto/qjsondocument/invalidjson.json new file mode 100644 index 000000000..9c5988bec --- /dev/null +++ b/tests/auto/qjsondocument/invalidjson.json @@ -0,0 +1,5 @@ +{ + "Qt/GUIEffects": [ + "none" + ], +} diff --git a/tests/auto/qjsondocument/qjsondocument.json b/tests/auto/qjsondocument/qjsondocument.json new file mode 100644 index 000000000..5b0a82a6a --- /dev/null +++ b/tests/auto/qjsondocument/qjsondocument.json @@ -0,0 +1,35 @@ +{ + "Qt/GUIEffects": [ + "none" + ], + "Qt/Palette/active": [ + ], + "Qt/Palette/disabled": [ + ], + "Qt/Palette/inactive": [ + ], + "Qt/cursorFlashTime": 1000, + "Qt/doubleClickInterval": 400, + "Qt/embedFonts": true, + "Qt/font": "Sans Serif,9,-1,5,50,0,0,0,0", + "Qt/fontPath": [ + ], + "Qt/globalStrut/height": 0, + "Qt/globalStrut/width": 0, + "Qt/resolveSymlinks": false, + "Qt/style": "Cleanlooks", + "Qt/useRtlExtensions": false, + "Qt/wheelScrollLines": 3, + + "MixedArray": [ + 1, + "a" + ], + + "NestedObject": { + "MixedArray": [ + 2, + "b" + ] + } +} diff --git a/tests/auto/qjsondocument/tst_qjsondocument.cpp b/tests/auto/qjsondocument/tst_qjsondocument.cpp new file mode 100644 index 000000000..4cd796a91 --- /dev/null +++ b/tests/auto/qjsondocument/tst_qjsondocument.cpp @@ -0,0 +1,147 @@ +/**************************************************************************** +** +** Copyright (C) 2021 Ivailo Monev +** +** This file is part of the test suite of the Katie Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include +#include + +//TESTED_CLASS=QJsonDocument +//TESTED_FILES=qjsondocument.cpp,qjsondocument.h + +static QString testinvalidfile = QString::fromLatin1(SRCDIR "/invalidjson.json"); +static QString testjsonfile = QString::fromLatin1(SRCDIR "/qjsondocument.json"); +static QVariantMap testjsondata; + +class tst_QJsonDocument : public QObject +{ + Q_OBJECT + +public slots: + void init(); + void cleanup(); + +private slots: + void read(); + void write(); + void error(); +}; + +void tst_QJsonDocument::init() +{ + testjsondata.insert("Qt/GUIEffects", QStringList() << "none"); + testjsondata.insert("Qt/doubleClickInterval", 400); + testjsondata.insert("Qt/embedFonts", true); + testjsondata.insert("Qt/style", "Cleanlooks"); + + testjsondata.insert("MixedArray", QVariantList() << 1 << "a"); + QVariantMap NestedObject; + NestedObject.insert("MixedArray", QVariantList() << 2 << "b"); + testjsondata.insert("NestedObject", NestedObject); +} + +void tst_QJsonDocument::cleanup() +{ + testjsondata.clear(); +} + +void tst_QJsonDocument::read() +{ + QJsonDocument jsondoc = QJsonDocument::fromVariant(testjsondata); + QVERIFY(jsondoc.errorString().isEmpty()); + QVariantMap jsonmap = jsondoc.toVariant().toMap(); + + QStringList GUIEffects = jsonmap.value("Qt/GUIEffects").toStringList(); + QCOMPARE(GUIEffects, QStringList() << "none"); + + int doubleClickInterval = jsonmap.value("Qt/doubleClickInterval").toInt(); + QCOMPARE(doubleClickInterval, 400); + + bool embedFonts = jsonmap.value("Qt/embedFonts").toBool(); + QCOMPARE(embedFonts, true); + + QString style = jsonmap.value("Qt/style").toString(); + QCOMPARE(style, QLatin1String("Cleanlooks")); + + QVariantList MixedArray = jsonmap.value("MixedArray").toList(); + QCOMPARE(MixedArray, QVariantList() << 1 << "a"); + + QVariantList NestedObject = jsonmap.value("NestedObject").toMap().value("MixedArray").toList(); + QCOMPARE(NestedObject, QVariantList() << 2 << "b"); + + QFile jsonfile(testjsonfile); + QVERIFY(jsonfile.open(QIODevice::ReadOnly)); + + jsondoc = QJsonDocument::fromJson(jsonfile.readAll()); + QVERIFY(jsondoc.errorString().isEmpty()); + jsonmap = jsondoc.toVariant().toMap(); + + GUIEffects = jsonmap.value("Qt/GUIEffects").toStringList(); + QCOMPARE(GUIEffects, QStringList() << "none"); + + doubleClickInterval = jsonmap.value("Qt/doubleClickInterval").toInt(); + QCOMPARE(doubleClickInterval, 400); + + embedFonts = jsonmap.value("Qt/embedFonts").toBool(); + QCOMPARE(embedFonts, true); + + style = jsonmap.value("Qt/style").toString(); + QCOMPARE(style, QLatin1String("Cleanlooks")); + + MixedArray = jsonmap.value("MixedArray").toList(); + QCOMPARE(MixedArray, QVariantList() << 1 << "a"); + + NestedObject = jsonmap.value("NestedObject").toMap().value("MixedArray").toList(); + QCOMPARE(NestedObject, QVariantList() << 2 << "b"); + + // TODO: test other types too +} + +void tst_QJsonDocument::write() +{ + QJsonDocument jsondoc = QJsonDocument::fromVariant(testjsondata); + // TODO: compare to desired output + QVERIFY(!jsondoc.toJson().isEmpty()); + + QFile jsonfile(testjsonfile); + QVERIFY(jsonfile.open(QIODevice::ReadOnly)); + QByteArray jsoncontent = jsonfile.readAll(); + jsondoc = QJsonDocument::fromJson(jsoncontent); + QCOMPARE(jsoncontent, jsondoc.toJson()); +} + +void tst_QJsonDocument::error() +{ + QFile jsonfile(testinvalidfile); + QVERIFY(jsonfile.open(QIODevice::ReadOnly)); + QJsonDocument jsondoc = QJsonDocument::fromJson(jsonfile.readAll()); + // not testing for specific string on purpose + QVERIFY(!jsondoc.errorString().isEmpty()); + QVERIFY(jsondoc.isNull()); + + jsondoc = QJsonDocument::fromVariant(QVariantMap()); + QCOMPARE(jsondoc.errorString(), QLatin1String("Data map is empty")); + QVERIFY(jsondoc.isNull()); + + // TODO: indermediate error test +} + +QTEST_MAIN(tst_QJsonDocument) + +#include "moc_tst_qjsondocument.cpp" diff --git a/translations/qt.pot b/translations/qt.pot index 78321c152..67fe81af1 100644 --- a/translations/qt.pot +++ b/translations/qt.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-05 06:17+0200\n" +"POT-Creation-Date: 2021-02-11 01:35+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,1394 +17,1349 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/core/plugin/qlibrary.cpp:187 +#: src/core/plugin/qlibrary.cpp:175 msgid "'%1' is not ELF file" msgstr "" -#: src/core/plugin/qlibrary.cpp:190 +#: src/core/plugin/qlibrary.cpp:178 msgid "ELF class mismatch in '%1'" msgstr "" -#: src/core/plugin/qlibrary.cpp:214 +#: src/core/plugin/qlibrary.cpp:202 msgid "Plugin verification data mismatch in '%1'" msgstr "" -#: src/core/plugin/qlibrary.cpp:426 src/core/plugin/qlibrary.cpp:461 -#: src/core/plugin/qpluginloader.cpp:274 +#: src/core/plugin/qlibrary.cpp:414 src/core/plugin/qlibrary.cpp:449 +#: src/core/plugin/qpluginloader.cpp:262 msgid "The shared library was not found." msgstr "" -#: src/core/plugin/qlibrary.cpp:463 +#: src/core/plugin/qlibrary.cpp:451 msgid "The file '%1' is not a valid Katie plugin." msgstr "" -#: src/core/plugin/qlibrary.cpp:476 +#: src/core/plugin/qlibrary.cpp:464 msgid "The plugin uses incompatible Katie library: %1 (%2, %3)" msgstr "" -#: src/core/plugin/qlibrary.cpp:809 src/core/plugin/qpluginloader.cpp:291 -#: src/core/io/qiodevice.cpp:1541 src/network/ssl/qsslerror.cpp:261 -#: src/network/socket/qnativesocketengine.cpp:268 -#: src/network/access/qftp.cpp:1439 src/uitools/formscriptrunner.cpp:116 +#: src/core/plugin/qlibrary.cpp:797 src/core/plugin/qpluginloader.cpp:279 +#: src/core/io/qiodevice.cpp:1529 src/network/ssl/qsslerror.cpp:249 +#: src/network/socket/qnativesocketengine.cpp:256 +#: src/network/access/qftp.cpp:1427 src/uitools/formscriptrunner.cpp:104 msgid "Unknown error" msgstr "" -#: src/core/plugin/qlibrary_unix.cpp:68 +#: src/core/plugin/qlibrary_unix.cpp:56 msgid "Cannot load library %1: %2" msgstr "" -#: src/core/plugin/qlibrary_unix.cpp:79 +#: src/core/plugin/qlibrary_unix.cpp:67 msgid "Cannot unload library %1: %2" msgstr "" -#: src/core/plugin/qlibrary_unix.cpp:90 +#: src/core/plugin/qlibrary_unix.cpp:78 msgid "Cannot resolve symbol \"%1\" in %2: %3" msgstr "" -#: src/core/plugin/qpluginloader.cpp:229 +#: src/core/plugin/qpluginloader.cpp:217 msgid "The plugin was not loaded." msgstr "" -#: src/core/io/qstandardpaths.cpp:295 +#: src/core/io/qstandardpaths.cpp:283 msgctxt "QStandardPaths" msgid "Desktop" msgstr "" -#: src/core/io/qstandardpaths.cpp:297 +#: src/core/io/qstandardpaths.cpp:285 msgctxt "QStandardPaths" msgid "Documents" msgstr "" -#: src/core/io/qstandardpaths.cpp:299 +#: src/core/io/qstandardpaths.cpp:287 msgctxt "QStandardPaths" msgid "Fonts" msgstr "" -#: src/core/io/qstandardpaths.cpp:301 +#: src/core/io/qstandardpaths.cpp:289 msgctxt "QStandardPaths" msgid "Applications" msgstr "" -#: src/core/io/qstandardpaths.cpp:303 +#: src/core/io/qstandardpaths.cpp:291 msgctxt "QStandardPaths" msgid "Music" msgstr "" -#: src/core/io/qstandardpaths.cpp:305 +#: src/core/io/qstandardpaths.cpp:293 msgctxt "QStandardPaths" msgid "Movies" msgstr "" -#: src/core/io/qstandardpaths.cpp:307 +#: src/core/io/qstandardpaths.cpp:295 msgctxt "QStandardPaths" msgid "Pictures" msgstr "" -#: src/core/io/qstandardpaths.cpp:309 +#: src/core/io/qstandardpaths.cpp:297 msgctxt "QStandardPaths" msgid "Temporary Directory" msgstr "" -#: src/core/io/qstandardpaths.cpp:311 +#: src/core/io/qstandardpaths.cpp:299 msgctxt "QStandardPaths" msgid "Home" msgstr "" -#: src/core/io/qstandardpaths.cpp:313 +#: src/core/io/qstandardpaths.cpp:301 msgctxt "QStandardPaths" msgid "Application Data" msgstr "" -#: src/core/io/qstandardpaths.cpp:315 +#: src/core/io/qstandardpaths.cpp:303 msgctxt "QStandardPaths" msgid "Cache" msgstr "" -#: src/core/io/qstandardpaths.cpp:317 +#: src/core/io/qstandardpaths.cpp:305 msgctxt "QStandardPaths" msgid "Shared Data" msgstr "" -#: src/core/io/qstandardpaths.cpp:319 +#: src/core/io/qstandardpaths.cpp:307 msgctxt "QStandardPaths" msgid "Runtime" msgstr "" -#: src/core/io/qstandardpaths.cpp:321 +#: src/core/io/qstandardpaths.cpp:309 msgctxt "QStandardPaths" msgid "Configuration" msgstr "" -#: src/core/io/qstandardpaths.cpp:323 +#: src/core/io/qstandardpaths.cpp:311 msgctxt "QStandardPaths" msgid "Shared Configuration" msgstr "" -#: src/core/io/qstandardpaths.cpp:325 +#: src/core/io/qstandardpaths.cpp:313 msgctxt "QStandardPaths" msgid "Shared Cache" msgstr "" -#: src/core/io/qstandardpaths.cpp:327 +#: src/core/io/qstandardpaths.cpp:315 msgctxt "QStandardPaths" msgid "Download" msgstr "" -#: src/core/io/qfile.cpp:597 +#: src/core/io/qfile.cpp:585 msgid "Destination file exists" msgstr "" -#: src/core/io/qfile.cpp:612 +#: src/core/io/qfile.cpp:600 msgid "Will not rename sequential file using block copy" msgstr "" -#: src/core/io/qfile.cpp:635 +#: src/core/io/qfile.cpp:623 msgid "Cannot remove source file" msgstr "" -#: src/core/io/qfile.cpp:1034 +#: src/core/io/qfile.cpp:1022 msgid "No file engine available or engine does not support UnMapExtension" msgstr "" -#: src/core/io/qprocess.cpp:809 src/core/io/qprocess.cpp:861 +#: src/core/io/qprocess.cpp:797 src/core/io/qprocess.cpp:849 msgid "Error reading from process" msgstr "" -#: src/core/io/qprocess.cpp:908 +#: src/core/io/qprocess.cpp:896 msgid "Error writing to process" msgstr "" -#: src/core/io/qprocess.cpp:971 +#: src/core/io/qprocess.cpp:959 msgid "Process crashed" msgstr "" -#: src/core/io/qprocess.cpp:1858 +#: src/core/io/qprocess.cpp:1846 msgid "No program defined" msgstr "" -#: src/core/io/qprocess_unix.cpp:393 +#: src/core/io/qprocess_unix.cpp:381 msgid "Could not open input redirection for reading" msgstr "" -#: src/core/io/qprocess_unix.cpp:405 +#: src/core/io/qprocess_unix.cpp:393 msgid "Could not open output redirection for writing" msgstr "" -#: src/core/io/qprocess_unix.cpp:623 +#: src/core/io/qprocess_unix.cpp:611 msgid "Resource error (fork failure): %1" msgstr "" -#: src/core/io/qprocess_unix.cpp:860 src/core/io/qprocess_unix.cpp:908 -#: src/core/io/qprocess_unix.cpp:978 src/core/io/qprocess_unix.cpp:1040 +#: src/core/io/qprocess_unix.cpp:848 src/core/io/qprocess_unix.cpp:896 +#: src/core/io/qprocess_unix.cpp:966 src/core/io/qprocess_unix.cpp:1028 msgid "Process operation timed out" msgstr "" -#: src/core/kernel/qsharedmemory.cpp:220 +#: src/core/kernel/qsharedmemory.cpp:208 msgid "%1: unable to set key on lock" msgstr "" -#: src/core/kernel/qsharedmemory.cpp:304 +#: src/core/kernel/qsharedmemory.cpp:292 msgid "%1: create size is less then 0" msgstr "" -#: src/core/kernel/qsharedmemory.cpp:477 src/core/kernel/qsharedmemory_p.h:131 +#: src/core/kernel/qsharedmemory.cpp:465 src/core/kernel/qsharedmemory_p.h:119 msgid "%1: unable to lock" msgstr "" -#: src/core/kernel/qsharedmemory.cpp:498 +#: src/core/kernel/qsharedmemory.cpp:486 msgid "%1: unable to unlock" msgstr "" -#: src/core/kernel/qsharedmemory_unix.cpp:75 +#: src/core/kernel/qsharedmemory_unix.cpp:63 msgid "%1: permission denied" msgstr "" -#: src/core/kernel/qsharedmemory_unix.cpp:79 +#: src/core/kernel/qsharedmemory_unix.cpp:67 msgid "%1: already exists" msgstr "" -#: src/core/kernel/qsharedmemory_unix.cpp:83 +#: src/core/kernel/qsharedmemory_unix.cpp:71 msgid "%1: doesn't exist" msgstr "" -#: src/core/kernel/qsharedmemory_unix.cpp:91 +#: src/core/kernel/qsharedmemory_unix.cpp:79 msgid "%1: out of resources" msgstr "" -#: src/core/kernel/qsharedmemory_unix.cpp:95 +#: src/core/kernel/qsharedmemory_unix.cpp:83 msgid "%1: invalid size" msgstr "" -#: src/core/kernel/qsharedmemory_unix.cpp:99 +#: src/core/kernel/qsharedmemory_unix.cpp:87 msgid "%1: unknown error %2" msgstr "" -#: src/core/kernel/qsharedmemory_unix.cpp:118 -#: src/core/kernel/qsystemsemaphore_unix.cpp:125 +#: src/core/kernel/qsharedmemory_unix.cpp:106 +#: src/core/kernel/qsystemsemaphore_unix.cpp:113 msgid "%1: key is empty" msgstr "" -#: src/core/kernel/qsharedmemory_unix.cpp:146 -#: src/core/kernel/qsharedmemory_unix.cpp:182 +#: src/core/kernel/qsharedmemory_unix.cpp:134 +#: src/core/kernel/qsharedmemory_unix.cpp:170 msgid "%1: bad name" msgstr "" -#: src/core/kernel/qsystemsemaphore_unix.cpp:80 +#: src/core/kernel/qsystemsemaphore_unix.cpp:68 msgctxt "QSystemSemaphore" msgid "%1: permission denied" msgstr "" -#: src/core/kernel/qsystemsemaphore_unix.cpp:84 +#: src/core/kernel/qsystemsemaphore_unix.cpp:72 msgctxt "QSystemSemaphore" msgid "%1: already exists" msgstr "" -#: src/core/kernel/qsystemsemaphore_unix.cpp:88 +#: src/core/kernel/qsystemsemaphore_unix.cpp:76 msgctxt "QSystemSemaphore" msgid "%1: does not exist" msgstr "" -#: src/core/kernel/qsystemsemaphore_unix.cpp:97 +#: src/core/kernel/qsystemsemaphore_unix.cpp:85 msgctxt "QSystemSemaphore" msgid "%1: out of resources" msgstr "" -#: src/core/kernel/qsystemsemaphore_unix.cpp:101 +#: src/core/kernel/qsystemsemaphore_unix.cpp:89 msgctxt "QSystemSemaphore" msgid "%1: name error" msgstr "" -#: src/core/kernel/qsystemsemaphore_unix.cpp:105 +#: src/core/kernel/qsystemsemaphore_unix.cpp:93 msgctxt "QSystemSemaphore" msgid "%1: unknown error %2" msgstr "" -#: src/core/tools/qregexp.cpp:57 +#: src/core/tools/qregexp.cpp:45 msgctxt "QRegExp" msgid "no error occurred" msgstr "" -#: src/core/tools/qregexp.cpp:58 +#: src/core/tools/qregexp.cpp:46 msgctxt "QRegExp" msgid "disabled feature used" msgstr "" -#: src/core/tools/qregexp.cpp:59 +#: src/core/tools/qregexp.cpp:47 msgctxt "QRegExp" msgid "bad char class syntax" msgstr "" -#: src/core/tools/qregexp.cpp:60 +#: src/core/tools/qregexp.cpp:48 msgctxt "QRegExp" msgid "bad lookahead syntax" msgstr "" -#: src/core/tools/qregexp.cpp:61 +#: src/core/tools/qregexp.cpp:49 msgctxt "QRegExp" msgid "lookbehinds not supported, see QTBUG-2371" msgstr "" -#: src/core/tools/qregexp.cpp:62 +#: src/core/tools/qregexp.cpp:50 msgctxt "QRegExp" msgid "bad repetition syntax" msgstr "" -#: src/core/tools/qregexp.cpp:63 +#: src/core/tools/qregexp.cpp:51 msgctxt "QRegExp" msgid "invalid octal value" msgstr "" -#: src/core/tools/qregexp.cpp:64 +#: src/core/tools/qregexp.cpp:52 msgctxt "QRegExp" msgid "missing left delim" msgstr "" -#: src/core/tools/qregexp.cpp:65 +#: src/core/tools/qregexp.cpp:53 msgctxt "QRegExp" msgid "unexpected end" msgstr "" -#: src/core/tools/qregexp.cpp:66 +#: src/core/tools/qregexp.cpp:54 msgctxt "QRegExp" msgid "met internal limit" msgstr "" -#: src/core/tools/qregexp.cpp:67 +#: src/core/tools/qregexp.cpp:55 msgctxt "QRegExp" msgid "invalid interval" msgstr "" -#: src/core/tools/qregexp.cpp:68 +#: src/core/tools/qregexp.cpp:56 msgctxt "QRegExp" msgid "invalid category" msgstr "" -#: src/core/json/qjsonparser.cpp:59 -msgctxt "QJsonParseError" -msgid "no error occurred" -msgstr "" - -#: src/core/json/qjsonparser.cpp:60 -msgctxt "QJsonParseError" -msgid "unterminated object" +#: src/core/tools/qjsondocument.cpp:49 +msgctxt "QJsonDocument" +msgid "Data is empty" msgstr "" -#: src/core/json/qjsonparser.cpp:61 -msgctxt "QJsonParseError" -msgid "missing name separator" +#: src/core/tools/qjsondocument.cpp:105 +msgctxt "QJsonDocument" +msgid "Unknown JSON type in array" msgstr "" -#: src/core/json/qjsonparser.cpp:62 -msgctxt "QJsonParseError" -msgid "unterminated array" +#: src/core/tools/qjsondocument.cpp:138 src/core/tools/qjsondocument.cpp:221 +msgctxt "QJsonDocument" +msgid "Unknown JSON type" msgstr "" -#: src/core/json/qjsonparser.cpp:63 -msgctxt "QJsonParseError" -msgid "missing value separator" +#: src/core/tools/qjsondocument.cpp:146 +msgctxt "QJsonDocument" +msgid "Rootless array/values are not supported" msgstr "" -#: src/core/json/qjsonparser.cpp:64 -msgctxt "QJsonParseError" -msgid "illegal value" +#: src/core/tools/qjsondocument.cpp:163 +msgctxt "QJsonDocument" +msgid "Data map is empty" msgstr "" -#: src/core/json/qjsonparser.cpp:65 -msgctxt "QJsonParseError" -msgid "invalid termination by number" -msgstr "" - -#: src/core/json/qjsonparser.cpp:66 -msgctxt "QJsonParseError" -msgid "illegal number" -msgstr "" - -#: src/core/json/qjsonparser.cpp:67 -msgctxt "QJsonParseError" -msgid "invalid escape sequence" -msgstr "" - -#: src/core/json/qjsonparser.cpp:68 -msgctxt "QJsonParseError" -msgid "invalid UTF8 string" -msgstr "" - -#: src/core/json/qjsonparser.cpp:69 -msgctxt "QJsonParseError" -msgid "unterminated string" -msgstr "" - -#: src/core/json/qjsonparser.cpp:70 -msgctxt "QJsonParseError" -msgid "object is missing after a comma" -msgstr "" - -#: src/core/json/qjsonparser.cpp:71 -msgctxt "QJsonParseError" -msgid "too deeply nested document" -msgstr "" - -#: src/core/json/qjsonparser.cpp:72 -msgctxt "QJsonParseError" -msgid "too large document" -msgstr "" - -#: src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp:95 +#: src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp:83 msgctxt "QDeclarativeAnimatedImage" msgid "Katie was built without support for QMovie" msgstr "" -#: src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp:167 +#: src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp:155 msgid "KeyNavigation is only available via attached properties" msgstr "" -#: src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp:168 +#: src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp:156 msgid "Keys is only available via attached properties" msgstr "" -#: src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp:193 +#: src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp:181 msgid "LayoutMirroring is only available via attached properties" msgstr "" -#: src/declarative/graphicsitems/qdeclarativeloader.cpp:399 +#: src/declarative/graphicsitems/qdeclarativeloader.cpp:387 msgid "Loader does not support loading non-visual elements." msgstr "" -#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:189 +#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:177 msgid "Possible anchor loop detected on fill." msgstr "" -#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:218 +#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:206 msgid "Possible anchor loop detected on centerIn." msgstr "" -#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:426 -#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:460 -#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1106 -#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1143 +#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:414 +#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:448 +#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1094 +#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1131 msgid "Cannot anchor to an item that isn't a parent or sibling." msgstr "" -#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:573 +#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:561 msgid "Possible anchor loop detected on vertical anchor." msgstr "" -#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:668 +#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:656 msgid "Possible anchor loop detected on horizontal anchor." msgstr "" -#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1090 +#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1078 msgid "Cannot specify left, right, and hcenter anchors." msgstr "" -#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1100 -#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1137 +#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1088 +#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1125 msgid "Cannot anchor to a null item." msgstr "" -#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1103 +#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1091 msgid "Cannot anchor a horizontal edge to a vertical edge." msgstr "" -#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1109 -#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1146 +#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1097 +#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1134 msgid "Cannot anchor item to self." msgstr "" -#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1121 +#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1109 msgid "Cannot specify top, bottom, and vcenter anchors." msgstr "" -#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1127 +#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1115 msgid "" "Baseline anchor cannot be used in conjunction with top, bottom, or vcenter " "anchors." msgstr "" -#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1140 +#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1128 msgid "Cannot anchor a vertical edge to a horizontal edge." msgstr "" -#: src/declarative/graphicsitems/qdeclarativetextinput.cpp:921 -#: src/declarative/graphicsitems/qdeclarativetextinput.cpp:929 +#: src/declarative/graphicsitems/qdeclarativetextinput.cpp:909 +#: src/declarative/graphicsitems/qdeclarativetextinput.cpp:917 msgid "Could not load cursor delegate" msgstr "" -#: src/declarative/graphicsitems/qdeclarativetextinput.cpp:940 +#: src/declarative/graphicsitems/qdeclarativetextinput.cpp:928 msgid "Could not instantiate cursor delegate" msgstr "" -#: src/declarative/graphicsitems/qdeclarativeflipable.cpp:130 +#: src/declarative/graphicsitems/qdeclarativeflipable.cpp:118 msgid "front is a write-once property" msgstr "" -#: src/declarative/graphicsitems/qdeclarativeflipable.cpp:150 +#: src/declarative/graphicsitems/qdeclarativeflipable.cpp:138 msgid "back is a write-once property" msgstr "" -#: src/declarative/graphicsitems/qdeclarativeitem.cpp:795 +#: src/declarative/graphicsitems/qdeclarativeitem.cpp:783 msgid "LayoutDirection attached property only works with Items" msgstr "" -#: src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp:1093 +#: src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp:1081 msgid "Delegate component must be Item type." msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:176 -#: src/declarative/qml/qdeclarativecompiler.cpp:1830 -#: src/declarative/qml/qdeclarativecompiler.cpp:2035 -#: src/declarative/qml/qdeclarativecompiler.cpp:2116 -#: src/declarative/qml/qdeclarativecompiler.cpp:2191 -#: src/declarative/qml/qdeclarativecompiler.cpp:2785 +#: src/declarative/qml/qdeclarativecompiler.cpp:164 +#: src/declarative/qml/qdeclarativecompiler.cpp:1818 +#: src/declarative/qml/qdeclarativecompiler.cpp:2023 +#: src/declarative/qml/qdeclarativecompiler.cpp:2104 +#: src/declarative/qml/qdeclarativecompiler.cpp:2179 +#: src/declarative/qml/qdeclarativecompiler.cpp:2773 msgid "Invalid property assignment: \"%1\" is a read-only property" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:185 +#: src/declarative/qml/qdeclarativecompiler.cpp:173 msgid "Invalid property assignment: unknown enumeration" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:193 +#: src/declarative/qml/qdeclarativecompiler.cpp:181 msgid "Invalid property assignment: string expected" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:196 +#: src/declarative/qml/qdeclarativecompiler.cpp:184 msgid "Invalid property assignment: url expected" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:206 +#: src/declarative/qml/qdeclarativecompiler.cpp:194 msgid "Invalid property assignment: unsigned int expected" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:217 +#: src/declarative/qml/qdeclarativecompiler.cpp:205 msgid "Invalid property assignment: int expected" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:221 -#: src/declarative/qml/qdeclarativecompiler.cpp:224 +#: src/declarative/qml/qdeclarativecompiler.cpp:209 +#: src/declarative/qml/qdeclarativecompiler.cpp:212 msgid "Invalid property assignment: number expected" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:230 +#: src/declarative/qml/qdeclarativecompiler.cpp:218 msgid "Invalid property assignment: color expected" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:238 +#: src/declarative/qml/qdeclarativecompiler.cpp:226 msgid "Invalid property assignment: date expected" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:245 +#: src/declarative/qml/qdeclarativecompiler.cpp:233 msgid "Invalid property assignment: time expected" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:252 +#: src/declarative/qml/qdeclarativecompiler.cpp:240 msgid "Invalid property assignment: datetime expected" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:261 +#: src/declarative/qml/qdeclarativecompiler.cpp:249 msgid "Invalid property assignment: point expected" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:269 +#: src/declarative/qml/qdeclarativecompiler.cpp:257 msgid "Invalid property assignment: size expected" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:277 +#: src/declarative/qml/qdeclarativecompiler.cpp:265 msgid "Invalid property assignment: rect expected" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:282 +#: src/declarative/qml/qdeclarativecompiler.cpp:270 msgid "Invalid property assignment: boolean expected" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:289 +#: src/declarative/qml/qdeclarativecompiler.cpp:277 msgid "Invalid property assignment: 3D vector expected" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:294 +#: src/declarative/qml/qdeclarativecompiler.cpp:282 msgid "Invalid property assignment: unsupported type \"%1\"" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:566 +#: src/declarative/qml/qdeclarativecompiler.cpp:554 msgid "Element is not creatable." msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1216 +#: src/declarative/qml/qdeclarativecompiler.cpp:1204 msgid "Component elements may not contain properties other than id" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1223 +#: src/declarative/qml/qdeclarativecompiler.cpp:1211 msgid "Invalid component id specification" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1229 -#: src/declarative/qml/qdeclarativecompiler.cpp:1744 +#: src/declarative/qml/qdeclarativecompiler.cpp:1217 +#: src/declarative/qml/qdeclarativecompiler.cpp:1732 msgid "id is not unique" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1239 +#: src/declarative/qml/qdeclarativecompiler.cpp:1227 msgid "Invalid component body specification" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1242 +#: src/declarative/qml/qdeclarativecompiler.cpp:1230 msgid "Component objects cannot declare new properties." msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1244 +#: src/declarative/qml/qdeclarativecompiler.cpp:1232 msgid "Component objects cannot declare new signals." msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1246 +#: src/declarative/qml/qdeclarativecompiler.cpp:1234 msgid "Component objects cannot declare new functions." msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1253 +#: src/declarative/qml/qdeclarativecompiler.cpp:1241 msgid "Cannot create empty component specification" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1341 -#: src/declarative/qml/qdeclarativecompiler.cpp:1462 +#: src/declarative/qml/qdeclarativecompiler.cpp:1329 +#: src/declarative/qml/qdeclarativecompiler.cpp:1450 msgid "\"%1.%2\" is not available in %3 %4.%5." msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1343 -#: src/declarative/qml/qdeclarativecompiler.cpp:1464 +#: src/declarative/qml/qdeclarativecompiler.cpp:1331 +#: src/declarative/qml/qdeclarativecompiler.cpp:1452 msgid "\"%1.%2\" is not available due to component versioning." msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1354 +#: src/declarative/qml/qdeclarativecompiler.cpp:1342 msgid "Incorrectly specified signal assignment" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1366 +#: src/declarative/qml/qdeclarativecompiler.cpp:1354 msgid "Cannot assign a value to a signal (expecting a script to be run)" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1370 +#: src/declarative/qml/qdeclarativecompiler.cpp:1358 msgid "Empty signal assignment" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1408 +#: src/declarative/qml/qdeclarativecompiler.cpp:1396 msgid "Empty property assignment" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1420 +#: src/declarative/qml/qdeclarativecompiler.cpp:1408 msgid "Attached properties cannot be used here" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1434 -#: src/declarative/qml/qdeclarativecompiler.cpp:1562 +#: src/declarative/qml/qdeclarativecompiler.cpp:1422 +#: src/declarative/qml/qdeclarativecompiler.cpp:1550 msgid "Non-existent attached object" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1438 -#: src/declarative/qml/qdeclarativecompiler.cpp:1565 +#: src/declarative/qml/qdeclarativecompiler.cpp:1426 +#: src/declarative/qml/qdeclarativecompiler.cpp:1553 msgid "Invalid attached object assignment" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1517 +#: src/declarative/qml/qdeclarativecompiler.cpp:1505 msgid "Cannot assign to non-existent default property" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1519 -#: src/declarative/qml/qdeclarativecompiler.cpp:1875 -#: src/declarative/qml/qdeclarativecompiler.cpp:1878 -#: src/declarative/util/qdeclarativeconnections.cpp:199 -#: src/declarative/util/qdeclarativeconnections.cpp:263 -#: src/declarative/util/qdeclarativepropertychanges.cpp:416 +#: src/declarative/qml/qdeclarativecompiler.cpp:1507 +#: src/declarative/qml/qdeclarativecompiler.cpp:1863 +#: src/declarative/qml/qdeclarativecompiler.cpp:1866 +#: src/declarative/util/qdeclarativeconnections.cpp:187 +#: src/declarative/util/qdeclarativeconnections.cpp:251 +#: src/declarative/util/qdeclarativepropertychanges.cpp:404 msgid "Cannot assign to non-existent property \"%1\"" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1549 +#: src/declarative/qml/qdeclarativecompiler.cpp:1537 msgid "Invalid use of namespace" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1554 +#: src/declarative/qml/qdeclarativecompiler.cpp:1542 msgid "Not an attached property name" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1736 +#: src/declarative/qml/qdeclarativecompiler.cpp:1724 msgid "Invalid use of id property" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1823 -#: src/declarative/qml/qdeclarativecompiler.cpp:1825 +#: src/declarative/qml/qdeclarativecompiler.cpp:1811 +#: src/declarative/qml/qdeclarativecompiler.cpp:1813 msgid "Property has already been assigned a value" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1843 -#: src/declarative/qml/qdeclarativecompiler.cpp:1850 +#: src/declarative/qml/qdeclarativecompiler.cpp:1831 +#: src/declarative/qml/qdeclarativecompiler.cpp:1838 msgid "Invalid grouped property access" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1853 +#: src/declarative/qml/qdeclarativecompiler.cpp:1841 msgid "Cannot assign a value directly to a grouped property" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1869 +#: src/declarative/qml/qdeclarativecompiler.cpp:1857 msgid "Invalid property use" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1884 +#: src/declarative/qml/qdeclarativecompiler.cpp:1872 msgid "Property assignment expected" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1887 +#: src/declarative/qml/qdeclarativecompiler.cpp:1875 msgid "Single property assignment expected" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1892 +#: src/declarative/qml/qdeclarativecompiler.cpp:1880 msgid "Unexpected object assignment" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1957 +#: src/declarative/qml/qdeclarativecompiler.cpp:1945 msgid "Cannot assign object to list" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1963 +#: src/declarative/qml/qdeclarativecompiler.cpp:1951 msgid "Can only assign one binding to lists" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1969 +#: src/declarative/qml/qdeclarativecompiler.cpp:1957 msgid "Cannot assign primitives to lists" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1982 +#: src/declarative/qml/qdeclarativecompiler.cpp:1970 msgid "Cannot assign multiple values to a script property" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:1985 +#: src/declarative/qml/qdeclarativecompiler.cpp:1973 msgid "Invalid property assignment: script expected" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2000 +#: src/declarative/qml/qdeclarativecompiler.cpp:1988 msgid "Cannot assign multiple values to a singular property" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2093 +#: src/declarative/qml/qdeclarativecompiler.cpp:2081 msgid "Cannot assign object to property" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2143 +#: src/declarative/qml/qdeclarativecompiler.cpp:2131 msgid "\"%1\" cannot operate on \"%2\"" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2319 +#: src/declarative/qml/qdeclarativecompiler.cpp:2307 msgid "Duplicate default property" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2324 +#: src/declarative/qml/qdeclarativecompiler.cpp:2312 msgid "Duplicate property name" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2328 +#: src/declarative/qml/qdeclarativecompiler.cpp:2316 msgid "Property names cannot begin with an upper case letter" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2331 +#: src/declarative/qml/qdeclarativecompiler.cpp:2319 msgid "Illegal property name" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2339 +#: src/declarative/qml/qdeclarativecompiler.cpp:2327 msgid "Duplicate signal name" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2342 +#: src/declarative/qml/qdeclarativecompiler.cpp:2330 msgid "Signal names cannot begin with an upper case letter" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2344 +#: src/declarative/qml/qdeclarativecompiler.cpp:2332 msgid "Illegal signal name" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2350 +#: src/declarative/qml/qdeclarativecompiler.cpp:2338 msgid "Duplicate method name" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2353 +#: src/declarative/qml/qdeclarativecompiler.cpp:2341 msgid "Method names cannot begin with an upper case letter" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2355 +#: src/declarative/qml/qdeclarativecompiler.cpp:2343 msgid "Illegal method name" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2376 +#: src/declarative/qml/qdeclarativecompiler.cpp:2364 msgid "Property value set multiple times" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2380 +#: src/declarative/qml/qdeclarativecompiler.cpp:2368 msgid "Invalid property nesting" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2432 +#: src/declarative/qml/qdeclarativecompiler.cpp:2420 msgid "Cannot override FINAL property" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2455 +#: src/declarative/qml/qdeclarativecompiler.cpp:2443 msgid "Invalid property type" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2632 +#: src/declarative/qml/qdeclarativecompiler.cpp:2620 msgid "Invalid empty ID" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2635 +#: src/declarative/qml/qdeclarativecompiler.cpp:2623 msgid "IDs cannot start with an uppercase letter" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2641 +#: src/declarative/qml/qdeclarativecompiler.cpp:2629 msgid "IDs must start with a letter or underscore" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2643 +#: src/declarative/qml/qdeclarativecompiler.cpp:2631 msgid "IDs must contain only letters, numbers, and underscores" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2649 +#: src/declarative/qml/qdeclarativecompiler.cpp:2637 msgid "ID illegally masks global JavaScript property" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2680 -#: src/declarative/qml/qdeclarativecompiler.cpp:2689 +#: src/declarative/qml/qdeclarativecompiler.cpp:2668 +#: src/declarative/qml/qdeclarativecompiler.cpp:2677 msgid "No property alias location" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2685 -#: src/declarative/qml/qdeclarativecompiler.cpp:2710 -#: src/declarative/qml/qdeclarativecompiler.cpp:2717 -#: src/declarative/qml/qdeclarativecompiler.cpp:2724 -#: src/declarative/qml/qdeclarativecompiler.cpp:2730 +#: src/declarative/qml/qdeclarativecompiler.cpp:2673 +#: src/declarative/qml/qdeclarativecompiler.cpp:2698 +#: src/declarative/qml/qdeclarativecompiler.cpp:2705 +#: src/declarative/qml/qdeclarativecompiler.cpp:2712 +#: src/declarative/qml/qdeclarativecompiler.cpp:2718 msgid "Invalid alias location" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2694 +#: src/declarative/qml/qdeclarativecompiler.cpp:2682 msgid "" "Invalid alias reference. An alias reference must be specified as , ." " or .." msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2697 +#: src/declarative/qml/qdeclarativecompiler.cpp:2685 msgid "Invalid alias reference. Unable to find id \"%1\"" msgstr "" -#: src/declarative/qml/qdeclarativecompiler.cpp:2712 +#: src/declarative/qml/qdeclarativecompiler.cpp:2700 msgid "Alias property exceeds alias bounds" msgstr "" -#: src/declarative/qml/qdeclarativeimport.cpp:372 +#: src/declarative/qml/qdeclarativeimport.cpp:360 msgid "plugin cannot be loaded for module \"%1\": %2" msgstr "" -#: src/declarative/qml/qdeclarativeimport.cpp:377 +#: src/declarative/qml/qdeclarativeimport.cpp:365 msgid "module \"%1\" plugin \"%2\" not found" msgstr "" -#: src/declarative/qml/qdeclarativeimport.cpp:521 -#: src/declarative/qml/qdeclarativeimport.cpp:589 +#: src/declarative/qml/qdeclarativeimport.cpp:509 +#: src/declarative/qml/qdeclarativeimport.cpp:577 msgid "module \"%1\" version %2.%3 is not installed" msgstr "" -#: src/declarative/qml/qdeclarativeimport.cpp:523 +#: src/declarative/qml/qdeclarativeimport.cpp:511 msgid "module \"%1\" is not installed" msgstr "" -#: src/declarative/qml/qdeclarativeimport.cpp:537 -#: src/declarative/qml/qdeclarativeimport.cpp:557 +#: src/declarative/qml/qdeclarativeimport.cpp:525 +#: src/declarative/qml/qdeclarativeimport.cpp:545 msgid "\"%1\": no such directory" msgstr "" -#: src/declarative/qml/qdeclarativeimport.cpp:555 +#: src/declarative/qml/qdeclarativeimport.cpp:543 msgid "import \"%1\" has no qmldir and no namespace" msgstr "" -#: src/declarative/qml/qdeclarativeimport.cpp:623 +#: src/declarative/qml/qdeclarativeimport.cpp:611 msgid "- %1 is not a namespace" msgstr "" -#: src/declarative/qml/qdeclarativeimport.cpp:629 +#: src/declarative/qml/qdeclarativeimport.cpp:617 msgid "- nested namespaces not allowed" msgstr "" -#: src/declarative/qml/qdeclarativeimport.cpp:676 -#: src/declarative/qml/qdeclarativeimport.cpp:680 +#: src/declarative/qml/qdeclarativeimport.cpp:664 +#: src/declarative/qml/qdeclarativeimport.cpp:668 msgid "local directory" msgstr "" -#: src/declarative/qml/qdeclarativeimport.cpp:686 +#: src/declarative/qml/qdeclarativeimport.cpp:674 msgid "is ambiguous. Found in %1 and in %2" msgstr "" -#: src/declarative/qml/qdeclarativeimport.cpp:690 +#: src/declarative/qml/qdeclarativeimport.cpp:678 msgid "is ambiguous. Found in %1 in version %2.%3 and %4.%5" msgstr "" -#: src/declarative/qml/qdeclarativeimport.cpp:704 +#: src/declarative/qml/qdeclarativeimport.cpp:692 msgid "is instantiated recursively" msgstr "" -#: src/declarative/qml/qdeclarativeimport.cpp:706 +#: src/declarative/qml/qdeclarativeimport.cpp:694 msgid "is not a type" msgstr "" -#: src/declarative/qml/qdeclarativebinding.cpp:419 +#: src/declarative/qml/qdeclarativebinding.cpp:407 msgid "Binding loop detected for property \"%1\"" msgstr "" -#: src/declarative/qml/qdeclarativecomponent.cpp:489 +#: src/declarative/qml/qdeclarativecomponent.cpp:477 msgid "Invalid empty URL" msgstr "" -#: src/declarative/qml/qdeclarativecomponent.cpp:637 +#: src/declarative/qml/qdeclarativecomponent.cpp:625 msgid "createObject: value is not an object" msgstr "" -#: src/declarative/qml/qdeclarativevme.cpp:211 +#: src/declarative/qml/qdeclarativevme.cpp:199 msgctxt "QDeclarativeVME" msgid "Unable to create object of type %1" msgstr "" -#: src/declarative/qml/qdeclarativevme.cpp:651 +#: src/declarative/qml/qdeclarativevme.cpp:639 msgctxt "QDeclarativeVME" msgid "Cannot assign object type %1 with no default method" msgstr "" -#: src/declarative/qml/qdeclarativevme.cpp:654 +#: src/declarative/qml/qdeclarativevme.cpp:642 msgctxt "QDeclarativeVME" msgid "Cannot connect mismatched signal/slot %1 %vs. %2" msgstr "" -#: src/declarative/qml/qdeclarativevme.cpp:659 +#: src/declarative/qml/qdeclarativevme.cpp:647 msgctxt "QDeclarativeVME" msgid "Cannot assign an object to signal property %1" msgstr "" -#: src/declarative/qml/qdeclarativevme.cpp:808 +#: src/declarative/qml/qdeclarativevme.cpp:796 msgctxt "QDeclarativeVME" msgid "Cannot assign object to list" msgstr "" -#: src/declarative/qml/qdeclarativevme.cpp:851 +#: src/declarative/qml/qdeclarativevme.cpp:839 msgctxt "QDeclarativeVME" msgid "Cannot assign object to interface property" msgstr "" -#: src/declarative/qml/qdeclarativevme.cpp:862 +#: src/declarative/qml/qdeclarativevme.cpp:850 msgctxt "QDeclarativeVME" msgid "Unable to create attached object" msgstr "" -#: src/declarative/qml/qdeclarativevme.cpp:894 +#: src/declarative/qml/qdeclarativevme.cpp:882 msgctxt "QDeclarativeVME" msgid "Cannot set properties on %1 as it is null" msgstr "" -#: src/declarative/qml/qdeclarativescriptparser.cpp:246 -#: src/declarative/qml/qdeclarativescriptparser.cpp:675 -#: src/declarative/qml/qdeclarativescriptparser.cpp:734 +#: src/declarative/qml/qdeclarativescriptparser.cpp:234 +#: src/declarative/qml/qdeclarativescriptparser.cpp:663 +#: src/declarative/qml/qdeclarativescriptparser.cpp:722 msgctxt "QDeclarativeParser" msgid "Property value set multiple times" msgstr "" -#: src/declarative/qml/qdeclarativescriptparser.cpp:257 +#: src/declarative/qml/qdeclarativescriptparser.cpp:245 msgctxt "QDeclarativeParser" msgid "Expected type name" msgstr "" -#: src/declarative/qml/qdeclarativescriptparser.cpp:391 +#: src/declarative/qml/qdeclarativescriptparser.cpp:379 msgctxt "QDeclarativeParser" msgid "Invalid import qualifier ID" msgstr "" -#: src/declarative/qml/qdeclarativescriptparser.cpp:399 +#: src/declarative/qml/qdeclarativescriptparser.cpp:387 msgctxt "QDeclarativeParser" msgid "Reserved name \"Qt\" cannot be used as an qualifier" msgstr "" -#: src/declarative/qml/qdeclarativescriptparser.cpp:414 +#: src/declarative/qml/qdeclarativescriptparser.cpp:402 msgctxt "QDeclarativeParser" msgid "Script import qualifiers must be unique." msgstr "" -#: src/declarative/qml/qdeclarativescriptparser.cpp:424 +#: src/declarative/qml/qdeclarativescriptparser.cpp:412 msgctxt "QDeclarativeParser" msgid "Script import requires a qualifier" msgstr "" -#: src/declarative/qml/qdeclarativescriptparser.cpp:435 +#: src/declarative/qml/qdeclarativescriptparser.cpp:423 msgctxt "QDeclarativeParser" msgid "Library import requires a version" msgstr "" -#: src/declarative/qml/qdeclarativescriptparser.cpp:494 +#: src/declarative/qml/qdeclarativescriptparser.cpp:482 msgctxt "QDeclarativeParser" msgid "Expected parameter type" msgstr "" -#: src/declarative/qml/qdeclarativescriptparser.cpp:536 +#: src/declarative/qml/qdeclarativescriptparser.cpp:524 msgctxt "QDeclarativeParser" msgid "Invalid property type modifier" msgstr "" -#: src/declarative/qml/qdeclarativescriptparser.cpp:545 +#: src/declarative/qml/qdeclarativescriptparser.cpp:533 msgctxt "QDeclarativeParser" msgid "Unexpected property type modifier" msgstr "" -#: src/declarative/qml/qdeclarativescriptparser.cpp:554 +#: src/declarative/qml/qdeclarativescriptparser.cpp:542 msgctxt "QDeclarativeParser" msgid "Expected property type" msgstr "" -#: src/declarative/qml/qdeclarativescriptparser.cpp:563 +#: src/declarative/qml/qdeclarativescriptparser.cpp:551 msgctxt "QDeclarativeParser" msgid "Readonly not yet supported" msgstr "" -#: src/declarative/qml/qdeclarativescriptparser.cpp:781 +#: src/declarative/qml/qdeclarativescriptparser.cpp:769 msgctxt "QDeclarativeParser" msgid "JavaScript declaration outside Script element" msgstr "" -#: src/declarative/qml/qdeclarativecompiledbindings.cpp:337 +#: src/declarative/qml/qdeclarativecompiledbindings.cpp:325 msgctxt "QDeclarativeCompiledBindings" msgid "Binding loop detected for property \"%1\"" msgstr "" -#: src/declarative/qml/qdeclarativetypeloader.cpp:914 +#: src/declarative/qml/qdeclarativetypeloader.cpp:902 msgid "Script %1 unavailable" msgstr "" -#: src/declarative/qml/qdeclarativetypeloader.cpp:932 +#: src/declarative/qml/qdeclarativetypeloader.cpp:920 msgid "Type %1 unavailable" msgstr "" -#: src/declarative/qml/qdeclarativetypeloader.cpp:1118 +#: src/declarative/qml/qdeclarativetypeloader.cpp:1106 msgid "Namespace %1 cannot be used as a type" msgstr "" -#: src/declarative/qml/qdeclarativetypeloader.cpp:1120 +#: src/declarative/qml/qdeclarativetypeloader.cpp:1108 msgid "%1 %2" msgstr "" -#: src/declarative/qml/parser/qdeclarativejsparser.cpp:1817 -#: src/declarative/qml/parser/qdeclarativejsparser.cpp:1885 +#: src/declarative/qml/parser/qdeclarativejsparser.cpp:1805 +#: src/declarative/qml/parser/qdeclarativejsparser.cpp:1873 msgctxt "QDeclarativeParser" msgid "Syntax error" msgstr "" -#: src/declarative/qml/parser/qdeclarativejsparser.cpp:1819 +#: src/declarative/qml/parser/qdeclarativejsparser.cpp:1807 msgctxt "QDeclarativeParser" msgid "Unexpected token `%1'" msgstr "" -#: src/declarative/qml/parser/qdeclarativejsparser.cpp:1848 -#: src/declarative/qml/parser/qdeclarativejsparser.cpp:1872 +#: src/declarative/qml/parser/qdeclarativejsparser.cpp:1836 +#: src/declarative/qml/parser/qdeclarativejsparser.cpp:1860 msgctxt "QDeclarativeParser" msgid "Expected token `%1'" msgstr "" -#: src/declarative/qml/parser/qdeclarativejslexer.cpp:532 -#: src/declarative/qml/parser/qdeclarativejslexer.cpp:655 -#: src/declarative/qml/parser/qdeclarativejslexer.cpp:709 +#: src/declarative/qml/parser/qdeclarativejslexer.cpp:520 +#: src/declarative/qml/parser/qdeclarativejslexer.cpp:643 +#: src/declarative/qml/parser/qdeclarativejslexer.cpp:697 msgctxt "QDeclarativeParser" msgid "Illegal unicode escape sequence" msgstr "" -#: src/declarative/qml/parser/qdeclarativejslexer.cpp:569 +#: src/declarative/qml/parser/qdeclarativejslexer.cpp:557 msgctxt "QDeclarativeParser" msgid "Illegal character" msgstr "" -#: src/declarative/qml/parser/qdeclarativejslexer.cpp:583 +#: src/declarative/qml/parser/qdeclarativejslexer.cpp:571 msgctxt "QDeclarativeParser" msgid "Unclosed string at end of line" msgstr "" -#: src/declarative/qml/parser/qdeclarativejslexer.cpp:609 +#: src/declarative/qml/parser/qdeclarativejslexer.cpp:597 msgctxt "QDeclarativeParser" msgid "Illegal escape sequence" msgstr "" -#: src/declarative/qml/parser/qdeclarativejslexer.cpp:681 +#: src/declarative/qml/parser/qdeclarativejslexer.cpp:669 msgctxt "QDeclarativeParser" msgid "Unclosed comment at end of file" msgstr "" -#: src/declarative/qml/parser/qdeclarativejslexer.cpp:783 +#: src/declarative/qml/parser/qdeclarativejslexer.cpp:771 msgctxt "QDeclarativeParser" msgid "Illegal syntax for exponential number" msgstr "" -#: src/declarative/qml/parser/qdeclarativejslexer.cpp:809 +#: src/declarative/qml/parser/qdeclarativejslexer.cpp:797 msgctxt "QDeclarativeParser" msgid "Identifier cannot start with numeric literal" msgstr "" -#: src/declarative/qml/parser/qdeclarativejslexer.cpp:1147 +#: src/declarative/qml/parser/qdeclarativejslexer.cpp:1135 msgctxt "QDeclarativeParser" msgid "Unterminated regular expression literal" msgstr "" -#: src/declarative/qml/parser/qdeclarativejslexer.cpp:1162 +#: src/declarative/qml/parser/qdeclarativejslexer.cpp:1150 msgctxt "QDeclarativeParser" msgid "Invalid regular expression flag '%0'" msgstr "" -#: src/declarative/qml/parser/qdeclarativejslexer.cpp:1178 -#: src/declarative/qml/parser/qdeclarativejslexer.cpp:1200 +#: src/declarative/qml/parser/qdeclarativejslexer.cpp:1166 +#: src/declarative/qml/parser/qdeclarativejslexer.cpp:1188 msgctxt "QDeclarativeParser" msgid "Unterminated regular expression backslash sequence" msgstr "" -#: src/declarative/qml/parser/qdeclarativejslexer.cpp:1213 +#: src/declarative/qml/parser/qdeclarativejslexer.cpp:1201 msgctxt "QDeclarativeParser" msgid "Unterminated regular expression class" msgstr "" -#: src/declarative/util/qdeclarativeconnections.cpp:209 +#: src/declarative/util/qdeclarativeconnections.cpp:197 msgid "Connections: nested objects not allowed" msgstr "" -#: src/declarative/util/qdeclarativeconnections.cpp:212 +#: src/declarative/util/qdeclarativeconnections.cpp:200 msgid "Connections: syntax error" msgstr "" -#: src/declarative/util/qdeclarativeconnections.cpp:220 +#: src/declarative/util/qdeclarativeconnections.cpp:208 msgid "Connections: script expected" msgstr "" -#: src/declarative/util/qdeclarativeanimation.cpp:164 +#: src/declarative/util/qdeclarativeanimation.cpp:152 msgid "Cannot animate non-existent property \"%1\"" msgstr "" -#: src/declarative/util/qdeclarativeanimation.cpp:167 +#: src/declarative/util/qdeclarativeanimation.cpp:155 msgid "Cannot animate read-only property \"%1\"" msgstr "" -#: src/declarative/util/qdeclarativeanimation.cpp:601 -#: src/declarative/util/qdeclarativeanimation.cpp:1835 -#: src/declarative/util/qdeclarativeanimation.cpp:2855 +#: src/declarative/util/qdeclarativeanimation.cpp:589 +#: src/declarative/util/qdeclarativeanimation.cpp:1823 +#: src/declarative/util/qdeclarativeanimation.cpp:2843 msgid "Cannot set a duration of < 0" msgstr "" -#: src/declarative/util/qdeclarativeanimation.cpp:2687 -#: src/declarative/util/qdeclarativestateoperations.cpp:95 +#: src/declarative/util/qdeclarativeanimation.cpp:2675 +#: src/declarative/util/qdeclarativestateoperations.cpp:83 msgid "Unable to preserve appearance under complex transform" msgstr "" -#: src/declarative/util/qdeclarativeanimation.cpp:2698 -#: src/declarative/util/qdeclarativeanimation.cpp:2705 -#: src/declarative/util/qdeclarativestateoperations.cpp:106 -#: src/declarative/util/qdeclarativestateoperations.cpp:113 +#: src/declarative/util/qdeclarativeanimation.cpp:2686 +#: src/declarative/util/qdeclarativeanimation.cpp:2693 +#: src/declarative/util/qdeclarativestateoperations.cpp:94 +#: src/declarative/util/qdeclarativestateoperations.cpp:101 msgid "Unable to preserve appearance under non-uniform scale" msgstr "" -#: src/declarative/util/qdeclarativeanimation.cpp:2712 -#: src/declarative/util/qdeclarativestateoperations.cpp:120 +#: src/declarative/util/qdeclarativeanimation.cpp:2700 +#: src/declarative/util/qdeclarativestateoperations.cpp:108 msgid "Unable to preserve appearance under scale of 0" msgstr "" -#: src/declarative/util/qdeclarativepropertychanges.cpp:248 +#: src/declarative/util/qdeclarativepropertychanges.cpp:236 msgid "PropertyChanges does not support creating state-specific objects." msgstr "" -#: src/declarative/util/qdeclarativepropertychanges.cpp:419 +#: src/declarative/util/qdeclarativepropertychanges.cpp:407 msgid "Cannot assign to read-only property \"%1\"" msgstr "" -#: src/declarative/util/qdeclarativebehavior.cpp:119 +#: src/declarative/util/qdeclarativebehavior.cpp:107 msgid "Cannot change the animation assigned to a Behavior." msgstr "" -#: src/declarative/util/qdeclarativelistmodel.cpp:382 +#: src/declarative/util/qdeclarativelistmodel.cpp:370 msgid "remove: index %1 out of range" msgstr "" -#: src/declarative/util/qdeclarativelistmodel.cpp:415 +#: src/declarative/util/qdeclarativelistmodel.cpp:403 msgid "insert: value is not an object" msgstr "" -#: src/declarative/util/qdeclarativelistmodel.cpp:420 +#: src/declarative/util/qdeclarativelistmodel.cpp:408 msgid "insert: index %1 out of range" msgstr "" -#: src/declarative/util/qdeclarativelistmodel.cpp:450 +#: src/declarative/util/qdeclarativelistmodel.cpp:438 msgid "move: out of range" msgstr "" -#: src/declarative/util/qdeclarativelistmodel.cpp:490 +#: src/declarative/util/qdeclarativelistmodel.cpp:478 msgid "append: value is not an object" msgstr "" -#: src/declarative/util/qdeclarativelistmodel.cpp:561 +#: src/declarative/util/qdeclarativelistmodel.cpp:549 msgid "set: value is not an object" msgstr "" -#: src/declarative/util/qdeclarativelistmodel.cpp:565 -#: src/declarative/util/qdeclarativelistmodel.cpp:603 +#: src/declarative/util/qdeclarativelistmodel.cpp:553 +#: src/declarative/util/qdeclarativelistmodel.cpp:591 msgid "set: index %1 out of range" msgstr "" -#: src/declarative/util/qdeclarativelistmodel.cpp:640 -#: src/declarative/util/qdeclarativelistmodel.cpp:657 +#: src/declarative/util/qdeclarativelistmodel.cpp:628 +#: src/declarative/util/qdeclarativelistmodel.cpp:645 msgid "ListElement: cannot contain nested elements" msgstr "" -#: src/declarative/util/qdeclarativelistmodel.cpp:661 +#: src/declarative/util/qdeclarativelistmodel.cpp:649 msgid "ListElement: cannot use reserved \"id\" property" msgstr "" -#: src/declarative/util/qdeclarativelistmodel.cpp:715 +#: src/declarative/util/qdeclarativelistmodel.cpp:703 msgid "ListElement: cannot use script for property value" msgstr "" -#: src/declarative/util/qdeclarativelistmodel.cpp:747 +#: src/declarative/util/qdeclarativelistmodel.cpp:735 msgid "ListModel: undefined property '%1'" msgstr "" -#: src/declarative/util/qdeclarativepixmapcache.cpp:298 +#: src/declarative/util/qdeclarativepixmapcache.cpp:286 msgid "Error decoding: %1: %2" msgstr "" -#: src/declarative/util/qdeclarativepixmapcache.cpp:471 -#: src/declarative/util/qdeclarativepixmapcache.cpp:832 +#: src/declarative/util/qdeclarativepixmapcache.cpp:459 +#: src/declarative/util/qdeclarativepixmapcache.cpp:820 msgid "Failed to get image from provider: %1" msgstr "" -#: src/declarative/util/qdeclarativepixmapcache.cpp:489 -#: src/declarative/util/qdeclarativepixmapcache.cpp:850 +#: src/declarative/util/qdeclarativepixmapcache.cpp:477 +#: src/declarative/util/qdeclarativepixmapcache.cpp:838 msgid "Cannot open: %1" msgstr "" -#: src/declarative/util/qdeclarativeutilmodule.cpp:71 +#: src/declarative/util/qdeclarativeutilmodule.cpp:59 msgid "Application is an abstract class" msgstr "" -#: src/declarative/util/qdeclarativeutilmodule.cpp:99 +#: src/declarative/util/qdeclarativeutilmodule.cpp:87 msgid "Animation is an abstract class" msgstr "" -#: src/declarative/util/qdeclarativeutilmodule.cpp:110 -#: src/declarative/util/qdeclarativeutilmodule.cpp:112 +#: src/declarative/util/qdeclarativeutilmodule.cpp:98 +#: src/declarative/util/qdeclarativeutilmodule.cpp:100 msgctxt "QDeclarativeXmlListModel" msgid "Katie does not support xmlpatterns" msgstr "" -#: src/gui/accessible/qaccessibleobject.cpp:365 -#: src/plugins/accessible/widgets/complexwidgets.cpp:1609 +#: src/gui/accessible/qaccessibleobject.cpp:353 +#: src/plugins/accessible/widgets/complexwidgets.cpp:1597 msgid "Activate" msgstr "" -#: src/gui/accessible/qaccessibleobject.cpp:367 +#: src/gui/accessible/qaccessibleobject.cpp:355 msgid "Activates the program's main window" msgstr "" -#: src/gui/dialogs/qwizard.cpp:590 +#: src/gui/dialogs/qwizard.cpp:578 msgid "Go Back" msgstr "" -#: src/gui/dialogs/qwizard.cpp:590 +#: src/gui/dialogs/qwizard.cpp:578 msgid "< &Back" msgstr "" -#: src/gui/dialogs/qwizard.cpp:593 -#: src/scripttools/debugging/qscriptdebugger.cpp:1679 +#: src/gui/dialogs/qwizard.cpp:581 +#: src/scripttools/debugging/qscriptdebugger.cpp:1667 msgid "Continue" msgstr "" -#: src/gui/dialogs/qwizard.cpp:595 +#: src/gui/dialogs/qwizard.cpp:583 msgid "&Next >" msgstr "" -#: src/gui/dialogs/qwizard.cpp:597 +#: src/gui/dialogs/qwizard.cpp:585 msgid "Commit" msgstr "" -#: src/gui/dialogs/qwizard.cpp:599 +#: src/gui/dialogs/qwizard.cpp:587 msgid "Done" msgstr "" -#: src/gui/dialogs/qwizard.cpp:599 +#: src/gui/dialogs/qwizard.cpp:587 msgid "&Finish" msgstr "" -#: src/gui/dialogs/qwizard.cpp:601 src/gui/dialogs/qprogressdialog.cpp:176 +#: src/gui/dialogs/qwizard.cpp:589 src/gui/dialogs/qprogressdialog.cpp:164 msgid "Cancel" msgstr "" -#: src/gui/dialogs/qwizard.cpp:603 src/gui/widgets/qmdisubwindow.cpp:324 +#: src/gui/dialogs/qwizard.cpp:591 src/gui/widgets/qmdisubwindow.cpp:312 msgid "Help" msgstr "" -#: src/gui/dialogs/qwizard.cpp:603 +#: src/gui/dialogs/qwizard.cpp:591 msgid "&Help" msgstr "" -#: src/gui/dialogs/qprintpreviewdialog.cpp:238 +#: src/gui/dialogs/qprintpreviewdialog.cpp:226 msgid "%1%" msgstr "" -#: src/gui/dialogs/qprintpreviewdialog.cpp:307 +#: src/gui/dialogs/qprintpreviewdialog.cpp:295 msgctxt "QPrintPreviewDialog" msgid "Print Preview" msgstr "" -#: src/gui/dialogs/qprintpreviewdialog.cpp:333 +#: src/gui/dialogs/qprintpreviewdialog.cpp:321 msgctxt "QPrintPreviewDialog" msgid "Next page" msgstr "" -#: src/gui/dialogs/qprintpreviewdialog.cpp:334 +#: src/gui/dialogs/qprintpreviewdialog.cpp:322 msgctxt "QPrintPreviewDialog" msgid "Previous page" msgstr "" -#: src/gui/dialogs/qprintpreviewdialog.cpp:335 +#: src/gui/dialogs/qprintpreviewdialog.cpp:323 msgctxt "QPrintPreviewDialog" msgid "First page" msgstr "" -#: src/gui/dialogs/qprintpreviewdialog.cpp:336 +#: src/gui/dialogs/qprintpreviewdialog.cpp:324 msgctxt "QPrintPreviewDialog" msgid "Last page" msgstr "" -#: src/gui/dialogs/qprintpreviewdialog.cpp:345 +#: src/gui/dialogs/qprintpreviewdialog.cpp:333 msgctxt "QPrintPreviewDialog" msgid "Fit width" msgstr "" -#: src/gui/dialogs/qprintpreviewdialog.cpp:346 +#: src/gui/dialogs/qprintpreviewdialog.cpp:334 msgctxt "QPrintPreviewDialog" msgid "Fit page" msgstr "" -#: src/gui/dialogs/qprintpreviewdialog.cpp:357 +#: src/gui/dialogs/qprintpreviewdialog.cpp:345 msgctxt "QPrintPreviewDialog" msgid "Zoom in" msgstr "" -#: src/gui/dialogs/qprintpreviewdialog.cpp:358 +#: src/gui/dialogs/qprintpreviewdialog.cpp:346 msgctxt "QPrintPreviewDialog" msgid "Zoom out" msgstr "" -#: src/gui/dialogs/qprintpreviewdialog.cpp:364 +#: src/gui/dialogs/qprintpreviewdialog.cpp:352 msgctxt "QPrintPreviewDialog" msgid "Portrait" msgstr "" -#: src/gui/dialogs/qprintpreviewdialog.cpp:365 +#: src/gui/dialogs/qprintpreviewdialog.cpp:353 msgctxt "QPrintPreviewDialog" msgid "Landscape" msgstr "" -#: src/gui/dialogs/qprintpreviewdialog.cpp:375 +#: src/gui/dialogs/qprintpreviewdialog.cpp:363 msgctxt "QPrintPreviewDialog" msgid "Show single page" msgstr "" -#: src/gui/dialogs/qprintpreviewdialog.cpp:376 +#: src/gui/dialogs/qprintpreviewdialog.cpp:364 msgctxt "QPrintPreviewDialog" msgid "Show facing pages" msgstr "" -#: src/gui/dialogs/qprintpreviewdialog.cpp:377 +#: src/gui/dialogs/qprintpreviewdialog.cpp:365 msgctxt "QPrintPreviewDialog" msgid "Show overview of all pages" msgstr "" -#: src/gui/dialogs/qprintpreviewdialog.cpp:392 +#: src/gui/dialogs/qprintpreviewdialog.cpp:380 msgctxt "QPrintPreviewDialog" msgid "Print" msgstr "" -#: src/gui/dialogs/qprintpreviewdialog.cpp:393 +#: src/gui/dialogs/qprintpreviewdialog.cpp:381 msgctxt "QPrintPreviewDialog" msgid "Page setup" msgstr "" -#: src/gui/dialogs/qinputdialog.cpp:209 +#: src/gui/dialogs/qinputdialog.cpp:197 msgid "Enter a value:" msgstr "" -#: src/gui/dialogs/qfilesystemmodel_p.h:244 +#: src/gui/dialogs/qfilesystemmodel_p.h:232 msgid "Computer" msgstr "" -#: src/gui/dialogs/qmessagebox.cpp:117 +#: src/gui/dialogs/qmessagebox.cpp:105 msgid "Show Details..." msgstr "" -#: src/gui/dialogs/qmessagebox.cpp:117 +#: src/gui/dialogs/qmessagebox.cpp:105 msgid "Hide Details..." msgstr "" -#: src/gui/dialogs/qmessagebox.cpp:1466 +#: src/gui/dialogs/qmessagebox.cpp:1454 msgid "

About Katie

This program uses Katie version %1.

" msgstr "" -#: src/gui/dialogs/qmessagebox.cpp:1470 +#: src/gui/dialogs/qmessagebox.cpp:1458 msgid "" "

Katie is a C++ toolkit derived from the Qt 4.8 framework.

Katie is " "available under two different licensing options designed to accommodate the " @@ -1420,3388 +1375,3388 @@ msgid "" "more information.

" msgstr "" -#: src/gui/dialogs/qmessagebox.cpp:1486 +#: src/gui/dialogs/qmessagebox.cpp:1474 msgid "About Katie" msgstr "" -#: src/gui/dialogs/qsidebar.cpp:417 +#: src/gui/dialogs/qsidebar.cpp:405 msgid "Remove" msgstr "" +#: src/gui/dialogs/qabstractpagesetupdialog.cpp:48 #: src/gui/dialogs/qabstractpagesetupdialog.cpp:60 -#: src/gui/dialogs/qabstractpagesetupdialog.cpp:72 msgctxt "QPrintPreviewDialog" msgid "Page Setup" msgstr "" -#: src/gui/dialogs/qdialog.cpp:507 src/gui/kernel/qwhatsthis.cpp:480 +#: src/gui/dialogs/qdialog.cpp:495 src/gui/kernel/qwhatsthis.cpp:468 msgid "What's This?" msgstr "" -#: src/gui/dialogs/qfontdialog.cpp:167 +#: src/gui/dialogs/qfontdialog.cpp:155 msgid "Select Font" msgstr "" -#: src/gui/dialogs/qfontdialog.cpp:691 +#: src/gui/dialogs/qfontdialog.cpp:679 msgid "&Font" msgstr "" -#: src/gui/dialogs/qfontdialog.cpp:692 +#: src/gui/dialogs/qfontdialog.cpp:680 msgid "Font st&yle" msgstr "" -#: src/gui/dialogs/qfontdialog.cpp:693 src/gui/widgets/qmdisubwindow.cpp:1028 -#: src/gui/widgets/qworkspace.cpp:1028 +#: src/gui/dialogs/qfontdialog.cpp:681 src/gui/widgets/qmdisubwindow.cpp:1016 +#: src/gui/widgets/qworkspace.cpp:1016 msgid "&Size" msgstr "" -#: src/gui/dialogs/qfontdialog.cpp:696 +#: src/gui/dialogs/qfontdialog.cpp:684 msgid "Effects" msgstr "" -#: src/gui/dialogs/qfontdialog.cpp:697 +#: src/gui/dialogs/qfontdialog.cpp:685 msgid "Stri&keout" msgstr "" -#: src/gui/dialogs/qfontdialog.cpp:698 +#: src/gui/dialogs/qfontdialog.cpp:686 msgid "&Underline" msgstr "" -#: src/gui/dialogs/qfontdialog.cpp:699 +#: src/gui/dialogs/qfontdialog.cpp:687 msgid "Sample" msgstr "" -#: src/gui/dialogs/qcolordialog.cpp:1214 +#: src/gui/dialogs/qcolordialog.cpp:1202 msgid "Hu&e:" msgstr "" -#: src/gui/dialogs/qcolordialog.cpp:1215 +#: src/gui/dialogs/qcolordialog.cpp:1203 msgid "&Sat:" msgstr "" -#: src/gui/dialogs/qcolordialog.cpp:1216 +#: src/gui/dialogs/qcolordialog.cpp:1204 msgid "&Val:" msgstr "" -#: src/gui/dialogs/qcolordialog.cpp:1217 +#: src/gui/dialogs/qcolordialog.cpp:1205 msgid "&Red:" msgstr "" -#: src/gui/dialogs/qcolordialog.cpp:1218 +#: src/gui/dialogs/qcolordialog.cpp:1206 msgid "&Green:" msgstr "" -#: src/gui/dialogs/qcolordialog.cpp:1219 +#: src/gui/dialogs/qcolordialog.cpp:1207 msgid "Bl&ue:" msgstr "" -#: src/gui/dialogs/qcolordialog.cpp:1220 +#: src/gui/dialogs/qcolordialog.cpp:1208 msgid "A&lpha channel:" msgstr "" -#: src/gui/dialogs/qcolordialog.cpp:1321 +#: src/gui/dialogs/qcolordialog.cpp:1309 msgid "Select Color" msgstr "" -#: src/gui/dialogs/qcolordialog.cpp:1448 +#: src/gui/dialogs/qcolordialog.cpp:1436 msgid "&Basic colors" msgstr "" -#: src/gui/dialogs/qcolordialog.cpp:1449 +#: src/gui/dialogs/qcolordialog.cpp:1437 msgid "&Custom colors" msgstr "" -#: src/gui/dialogs/qcolordialog.cpp:1450 +#: src/gui/dialogs/qcolordialog.cpp:1438 msgid "&Add to Custom Colors" msgstr "" -#: src/gui/dialogs/qmessagebox.h:229 -msgid "Executable '%1' requires Qt %2, found Qt %3." +#: src/gui/dialogs/qmessagebox.h:217 +msgid "Executable '%1' requires Katie %2, found Katie %3." msgstr "" -#: src/gui/dialogs/qmessagebox.h:231 -msgid "Incompatible Qt Library Error" +#: src/gui/dialogs/qmessagebox.h:219 +msgid "Incompatible Katie Library Error" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:64 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:52 msgid "A0" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:65 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:53 msgid "A1" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:66 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:54 msgid "A2" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:67 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:55 msgid "A3" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:68 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:56 msgid "A4" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:69 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:57 msgid "A5" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:70 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:58 msgid "A6" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:71 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:59 msgid "A7" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:72 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:60 msgid "A8" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:73 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:61 msgid "A9" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:74 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:62 msgid "B0" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:75 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:63 msgid "B1" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:76 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:64 msgid "B2" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:77 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:65 msgid "B3" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:78 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:66 msgid "B4" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:79 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:67 msgid "B5" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:80 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:68 msgid "B6" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:81 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:69 msgid "B7" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:82 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:70 msgid "B8" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:83 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:71 msgid "B9" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:84 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:72 msgid "B10" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:85 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:73 msgid "C5E" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:86 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:74 msgid "DLE" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:87 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:75 msgid "Executive" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:88 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:76 msgid "Folio" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:89 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:77 msgid "Ledger" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:90 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:78 msgid "Legal" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:91 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:79 msgid "Letter" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:92 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:80 msgid "Tabloid" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:93 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:81 msgid "US Common #10 Envelope" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:94 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:82 msgid "Custom" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:281 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:269 msgid "Centimeters (cm)" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:281 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:269 msgid "Millimeters (mm)" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:281 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:269 msgid "Inches (in)" msgstr "" -#: src/gui/dialogs/qpagesetupdialog_unix.cpp:281 +#: src/gui/dialogs/qpagesetupdialog_unix.cpp:269 msgid "Points (pt)" msgstr "" -#: src/gui/dialogs/qprintdialog_unix.cpp:365 -#: src/gui/dialogs/qprintdialog_unix.cpp:433 +#: src/gui/dialogs/qprintdialog_unix.cpp:353 +#: src/gui/dialogs/qprintdialog_unix.cpp:421 msgid "&Options >>" msgstr "" -#: src/gui/dialogs/qprintdialog_unix.cpp:370 +#: src/gui/dialogs/qprintdialog_unix.cpp:358 msgid "&Print" msgstr "" -#: src/gui/dialogs/qprintdialog_unix.cpp:437 +#: src/gui/dialogs/qprintdialog_unix.cpp:425 msgid "&Options <<" msgstr "" -#: src/gui/dialogs/qprintdialog_unix.cpp:662 +#: src/gui/dialogs/qprintdialog_unix.cpp:650 msgid "Print to File (PDF)" msgstr "" -#: src/gui/dialogs/qprintdialog_unix.cpp:663 +#: src/gui/dialogs/qprintdialog_unix.cpp:651 msgid "Print to File (Postscript)" msgstr "" -#: src/gui/dialogs/qprintdialog_unix.cpp:710 +#: src/gui/dialogs/qprintdialog_unix.cpp:698 msgid "Local file" msgstr "" -#: src/gui/dialogs/qprintdialog_unix.cpp:711 +#: src/gui/dialogs/qprintdialog_unix.cpp:699 msgid "Write %1 file" msgstr "" -#: src/gui/dialogs/qprintdialog_unix.cpp:772 +#: src/gui/dialogs/qprintdialog_unix.cpp:760 msgid "Print To File ..." msgstr "" -#: src/gui/dialogs/qprintdialog_unix.cpp:850 +#: src/gui/dialogs/qprintdialog_unix.cpp:838 msgid "" "%1 is a directory.\n" "Please choose a different file name." msgstr "" -#: src/gui/dialogs/qprintdialog_unix.cpp:854 +#: src/gui/dialogs/qprintdialog_unix.cpp:842 msgid "" "File %1 is not writable.\n" "Please choose a different file name." msgstr "" -#: src/gui/dialogs/qprintdialog_unix.cpp:858 +#: src/gui/dialogs/qprintdialog_unix.cpp:846 msgid "" "%1 already exists.\n" "Do you want to overwrite it?" msgstr "" -#: src/gui/dialogs/qprintdialog_unix.cpp:1147 +#: src/gui/dialogs/qprintdialog_unix.cpp:1135 msgctxt "QPPDOptionsModel" msgid "Name" msgstr "" -#: src/gui/dialogs/qprintdialog_unix.cpp:1149 +#: src/gui/dialogs/qprintdialog_unix.cpp:1137 msgctxt "QPPDOptionsModel" msgid "Value" msgstr "" -#: src/gui/dialogs/qabstractprintdialog.cpp:104 -#: src/gui/dialogs/qabstractprintdialog.cpp:117 +#: src/gui/dialogs/qabstractprintdialog.cpp:92 +#: src/gui/dialogs/qabstractprintdialog.cpp:105 msgctxt "QPrintDialog" msgid "Print" msgstr "" -#: src/gui/dialogs/qfiledialog.cpp:503 +#: src/gui/dialogs/qfiledialog.cpp:491 msgid "Find Directory" msgstr "" -#: src/gui/dialogs/qfiledialog.cpp:505 -#: src/plugins/accessible/widgets/simplewidgets.cpp:108 -#: src/plugins/accessible/widgets/simplewidgets.cpp:423 -#: src/plugins/accessible/widgets/simplewidgets.cpp:431 -#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:150 -#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:375 -#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:429 -#: src/plugins/accessible/widgets/complexwidgets.cpp:1841 -#: src/plugins/accessible/widgets/complexwidgets.cpp:1907 +#: src/gui/dialogs/qfiledialog.cpp:493 +#: src/plugins/accessible/widgets/simplewidgets.cpp:96 +#: src/plugins/accessible/widgets/simplewidgets.cpp:411 +#: src/plugins/accessible/widgets/simplewidgets.cpp:419 +#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:138 +#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:363 +#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:417 +#: src/plugins/accessible/widgets/complexwidgets.cpp:1829 +#: src/plugins/accessible/widgets/complexwidgets.cpp:1895 msgid "Open" msgstr "" -#: src/gui/dialogs/qfiledialog.cpp:507 +#: src/gui/dialogs/qfiledialog.cpp:495 msgid "Save As" msgstr "" -#: src/gui/dialogs/qfiledialog.cpp:522 src/gui/dialogs/qfiledialog.cpp:1023 +#: src/gui/dialogs/qfiledialog.cpp:510 src/gui/dialogs/qfiledialog.cpp:1011 msgid "All Files (*)" msgstr "" -#: src/gui/dialogs/qfiledialog.cpp:532 +#: src/gui/dialogs/qfiledialog.cpp:520 msgid "Show " msgstr "" -#: src/gui/dialogs/qfiledialog.cpp:536 +#: src/gui/dialogs/qfiledialog.cpp:524 msgid "&Rename" msgstr "" -#: src/gui/dialogs/qfiledialog.cpp:537 +#: src/gui/dialogs/qfiledialog.cpp:525 msgid "&Delete" msgstr "" -#: src/gui/dialogs/qfiledialog.cpp:538 +#: src/gui/dialogs/qfiledialog.cpp:526 msgid "Show &hidden files" msgstr "" -#: src/gui/dialogs/qfiledialog.cpp:539 +#: src/gui/dialogs/qfiledialog.cpp:527 msgid "&New Folder" msgstr "" -#: src/gui/dialogs/qfiledialog.cpp:544 src/gui/dialogs/qfiledialog.cpp:1204 +#: src/gui/dialogs/qfiledialog.cpp:532 src/gui/dialogs/qfiledialog.cpp:1192 msgid "Directory:" msgstr "" -#: src/gui/dialogs/qfiledialog.cpp:546 src/gui/dialogs/qfiledialog.cpp:1210 +#: src/gui/dialogs/qfiledialog.cpp:534 src/gui/dialogs/qfiledialog.cpp:1198 msgid "File &name:" msgstr "" -#: src/gui/dialogs/qfiledialog.cpp:1197 src/gui/dialogs/qfiledialog.cpp:1252 -#: src/gui/dialogs/qfiledialog.cpp:2699 +#: src/gui/dialogs/qfiledialog.cpp:1185 src/gui/dialogs/qfiledialog.cpp:1240 +#: src/gui/dialogs/qfiledialog.cpp:2687 msgid "&Open" msgstr "" -#: src/gui/dialogs/qfiledialog.cpp:1197 src/gui/dialogs/qfiledialog.cpp:1252 +#: src/gui/dialogs/qfiledialog.cpp:1185 src/gui/dialogs/qfiledialog.cpp:1240 msgid "&Save" msgstr "" -#: src/gui/dialogs/qfiledialog.cpp:1200 +#: src/gui/dialogs/qfiledialog.cpp:1188 msgid "Directories" msgstr "" -#: src/gui/dialogs/qfiledialog.cpp:1207 src/gui/dialogs/qfiledialog.cpp:1250 +#: src/gui/dialogs/qfiledialog.cpp:1195 src/gui/dialogs/qfiledialog.cpp:1238 msgid "&Choose" msgstr "" -#: src/gui/dialogs/qfiledialog.cpp:1917 src/gui/dialogs/qfiledialog.cpp:2770 +#: src/gui/dialogs/qfiledialog.cpp:1905 src/gui/dialogs/qfiledialog.cpp:2758 msgid "" "%1\n" "Directory not found.\n" "Please verify the correct directory name was given." msgstr "" -#: src/gui/dialogs/qfiledialog.cpp:1951 +#: src/gui/dialogs/qfiledialog.cpp:1939 msgid "" "%1 already exists.\n" "Do you want to replace it?" msgstr "" -#: src/gui/dialogs/qfiledialog.cpp:1971 +#: src/gui/dialogs/qfiledialog.cpp:1959 msgid "" "%1\n" "File not found.\n" "Please verify the correct file name was given." msgstr "" -#: src/gui/dialogs/qfiledialog.cpp:2420 +#: src/gui/dialogs/qfiledialog.cpp:2408 msgid "New Folder" msgstr "" -#: src/gui/dialogs/qfiledialog.cpp:2548 +#: src/gui/dialogs/qfiledialog.cpp:2536 msgid "" "'%1' is write protected.\n" "Do you want to delete it anyway?" msgstr "" -#: src/gui/dialogs/qfiledialog.cpp:2553 +#: src/gui/dialogs/qfiledialog.cpp:2541 msgid "Are sure you want to delete '%1'?" msgstr "" -#: src/gui/dialogs/qfiledialog.cpp:2568 +#: src/gui/dialogs/qfiledialog.cpp:2556 msgid "Could not delete directory." msgstr "" -#: src/gui/dialogs/qfiledialog.cpp:2966 +#: src/gui/dialogs/qfiledialog.cpp:2954 msgid "Recent Places" msgstr "" -#: src/gui/dialogs/qfilesystemmodel.cpp:655 -#: src/gui/itemviews/qdirmodel.cpp:1217 +#: src/gui/dialogs/qfilesystemmodel.cpp:643 +#: src/gui/itemviews/qdirmodel.cpp:1205 msgid "%1 TB" msgstr "" -#: src/gui/dialogs/qfilesystemmodel.cpp:657 -#: src/gui/itemviews/qdirmodel.cpp:1219 +#: src/gui/dialogs/qfilesystemmodel.cpp:645 +#: src/gui/itemviews/qdirmodel.cpp:1207 msgid "%1 GB" msgstr "" -#: src/gui/dialogs/qfilesystemmodel.cpp:659 -#: src/gui/itemviews/qdirmodel.cpp:1221 +#: src/gui/dialogs/qfilesystemmodel.cpp:647 +#: src/gui/itemviews/qdirmodel.cpp:1209 msgid "%1 MB" msgstr "" -#: src/gui/dialogs/qfilesystemmodel.cpp:661 -#: src/gui/itemviews/qdirmodel.cpp:1223 +#: src/gui/dialogs/qfilesystemmodel.cpp:649 +#: src/gui/itemviews/qdirmodel.cpp:1211 msgid "%1 KB" msgstr "" -#: src/gui/dialogs/qfilesystemmodel.cpp:662 +#: src/gui/dialogs/qfilesystemmodel.cpp:650 msgid "%1 bytes" msgstr "" -#: src/gui/dialogs/qfilesystemmodel.cpp:732 +#: src/gui/dialogs/qfilesystemmodel.cpp:720 msgid "Invalid filename" msgstr "" -#: src/gui/dialogs/qfilesystemmodel.cpp:733 +#: src/gui/dialogs/qfilesystemmodel.cpp:721 msgid "" "The name \"%1\" can not be used.

Try using another name, with fewer " "characters or no punctuations marks." msgstr "" -#: src/gui/dialogs/qfilesystemmodel.cpp:797 src/gui/itemviews/qdirmodel.cpp:407 +#: src/gui/dialogs/qfilesystemmodel.cpp:785 src/gui/itemviews/qdirmodel.cpp:395 msgid "Name" msgstr "" -#: src/gui/dialogs/qfilesystemmodel.cpp:799 src/gui/itemviews/qdirmodel.cpp:408 +#: src/gui/dialogs/qfilesystemmodel.cpp:787 src/gui/itemviews/qdirmodel.cpp:396 msgid "Size" msgstr "" -#: src/gui/dialogs/qfilesystemmodel.cpp:801 src/gui/itemviews/qdirmodel.cpp:409 +#: src/gui/dialogs/qfilesystemmodel.cpp:789 src/gui/itemviews/qdirmodel.cpp:397 msgid "Type" msgstr "" -#: src/gui/dialogs/qfilesystemmodel.cpp:807 src/gui/itemviews/qdirmodel.cpp:412 +#: src/gui/dialogs/qfilesystemmodel.cpp:795 src/gui/itemviews/qdirmodel.cpp:400 msgid "Date Modified" msgstr "" -#: src/gui/dialogs/qerrormessage.cpp:155 +#: src/gui/dialogs/qerrormessage.cpp:143 msgid "Warning:" msgstr "" -#: src/gui/dialogs/qerrormessage.cpp:158 +#: src/gui/dialogs/qerrormessage.cpp:146 msgid "Fatal Error:" msgstr "" -#: src/gui/dialogs/qerrormessage.cpp:161 +#: src/gui/dialogs/qerrormessage.cpp:149 msgid "Debug Message:" msgstr "" -#: src/gui/dialogs/qerrormessage.cpp:354 +#: src/gui/dialogs/qerrormessage.cpp:342 msgid "&Show this message again" msgstr "" -#: src/gui/dialogs/qerrormessage.cpp:355 +#: src/gui/dialogs/qerrormessage.cpp:343 msgid "&OK" msgstr "" -#: src/gui/image/qimagereader.cpp:476 +#: src/gui/image/qimagereader.cpp:463 msgctxt "QImageReader" msgid "Invalid device" msgstr "" -#: src/gui/image/qimagereader.cpp:503 +#: src/gui/image/qimagereader.cpp:490 msgctxt "QImageReader" msgid "File not found" msgstr "" -#: src/gui/image/qimagereader.cpp:512 +#: src/gui/image/qimagereader.cpp:499 msgctxt "QImageReader" msgid "Unsupported image format" msgstr "" -#: src/gui/image/qimagereader.cpp:1044 +#: src/gui/image/qimagereader.cpp:1031 msgctxt "QImageReader" msgid "Unable to read image data" msgstr "" -#: src/gui/image/qimagereader.cpp:1235 +#: src/gui/image/qimagereader.cpp:1222 msgctxt "QImageReader" msgid "Unknown error" msgstr "" -#: src/gui/widgets/qtabbar.cpp:2191 +#: src/gui/widgets/qtabbar.cpp:2179 msgid "Close Tab" msgstr "" -#: src/gui/widgets/qlineedit.cpp:1767 src/gui/text/qtextcontrol.cpp:1870 +#: src/gui/widgets/qlineedit.cpp:1755 src/gui/text/qtextcontrol.cpp:1858 msgid "&Undo" msgstr "" -#: src/gui/widgets/qlineedit.cpp:1771 src/gui/text/qtextcontrol.cpp:1872 +#: src/gui/widgets/qlineedit.cpp:1759 src/gui/text/qtextcontrol.cpp:1860 msgid "&Redo" msgstr "" -#: src/gui/widgets/qlineedit.cpp:1780 src/gui/text/qtextcontrol.cpp:1876 +#: src/gui/widgets/qlineedit.cpp:1768 src/gui/text/qtextcontrol.cpp:1864 msgid "Cu&t" msgstr "" -#: src/gui/widgets/qlineedit.cpp:1786 src/gui/text/qtextcontrol.cpp:1881 +#: src/gui/widgets/qlineedit.cpp:1774 src/gui/text/qtextcontrol.cpp:1869 msgid "&Copy" msgstr "" -#: src/gui/widgets/qlineedit.cpp:1792 src/gui/text/qtextcontrol.cpp:1894 +#: src/gui/widgets/qlineedit.cpp:1780 src/gui/text/qtextcontrol.cpp:1882 msgid "&Paste" msgstr "" -#: src/gui/widgets/qlineedit.cpp:1799 src/gui/text/qtextcontrol.cpp:1897 -#: src/scripttools/debugging/qscriptbreakpointswidget.cpp:291 +#: src/gui/widgets/qlineedit.cpp:1787 src/gui/text/qtextcontrol.cpp:1885 +#: src/scripttools/debugging/qscriptbreakpointswidget.cpp:279 msgid "Delete" msgstr "" -#: src/gui/widgets/qlineedit.cpp:1807 src/gui/text/qtextcontrol.cpp:1904 +#: src/gui/widgets/qlineedit.cpp:1795 src/gui/text/qtextcontrol.cpp:1892 msgid "Select All" msgstr "" -#: src/gui/widgets/qscrollbar.cpp:394 +#: src/gui/widgets/qscrollbar.cpp:382 msgid "Scroll here" msgstr "" -#: src/gui/widgets/qscrollbar.cpp:396 +#: src/gui/widgets/qscrollbar.cpp:384 msgid "Left edge" msgstr "" -#: src/gui/widgets/qscrollbar.cpp:396 +#: src/gui/widgets/qscrollbar.cpp:384 msgid "Top" msgstr "" -#: src/gui/widgets/qscrollbar.cpp:397 +#: src/gui/widgets/qscrollbar.cpp:385 msgid "Right edge" msgstr "" -#: src/gui/widgets/qscrollbar.cpp:397 +#: src/gui/widgets/qscrollbar.cpp:385 msgid "Bottom" msgstr "" -#: src/gui/widgets/qscrollbar.cpp:399 -#: src/plugins/accessible/widgets/rangecontrols.cpp:697 +#: src/gui/widgets/qscrollbar.cpp:387 +#: src/plugins/accessible/widgets/rangecontrols.cpp:685 msgid "Page left" msgstr "" -#: src/gui/widgets/qscrollbar.cpp:399 -#: src/plugins/accessible/widgets/rangecontrols.cpp:544 -#: src/plugins/accessible/widgets/rangecontrols.cpp:697 +#: src/gui/widgets/qscrollbar.cpp:387 +#: src/plugins/accessible/widgets/rangecontrols.cpp:532 +#: src/plugins/accessible/widgets/rangecontrols.cpp:685 msgid "Page up" msgstr "" -#: src/gui/widgets/qscrollbar.cpp:400 -#: src/plugins/accessible/widgets/rangecontrols.cpp:702 +#: src/gui/widgets/qscrollbar.cpp:388 +#: src/plugins/accessible/widgets/rangecontrols.cpp:690 msgid "Page right" msgstr "" -#: src/gui/widgets/qscrollbar.cpp:400 -#: src/plugins/accessible/widgets/rangecontrols.cpp:548 -#: src/plugins/accessible/widgets/rangecontrols.cpp:702 +#: src/gui/widgets/qscrollbar.cpp:388 +#: src/plugins/accessible/widgets/rangecontrols.cpp:536 +#: src/plugins/accessible/widgets/rangecontrols.cpp:690 msgid "Page down" msgstr "" -#: src/gui/widgets/qscrollbar.cpp:402 +#: src/gui/widgets/qscrollbar.cpp:390 msgid "Scroll left" msgstr "" -#: src/gui/widgets/qscrollbar.cpp:402 +#: src/gui/widgets/qscrollbar.cpp:390 msgid "Scroll up" msgstr "" -#: src/gui/widgets/qscrollbar.cpp:403 +#: src/gui/widgets/qscrollbar.cpp:391 msgid "Scroll right" msgstr "" -#: src/gui/widgets/qscrollbar.cpp:403 +#: src/gui/widgets/qscrollbar.cpp:391 msgid "Scroll down" msgstr "" -#: src/gui/widgets/qdialogbuttonbox.cpp:451 +#: src/gui/widgets/qdialogbuttonbox.cpp:439 msgctxt "QDialogButtonBox" msgid "OK" msgstr "" -#: src/gui/widgets/qdialogbuttonbox.cpp:454 +#: src/gui/widgets/qdialogbuttonbox.cpp:442 msgctxt "QDialogButtonBox" msgid "Save" msgstr "" -#: src/gui/widgets/qdialogbuttonbox.cpp:457 +#: src/gui/widgets/qdialogbuttonbox.cpp:445 msgctxt "QDialogButtonBox" msgid "Open" msgstr "" -#: src/gui/widgets/qdialogbuttonbox.cpp:460 +#: src/gui/widgets/qdialogbuttonbox.cpp:448 msgctxt "QDialogButtonBox" msgid "Cancel" msgstr "" -#: src/gui/widgets/qdialogbuttonbox.cpp:463 +#: src/gui/widgets/qdialogbuttonbox.cpp:451 msgctxt "QDialogButtonBox" msgid "Close" msgstr "" -#: src/gui/widgets/qdialogbuttonbox.cpp:466 +#: src/gui/widgets/qdialogbuttonbox.cpp:454 msgctxt "QDialogButtonBox" msgid "Apply" msgstr "" -#: src/gui/widgets/qdialogbuttonbox.cpp:469 +#: src/gui/widgets/qdialogbuttonbox.cpp:457 msgctxt "QDialogButtonBox" msgid "Reset" msgstr "" -#: src/gui/widgets/qdialogbuttonbox.cpp:472 +#: src/gui/widgets/qdialogbuttonbox.cpp:460 msgctxt "QDialogButtonBox" msgid "Help" msgstr "" -#: src/gui/widgets/qdialogbuttonbox.cpp:475 +#: src/gui/widgets/qdialogbuttonbox.cpp:463 msgctxt "QDialogButtonBox" msgid "Discard" msgstr "" -#: src/gui/widgets/qdialogbuttonbox.cpp:478 +#: src/gui/widgets/qdialogbuttonbox.cpp:466 msgctxt "QDialogButtonBox" msgid "&Yes" msgstr "" -#: src/gui/widgets/qdialogbuttonbox.cpp:481 +#: src/gui/widgets/qdialogbuttonbox.cpp:469 msgctxt "QDialogButtonBox" msgid "Yes to &All" msgstr "" -#: src/gui/widgets/qdialogbuttonbox.cpp:484 +#: src/gui/widgets/qdialogbuttonbox.cpp:472 msgctxt "QDialogButtonBox" msgid "&No" msgstr "" -#: src/gui/widgets/qdialogbuttonbox.cpp:487 +#: src/gui/widgets/qdialogbuttonbox.cpp:475 msgctxt "QDialogButtonBox" msgid "N&o to All" msgstr "" -#: src/gui/widgets/qdialogbuttonbox.cpp:490 +#: src/gui/widgets/qdialogbuttonbox.cpp:478 msgctxt "QDialogButtonBox" msgid "Save All" msgstr "" -#: src/gui/widgets/qdialogbuttonbox.cpp:493 +#: src/gui/widgets/qdialogbuttonbox.cpp:481 msgctxt "QDialogButtonBox" msgid "Abort" msgstr "" -#: src/gui/widgets/qdialogbuttonbox.cpp:496 +#: src/gui/widgets/qdialogbuttonbox.cpp:484 msgctxt "QDialogButtonBox" msgid "Retry" msgstr "" -#: src/gui/widgets/qdialogbuttonbox.cpp:499 +#: src/gui/widgets/qdialogbuttonbox.cpp:487 msgctxt "QDialogButtonBox" msgid "Ignore" msgstr "" -#: src/gui/widgets/qdialogbuttonbox.cpp:502 +#: src/gui/widgets/qdialogbuttonbox.cpp:490 msgctxt "QDialogButtonBox" msgid "Restore Defaults" msgstr "" -#: src/gui/widgets/qdatetimeedit.cpp:2093 +#: src/gui/widgets/qdatetimeedit.cpp:2081 msgid "AM" msgstr "" -#: src/gui/widgets/qdatetimeedit.cpp:2093 +#: src/gui/widgets/qdatetimeedit.cpp:2081 msgid "am" msgstr "" -#: src/gui/widgets/qdatetimeedit.cpp:2095 +#: src/gui/widgets/qdatetimeedit.cpp:2083 msgid "PM" msgstr "" -#: src/gui/widgets/qdatetimeedit.cpp:2095 +#: src/gui/widgets/qdatetimeedit.cpp:2083 msgid "pm" msgstr "" -#: src/gui/widgets/qmdisubwindow.cpp:261 +#: src/gui/widgets/qmdisubwindow.cpp:249 msgid "- [%1]" msgstr "" -#: src/gui/widgets/qmdisubwindow.cpp:262 src/gui/widgets/qworkspace.cpp:1804 -#: src/gui/widgets/qworkspace.cpp:1864 +#: src/gui/widgets/qmdisubwindow.cpp:250 src/gui/widgets/qworkspace.cpp:1792 +#: src/gui/widgets/qworkspace.cpp:1852 msgid "%1 - [%2]" msgstr "" -#: src/gui/widgets/qmdisubwindow.cpp:303 src/gui/widgets/qworkspace.cpp:107 +#: src/gui/widgets/qmdisubwindow.cpp:291 src/gui/widgets/qworkspace.cpp:95 msgid "Minimize" msgstr "" -#: src/gui/widgets/qmdisubwindow.cpp:306 +#: src/gui/widgets/qmdisubwindow.cpp:294 msgid "Maximize" msgstr "" -#: src/gui/widgets/qmdisubwindow.cpp:309 +#: src/gui/widgets/qmdisubwindow.cpp:297 msgid "Unshade" msgstr "" -#: src/gui/widgets/qmdisubwindow.cpp:312 +#: src/gui/widgets/qmdisubwindow.cpp:300 msgid "Shade" msgstr "" -#: src/gui/widgets/qmdisubwindow.cpp:316 src/gui/widgets/qworkspace.cpp:109 +#: src/gui/widgets/qmdisubwindow.cpp:304 src/gui/widgets/qworkspace.cpp:97 msgid "Restore Down" msgstr "" -#: src/gui/widgets/qmdisubwindow.cpp:318 +#: src/gui/widgets/qmdisubwindow.cpp:306 msgid "Restore" msgstr "" -#: src/gui/widgets/qmdisubwindow.cpp:321 src/gui/widgets/qworkspace.cpp:105 -#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:149 -#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:374 -#: src/plugins/accessible/widgets/qaccessiblewidgets.cpp:1321 -#: src/plugins/accessible/widgets/complexwidgets.cpp:1606 -#: src/plugins/accessible/widgets/complexwidgets.cpp:1907 -#: src/scripttools/debugging/qscriptbreakpointswidget.cpp:68 -#: src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp:128 +#: src/gui/widgets/qmdisubwindow.cpp:309 src/gui/widgets/qworkspace.cpp:93 +#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:137 +#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:362 +#: src/plugins/accessible/widgets/qaccessiblewidgets.cpp:1309 +#: src/plugins/accessible/widgets/complexwidgets.cpp:1594 +#: src/plugins/accessible/widgets/complexwidgets.cpp:1895 +#: src/scripttools/debugging/qscriptbreakpointswidget.cpp:56 +#: src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp:116 msgid "Close" msgstr "" -#: src/gui/widgets/qmdisubwindow.cpp:327 +#: src/gui/widgets/qmdisubwindow.cpp:315 msgid "Menu" msgstr "" -#: src/gui/widgets/qmdisubwindow.cpp:1024 src/gui/widgets/qworkspace.cpp:1026 +#: src/gui/widgets/qmdisubwindow.cpp:1012 src/gui/widgets/qworkspace.cpp:1014 msgid "&Restore" msgstr "" -#: src/gui/widgets/qmdisubwindow.cpp:1027 src/gui/widgets/qworkspace.cpp:1027 +#: src/gui/widgets/qmdisubwindow.cpp:1015 src/gui/widgets/qworkspace.cpp:1015 msgid "&Move" msgstr "" -#: src/gui/widgets/qmdisubwindow.cpp:1029 src/gui/widgets/qworkspace.cpp:1030 +#: src/gui/widgets/qmdisubwindow.cpp:1017 src/gui/widgets/qworkspace.cpp:1018 msgid "Mi&nimize" msgstr "" -#: src/gui/widgets/qmdisubwindow.cpp:1031 src/gui/widgets/qworkspace.cpp:1032 +#: src/gui/widgets/qmdisubwindow.cpp:1019 src/gui/widgets/qworkspace.cpp:1020 msgid "Ma&ximize" msgstr "" -#: src/gui/widgets/qmdisubwindow.cpp:1033 src/gui/widgets/qworkspace.cpp:1040 +#: src/gui/widgets/qmdisubwindow.cpp:1021 src/gui/widgets/qworkspace.cpp:1028 msgid "Stay on &Top" msgstr "" -#: src/gui/widgets/qmdisubwindow.cpp:1036 src/gui/widgets/qworkspace.cpp:1034 +#: src/gui/widgets/qmdisubwindow.cpp:1024 src/gui/widgets/qworkspace.cpp:1022 msgid "&Close" msgstr "" -#: src/gui/widgets/qmdiarea.cpp:263 +#: src/gui/widgets/qmdiarea.cpp:251 msgid "(Untitled)" msgstr "" -#: src/gui/widgets/qworkspace.cpp:1043 src/gui/widgets/qworkspace.cpp:2082 +#: src/gui/widgets/qworkspace.cpp:1031 src/gui/widgets/qworkspace.cpp:2070 msgid "Sh&ade" msgstr "" -#: src/gui/widgets/qworkspace.cpp:2078 +#: src/gui/widgets/qworkspace.cpp:2066 msgid "&Unshade" msgstr "" -#: src/gui/widgets/qmenubar.cpp:1611 +#: src/gui/widgets/qmenubar.cpp:1599 msgctxt "QMenuBar" msgid "Corner Toolbar" msgstr "" -#: src/gui/widgets/qabstractspinbox.cpp:1164 +#: src/gui/widgets/qabstractspinbox.cpp:1152 msgid "&Select All" msgstr "" -#: src/gui/widgets/qabstractspinbox.cpp:1170 +#: src/gui/widgets/qabstractspinbox.cpp:1158 msgid "&Step up" msgstr "" -#: src/gui/widgets/qabstractspinbox.cpp:1172 +#: src/gui/widgets/qabstractspinbox.cpp:1160 msgid "Step &down" msgstr "" -#: src/gui/kernel/qwidget.cpp:5102 +#: src/gui/kernel/qwidget.cpp:5090 msgid "*" msgstr "" -#: src/gui/kernel/qapplication.cpp:1732 +#: src/gui/kernel/qapplication.cpp:1705 msgid "QT_LAYOUT_DIRECTION" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:207 +#: src/gui/kernel/qkeysequence.cpp:195 msgctxt "QShortcut" msgid "Space" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:208 +#: src/gui/kernel/qkeysequence.cpp:196 msgctxt "QShortcut" msgid "Esc" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:209 +#: src/gui/kernel/qkeysequence.cpp:197 msgctxt "QShortcut" msgid "Tab" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:210 +#: src/gui/kernel/qkeysequence.cpp:198 msgctxt "QShortcut" msgid "Backtab" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:211 +#: src/gui/kernel/qkeysequence.cpp:199 msgctxt "QShortcut" msgid "Backspace" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:212 +#: src/gui/kernel/qkeysequence.cpp:200 msgctxt "QShortcut" msgid "Return" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:213 +#: src/gui/kernel/qkeysequence.cpp:201 msgctxt "QShortcut" msgid "Enter" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:214 +#: src/gui/kernel/qkeysequence.cpp:202 msgctxt "QShortcut" msgid "Ins" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:215 +#: src/gui/kernel/qkeysequence.cpp:203 msgctxt "QShortcut" msgid "Del" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:216 +#: src/gui/kernel/qkeysequence.cpp:204 msgctxt "QShortcut" msgid "Pause" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:217 +#: src/gui/kernel/qkeysequence.cpp:205 msgctxt "QShortcut" msgid "Print" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:218 +#: src/gui/kernel/qkeysequence.cpp:206 msgctxt "QShortcut" msgid "SysReq" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:219 +#: src/gui/kernel/qkeysequence.cpp:207 msgctxt "QShortcut" msgid "Home" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:220 +#: src/gui/kernel/qkeysequence.cpp:208 msgctxt "QShortcut" msgid "End" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:221 +#: src/gui/kernel/qkeysequence.cpp:209 msgctxt "QShortcut" msgid "Left" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:222 +#: src/gui/kernel/qkeysequence.cpp:210 msgctxt "QShortcut" msgid "Up" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:223 +#: src/gui/kernel/qkeysequence.cpp:211 msgctxt "QShortcut" msgid "Right" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:224 +#: src/gui/kernel/qkeysequence.cpp:212 msgctxt "QShortcut" msgid "Down" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:225 +#: src/gui/kernel/qkeysequence.cpp:213 msgctxt "QShortcut" msgid "PgUp" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:226 +#: src/gui/kernel/qkeysequence.cpp:214 msgctxt "QShortcut" msgid "PgDown" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:227 +#: src/gui/kernel/qkeysequence.cpp:215 msgctxt "QShortcut" msgid "CapsLock" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:228 +#: src/gui/kernel/qkeysequence.cpp:216 msgctxt "QShortcut" msgid "NumLock" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:229 +#: src/gui/kernel/qkeysequence.cpp:217 msgctxt "QShortcut" msgid "ScrollLock" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:230 +#: src/gui/kernel/qkeysequence.cpp:218 msgctxt "QShortcut" msgid "Menu" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:231 +#: src/gui/kernel/qkeysequence.cpp:219 msgctxt "QShortcut" msgid "Help" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:236 +#: src/gui/kernel/qkeysequence.cpp:224 msgctxt "QShortcut" msgid "Back" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:237 +#: src/gui/kernel/qkeysequence.cpp:225 msgctxt "QShortcut" msgid "Forward" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:238 +#: src/gui/kernel/qkeysequence.cpp:226 msgctxt "QShortcut" msgid "Stop" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:239 +#: src/gui/kernel/qkeysequence.cpp:227 msgctxt "QShortcut" msgid "Refresh" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:240 +#: src/gui/kernel/qkeysequence.cpp:228 msgctxt "QShortcut" msgid "Volume Down" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:241 +#: src/gui/kernel/qkeysequence.cpp:229 msgctxt "QShortcut" msgid "Volume Mute" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:242 +#: src/gui/kernel/qkeysequence.cpp:230 msgctxt "QShortcut" msgid "Volume Up" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:243 +#: src/gui/kernel/qkeysequence.cpp:231 msgctxt "QShortcut" msgid "Media Play" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:244 +#: src/gui/kernel/qkeysequence.cpp:232 msgctxt "QShortcut" msgid "Media Stop" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:245 +#: src/gui/kernel/qkeysequence.cpp:233 msgctxt "QShortcut" msgid "Media Previous" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:246 +#: src/gui/kernel/qkeysequence.cpp:234 msgctxt "QShortcut" msgid "Media Next" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:247 +#: src/gui/kernel/qkeysequence.cpp:235 msgctxt "QShortcut" msgid "Media Record" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:249 +#: src/gui/kernel/qkeysequence.cpp:237 msgctxt "QShortcut" msgid "Media Pause" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:251 +#: src/gui/kernel/qkeysequence.cpp:239 msgctxt "QShortcut" msgid "Home Page" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:252 +#: src/gui/kernel/qkeysequence.cpp:240 msgctxt "QShortcut" msgid "Favorites" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:253 +#: src/gui/kernel/qkeysequence.cpp:241 msgctxt "QShortcut" msgid "Search" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:254 +#: src/gui/kernel/qkeysequence.cpp:242 msgctxt "QShortcut" msgid "Standby" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:255 +#: src/gui/kernel/qkeysequence.cpp:243 msgctxt "QShortcut" msgid "Open URL" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:256 +#: src/gui/kernel/qkeysequence.cpp:244 msgctxt "QShortcut" msgid "Launch Mail" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:257 +#: src/gui/kernel/qkeysequence.cpp:245 msgctxt "QShortcut" msgid "Launch Media" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:258 +#: src/gui/kernel/qkeysequence.cpp:246 msgctxt "QShortcut" msgid "Launch (0)" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:259 +#: src/gui/kernel/qkeysequence.cpp:247 msgctxt "QShortcut" msgid "Launch (1)" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:260 +#: src/gui/kernel/qkeysequence.cpp:248 msgctxt "QShortcut" msgid "Launch (2)" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:261 +#: src/gui/kernel/qkeysequence.cpp:249 msgctxt "QShortcut" msgid "Launch (3)" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:262 +#: src/gui/kernel/qkeysequence.cpp:250 msgctxt "QShortcut" msgid "Launch (4)" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:263 +#: src/gui/kernel/qkeysequence.cpp:251 msgctxt "QShortcut" msgid "Launch (5)" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:264 +#: src/gui/kernel/qkeysequence.cpp:252 msgctxt "QShortcut" msgid "Launch (6)" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:265 +#: src/gui/kernel/qkeysequence.cpp:253 msgctxt "QShortcut" msgid "Launch (7)" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:266 +#: src/gui/kernel/qkeysequence.cpp:254 msgctxt "QShortcut" msgid "Launch (8)" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:267 +#: src/gui/kernel/qkeysequence.cpp:255 msgctxt "QShortcut" msgid "Launch (9)" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:268 +#: src/gui/kernel/qkeysequence.cpp:256 msgctxt "QShortcut" msgid "Launch (A)" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:269 +#: src/gui/kernel/qkeysequence.cpp:257 msgctxt "QShortcut" msgid "Launch (B)" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:270 +#: src/gui/kernel/qkeysequence.cpp:258 msgctxt "QShortcut" msgid "Launch (C)" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:271 +#: src/gui/kernel/qkeysequence.cpp:259 msgctxt "QShortcut" msgid "Launch (D)" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:272 +#: src/gui/kernel/qkeysequence.cpp:260 msgctxt "QShortcut" msgid "Launch (E)" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:273 +#: src/gui/kernel/qkeysequence.cpp:261 msgctxt "QShortcut" msgid "Launch (F)" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:274 +#: src/gui/kernel/qkeysequence.cpp:262 msgctxt "QShortcut" msgid "Monitor Brightness Up" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:275 +#: src/gui/kernel/qkeysequence.cpp:263 msgctxt "QShortcut" msgid "Monitor Brightness Down" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:276 +#: src/gui/kernel/qkeysequence.cpp:264 msgctxt "QShortcut" msgid "Keyboard Light On/Off" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:277 +#: src/gui/kernel/qkeysequence.cpp:265 msgctxt "QShortcut" msgid "Keyboard Brightness Up" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:278 +#: src/gui/kernel/qkeysequence.cpp:266 msgctxt "QShortcut" msgid "Keyboard Brightness Down" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:279 +#: src/gui/kernel/qkeysequence.cpp:267 msgctxt "QShortcut" msgid "Power Off" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:280 +#: src/gui/kernel/qkeysequence.cpp:268 msgctxt "QShortcut" msgid "Wake Up" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:281 +#: src/gui/kernel/qkeysequence.cpp:269 msgctxt "QShortcut" msgid "Eject" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:282 +#: src/gui/kernel/qkeysequence.cpp:270 msgctxt "QShortcut" msgid "Screensaver" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:283 +#: src/gui/kernel/qkeysequence.cpp:271 msgctxt "QShortcut" msgid "WWW" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:284 +#: src/gui/kernel/qkeysequence.cpp:272 msgctxt "QShortcut" msgid "Sleep" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:285 +#: src/gui/kernel/qkeysequence.cpp:273 msgctxt "QShortcut" msgid "LightBulb" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:286 +#: src/gui/kernel/qkeysequence.cpp:274 msgctxt "QShortcut" msgid "Shop" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:287 +#: src/gui/kernel/qkeysequence.cpp:275 msgctxt "QShortcut" msgid "History" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:288 +#: src/gui/kernel/qkeysequence.cpp:276 msgctxt "QShortcut" msgid "Add Favorite" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:289 +#: src/gui/kernel/qkeysequence.cpp:277 msgctxt "QShortcut" msgid "Hot Links" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:290 +#: src/gui/kernel/qkeysequence.cpp:278 msgctxt "QShortcut" msgid "Adjust Brightness" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:291 +#: src/gui/kernel/qkeysequence.cpp:279 msgctxt "QShortcut" msgid "Finance" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:292 +#: src/gui/kernel/qkeysequence.cpp:280 msgctxt "QShortcut" msgid "Community" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:293 +#: src/gui/kernel/qkeysequence.cpp:281 msgctxt "QShortcut" msgid "Audio Rewind" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:294 +#: src/gui/kernel/qkeysequence.cpp:282 msgctxt "QShortcut" msgid "Back Forward" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:295 +#: src/gui/kernel/qkeysequence.cpp:283 msgctxt "QShortcut" msgid "Application Left" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:296 +#: src/gui/kernel/qkeysequence.cpp:284 msgctxt "QShortcut" msgid "Application Right" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:297 +#: src/gui/kernel/qkeysequence.cpp:285 msgctxt "QShortcut" msgid "Book" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:298 +#: src/gui/kernel/qkeysequence.cpp:286 msgctxt "QShortcut" msgid "CD" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:299 +#: src/gui/kernel/qkeysequence.cpp:287 msgctxt "QShortcut" msgid "Calculator" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:300 +#: src/gui/kernel/qkeysequence.cpp:288 msgctxt "QShortcut" msgid "Clear" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:301 +#: src/gui/kernel/qkeysequence.cpp:289 msgctxt "QShortcut" msgid "Clear Grab" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:302 +#: src/gui/kernel/qkeysequence.cpp:290 msgctxt "QShortcut" msgid "Close" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:303 +#: src/gui/kernel/qkeysequence.cpp:291 msgctxt "QShortcut" msgid "Copy" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:304 +#: src/gui/kernel/qkeysequence.cpp:292 msgctxt "QShortcut" msgid "Cut" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:305 +#: src/gui/kernel/qkeysequence.cpp:293 msgctxt "QShortcut" msgid "Display" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:306 +#: src/gui/kernel/qkeysequence.cpp:294 msgctxt "QShortcut" msgid "DOS" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:307 +#: src/gui/kernel/qkeysequence.cpp:295 msgctxt "QShortcut" msgid "Documents" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:308 +#: src/gui/kernel/qkeysequence.cpp:296 msgctxt "QShortcut" msgid "Spreadsheet" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:309 +#: src/gui/kernel/qkeysequence.cpp:297 msgctxt "QShortcut" msgid "Browser" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:310 +#: src/gui/kernel/qkeysequence.cpp:298 msgctxt "QShortcut" msgid "Game" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:311 +#: src/gui/kernel/qkeysequence.cpp:299 msgctxt "QShortcut" msgid "Go" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:312 +#: src/gui/kernel/qkeysequence.cpp:300 msgctxt "QShortcut" msgid "iTouch" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:313 +#: src/gui/kernel/qkeysequence.cpp:301 msgctxt "QShortcut" msgid "Logoff" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:314 +#: src/gui/kernel/qkeysequence.cpp:302 msgctxt "QShortcut" msgid "Market" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:315 +#: src/gui/kernel/qkeysequence.cpp:303 msgctxt "QShortcut" msgid "Meeting" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:316 +#: src/gui/kernel/qkeysequence.cpp:304 msgctxt "QShortcut" msgid "Keyboard Menu" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:317 +#: src/gui/kernel/qkeysequence.cpp:305 msgctxt "QShortcut" msgid "Menu PB" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:318 +#: src/gui/kernel/qkeysequence.cpp:306 msgctxt "QShortcut" msgid "My Sites" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:319 +#: src/gui/kernel/qkeysequence.cpp:307 msgctxt "QShortcut" msgid "News" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:320 +#: src/gui/kernel/qkeysequence.cpp:308 msgctxt "QShortcut" msgid "Home Office" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:321 +#: src/gui/kernel/qkeysequence.cpp:309 msgctxt "QShortcut" msgid "Option" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:322 +#: src/gui/kernel/qkeysequence.cpp:310 msgctxt "QShortcut" msgid "Paste" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:323 +#: src/gui/kernel/qkeysequence.cpp:311 msgctxt "QShortcut" msgid "Phone" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:324 +#: src/gui/kernel/qkeysequence.cpp:312 msgctxt "QShortcut" msgid "Reply" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:325 +#: src/gui/kernel/qkeysequence.cpp:313 msgctxt "QShortcut" msgid "Reload" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:326 +#: src/gui/kernel/qkeysequence.cpp:314 msgctxt "QShortcut" msgid "Rotate Windows" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:327 +#: src/gui/kernel/qkeysequence.cpp:315 msgctxt "QShortcut" msgid "Rotation PB" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:328 +#: src/gui/kernel/qkeysequence.cpp:316 msgctxt "QShortcut" msgid "Rotation KB" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:329 +#: src/gui/kernel/qkeysequence.cpp:317 msgctxt "QShortcut" msgid "Save" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:330 +#: src/gui/kernel/qkeysequence.cpp:318 msgctxt "QShortcut" msgid "Send" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:331 +#: src/gui/kernel/qkeysequence.cpp:319 msgctxt "QShortcut" msgid "Spellchecker" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:332 +#: src/gui/kernel/qkeysequence.cpp:320 msgctxt "QShortcut" msgid "Split Screen" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:333 +#: src/gui/kernel/qkeysequence.cpp:321 msgctxt "QShortcut" msgid "Support" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:334 +#: src/gui/kernel/qkeysequence.cpp:322 msgctxt "QShortcut" msgid "Task Panel" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:335 +#: src/gui/kernel/qkeysequence.cpp:323 msgctxt "QShortcut" msgid "Terminal" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:336 +#: src/gui/kernel/qkeysequence.cpp:324 msgctxt "QShortcut" msgid "Tools" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:337 +#: src/gui/kernel/qkeysequence.cpp:325 msgctxt "QShortcut" msgid "Travel" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:338 +#: src/gui/kernel/qkeysequence.cpp:326 msgctxt "QShortcut" msgid "Video" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:339 +#: src/gui/kernel/qkeysequence.cpp:327 msgctxt "QShortcut" msgid "Word Processor" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:340 +#: src/gui/kernel/qkeysequence.cpp:328 msgctxt "QShortcut" msgid "XFer" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:341 +#: src/gui/kernel/qkeysequence.cpp:329 msgctxt "QShortcut" msgid "Zoom In" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:342 +#: src/gui/kernel/qkeysequence.cpp:330 msgctxt "QShortcut" msgid "Zoom Out" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:343 +#: src/gui/kernel/qkeysequence.cpp:331 msgctxt "QShortcut" msgid "Away" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:344 +#: src/gui/kernel/qkeysequence.cpp:332 msgctxt "QShortcut" msgid "Messenger" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:345 +#: src/gui/kernel/qkeysequence.cpp:333 msgctxt "QShortcut" msgid "WebCam" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:346 +#: src/gui/kernel/qkeysequence.cpp:334 msgctxt "QShortcut" msgid "Mail Forward" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:347 +#: src/gui/kernel/qkeysequence.cpp:335 msgctxt "QShortcut" msgid "Pictures" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:348 +#: src/gui/kernel/qkeysequence.cpp:336 msgctxt "QShortcut" msgid "Music" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:349 +#: src/gui/kernel/qkeysequence.cpp:337 msgctxt "QShortcut" msgid "Battery" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:350 +#: src/gui/kernel/qkeysequence.cpp:338 msgctxt "QShortcut" msgid "Bluetooth" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:351 +#: src/gui/kernel/qkeysequence.cpp:339 msgctxt "QShortcut" msgid "Wireless" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:352 +#: src/gui/kernel/qkeysequence.cpp:340 msgctxt "QShortcut" msgid "Ultra Wide Band" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:353 +#: src/gui/kernel/qkeysequence.cpp:341 msgctxt "QShortcut" msgid "Audio Forward" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:354 +#: src/gui/kernel/qkeysequence.cpp:342 msgctxt "QShortcut" msgid "Audio Repeat" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:355 +#: src/gui/kernel/qkeysequence.cpp:343 msgctxt "QShortcut" msgid "Audio Random Play" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:356 +#: src/gui/kernel/qkeysequence.cpp:344 msgctxt "QShortcut" msgid "Subtitle" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:357 +#: src/gui/kernel/qkeysequence.cpp:345 msgctxt "QShortcut" msgid "Audio Cycle Track" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:358 +#: src/gui/kernel/qkeysequence.cpp:346 msgctxt "QShortcut" msgid "Time" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:359 +#: src/gui/kernel/qkeysequence.cpp:347 msgctxt "QShortcut" msgid "Select" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:360 +#: src/gui/kernel/qkeysequence.cpp:348 msgctxt "QShortcut" msgid "View" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:361 +#: src/gui/kernel/qkeysequence.cpp:349 msgctxt "QShortcut" msgid "Top Menu" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:362 +#: src/gui/kernel/qkeysequence.cpp:350 msgctxt "QShortcut" msgid "Suspend" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:363 +#: src/gui/kernel/qkeysequence.cpp:351 msgctxt "QShortcut" msgid "Hibernate" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:367 +#: src/gui/kernel/qkeysequence.cpp:355 msgctxt "QShortcut" msgid "Print Screen" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:368 +#: src/gui/kernel/qkeysequence.cpp:356 msgctxt "QShortcut" msgid "Page Up" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:369 +#: src/gui/kernel/qkeysequence.cpp:357 msgctxt "QShortcut" msgid "Page Down" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:370 +#: src/gui/kernel/qkeysequence.cpp:358 msgctxt "QShortcut" msgid "Caps Lock" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:371 +#: src/gui/kernel/qkeysequence.cpp:359 msgctxt "QShortcut" msgid "Num Lock" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:372 +#: src/gui/kernel/qkeysequence.cpp:360 msgctxt "QShortcut" msgid "Number Lock" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:373 +#: src/gui/kernel/qkeysequence.cpp:361 msgctxt "QShortcut" msgid "Scroll Lock" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:374 +#: src/gui/kernel/qkeysequence.cpp:362 msgctxt "QShortcut" msgid "Insert" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:375 +#: src/gui/kernel/qkeysequence.cpp:363 msgctxt "QShortcut" msgid "Delete" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:376 +#: src/gui/kernel/qkeysequence.cpp:364 msgctxt "QShortcut" msgid "Escape" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:377 +#: src/gui/kernel/qkeysequence.cpp:365 msgctxt "QShortcut" msgid "System Request" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:381 +#: src/gui/kernel/qkeysequence.cpp:369 msgctxt "QShortcut" msgid "Kanji" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:382 +#: src/gui/kernel/qkeysequence.cpp:370 msgctxt "QShortcut" msgid "Muhenkan" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:383 +#: src/gui/kernel/qkeysequence.cpp:371 msgctxt "QShortcut" msgid "Henkan" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:384 +#: src/gui/kernel/qkeysequence.cpp:372 msgctxt "QShortcut" msgid "Romaji" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:385 +#: src/gui/kernel/qkeysequence.cpp:373 msgctxt "QShortcut" msgid "Hiragana" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:386 +#: src/gui/kernel/qkeysequence.cpp:374 msgctxt "QShortcut" msgid "Katakana" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:387 +#: src/gui/kernel/qkeysequence.cpp:375 msgctxt "QShortcut" msgid "Hiragana Katakana" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:388 +#: src/gui/kernel/qkeysequence.cpp:376 msgctxt "QShortcut" msgid "Zenkaku" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:389 +#: src/gui/kernel/qkeysequence.cpp:377 msgctxt "QShortcut" msgid "Hankaku" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:390 +#: src/gui/kernel/qkeysequence.cpp:378 msgctxt "QShortcut" msgid "Zenkaku Hankaku" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:391 +#: src/gui/kernel/qkeysequence.cpp:379 msgctxt "QShortcut" msgid "Touroku" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:392 +#: src/gui/kernel/qkeysequence.cpp:380 msgctxt "QShortcut" msgid "Massyo" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:393 +#: src/gui/kernel/qkeysequence.cpp:381 msgctxt "QShortcut" msgid "Kana Lock" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:394 +#: src/gui/kernel/qkeysequence.cpp:382 msgctxt "QShortcut" msgid "Kana Shift" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:395 +#: src/gui/kernel/qkeysequence.cpp:383 msgctxt "QShortcut" msgid "Eisu Shift" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:396 +#: src/gui/kernel/qkeysequence.cpp:384 msgctxt "QShortcut" msgid "Eisu toggle" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:397 +#: src/gui/kernel/qkeysequence.cpp:385 msgctxt "QShortcut" msgid "Code input" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:398 +#: src/gui/kernel/qkeysequence.cpp:386 msgctxt "QShortcut" msgid "Multiple Candidate" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:399 +#: src/gui/kernel/qkeysequence.cpp:387 msgctxt "QShortcut" msgid "Previous Candidate" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:852 src/gui/kernel/qkeysequence.cpp:931 +#: src/gui/kernel/qkeysequence.cpp:840 src/gui/kernel/qkeysequence.cpp:919 msgid "Ctrl" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:853 src/gui/kernel/qkeysequence.cpp:935 +#: src/gui/kernel/qkeysequence.cpp:841 src/gui/kernel/qkeysequence.cpp:923 msgid "Shift" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:854 src/gui/kernel/qkeysequence.cpp:933 +#: src/gui/kernel/qkeysequence.cpp:842 src/gui/kernel/qkeysequence.cpp:921 msgid "Alt" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:855 src/gui/kernel/qkeysequence.cpp:929 +#: src/gui/kernel/qkeysequence.cpp:843 src/gui/kernel/qkeysequence.cpp:917 msgid "Meta" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:918 +#: src/gui/kernel/qkeysequence.cpp:906 msgid "+" msgstr "" -#: src/gui/kernel/qkeysequence.cpp:942 +#: src/gui/kernel/qkeysequence.cpp:930 msgid "F%1" msgstr "" -#: src/gui/itemviews/qdirmodel.cpp:805 +#: src/gui/itemviews/qdirmodel.cpp:793 msgctxt "QFileDialog" msgid "My Computer" msgstr "" -#: src/gui/itemviews/qdirmodel.cpp:1224 +#: src/gui/itemviews/qdirmodel.cpp:1212 msgid "%1 byte(s)" msgstr "" -#: src/gui/itemviews/qitemeditorfactory.cpp:548 +#: src/gui/itemviews/qitemeditorfactory.cpp:536 msgid "False" msgstr "" -#: src/gui/itemviews/qitemeditorfactory.cpp:549 +#: src/gui/itemviews/qitemeditorfactory.cpp:537 msgid "True" msgstr "" -#: src/gui/itemviews/qfileiconprovider.cpp:145 +#: src/gui/itemviews/qfileiconprovider.cpp:133 msgctxt "QFileDialog" msgid "Drive" msgstr "" -#: src/gui/itemviews/qfileiconprovider.cpp:148 -#: src/gui/itemviews/qfileiconprovider.cpp:149 +#: src/gui/itemviews/qfileiconprovider.cpp:136 +#: src/gui/itemviews/qfileiconprovider.cpp:137 msgctxt "QFileDialog" msgid "File" msgstr "" -#: src/gui/itemviews/qfileiconprovider.cpp:153 +#: src/gui/itemviews/qfileiconprovider.cpp:141 msgctxt "QFileDialog" msgid "Folder" msgstr "" -#: src/gui/itemviews/qfileiconprovider.cpp:158 +#: src/gui/itemviews/qfileiconprovider.cpp:146 msgctxt "QFileDialog" msgid "Shortcut" msgstr "" -#: src/gui/itemviews/qfileiconprovider.cpp:162 +#: src/gui/itemviews/qfileiconprovider.cpp:150 msgctxt "QFileDialog" msgid "Unknown" msgstr "" -#: src/gui/util/qundostack.cpp:869 src/gui/util/qundogroup.cpp:380 +#: src/gui/util/qundostack.cpp:857 src/gui/util/qundogroup.cpp:368 msgid "Undo %1" msgstr "" -#: src/gui/util/qundostack.cpp:869 src/gui/util/qundogroup.cpp:380 +#: src/gui/util/qundostack.cpp:857 src/gui/util/qundogroup.cpp:368 msgid "Undo" msgstr "" -#: src/gui/util/qundostack.cpp:899 src/gui/util/qundogroup.cpp:411 +#: src/gui/util/qundostack.cpp:887 src/gui/util/qundogroup.cpp:399 msgid "Redo %1" msgstr "" -#: src/gui/util/qundostack.cpp:899 src/gui/util/qundogroup.cpp:411 +#: src/gui/util/qundostack.cpp:887 src/gui/util/qundogroup.cpp:399 msgid "Redo" msgstr "" -#: src/gui/util/qundoview.cpp:93 +#: src/gui/util/qundoview.cpp:81 msgid "" msgstr "" -#: src/gui/text/qfontdatabase.cpp:74 src/gui/text/qfontdatabase.cpp:837 +#: src/gui/text/qfontdatabase.cpp:62 src/gui/text/qfontdatabase.cpp:825 msgctxt "QFontDatabase" msgid "Normal" msgstr "" -#: src/gui/text/qfontdatabase.cpp:77 src/gui/text/qfontdatabase.cpp:89 -#: src/gui/text/qfontdatabase.cpp:825 +#: src/gui/text/qfontdatabase.cpp:65 src/gui/text/qfontdatabase.cpp:77 +#: src/gui/text/qfontdatabase.cpp:813 msgctxt "QFontDatabase" msgid "Bold" msgstr "" -#: src/gui/text/qfontdatabase.cpp:80 src/gui/text/qfontdatabase.cpp:827 +#: src/gui/text/qfontdatabase.cpp:68 src/gui/text/qfontdatabase.cpp:815 msgctxt "QFontDatabase" msgid "Demi Bold" msgstr "" -#: src/gui/text/qfontdatabase.cpp:83 src/gui/text/qfontdatabase.cpp:101 -#: src/gui/text/qfontdatabase.cpp:823 +#: src/gui/text/qfontdatabase.cpp:71 src/gui/text/qfontdatabase.cpp:89 +#: src/gui/text/qfontdatabase.cpp:811 msgctxt "QFontDatabase" msgid "Black" msgstr "" -#: src/gui/text/qfontdatabase.cpp:91 +#: src/gui/text/qfontdatabase.cpp:79 msgctxt "QFontDatabase" msgid "Demi" msgstr "" -#: src/gui/text/qfontdatabase.cpp:97 src/gui/text/qfontdatabase.cpp:829 +#: src/gui/text/qfontdatabase.cpp:85 src/gui/text/qfontdatabase.cpp:817 msgctxt "QFontDatabase" msgid "Light" msgstr "" -#: src/gui/text/qfontdatabase.cpp:205 src/gui/text/qfontdatabase.cpp:832 +#: src/gui/text/qfontdatabase.cpp:193 src/gui/text/qfontdatabase.cpp:820 msgctxt "QFontDatabase" msgid "Italic" msgstr "" -#: src/gui/text/qfontdatabase.cpp:208 src/gui/text/qfontdatabase.cpp:834 +#: src/gui/text/qfontdatabase.cpp:196 src/gui/text/qfontdatabase.cpp:822 msgctxt "QFontDatabase" msgid "Oblique" msgstr "" -#: src/gui/text/qtextcontrol.cpp:1888 +#: src/gui/text/qtextcontrol.cpp:1876 msgid "Copy &Link Location" msgstr "" -#: src/gui/text/qtextcontrol.cpp:2804 +#: src/gui/text/qtextcontrol.cpp:2792 msgctxt "QUnicodeControlCharacterMenu" msgid "LRM Left-to-right mark" msgstr "" -#: src/gui/text/qtextcontrol.cpp:2805 +#: src/gui/text/qtextcontrol.cpp:2793 msgctxt "QUnicodeControlCharacterMenu" msgid "RLM Right-to-left mark" msgstr "" -#: src/gui/text/qtextcontrol.cpp:2806 +#: src/gui/text/qtextcontrol.cpp:2794 msgctxt "QUnicodeControlCharacterMenu" msgid "ZWJ Zero width joiner" msgstr "" -#: src/gui/text/qtextcontrol.cpp:2807 +#: src/gui/text/qtextcontrol.cpp:2795 msgctxt "QUnicodeControlCharacterMenu" msgid "ZWNJ Zero width non-joiner" msgstr "" -#: src/gui/text/qtextcontrol.cpp:2808 +#: src/gui/text/qtextcontrol.cpp:2796 msgctxt "QUnicodeControlCharacterMenu" msgid "ZWSP Zero width space" msgstr "" -#: src/gui/text/qtextcontrol.cpp:2809 +#: src/gui/text/qtextcontrol.cpp:2797 msgctxt "QUnicodeControlCharacterMenu" msgid "LRE Start of left-to-right embedding" msgstr "" -#: src/gui/text/qtextcontrol.cpp:2810 +#: src/gui/text/qtextcontrol.cpp:2798 msgctxt "QUnicodeControlCharacterMenu" msgid "RLE Start of right-to-left embedding" msgstr "" -#: src/gui/text/qtextcontrol.cpp:2811 +#: src/gui/text/qtextcontrol.cpp:2799 msgctxt "QUnicodeControlCharacterMenu" msgid "LRO Start of left-to-right override" msgstr "" -#: src/gui/text/qtextcontrol.cpp:2812 +#: src/gui/text/qtextcontrol.cpp:2800 msgctxt "QUnicodeControlCharacterMenu" msgid "RLO Start of right-to-left override" msgstr "" -#: src/gui/text/qtextcontrol.cpp:2813 +#: src/gui/text/qtextcontrol.cpp:2801 msgctxt "QUnicodeControlCharacterMenu" msgid "PDF Pop directional formatting" msgstr "" -#: src/gui/text/qtextcontrol.cpp:2819 +#: src/gui/text/qtextcontrol.cpp:2807 msgid "Insert Unicode control character" msgstr "" -#: src/network/ssl/qsslerror.cpp:209 +#: src/network/ssl/qsslerror.cpp:197 msgid "No error" msgstr "" -#: src/network/ssl/qsslerror.cpp:211 +#: src/network/ssl/qsslerror.cpp:199 msgid "The issuer certificate could not be found" msgstr "" -#: src/network/ssl/qsslerror.cpp:213 +#: src/network/ssl/qsslerror.cpp:201 msgid "The certificate signature could not be decrypted" msgstr "" -#: src/network/ssl/qsslerror.cpp:215 +#: src/network/ssl/qsslerror.cpp:203 msgid "The public key in the certificate could not be read" msgstr "" -#: src/network/ssl/qsslerror.cpp:217 +#: src/network/ssl/qsslerror.cpp:205 msgid "The signature of the certificate is invalid" msgstr "" -#: src/network/ssl/qsslerror.cpp:219 +#: src/network/ssl/qsslerror.cpp:207 msgid "The certificate is not yet valid" msgstr "" -#: src/network/ssl/qsslerror.cpp:221 +#: src/network/ssl/qsslerror.cpp:209 msgid "The certificate has expired" msgstr "" -#: src/network/ssl/qsslerror.cpp:223 +#: src/network/ssl/qsslerror.cpp:211 msgid "The certificate's notBefore field contains an invalid time" msgstr "" -#: src/network/ssl/qsslerror.cpp:225 +#: src/network/ssl/qsslerror.cpp:213 msgid "The certificate's notAfter field contains an invalid time" msgstr "" -#: src/network/ssl/qsslerror.cpp:227 +#: src/network/ssl/qsslerror.cpp:215 msgid "The certificate is self-signed, and untrusted" msgstr "" -#: src/network/ssl/qsslerror.cpp:229 +#: src/network/ssl/qsslerror.cpp:217 msgid "" "The root certificate of the certificate chain is self-signed, and untrusted" msgstr "" -#: src/network/ssl/qsslerror.cpp:231 +#: src/network/ssl/qsslerror.cpp:219 msgid "" "The issuer certificate of a locally looked up certificate could not be found" msgstr "" -#: src/network/ssl/qsslerror.cpp:233 +#: src/network/ssl/qsslerror.cpp:221 msgid "No certificates could be verified" msgstr "" -#: src/network/ssl/qsslerror.cpp:235 +#: src/network/ssl/qsslerror.cpp:223 msgid "One of the CA certificates is invalid" msgstr "" -#: src/network/ssl/qsslerror.cpp:237 +#: src/network/ssl/qsslerror.cpp:225 msgid "The basicConstraints path length parameter has been exceeded" msgstr "" -#: src/network/ssl/qsslerror.cpp:239 +#: src/network/ssl/qsslerror.cpp:227 msgid "The supplied certificate is unsuitable for this purpose" msgstr "" -#: src/network/ssl/qsslerror.cpp:241 +#: src/network/ssl/qsslerror.cpp:229 msgid "The root CA certificate is not trusted for this purpose" msgstr "" -#: src/network/ssl/qsslerror.cpp:243 +#: src/network/ssl/qsslerror.cpp:231 msgid "The root CA certificate is marked to reject the specified purpose" msgstr "" -#: src/network/ssl/qsslerror.cpp:245 +#: src/network/ssl/qsslerror.cpp:233 msgid "" "The current candidate issuer certificate was rejected because its subject " "name did not match the issuer name of the current certificate" msgstr "" -#: src/network/ssl/qsslerror.cpp:248 +#: src/network/ssl/qsslerror.cpp:236 msgid "" "The current candidate issuer certificate was rejected because its issuer " "name and serial number was present and did not match the authority key " "identifier of the current certificate" msgstr "" -#: src/network/ssl/qsslerror.cpp:252 +#: src/network/ssl/qsslerror.cpp:240 msgid "The peer did not present any certificate" msgstr "" -#: src/network/ssl/qsslerror.cpp:254 +#: src/network/ssl/qsslerror.cpp:242 msgid "The host name did not match any of the valid hosts for this certificate" msgstr "" -#: src/network/ssl/qsslerror.cpp:257 +#: src/network/ssl/qsslerror.cpp:245 msgid "The peer certificate is blacklisted" msgstr "" -#: src/network/ssl/qsslsocket_openssl.cpp:266 +#: src/network/ssl/qsslsocket_openssl.cpp:254 msgid "Error creating SSL context (%1)" msgstr "" -#: src/network/ssl/qsslsocket_openssl.cpp:320 +#: src/network/ssl/qsslsocket_openssl.cpp:308 msgid "Invalid or empty cipher list (%1)" msgstr "" -#: src/network/ssl/qsslsocket_openssl.cpp:352 +#: src/network/ssl/qsslsocket_openssl.cpp:340 msgid "Cannot provide a certificate with no key, %1" msgstr "" -#: src/network/ssl/qsslsocket_openssl.cpp:359 +#: src/network/ssl/qsslsocket_openssl.cpp:347 msgid "Error loading local certificate, %1" msgstr "" -#: src/network/ssl/qsslsocket_openssl.cpp:374 +#: src/network/ssl/qsslsocket_openssl.cpp:362 msgid "Error loading private key, %1" msgstr "" -#: src/network/ssl/qsslsocket_openssl.cpp:381 +#: src/network/ssl/qsslsocket_openssl.cpp:369 msgid "Private key does not certify public key, %1" msgstr "" -#: src/network/ssl/qsslsocket_openssl.cpp:401 +#: src/network/ssl/qsslsocket_openssl.cpp:389 msgid "Error creating SSL session, %1" msgstr "" -#: src/network/ssl/qsslsocket_openssl.cpp:437 +#: src/network/ssl/qsslsocket_openssl.cpp:425 msgid "Error creating SSL session: %1" msgstr "" -#: src/network/ssl/qsslsocket_openssl.cpp:686 +#: src/network/ssl/qsslsocket_openssl.cpp:674 msgid "Unable to write data: %1" msgstr "" -#: src/network/ssl/qsslsocket_openssl.cpp:757 +#: src/network/ssl/qsslsocket_openssl.cpp:745 msgid "Unable to decrypt data: %1" msgstr "" -#: src/network/ssl/qsslsocket_openssl.cpp:830 +#: src/network/ssl/qsslsocket_openssl.cpp:818 msgid "The TLS/SSL connection has been closed" msgstr "" -#: src/network/ssl/qsslsocket_openssl.cpp:838 -#: src/network/ssl/qsslsocket_openssl.cpp:848 +#: src/network/ssl/qsslsocket_openssl.cpp:826 +#: src/network/ssl/qsslsocket_openssl.cpp:836 msgid "Error while reading: %1" msgstr "" -#: src/network/ssl/qsslsocket_openssl.cpp:943 +#: src/network/ssl/qsslsocket_openssl.cpp:931 msgid "Error during SSL handshake: %1" msgstr "" -#: src/network/kernel/qhostinfo_p.h:91 +#: src/network/kernel/qhostinfo_p.h:79 msgctxt "QHostInfo" msgid "Unknown error" msgstr "" -#: src/network/kernel/qhostinfo.cpp:146 +#: src/network/kernel/qhostinfo.cpp:134 msgctxt "QHostInfo" msgid "No host name given" msgstr "" -#: src/network/kernel/qhostinfo_unix.cpp:98 -#: src/network/kernel/qhostinfo_unix.cpp:184 -#: src/network/socket/qabstractsocket.cpp:885 -#: src/network/socket/qhttpsocketengine.cpp:662 -#: src/network/socket/qsocks5socketengine.cpp:638 -#: src/network/socket/qsocks5socketengine.cpp:664 +#: src/network/kernel/qhostinfo_unix.cpp:86 +#: src/network/kernel/qhostinfo_unix.cpp:172 +#: src/network/socket/qabstractsocket.cpp:873 +#: src/network/socket/qhttpsocketengine.cpp:650 +#: src/network/socket/qsocks5socketengine.cpp:626 +#: src/network/socket/qsocks5socketengine.cpp:652 msgid "Host not found" msgstr "" -#: src/network/kernel/qhostinfo_unix.cpp:116 +#: src/network/kernel/qhostinfo_unix.cpp:104 msgid "No host name given" msgstr "" -#: src/network/kernel/qhostinfo_unix.cpp:118 +#: src/network/kernel/qhostinfo_unix.cpp:106 msgid "Invalid hostname" msgstr "" -#: src/network/kernel/qhostinfo_unix.cpp:172 +#: src/network/kernel/qhostinfo_unix.cpp:160 msgid "Unknown address type" msgstr "" -#: src/network/bearer/qnetworksession.cpp:444 +#: src/network/bearer/qnetworksession.cpp:432 msgid "Invalid configuration." msgstr "" -#: src/network/socket/qtcpserver.cpp:278 src/network/socket/qtcpserver.cpp:400 -#: src/network/socket/qabstractsocket.cpp:536 -#: src/network/socket/qabstractsocket.cpp:1323 -#: src/network/socket/qabstractsocket.cpp:1533 +#: src/network/socket/qtcpserver.cpp:266 src/network/socket/qtcpserver.cpp:388 +#: src/network/socket/qabstractsocket.cpp:524 +#: src/network/socket/qabstractsocket.cpp:1311 +#: src/network/socket/qabstractsocket.cpp:1521 msgid "Operation on socket is not supported" msgstr "" -#: src/network/socket/qlocalserver_unix.cpp:203 +#: src/network/socket/qlocalserver_unix.cpp:191 msgid "%1: Permission denied" msgstr "" -#: src/network/socket/qlocalserver_unix.cpp:211 -#: src/network/socket/qlocalserver.cpp:214 +#: src/network/socket/qlocalserver_unix.cpp:199 +#: src/network/socket/qlocalserver.cpp:202 msgid "%1: Name error" msgstr "" -#: src/network/socket/qlocalserver_unix.cpp:215 +#: src/network/socket/qlocalserver_unix.cpp:203 msgid "%1: Address in use" msgstr "" -#: src/network/socket/qlocalserver_unix.cpp:220 -#: src/network/socket/qlocalsocket_unix.cpp:153 +#: src/network/socket/qlocalserver_unix.cpp:208 +#: src/network/socket/qlocalsocket_unix.cpp:141 msgid "%1: Unknown error %2" msgstr "" -#: src/network/socket/qabstractsocket.cpp:927 -#: src/network/socket/qhttpsocketengine.cpp:665 -#: src/network/socket/qnativesocketengine.cpp:232 -#: src/network/socket/qsocks5socketengine.cpp:668 +#: src/network/socket/qabstractsocket.cpp:915 +#: src/network/socket/qhttpsocketengine.cpp:653 +#: src/network/socket/qnativesocketengine.cpp:220 +#: src/network/socket/qsocks5socketengine.cpp:656 msgid "Connection refused" msgstr "" -#: src/network/socket/qabstractsocket.cpp:1069 -#: src/network/socket/qnativesocketengine.cpp:229 +#: src/network/socket/qabstractsocket.cpp:1057 +#: src/network/socket/qnativesocketengine.cpp:217 msgid "Connection timed out" msgstr "" -#: src/network/socket/qabstractsocket.cpp:1710 +#: src/network/socket/qabstractsocket.cpp:1698 msgid "Socket operation timed out" msgstr "" -#: src/network/socket/qabstractsocket.cpp:2121 +#: src/network/socket/qabstractsocket.cpp:2109 msgid "Socket is not connected" msgstr "" -#: src/network/socket/qhttpsocketengine.cpp:562 +#: src/network/socket/qhttpsocketengine.cpp:550 msgid "Did not receive HTTP response from proxy" msgstr "" -#: src/network/socket/qhttpsocketengine.cpp:598 +#: src/network/socket/qhttpsocketengine.cpp:586 msgid "Error parsing authentication request from proxy" msgstr "" -#: src/network/socket/qhttpsocketengine.cpp:632 +#: src/network/socket/qhttpsocketengine.cpp:620 msgid "Authentication required" msgstr "" -#: src/network/socket/qhttpsocketengine.cpp:659 +#: src/network/socket/qhttpsocketengine.cpp:647 msgid "Proxy denied connection" msgstr "" -#: src/network/socket/qhttpsocketengine.cpp:669 +#: src/network/socket/qhttpsocketengine.cpp:657 msgid "Error communicating with HTTP proxy" msgstr "" -#: src/network/socket/qhttpsocketengine.cpp:692 +#: src/network/socket/qhttpsocketengine.cpp:680 msgid "Proxy server not found" msgstr "" -#: src/network/socket/qhttpsocketengine.cpp:694 +#: src/network/socket/qhttpsocketengine.cpp:682 msgid "Proxy connection refused" msgstr "" -#: src/network/socket/qhttpsocketengine.cpp:696 +#: src/network/socket/qhttpsocketengine.cpp:684 msgid "Proxy server connection timed out" msgstr "" -#: src/network/socket/qhttpsocketengine.cpp:698 +#: src/network/socket/qhttpsocketengine.cpp:686 msgid "Proxy connection closed prematurely" msgstr "" -#: src/network/socket/qnativesocketengine.cpp:193 +#: src/network/socket/qnativesocketengine.cpp:181 msgid "Unable to initialize non-blocking socket" msgstr "" -#: src/network/socket/qnativesocketengine.cpp:196 +#: src/network/socket/qnativesocketengine.cpp:184 msgid "Unable to initialize broadcast socket" msgstr "" -#: src/network/socket/qnativesocketengine.cpp:199 +#: src/network/socket/qnativesocketengine.cpp:187 msgid "Attempt to use IPv6 socket on a platform with no IPv6 support" msgstr "" -#: src/network/socket/qnativesocketengine.cpp:202 +#: src/network/socket/qnativesocketengine.cpp:190 msgid "The remote host closed the connection" msgstr "" -#: src/network/socket/qnativesocketengine.cpp:205 +#: src/network/socket/qnativesocketengine.cpp:193 msgid "Network operation timed out" msgstr "" -#: src/network/socket/qnativesocketengine.cpp:208 +#: src/network/socket/qnativesocketengine.cpp:196 msgid "Out of resources" msgstr "" -#: src/network/socket/qnativesocketengine.cpp:211 +#: src/network/socket/qnativesocketengine.cpp:199 msgid "Unsupported socket operation" msgstr "" -#: src/network/socket/qnativesocketengine.cpp:214 +#: src/network/socket/qnativesocketengine.cpp:202 msgid "Protocol type not supported" msgstr "" -#: src/network/socket/qnativesocketengine.cpp:217 +#: src/network/socket/qnativesocketengine.cpp:205 msgid "Invalid socket descriptor" msgstr "" -#: src/network/socket/qnativesocketengine.cpp:220 +#: src/network/socket/qnativesocketengine.cpp:208 msgid "Host unreachable" msgstr "" -#: src/network/socket/qnativesocketengine.cpp:223 -#: src/network/socket/qsocks5socketengine.cpp:660 +#: src/network/socket/qnativesocketengine.cpp:211 +#: src/network/socket/qsocks5socketengine.cpp:648 msgid "Network unreachable" msgstr "" -#: src/network/socket/qnativesocketengine.cpp:226 +#: src/network/socket/qnativesocketengine.cpp:214 msgid "Permission denied" msgstr "" -#: src/network/socket/qnativesocketengine.cpp:235 +#: src/network/socket/qnativesocketengine.cpp:223 msgid "The bound address is already in use" msgstr "" -#: src/network/socket/qnativesocketengine.cpp:238 +#: src/network/socket/qnativesocketengine.cpp:226 msgid "The address is not available" msgstr "" -#: src/network/socket/qnativesocketengine.cpp:241 +#: src/network/socket/qnativesocketengine.cpp:229 msgid "The address is protected" msgstr "" -#: src/network/socket/qnativesocketengine.cpp:244 +#: src/network/socket/qnativesocketengine.cpp:232 msgid "Datagram was too large to send" msgstr "" -#: src/network/socket/qnativesocketengine.cpp:247 +#: src/network/socket/qnativesocketengine.cpp:235 msgid "Unable to send a message" msgstr "" -#: src/network/socket/qnativesocketengine.cpp:250 +#: src/network/socket/qnativesocketengine.cpp:238 msgid "Unable to receive a message" msgstr "" -#: src/network/socket/qnativesocketengine.cpp:253 +#: src/network/socket/qnativesocketengine.cpp:241 msgid "Unable to write" msgstr "" -#: src/network/socket/qnativesocketengine.cpp:256 +#: src/network/socket/qnativesocketengine.cpp:244 msgid "Network error" msgstr "" -#: src/network/socket/qnativesocketengine.cpp:259 +#: src/network/socket/qnativesocketengine.cpp:247 msgid "Another socket is already listening on the same port" msgstr "" -#: src/network/socket/qnativesocketengine.cpp:262 +#: src/network/socket/qnativesocketengine.cpp:250 msgid "Operation on non-socket" msgstr "" -#: src/network/socket/qnativesocketengine.cpp:265 +#: src/network/socket/qnativesocketengine.cpp:253 msgid "The proxy type is invalid for this operation" msgstr "" -#: src/network/socket/qlocalsocket_unix.cpp:125 +#: src/network/socket/qlocalsocket_unix.cpp:113 msgid "%1: Connection refused" msgstr "" -#: src/network/socket/qlocalsocket_unix.cpp:128 +#: src/network/socket/qlocalsocket_unix.cpp:116 msgid "%1: Remote closed" msgstr "" -#: src/network/socket/qlocalsocket_unix.cpp:131 +#: src/network/socket/qlocalsocket_unix.cpp:119 msgid "%1: Invalid name" msgstr "" -#: src/network/socket/qlocalsocket_unix.cpp:134 +#: src/network/socket/qlocalsocket_unix.cpp:122 msgid "%1: Socket access error" msgstr "" -#: src/network/socket/qlocalsocket_unix.cpp:137 +#: src/network/socket/qlocalsocket_unix.cpp:125 msgid "%1: Socket resource error" msgstr "" -#: src/network/socket/qlocalsocket_unix.cpp:140 +#: src/network/socket/qlocalsocket_unix.cpp:128 msgid "%1: Socket operation timed out" msgstr "" -#: src/network/socket/qlocalsocket_unix.cpp:143 +#: src/network/socket/qlocalsocket_unix.cpp:131 msgid "%1: Datagram too large" msgstr "" -#: src/network/socket/qlocalsocket_unix.cpp:146 +#: src/network/socket/qlocalsocket_unix.cpp:134 msgid "%1: Connection error" msgstr "" -#: src/network/socket/qlocalsocket_unix.cpp:149 +#: src/network/socket/qlocalsocket_unix.cpp:137 msgid "%1: The socket operation is not supported" msgstr "" -#: src/network/socket/qudpsocket.cpp:193 +#: src/network/socket/qudpsocket.cpp:181 msgid "This platform does not support IPv6" msgstr "" -#: src/network/socket/qsocks5socketengine.cpp:593 +#: src/network/socket/qsocks5socketengine.cpp:581 msgid "Connection to proxy refused" msgstr "" -#: src/network/socket/qsocks5socketengine.cpp:597 +#: src/network/socket/qsocks5socketengine.cpp:585 msgid "Connection to proxy closed prematurely" msgstr "" -#: src/network/socket/qsocks5socketengine.cpp:601 +#: src/network/socket/qsocks5socketengine.cpp:589 msgid "Proxy host not found" msgstr "" -#: src/network/socket/qsocks5socketengine.cpp:606 +#: src/network/socket/qsocks5socketengine.cpp:594 msgid "Connection to proxy timed out" msgstr "" -#: src/network/socket/qsocks5socketengine.cpp:623 +#: src/network/socket/qsocks5socketengine.cpp:611 msgid "Proxy authentication failed" msgstr "" -#: src/network/socket/qsocks5socketengine.cpp:624 +#: src/network/socket/qsocks5socketengine.cpp:612 msgid "Proxy authentication failed: %1" msgstr "" -#: src/network/socket/qsocks5socketengine.cpp:633 +#: src/network/socket/qsocks5socketengine.cpp:621 msgid "SOCKS version 5 protocol error" msgstr "" -#: src/network/socket/qsocks5socketengine.cpp:652 +#: src/network/socket/qsocks5socketengine.cpp:640 msgid "General SOCKSv5 server failure" msgstr "" -#: src/network/socket/qsocks5socketengine.cpp:656 +#: src/network/socket/qsocks5socketengine.cpp:644 msgid "Connection not allowed by SOCKSv5 server" msgstr "" -#: src/network/socket/qsocks5socketengine.cpp:672 +#: src/network/socket/qsocks5socketengine.cpp:660 msgid "TTL expired" msgstr "" -#: src/network/socket/qsocks5socketengine.cpp:676 +#: src/network/socket/qsocks5socketengine.cpp:664 msgid "SOCKSv5 command not supported" msgstr "" -#: src/network/socket/qsocks5socketengine.cpp:680 +#: src/network/socket/qsocks5socketengine.cpp:668 msgid "Address type not supported" msgstr "" -#: src/network/socket/qsocks5socketengine.cpp:685 +#: src/network/socket/qsocks5socketengine.cpp:673 msgid "Unknown SOCKSv5 proxy error code 0x%1" msgstr "" -#: src/network/socket/qsocks5socketengine.cpp:1377 +#: src/network/socket/qsocks5socketengine.cpp:1365 msgctxt "QSocks5SocketEngine" msgid "Network operation timed out" msgstr "" -#: src/network/access/qhttpnetworkconnection.cpp:668 -#: src/network/access/qhttp.cpp:2599 +#: src/network/access/qhttpnetworkconnection.cpp:656 +#: src/network/access/qhttp.cpp:2587 msgctxt "QHttp" msgid "Host %1 not found" msgstr "" -#: src/network/access/qhttpnetworkconnection.cpp:671 +#: src/network/access/qhttpnetworkconnection.cpp:659 msgctxt "QHttp" msgid "Connection refused" msgstr "" -#: src/network/access/qhttpnetworkconnection.cpp:674 +#: src/network/access/qhttpnetworkconnection.cpp:662 msgctxt "QHttp" msgid "Connection closed" msgstr "" -#: src/network/access/qhttpnetworkconnection.cpp:677 +#: src/network/access/qhttpnetworkconnection.cpp:665 msgctxt "QAbstractSocket" msgid "Socket operation timed out" msgstr "" -#: src/network/access/qhttpnetworkconnection.cpp:680 +#: src/network/access/qhttpnetworkconnection.cpp:668 msgctxt "QHttp" msgid "Proxy requires authentication" msgstr "" -#: src/network/access/qhttpnetworkconnection.cpp:683 +#: src/network/access/qhttpnetworkconnection.cpp:671 msgctxt "QHttp" msgid "Host requires authentication" msgstr "" -#: src/network/access/qhttpnetworkconnection.cpp:686 +#: src/network/access/qhttpnetworkconnection.cpp:674 msgctxt "QHttp" msgid "Data corrupted" msgstr "" -#: src/network/access/qhttpnetworkconnection.cpp:689 +#: src/network/access/qhttpnetworkconnection.cpp:677 msgctxt "QHttp" msgid "Unknown protocol specified" msgstr "" -#: src/network/access/qhttpnetworkconnection.cpp:692 +#: src/network/access/qhttpnetworkconnection.cpp:680 msgctxt "QHttp" msgid "SSL handshake failed" msgstr "" -#: src/network/access/qnetworkaccessdebugpipebackend.cpp:182 +#: src/network/access/qnetworkaccessdebugpipebackend.cpp:170 msgctxt "QNetworkAccessDebugPipeBackend" msgid "Write error writing to %1: %2" msgstr "" -#: src/network/access/qnetworkaccessdebugpipebackend.cpp:242 +#: src/network/access/qnetworkaccessdebugpipebackend.cpp:230 msgid "Socket error on %1: %2" msgstr "" -#: src/network/access/qnetworkaccessdebugpipebackend.cpp:257 +#: src/network/access/qnetworkaccessdebugpipebackend.cpp:245 msgid "Remote host closed the connection prematurely on %1" msgstr "" -#: src/network/access/qnetworkaccessftpbackend.cpp:126 -#: src/network/access/qnetworkaccesshttpbackend.cpp:416 +#: src/network/access/qnetworkaccessftpbackend.cpp:114 +#: src/network/access/qnetworkaccesshttpbackend.cpp:404 msgid "No suitable proxy found" msgstr "" -#: src/network/access/qnetworkaccessftpbackend.cpp:140 +#: src/network/access/qnetworkaccessftpbackend.cpp:128 msgid "Cannot open %1: is a directory" msgstr "" -#: src/network/access/qnetworkaccessftpbackend.cpp:240 +#: src/network/access/qnetworkaccessftpbackend.cpp:228 msgid "Logging in to %1 failed: authentication required" msgstr "" -#: src/network/access/qnetworkaccessftpbackend.cpp:272 +#: src/network/access/qnetworkaccessftpbackend.cpp:260 msgid "Error while downloading %1: %2" msgstr "" -#: src/network/access/qnetworkaccessftpbackend.cpp:274 +#: src/network/access/qnetworkaccessftpbackend.cpp:262 msgid "Error while uploading %1: %2" msgstr "" -#: src/network/access/qnetworkreplydataimpl.cpp:74 +#: src/network/access/qnetworkreplydataimpl.cpp:62 msgctxt "QNetworkAccessDataBackend" msgid "Invalid URI: %1" msgstr "" -#: src/network/access/qnetworkaccesscachebackend.cpp:58 +#: src/network/access/qnetworkaccesscachebackend.cpp:46 msgctxt "QNetworkAccessCacheBackend" msgid "Error opening %1" msgstr "" -#: src/network/access/qhttp.cpp:1554 src/network/access/qhttp.cpp:2370 +#: src/network/access/qhttp.cpp:1542 src/network/access/qhttp.cpp:2358 msgctxt "QHttp" msgid "Unknown error" msgstr "" -#: src/network/access/qhttp.cpp:1806 +#: src/network/access/qhttp.cpp:1794 msgid "Request aborted" msgstr "" -#: src/network/access/qhttp.cpp:2381 +#: src/network/access/qhttp.cpp:2369 msgctxt "QHttp" msgid "No server set to connect to" msgstr "" -#: src/network/access/qhttp.cpp:2537 +#: src/network/access/qhttp.cpp:2525 msgctxt "QHttp" msgid "Wrong content length" msgstr "" -#: src/network/access/qhttp.cpp:2541 +#: src/network/access/qhttp.cpp:2529 msgctxt "QHttp" msgid "Server closed connection unexpectedly" msgstr "" -#: src/network/access/qhttp.cpp:2596 +#: src/network/access/qhttp.cpp:2584 msgctxt "QHttp" msgid "Connection refused (or timed out)" msgstr "" -#: src/network/access/qhttp.cpp:2619 +#: src/network/access/qhttp.cpp:2607 msgctxt "QHttp" msgid "HTTP request failed" msgstr "" -#: src/network/access/qhttp.cpp:2707 +#: src/network/access/qhttp.cpp:2695 msgctxt "QHttp" msgid "Invalid HTTP response header" msgstr "" -#: src/network/access/qhttp.cpp:2735 +#: src/network/access/qhttp.cpp:2723 msgctxt "QHttp" msgid "Unknown authentication method" msgstr "" -#: src/network/access/qhttp.cpp:2745 +#: src/network/access/qhttp.cpp:2733 msgctxt "QHttp" msgid "Proxy authentication required" msgstr "" -#: src/network/access/qhttp.cpp:2749 +#: src/network/access/qhttp.cpp:2737 msgctxt "QHttp" msgid "Authentication required" msgstr "" -#: src/network/access/qhttp.cpp:2832 src/network/access/qhttp.cpp:2880 +#: src/network/access/qhttp.cpp:2820 src/network/access/qhttp.cpp:2868 msgctxt "QHttp" msgid "Invalid HTTP chunked body" msgstr "" -#: src/network/access/qhttp.cpp:2918 +#: src/network/access/qhttp.cpp:2906 msgctxt "QHttp" msgid "Error writing response to device" msgstr "" -#: src/network/access/qhttpthreaddelegate.cpp:419 -#: src/network/access/qhttpthreaddelegate.cpp:442 +#: src/network/access/qhttpthreaddelegate.cpp:407 +#: src/network/access/qhttpthreaddelegate.cpp:430 msgctxt "QNetworkReply" msgid "Error downloading %1 - server replied: %2" msgstr "" -#: src/network/access/qnetworkreplyimpl.cpp:80 +#: src/network/access/qnetworkreplyimpl.cpp:68 msgctxt "QNetworkReply" msgid "Protocol \"%1\" is unknown" msgstr "" -#: src/network/access/qnetworkreplyimpl.cpp:106 -#: src/network/access/qnetworkreplyimpl.cpp:297 +#: src/network/access/qnetworkreplyimpl.cpp:94 +#: src/network/access/qnetworkreplyimpl.cpp:285 msgctxt "QNetworkReply" msgid "Network session error." msgstr "" -#: src/network/access/qnetworkreplyimpl.cpp:113 +#: src/network/access/qnetworkreplyimpl.cpp:101 msgctxt "QNetworkReply" msgid "backend start error." msgstr "" -#: src/network/access/qnetworkreplyimpl.cpp:760 +#: src/network/access/qnetworkreplyimpl.cpp:748 msgid "Temporary network failure." msgstr "" -#: src/network/access/qnetworkreplyimpl.cpp:875 -#: src/network/access/qnetworkreplyimpl.cpp:905 +#: src/network/access/qnetworkreplyimpl.cpp:863 +#: src/network/access/qnetworkreplyimpl.cpp:893 msgid "Operation canceled" msgstr "" -#: src/network/access/qnetworkreplyimpl.cpp:1100 +#: src/network/access/qnetworkreplyimpl.cpp:1088 msgctxt "QNetworkAccessManager" msgid "Network access is disabled." msgstr "" -#: src/network/access/qftp.cpp:867 +#: src/network/access/qftp.cpp:855 msgid "Not connected" msgstr "" -#: src/network/access/qftp.cpp:946 +#: src/network/access/qftp.cpp:934 msgid "Host %1 not found" msgstr "" -#: src/network/access/qftp.cpp:950 +#: src/network/access/qftp.cpp:938 msgid "Connection refused to host %1" msgstr "" -#: src/network/access/qftp.cpp:954 +#: src/network/access/qftp.cpp:942 msgid "Connection timed out to host %1" msgstr "" -#: src/network/access/qftp.cpp:1058 +#: src/network/access/qftp.cpp:1046 msgid "Connected to host %1" msgstr "" -#: src/network/access/qftp.cpp:1266 +#: src/network/access/qftp.cpp:1254 msgid "Connection refused for data connection" msgstr "" -#: src/network/access/qftp.cpp:2340 +#: src/network/access/qftp.cpp:2328 msgctxt "QFtp" msgid "" "Connecting to host failed:\n" "%1" msgstr "" -#: src/network/access/qftp.cpp:2344 +#: src/network/access/qftp.cpp:2332 msgctxt "QFtp" msgid "" "Login failed:\n" "%1" msgstr "" -#: src/network/access/qftp.cpp:2348 +#: src/network/access/qftp.cpp:2336 msgctxt "QFtp" msgid "" "Listing directory failed:\n" "%1" msgstr "" -#: src/network/access/qftp.cpp:2352 +#: src/network/access/qftp.cpp:2340 msgctxt "QFtp" msgid "" "Changing directory failed:\n" "%1" msgstr "" -#: src/network/access/qftp.cpp:2356 +#: src/network/access/qftp.cpp:2344 msgctxt "QFtp" msgid "" "Downloading file failed:\n" "%1" msgstr "" -#: src/network/access/qftp.cpp:2360 +#: src/network/access/qftp.cpp:2348 msgctxt "QFtp" msgid "" "Uploading file failed:\n" "%1" msgstr "" -#: src/network/access/qftp.cpp:2364 +#: src/network/access/qftp.cpp:2352 msgctxt "QFtp" msgid "" "Removing file failed:\n" "%1" msgstr "" -#: src/network/access/qftp.cpp:2368 +#: src/network/access/qftp.cpp:2356 msgctxt "QFtp" msgid "" "Creating directory failed:\n" "%1" msgstr "" -#: src/network/access/qftp.cpp:2372 +#: src/network/access/qftp.cpp:2360 msgctxt "QFtp" msgid "" "Removing directory failed:\n" "%1" msgstr "" -#: src/network/access/qftp.cpp:2400 +#: src/network/access/qftp.cpp:2388 msgctxt "QFtp" msgid "Connection closed" msgstr "" -#: src/network/access/qnetworkaccessfilebackend.cpp:99 -#: src/network/access/qnetworkreplyfileimpl.cpp:66 +#: src/network/access/qnetworkaccessfilebackend.cpp:87 +#: src/network/access/qnetworkreplyfileimpl.cpp:54 msgctxt "QNetworkAccessFileBackend" msgid "Request for opening non-local file %1" msgstr "" -#: src/network/access/qnetworkaccessfilebackend.cpp:143 -#: src/network/access/qnetworkreplyfileimpl.cpp:101 +#: src/network/access/qnetworkaccessfilebackend.cpp:131 +#: src/network/access/qnetworkreplyfileimpl.cpp:89 msgctxt "QNetworkAccessFileBackend" msgid "Error opening %1: %2" msgstr "" -#: src/network/access/qnetworkaccessfilebackend.cpp:181 +#: src/network/access/qnetworkaccessfilebackend.cpp:169 msgctxt "QNetworkAccessFileBackend" msgid "Write error writing to %1: %2" msgstr "" -#: src/network/access/qnetworkaccessfilebackend.cpp:223 -#: src/network/access/qnetworkreplyfileimpl.cpp:88 +#: src/network/access/qnetworkaccessfilebackend.cpp:211 +#: src/network/access/qnetworkreplyfileimpl.cpp:76 msgctxt "QNetworkAccessFileBackend" msgid "Cannot open %1: Path is a directory" msgstr "" -#: src/network/access/qnetworkaccessfilebackend.cpp:244 +#: src/network/access/qnetworkaccessfilebackend.cpp:232 msgctxt "QNetworkAccessFileBackend" msgid "Read error reading from %1: %2" msgstr "" -#: src/plugins/accessible/widgets/simplewidgets.cpp:112 -#: src/plugins/accessible/widgets/simplewidgets.cpp:257 +#: src/plugins/accessible/widgets/simplewidgets.cpp:100 +#: src/plugins/accessible/widgets/simplewidgets.cpp:245 msgid "Uncheck" msgstr "" -#: src/plugins/accessible/widgets/simplewidgets.cpp:115 -#: src/plugins/accessible/widgets/simplewidgets.cpp:120 -#: src/plugins/accessible/widgets/simplewidgets.cpp:259 +#: src/plugins/accessible/widgets/simplewidgets.cpp:103 +#: src/plugins/accessible/widgets/simplewidgets.cpp:108 +#: src/plugins/accessible/widgets/simplewidgets.cpp:247 msgid "Check" msgstr "" -#: src/plugins/accessible/widgets/simplewidgets.cpp:116 -#: src/plugins/accessible/widgets/simplewidgets.cpp:726 +#: src/plugins/accessible/widgets/simplewidgets.cpp:104 +#: src/plugins/accessible/widgets/simplewidgets.cpp:714 msgid "Toggle" msgstr "" -#: src/plugins/accessible/widgets/simplewidgets.cpp:262 -#: src/plugins/accessible/widgets/simplewidgets.cpp:421 -#: src/plugins/accessible/widgets/simplewidgets.cpp:427 -#: src/plugins/accessible/widgets/complexwidgets.cpp:1611 +#: src/plugins/accessible/widgets/simplewidgets.cpp:250 +#: src/plugins/accessible/widgets/simplewidgets.cpp:409 +#: src/plugins/accessible/widgets/simplewidgets.cpp:415 +#: src/plugins/accessible/widgets/complexwidgets.cpp:1599 msgid "Press" msgstr "" -#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:152 -#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:377 -#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:430 +#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:140 +#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:365 +#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:418 msgid "Execute" msgstr "" -#: src/plugins/accessible/widgets/rangecontrols.cpp:140 -#: src/plugins/accessible/widgets/rangecontrols.cpp:403 +#: src/plugins/accessible/widgets/rangecontrols.cpp:128 +#: src/plugins/accessible/widgets/rangecontrols.cpp:391 msgid "More" msgstr "" -#: src/plugins/accessible/widgets/rangecontrols.cpp:142 -#: src/plugins/accessible/widgets/rangecontrols.cpp:405 +#: src/plugins/accessible/widgets/rangecontrols.cpp:130 +#: src/plugins/accessible/widgets/rangecontrols.cpp:393 msgid "Less" msgstr "" -#: src/plugins/accessible/widgets/rangecontrols.cpp:542 +#: src/plugins/accessible/widgets/rangecontrols.cpp:530 msgid "Line up" msgstr "" -#: src/plugins/accessible/widgets/rangecontrols.cpp:546 -#: src/plugins/accessible/widgets/rangecontrols.cpp:699 +#: src/plugins/accessible/widgets/rangecontrols.cpp:534 +#: src/plugins/accessible/widgets/rangecontrols.cpp:687 msgid "Position" msgstr "" -#: src/plugins/accessible/widgets/rangecontrols.cpp:550 +#: src/plugins/accessible/widgets/rangecontrols.cpp:538 msgid "Line down" msgstr "" -#: src/plugins/accessible/widgets/rangecontrols.cpp:924 +#: src/plugins/accessible/widgets/rangecontrols.cpp:912 msgid "QDial" msgstr "" -#: src/plugins/accessible/widgets/rangecontrols.cpp:926 +#: src/plugins/accessible/widgets/rangecontrols.cpp:914 msgid "SpeedoMeter" msgstr "" -#: src/plugins/accessible/widgets/rangecontrols.cpp:928 +#: src/plugins/accessible/widgets/rangecontrols.cpp:916 msgid "SliderHandle" msgstr "" -#: src/plugins/accessible/widgets/qaccessiblewidgets.cpp:1323 +#: src/plugins/accessible/widgets/qaccessiblewidgets.cpp:1311 msgid "Dock" msgstr "" -#: src/plugins/accessible/widgets/qaccessiblewidgets.cpp:1324 +#: src/plugins/accessible/widgets/qaccessiblewidgets.cpp:1312 msgid "Float" msgstr "" -#: src/plugins/accessible/widgets/complexwidgets.cpp:1507 +#: src/plugins/accessible/widgets/complexwidgets.cpp:1495 msgid "Scroll Left" msgstr "" -#: src/plugins/accessible/widgets/complexwidgets.cpp:1507 +#: src/plugins/accessible/widgets/complexwidgets.cpp:1495 msgid "Scroll Right" msgstr "" -#: src/plugins/accessible/widgets/complexwidgets.cpp:1616 +#: src/plugins/accessible/widgets/complexwidgets.cpp:1604 msgid "Close the tab" msgstr "" -#: src/plugins/accessible/widgets/complexwidgets.cpp:1619 +#: src/plugins/accessible/widgets/complexwidgets.cpp:1607 msgid "Activate the tab" msgstr "" -#: src/plugins/imageformats/tga/qtgafile.cpp:130 +#: src/plugins/imageformats/tga/qtgafile.cpp:118 msgid "Could not read image data" msgstr "" -#: src/plugins/imageformats/tga/qtgafile.cpp:135 +#: src/plugins/imageformats/tga/qtgafile.cpp:123 msgid "Sequential device (eg socket) for image read not supported" msgstr "" -#: src/plugins/imageformats/tga/qtgafile.cpp:140 +#: src/plugins/imageformats/tga/qtgafile.cpp:128 msgid "Seek file/device for image read failed" msgstr "" -#: src/plugins/imageformats/tga/qtgafile.cpp:146 +#: src/plugins/imageformats/tga/qtgafile.cpp:134 msgid "Image mHeader read failed" msgstr "" -#: src/plugins/imageformats/tga/qtgafile.cpp:153 +#: src/plugins/imageformats/tga/qtgafile.cpp:141 msgid "Image type not supported" msgstr "" -#: src/plugins/imageformats/tga/qtgafile.cpp:161 +#: src/plugins/imageformats/tga/qtgafile.cpp:149 msgid "Image depth not valid" msgstr "" -#: src/plugins/imageformats/tga/qtgafile.cpp:166 +#: src/plugins/imageformats/tga/qtgafile.cpp:154 msgid "Could not seek to image read footer" msgstr "" -#: src/plugins/imageformats/tga/qtgafile.cpp:174 +#: src/plugins/imageformats/tga/qtgafile.cpp:162 msgid "Could not read footer" msgstr "" -#: src/plugins/imageformats/tga/qtgafile.cpp:178 +#: src/plugins/imageformats/tga/qtgafile.cpp:166 msgid "Image type (non-TrueVision 2.0) not supported" msgstr "" -#: src/plugins/imageformats/tga/qtgafile.cpp:182 +#: src/plugins/imageformats/tga/qtgafile.cpp:170 msgid "Could not reset to start position" msgstr "" -#: src/plugins/bearer/qnetworksession_impl.cpp:246 +#: src/plugins/bearer/qnetworksession_impl.cpp:234 msgid "Unknown session error." msgstr "" -#: src/plugins/bearer/qnetworksession_impl.cpp:248 +#: src/plugins/bearer/qnetworksession_impl.cpp:236 msgid "The session was aborted by the user or system." msgstr "" -#: src/plugins/bearer/qnetworksession_impl.cpp:250 +#: src/plugins/bearer/qnetworksession_impl.cpp:238 msgid "The requested operation is not supported by the system." msgstr "" -#: src/plugins/bearer/qnetworksession_impl.cpp:252 +#: src/plugins/bearer/qnetworksession_impl.cpp:240 msgid "The specified configuration cannot be used." msgstr "" -#: src/plugins/bearer/qnetworksession_impl.cpp:254 +#: src/plugins/bearer/qnetworksession_impl.cpp:242 msgid "Roaming was aborted or is not possible." msgstr "" -#: src/plugins/sqldrivers/psql/qsql_psql.cpp:196 +#: src/plugins/sqldrivers/psql/qsql_psql.cpp:184 msgctxt "QPSQLResult" msgid "Unable to create query" msgstr "" -#: src/plugins/sqldrivers/psql/qsql_psql.cpp:572 +#: src/plugins/sqldrivers/psql/qsql_psql.cpp:560 msgctxt "QPSQLResult" msgid "Unable to prepare statement" msgstr "" -#: src/plugins/sqldrivers/psql/qsql_psql.cpp:836 -#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1798 -#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:1176 +#: src/plugins/sqldrivers/psql/qsql_psql.cpp:824 +#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1786 +#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:1164 msgid "Unable to connect" msgstr "" -#: src/plugins/sqldrivers/psql/qsql_psql.cpp:885 +#: src/plugins/sqldrivers/psql/qsql_psql.cpp:873 msgid "Could not begin transaction" msgstr "" -#: src/plugins/sqldrivers/psql/qsql_psql.cpp:913 +#: src/plugins/sqldrivers/psql/qsql_psql.cpp:901 msgid "Could not commit transaction" msgstr "" -#: src/plugins/sqldrivers/psql/qsql_psql.cpp:930 +#: src/plugins/sqldrivers/psql/qsql_psql.cpp:918 msgid "Could not rollback transaction" msgstr "" -#: src/plugins/sqldrivers/psql/qsql_psql.cpp:1251 +#: src/plugins/sqldrivers/psql/qsql_psql.cpp:1239 msgid "Unable to subscribe" msgstr "" -#: src/plugins/sqldrivers/psql/qsql_psql.cpp:1283 +#: src/plugins/sqldrivers/psql/qsql_psql.cpp:1271 msgid "Unable to unsubscribe" msgstr "" -#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:899 -#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1238 +#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:887 +#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1226 msgctxt "QODBCResult" msgid "" "QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement " "attribute. Please check your ODBC driver configuration" msgstr "" -#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:909 -#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1530 +#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:897 +#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1518 msgctxt "QODBCResult" msgid "Unable to execute statement" msgstr "" -#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:963 +#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:951 msgctxt "QODBCResult" msgid "Unable to fetch" msgstr "" -#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:985 +#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:973 msgctxt "QODBCResult" msgid "Unable to fetch next" msgstr "" -#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1007 +#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:995 msgctxt "QODBCResult" msgid "Unable to fetch first" msgstr "" -#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1026 +#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1014 msgctxt "QODBCResult" msgid "Unable to fetch previous" msgstr "" -#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1057 -#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1634 +#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1045 +#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1622 msgctxt "QODBCResult" msgid "Unable to fetch last" msgstr "" -#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1249 +#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1237 msgctxt "QODBCResult" msgid "Unable to prepare statement" msgstr "" -#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1522 +#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1510 msgctxt "QODBCResult" msgid "Unable to bind variable" msgstr "" -#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1804 +#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1792 msgid "Unable to connect - Driver doesn't support all functionality required" msgstr "" -#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:2077 +#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:2065 msgid "Unable to disable autocommit" msgstr "" -#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:2094 -#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:1330 -#: src/sql/drivers/qsql_sqlite.cpp:645 +#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:2082 +#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:1318 +#: src/sql/drivers/qsql_sqlite.cpp:633 msgid "Unable to commit transaction" msgstr "" -#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:2111 -#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:1347 -#: src/sql/drivers/qsql_sqlite.cpp:660 +#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:2099 +#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:1335 +#: src/sql/drivers/qsql_sqlite.cpp:648 msgid "Unable to rollback transaction" msgstr "" -#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:2126 +#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:2114 msgid "Unable to enable autocommit" msgstr "" -#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:457 -#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:484 +#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:445 +#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:472 msgctxt "QMYSQLResult" msgid "Unable to fetch data" msgstr "" -#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:636 +#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:624 msgctxt "QMYSQLResult" msgid "Unable to execute query" msgstr "" -#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:642 +#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:630 msgctxt "QMYSQLResult" msgid "Unable to store result" msgstr "" -#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:734 +#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:722 msgctxt "QMYSQLResult" msgid "Unable to execute next query" msgstr "" -#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:744 +#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:732 msgctxt "QMYSQLResult" msgid "Unable to store next result" msgstr "" -#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:811 -#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:820 +#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:799 +#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:808 msgctxt "QMYSQLResult" msgid "Unable to prepare statement" msgstr "" -#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:852 +#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:840 msgctxt "QMYSQLResult" msgid "Unable to reset statement" msgstr "" -#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:943 +#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:931 msgctxt "QMYSQLResult" msgid "Unable to bind value" msgstr "" -#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:954 +#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:942 msgctxt "QMYSQLResult" msgid "Unable to execute statement" msgstr "" -#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:968 -#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:989 +#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:956 +#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:977 msgctxt "QMYSQLResult" msgid "Unable to bind outvalues" msgstr "" -#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:977 +#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:965 msgctxt "QMYSQLResult" msgid "Unable to store statement results" msgstr "" -#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:1165 +#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:1153 msgid "Unable to open database '" msgstr "" -#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:1313 -#: src/sql/drivers/qsql_sqlite.cpp:630 +#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:1301 +#: src/sql/drivers/qsql_sqlite.cpp:618 msgid "Unable to begin transaction" msgstr "" -#: src/scripttools/debugging/qscriptedit.cpp:403 -#: src/scripttools/debugging/qscriptdebugger.cpp:1780 +#: src/scripttools/debugging/qscriptedit.cpp:391 +#: src/scripttools/debugging/qscriptdebugger.cpp:1768 msgid "Toggle Breakpoint" msgstr "" -#: src/scripttools/debugging/qscriptedit.cpp:405 +#: src/scripttools/debugging/qscriptedit.cpp:393 msgid "Disable Breakpoint" msgstr "" -#: src/scripttools/debugging/qscriptedit.cpp:406 +#: src/scripttools/debugging/qscriptedit.cpp:394 msgid "Enable Breakpoint" msgstr "" -#: src/scripttools/debugging/qscriptedit.cpp:410 +#: src/scripttools/debugging/qscriptedit.cpp:398 msgid "Breakpoint Condition:" msgstr "" -#: src/scripttools/debugging/qscriptbreakpointswidget.cpp:285 +#: src/scripttools/debugging/qscriptbreakpointswidget.cpp:273 msgid "New" msgstr "" -#: src/scripttools/debugging/qscriptdebuggerstackmodel.cpp:153 +#: src/scripttools/debugging/qscriptdebuggerstackmodel.cpp:141 msgctxt "QScriptDebuggerStackModel" msgid "Level" msgstr "" -#: src/scripttools/debugging/qscriptdebuggerstackmodel.cpp:155 +#: src/scripttools/debugging/qscriptdebuggerstackmodel.cpp:143 msgctxt "QScriptDebuggerStackModel" msgid "Name" msgstr "" -#: src/scripttools/debugging/qscriptdebuggerstackmodel.cpp:157 +#: src/scripttools/debugging/qscriptdebuggerstackmodel.cpp:145 msgctxt "QScriptDebuggerStackModel" msgid "Location" msgstr "" -#: src/scripttools/debugging/qscriptdebuggerlocalsmodel.cpp:888 +#: src/scripttools/debugging/qscriptdebuggerlocalsmodel.cpp:876 msgctxt "QScriptDebuggerLocalsModel" msgid "Name" msgstr "" -#: src/scripttools/debugging/qscriptdebuggerlocalsmodel.cpp:890 +#: src/scripttools/debugging/qscriptdebuggerlocalsmodel.cpp:878 msgctxt "QScriptDebuggerLocalsModel" msgid "Value" msgstr "" -#: src/scripttools/debugging/qscriptbreakpointsmodel.cpp:447 +#: src/scripttools/debugging/qscriptbreakpointsmodel.cpp:435 msgctxt "QScriptBreakpointsModel" msgid "ID" msgstr "" -#: src/scripttools/debugging/qscriptbreakpointsmodel.cpp:449 +#: src/scripttools/debugging/qscriptbreakpointsmodel.cpp:437 msgctxt "QScriptBreakpointsModel" msgid "Location" msgstr "" -#: src/scripttools/debugging/qscriptbreakpointsmodel.cpp:451 +#: src/scripttools/debugging/qscriptbreakpointsmodel.cpp:439 msgctxt "QScriptBreakpointsModel" msgid "Condition" msgstr "" -#: src/scripttools/debugging/qscriptbreakpointsmodel.cpp:453 +#: src/scripttools/debugging/qscriptbreakpointsmodel.cpp:441 msgctxt "QScriptBreakpointsModel" msgid "Ignore-count" msgstr "" -#: src/scripttools/debugging/qscriptbreakpointsmodel.cpp:455 +#: src/scripttools/debugging/qscriptbreakpointsmodel.cpp:443 msgctxt "QScriptBreakpointsModel" msgid "Single-shot" msgstr "" -#: src/scripttools/debugging/qscriptbreakpointsmodel.cpp:457 +#: src/scripttools/debugging/qscriptbreakpointsmodel.cpp:445 msgctxt "QScriptBreakpointsModel" msgid "Hit-count" msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:872 -#: src/scripttools/debugging/qscriptdebugger.cpp:1883 +#: src/scripttools/debugging/qscriptdebugger.cpp:860 +#: src/scripttools/debugging/qscriptdebugger.cpp:1871 msgid "Go to Line" msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:873 +#: src/scripttools/debugging/qscriptdebugger.cpp:861 msgid "Line:" msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:1662 +#: src/scripttools/debugging/qscriptdebugger.cpp:1650 msgid "Interrupt" msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:1664 +#: src/scripttools/debugging/qscriptdebugger.cpp:1652 msgid "Shift+F5" msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:1681 +#: src/scripttools/debugging/qscriptdebugger.cpp:1669 msgid "F5" msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:1696 +#: src/scripttools/debugging/qscriptdebugger.cpp:1684 msgid "Step Into" msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:1698 +#: src/scripttools/debugging/qscriptdebugger.cpp:1686 msgid "F11" msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:1713 +#: src/scripttools/debugging/qscriptdebugger.cpp:1701 msgid "Step Over" msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:1715 +#: src/scripttools/debugging/qscriptdebugger.cpp:1703 msgid "F10" msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:1730 +#: src/scripttools/debugging/qscriptdebugger.cpp:1718 msgid "Step Out" msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:1732 +#: src/scripttools/debugging/qscriptdebugger.cpp:1720 msgid "Shift+F11" msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:1747 +#: src/scripttools/debugging/qscriptdebugger.cpp:1735 msgid "Run to Cursor" msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:1749 +#: src/scripttools/debugging/qscriptdebugger.cpp:1737 msgid "Ctrl+F10" msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:1765 +#: src/scripttools/debugging/qscriptdebugger.cpp:1753 msgid "Run to New Script" msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:1781 +#: src/scripttools/debugging/qscriptdebugger.cpp:1769 msgid "F9" msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:1795 +#: src/scripttools/debugging/qscriptdebugger.cpp:1783 msgid "Clear Debug Output" msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:1808 +#: src/scripttools/debugging/qscriptdebugger.cpp:1796 msgid "Clear Error Log" msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:1821 +#: src/scripttools/debugging/qscriptdebugger.cpp:1809 msgid "Clear Console" msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:1835 +#: src/scripttools/debugging/qscriptdebugger.cpp:1823 msgid "&Find in Script..." msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:1836 +#: src/scripttools/debugging/qscriptdebugger.cpp:1824 msgid "Ctrl+F" msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:1853 +#: src/scripttools/debugging/qscriptdebugger.cpp:1841 msgid "Find &Next" msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:1855 +#: src/scripttools/debugging/qscriptdebugger.cpp:1843 msgid "F3" msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:1868 +#: src/scripttools/debugging/qscriptdebugger.cpp:1856 msgid "Find &Previous" msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:1870 +#: src/scripttools/debugging/qscriptdebugger.cpp:1858 msgid "Shift+F3" msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:1884 +#: src/scripttools/debugging/qscriptdebugger.cpp:1872 msgid "Ctrl+G" msgstr "" -#: src/scripttools/debugging/qscriptdebugger.cpp:1895 +#: src/scripttools/debugging/qscriptdebugger.cpp:1883 msgid "Debug" msgstr "" -#: src/scripttools/debugging/qscriptenginedebugger.cpp:497 +#: src/scripttools/debugging/qscriptenginedebugger.cpp:485 msgid "Loaded Scripts" msgstr "" -#: src/scripttools/debugging/qscriptenginedebugger.cpp:503 +#: src/scripttools/debugging/qscriptenginedebugger.cpp:491 msgid "Breakpoints" msgstr "" -#: src/scripttools/debugging/qscriptenginedebugger.cpp:509 +#: src/scripttools/debugging/qscriptenginedebugger.cpp:497 msgid "Stack" msgstr "" -#: src/scripttools/debugging/qscriptenginedebugger.cpp:515 +#: src/scripttools/debugging/qscriptenginedebugger.cpp:503 msgid "Locals" msgstr "" -#: src/scripttools/debugging/qscriptenginedebugger.cpp:521 +#: src/scripttools/debugging/qscriptenginedebugger.cpp:509 msgid "Console" msgstr "" -#: src/scripttools/debugging/qscriptenginedebugger.cpp:527 +#: src/scripttools/debugging/qscriptenginedebugger.cpp:515 msgid "Debug Output" msgstr "" -#: src/scripttools/debugging/qscriptenginedebugger.cpp:533 +#: src/scripttools/debugging/qscriptenginedebugger.cpp:521 msgid "Error Log" msgstr "" -#: src/scripttools/debugging/qscriptenginedebugger.cpp:545 +#: src/scripttools/debugging/qscriptenginedebugger.cpp:533 msgid "Search" msgstr "" -#: src/scripttools/debugging/qscriptenginedebugger.cpp:552 +#: src/scripttools/debugging/qscriptenginedebugger.cpp:540 msgid "View" msgstr "" -#: src/scripttools/debugging/qscriptenginedebugger.cpp:570 +#: src/scripttools/debugging/qscriptenginedebugger.cpp:558 msgid "Katie Script Debugger" msgstr "" -#: src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp:141 +#: src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp:129 msgid "Previous" msgstr "" -#: src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp:148 +#: src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp:136 msgid "Next" msgstr "" -#: src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp:153 +#: src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp:141 msgid "Case Sensitive" msgstr "" -#: src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp:156 +#: src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp:144 msgid "Whole words" msgstr "" -#: src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp:165 +#: src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp:153 msgid "" " Search wrapped" msgstr "" -#: src/sql/drivers/qsql_sqlite.cpp:223 src/sql/drivers/qsql_sqlite.cpp:299 -#: src/sql/drivers/qsql_sqlite.cpp:308 +#: src/sql/drivers/qsql_sqlite.cpp:211 src/sql/drivers/qsql_sqlite.cpp:287 +#: src/sql/drivers/qsql_sqlite.cpp:296 msgctxt "QSQLiteResult" msgid "Unable to fetch row" msgstr "" -#: src/sql/drivers/qsql_sqlite.cpp:224 +#: src/sql/drivers/qsql_sqlite.cpp:212 msgctxt "QSQLiteResult" msgid "No query" msgstr "" -#: src/sql/drivers/qsql_sqlite.cpp:371 +#: src/sql/drivers/qsql_sqlite.cpp:359 msgctxt "QSQLiteResult" msgid "Unable to execute statement" msgstr "" -#: src/sql/drivers/qsql_sqlite.cpp:376 +#: src/sql/drivers/qsql_sqlite.cpp:364 msgctxt "QSQLiteResult" msgid "Unable to execute multiple statements at a time" msgstr "" -#: src/sql/drivers/qsql_sqlite.cpp:396 +#: src/sql/drivers/qsql_sqlite.cpp:384 msgctxt "QSQLiteResult" msgid "Unable to reset statement" msgstr "" -#: src/sql/drivers/qsql_sqlite.cpp:448 +#: src/sql/drivers/qsql_sqlite.cpp:436 msgctxt "QSQLiteResult" msgid "Unable to bind parameters" msgstr "" -#: src/sql/drivers/qsql_sqlite.cpp:455 +#: src/sql/drivers/qsql_sqlite.cpp:443 msgctxt "QSQLiteResult" msgid "Parameter count mismatch" msgstr "" -#: src/sql/drivers/qsql_sqlite.cpp:589 +#: src/sql/drivers/qsql_sqlite.cpp:577 msgid "Error opening database" msgstr "" -#: src/sql/drivers/qsql_sqlite.cpp:611 +#: src/sql/drivers/qsql_sqlite.cpp:599 msgid "Error closing database" msgstr "" -#: src/uitools/formbuilderextra.cpp:361 +#: src/uitools/formbuilderextra.cpp:349 msgctxt "FormBuilder" msgid "Invalid stretch value for '%1': '%2'" msgstr "" -#: src/uitools/formbuilderextra.cpp:423 +#: src/uitools/formbuilderextra.cpp:411 msgctxt "FormBuilder" msgid "Invalid minimum size for '%1': '%2'" msgstr "" -#: src/uitools/properties.cpp:98 +#: src/uitools/properties.cpp:86 msgctxt "QFormBuilder" msgid "The set-type property %1 could not be read." msgstr "" -#: src/uitools/properties.cpp:121 +#: src/uitools/properties.cpp:109 msgctxt "QFormBuilder" msgid "The enumeration-type property %1 could not be read." msgstr "" -#: src/uitools/properties.cpp:311 +#: src/uitools/properties.cpp:299 msgctxt "QFormBuilder" msgid "Reading properties of the type %1 is not supported yet." msgstr "" -#: src/uitools/properties.cpp:577 +#: src/uitools/properties.cpp:565 msgctxt "QFormBuilder" msgid "The property %1 could not be written. The type %2 is not supported yet." msgstr "" -#: src/uitools/formbuilder.cpp:162 +#: src/uitools/formbuilder.cpp:150 msgctxt "QFormBuilder" msgid "An empty class name was passed on to %1 (object name: '%2')." msgstr "" -#: src/uitools/formbuilder.cpp:216 +#: src/uitools/formbuilder.cpp:204 msgctxt "QFormBuilder" msgid "" "QFormBuilder was unable to create a custom widget of the class '%1'; " "defaulting to base class '%2'." msgstr "" -#: src/uitools/formbuilder.cpp:222 +#: src/uitools/formbuilder.cpp:210 msgctxt "QFormBuilder" msgid "QFormBuilder was unable to create a widget of the class '%1'." msgstr "" -#: src/uitools/formbuilder.cpp:263 +#: src/uitools/formbuilder.cpp:251 msgctxt "QFormBuilder" msgid "The layout type `%1' is not supported." msgstr "" -#: src/uitools/formscriptrunner.cpp:80 +#: src/uitools/formscriptrunner.cpp:68 msgid "Exception at line %1: %2" msgstr "" -#: src/uitools/formscriptrunner.cpp:166 +#: src/uitools/formscriptrunner.cpp:154 msgid "" "An error occurred while running the script for %1: %2\n" "Script: %3" msgstr "" -#: src/uitools/abstractformbuilder.cpp:195 +#: src/uitools/abstractformbuilder.cpp:183 msgctxt "QAbstractFormBuilder" msgid "Unexpected element <%1>" msgstr "" -#: src/uitools/abstractformbuilder.cpp:200 +#: src/uitools/abstractformbuilder.cpp:188 msgctxt "QAbstractFormBuilder" msgid "" "An error has occurred while reading the UI file at line %1, column %2: %3" msgstr "" -#: src/uitools/abstractformbuilder.cpp:206 +#: src/uitools/abstractformbuilder.cpp:194 msgctxt "QAbstractFormBuilder" msgid "Invalid UI file: The root element is missing." msgstr "" -#: src/uitools/abstractformbuilder.cpp:310 +#: src/uitools/abstractformbuilder.cpp:298 msgctxt "QAbstractFormBuilder" msgid "The creation of a widget of the class '%1' failed." msgstr "" -#: src/uitools/abstractformbuilder.cpp:606 +#: src/uitools/abstractformbuilder.cpp:594 msgctxt "QAbstractFormBuilder" msgid "Attempt to add child that is not of class QWizardPage to QWizard." msgstr "" -#: src/uitools/abstractformbuilder.cpp:668 +#: src/uitools/abstractformbuilder.cpp:656 msgctxt "QAbstractFormBuilder" msgid "" "Attempt to add a layout to a widget '%1' (%2) which already has a layout of " @@ -4809,298 +4764,298 @@ msgid "" "This indicates an inconsistency in the ui-file." msgstr "" -#: src/uitools/abstractformbuilder.cpp:878 +#: src/uitools/abstractformbuilder.cpp:866 msgctxt "QAbstractFormBuilder" msgid "Empty widget item in %1 '%2'." msgstr "" -#: src/uitools/abstractformbuilder.cpp:1624 +#: src/uitools/abstractformbuilder.cpp:1612 msgctxt "QAbstractFormBuilder" msgid "Flags property are not supported yet." msgstr "" -#: src/uitools/abstractformbuilder.cpp:1705 +#: src/uitools/abstractformbuilder.cpp:1693 msgctxt "QAbstractFormBuilder" msgid "While applying tab stops: The widget '%1' could not be found." msgstr "" -#: src/uitools/abstractformbuilder.cpp:2451 +#: src/uitools/abstractformbuilder.cpp:2439 msgctxt "QAbstractFormBuilder" msgid "Invalid QButtonGroup reference '%1' referenced by '%2'." msgstr "" -#: src/uitools/abstractformbuilder.cpp:2962 +#: src/uitools/abstractformbuilder.cpp:2950 msgctxt "QAbstractFormBuilder" msgid "This version of the uitools library is linked without script support." msgstr "" -#: src/uitools/properties_p.h:121 +#: src/uitools/properties_p.h:109 msgctxt "QFormBuilder" msgid "" "The enumeration-value '%1' is invalid. The default value '%2' will be used " "instead." msgstr "" -#: src/uitools/properties_p.h:135 +#: src/uitools/properties_p.h:123 msgctxt "QFormBuilder" msgid "The flag-value '%1' is invalid. Zero will be used instead." msgstr "" -#: src/xml/sax/qxml.cpp:48 +#: src/xml/sax/qxml.cpp:36 msgctxt "QXml" msgid "no error occurred" msgstr "" -#: src/xml/sax/qxml.cpp:49 +#: src/xml/sax/qxml.cpp:37 msgctxt "QXml" msgid "error triggered by consumer" msgstr "" -#: src/xml/sax/qxml.cpp:50 +#: src/xml/sax/qxml.cpp:38 msgctxt "QXml" msgid "unexpected end of file" msgstr "" -#: src/xml/sax/qxml.cpp:51 +#: src/xml/sax/qxml.cpp:39 msgctxt "QXml" msgid "more than one document type definition" msgstr "" -#: src/xml/sax/qxml.cpp:52 +#: src/xml/sax/qxml.cpp:40 msgctxt "QXml" msgid "error occurred while parsing element" msgstr "" -#: src/xml/sax/qxml.cpp:53 +#: src/xml/sax/qxml.cpp:41 msgctxt "QXml" msgid "tag mismatch" msgstr "" -#: src/xml/sax/qxml.cpp:54 +#: src/xml/sax/qxml.cpp:42 msgctxt "QXml" msgid "error occurred while parsing content" msgstr "" -#: src/xml/sax/qxml.cpp:55 +#: src/xml/sax/qxml.cpp:43 msgctxt "QXml" msgid "unexpected character" msgstr "" -#: src/xml/sax/qxml.cpp:56 +#: src/xml/sax/qxml.cpp:44 msgctxt "QXml" msgid "invalid name for processing instruction" msgstr "" -#: src/xml/sax/qxml.cpp:57 +#: src/xml/sax/qxml.cpp:45 msgctxt "QXml" msgid "version expected while reading the XML declaration" msgstr "" -#: src/xml/sax/qxml.cpp:58 +#: src/xml/sax/qxml.cpp:46 msgctxt "QXml" msgid "wrong value for standalone declaration" msgstr "" -#: src/xml/sax/qxml.cpp:59 +#: src/xml/sax/qxml.cpp:47 msgctxt "QXml" msgid "" "encoding declaration or standalone declaration expected while reading the " "XML declaration" msgstr "" -#: src/xml/sax/qxml.cpp:60 +#: src/xml/sax/qxml.cpp:48 msgctxt "QXml" msgid "standalone declaration expected while reading the XML declaration" msgstr "" -#: src/xml/sax/qxml.cpp:61 +#: src/xml/sax/qxml.cpp:49 msgctxt "QXml" msgid "error occurred while parsing document type definition" msgstr "" -#: src/xml/sax/qxml.cpp:62 +#: src/xml/sax/qxml.cpp:50 msgctxt "QXml" msgid "letter is expected" msgstr "" -#: src/xml/sax/qxml.cpp:63 +#: src/xml/sax/qxml.cpp:51 msgctxt "QXml" msgid "error occurred while parsing comment" msgstr "" -#: src/xml/sax/qxml.cpp:64 +#: src/xml/sax/qxml.cpp:52 msgctxt "QXml" msgid "error occurred while parsing reference" msgstr "" -#: src/xml/sax/qxml.cpp:65 +#: src/xml/sax/qxml.cpp:53 msgctxt "QXml" msgid "internal general entity reference not allowed in DTD" msgstr "" -#: src/xml/sax/qxml.cpp:66 +#: src/xml/sax/qxml.cpp:54 msgctxt "QXml" msgid "external parsed general entity reference not allowed in attribute value" msgstr "" -#: src/xml/sax/qxml.cpp:67 +#: src/xml/sax/qxml.cpp:55 msgctxt "QXml" msgid "external parsed general entity reference not allowed in DTD" msgstr "" -#: src/xml/sax/qxml.cpp:68 +#: src/xml/sax/qxml.cpp:56 msgctxt "QXml" msgid "unparsed entity reference in wrong context" msgstr "" -#: src/xml/sax/qxml.cpp:69 +#: src/xml/sax/qxml.cpp:57 msgctxt "QXml" msgid "recursive entities" msgstr "" -#: src/xml/sax/qxml.cpp:70 +#: src/xml/sax/qxml.cpp:58 msgctxt "QXml" msgid "error in the text declaration of an external entity" msgstr "" -#: src/xml/kernel/qxmlstream_p.h:755 +#: src/xml/kernel/qxmlstream_p.h:743 msgid "Recursive entity detected." msgstr "" -#: src/xml/kernel/qxmlstream_p.h:1056 src/xml/kernel/qxmlstream.cpp:1393 +#: src/xml/kernel/qxmlstream_p.h:1044 src/xml/kernel/qxmlstream.cpp:1381 msgid "Encountered incorrectly encoded content." msgstr "" -#: src/xml/kernel/qxmlstream_p.h:1268 +#: src/xml/kernel/qxmlstream_p.h:1256 msgid "Start tag expected." msgstr "" -#: src/xml/kernel/qxmlstream_p.h:1459 +#: src/xml/kernel/qxmlstream_p.h:1447 msgid "NDATA in parameter entity declaration." msgstr "" -#: src/xml/kernel/qxmlstream_p.h:1490 +#: src/xml/kernel/qxmlstream_p.h:1478 msgid "XML declaration not at start of document." msgstr "" -#: src/xml/kernel/qxmlstream_p.h:1493 +#: src/xml/kernel/qxmlstream_p.h:1481 msgid "%1 is an invalid processing instruction name." msgstr "" -#: src/xml/kernel/qxmlstream_p.h:1504 +#: src/xml/kernel/qxmlstream_p.h:1492 msgid "Invalid processing instruction name." msgstr "" -#: src/xml/kernel/qxmlstream_p.h:1618 +#: src/xml/kernel/qxmlstream_p.h:1606 msgid "%1 is an invalid PUBLIC identifier." msgstr "" -#: src/xml/kernel/qxmlstream_p.h:1668 src/xml/kernel/qxmlstream_p.h:1721 -#: src/xml/kernel/qxmlstream.cpp:1456 src/xml/kernel/qxmlstream.cpp:1468 +#: src/xml/kernel/qxmlstream_p.h:1656 src/xml/kernel/qxmlstream_p.h:1709 +#: src/xml/kernel/qxmlstream.cpp:1444 src/xml/kernel/qxmlstream.cpp:1456 msgid "Illegal namespace declaration." msgstr "" -#: src/xml/kernel/qxmlstream_p.h:1736 +#: src/xml/kernel/qxmlstream_p.h:1724 msgid "Invalid XML name." msgstr "" -#: src/xml/kernel/qxmlstream_p.h:1747 src/xml/kernel/qxmlstream.cpp:583 +#: src/xml/kernel/qxmlstream_p.h:1735 src/xml/kernel/qxmlstream.cpp:571 msgid "Extra content at end of document." msgstr "" -#: src/xml/kernel/qxmlstream_p.h:1759 +#: src/xml/kernel/qxmlstream_p.h:1747 msgid "Opening and ending tag mismatch." msgstr "" -#: src/xml/kernel/qxmlstream_p.h:1764 src/xml/kernel/qxmlstream_p.h:1825 -#: src/xml/kernel/qxmlstream_p.h:1865 +#: src/xml/kernel/qxmlstream_p.h:1752 src/xml/kernel/qxmlstream_p.h:1813 +#: src/xml/kernel/qxmlstream_p.h:1853 msgid "Entity '%1' not declared." msgstr "" -#: src/xml/kernel/qxmlstream_p.h:1777 +#: src/xml/kernel/qxmlstream_p.h:1765 msgid "Reference to unparsed entity '%1'." msgstr "" -#: src/xml/kernel/qxmlstream_p.h:1839 +#: src/xml/kernel/qxmlstream_p.h:1827 msgid "Reference to external entity '%1' in attribute value." msgstr "" -#: src/xml/kernel/qxmlstream_p.h:1879 +#: src/xml/kernel/qxmlstream_p.h:1867 msgid "Invalid character reference." msgstr "" -#: src/xml/kernel/qxmlstream.cpp:816 +#: src/xml/kernel/qxmlstream.cpp:804 msgid "Invalid entity value." msgstr "" -#: src/xml/kernel/qxmlstream.cpp:924 +#: src/xml/kernel/qxmlstream.cpp:912 msgid "Invalid XML character." msgstr "" -#: src/xml/kernel/qxmlstream.cpp:1183 +#: src/xml/kernel/qxmlstream.cpp:1171 msgid "Sequence ']]>' not allowed in content." msgstr "" -#: src/xml/kernel/qxmlstream.cpp:1423 +#: src/xml/kernel/qxmlstream.cpp:1411 msgid "Namespace prefix '%1' not declared" msgstr "" -#: src/xml/kernel/qxmlstream.cpp:1500 +#: src/xml/kernel/qxmlstream.cpp:1488 msgid "Attribute redefined." msgstr "" -#: src/xml/kernel/qxmlstream.cpp:1614 +#: src/xml/kernel/qxmlstream.cpp:1602 msgid "Unexpected character '%1' in public id literal." msgstr "" -#: src/xml/kernel/qxmlstream.cpp:1642 +#: src/xml/kernel/qxmlstream.cpp:1630 msgid "Invalid XML version string." msgstr "" -#: src/xml/kernel/qxmlstream.cpp:1644 +#: src/xml/kernel/qxmlstream.cpp:1632 msgid "Unsupported XML version." msgstr "" -#: src/xml/kernel/qxmlstream.cpp:1665 +#: src/xml/kernel/qxmlstream.cpp:1653 msgid "The standalone pseudo attribute must appear after the encoding." msgstr "" -#: src/xml/kernel/qxmlstream.cpp:1667 +#: src/xml/kernel/qxmlstream.cpp:1655 msgid "%1 is an invalid encoding name." msgstr "" -#: src/xml/kernel/qxmlstream.cpp:1674 +#: src/xml/kernel/qxmlstream.cpp:1662 msgid "Encoding %1 is unsupported" msgstr "" -#: src/xml/kernel/qxmlstream.cpp:1690 +#: src/xml/kernel/qxmlstream.cpp:1678 msgid "Standalone accepts only yes or no." msgstr "" -#: src/xml/kernel/qxmlstream.cpp:1692 +#: src/xml/kernel/qxmlstream.cpp:1680 msgid "Invalid attribute in XML declaration." msgstr "" -#: src/xml/kernel/qxmlstream.cpp:1708 +#: src/xml/kernel/qxmlstream.cpp:1696 msgid "Premature end of document." msgstr "" -#: src/xml/kernel/qxmlstream.cpp:1710 +#: src/xml/kernel/qxmlstream.cpp:1698 msgid "Invalid document." msgstr "" -#: src/xml/kernel/qxmlstream.cpp:1750 +#: src/xml/kernel/qxmlstream.cpp:1738 msgid "Expected " msgstr "" -#: src/xml/kernel/qxmlstream.cpp:1761 +#: src/xml/kernel/qxmlstream.cpp:1749 msgid ", but got '" msgstr "" -#: src/xml/kernel/qxmlstream.cpp:1765 +#: src/xml/kernel/qxmlstream.cpp:1753 msgid "Unexpected '" msgstr "" -#: src/xml/kernel/qxmlstream.cpp:1990 +#: src/xml/kernel/qxmlstream.cpp:1978 msgid "Expected character data." msgstr "" diff --git a/translations/qt_tools.pot b/translations/qt_tools.pot index ace74ebd3..76b077c5b 100644 --- a/translations/qt_tools.pot +++ b/translations/qt_tools.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-05 06:17+0200\n" +"POT-Creation-Date: 2021-02-11 01:35+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,11 +17,11 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/tools/qtconfig/previewframe.cpp:75 +#: src/tools/qtconfig/previewframe.cpp:63 msgid "Desktop settings will only take effect after an application restart." msgstr "" -#: src/tools/qtconfig/mainwindow.cpp:68 +#: src/tools/qtconfig/mainwindow.cpp:56 msgctxt "MainWindow" msgid "" "

Appearance


Use this tab to " @@ -36,7 +36,7 @@ msgid "" "Window shows what the selected Style and colors look like." msgstr "" -#: src/tools/qtconfig/mainwindow.cpp:84 +#: src/tools/qtconfig/mainwindow.cpp:72 msgctxt "MainWindow" msgid "" "

Fonts


Use this tab to select the " @@ -54,7 +54,7 @@ msgid "" "text)." msgstr "" -#: src/tools/qtconfig/mainwindow.cpp:103 +#: src/tools/qtconfig/mainwindow.cpp:91 msgctxt "MainWindow" msgid "" "

Interface


Use this tab to customize " @@ -69,7 +69,7 @@ msgid "" "disable the Global Strut feature." msgstr "" -#: src/tools/qtconfig/mainwindow.cpp:118 +#: src/tools/qtconfig/mainwindow.cpp:106 msgctxt "MainWindow" msgid "" "

Printer


Use this tab to configure " @@ -82,755 +82,755 @@ msgid "" "the X server font path is used." msgstr "" -#: src/tools/qtconfig/mainwindow.cpp:201 +#: src/tools/qtconfig/mainwindow.cpp:189 msgid "Desktop Settings (Default)" msgstr "" -#: src/tools/qtconfig/mainwindow.cpp:207 +#: src/tools/qtconfig/mainwindow.cpp:195 msgid "Choose style and palette based on your desktop settings." msgstr "" -#: src/tools/qtconfig/mainwindow.cpp:222 +#: src/tools/qtconfig/mainwindow.cpp:210 msgid "Unknown" msgstr "" -#: src/tools/qtconfig/mainwindow.cpp:368 +#: src/tools/qtconfig/mainwindow.cpp:356 msgid "No changes to be saved." msgstr "" -#: src/tools/qtconfig/mainwindow.cpp:372 +#: src/tools/qtconfig/mainwindow.cpp:360 msgid "Saving changes..." msgstr "" -#: src/tools/qtconfig/mainwindow.cpp:457 +#: src/tools/qtconfig/mainwindow.cpp:445 msgid "Saved changes." msgstr "" -#: src/tools/qtconfig/mainwindow.cpp:723 +#: src/tools/qtconfig/mainwindow.cpp:711 msgid "Select a Directory" msgstr "" -#: src/tools/qtconfig/mainwindow.cpp:738 +#: src/tools/qtconfig/mainwindow.cpp:726 msgid "" "

%1


Version %2

Copyright (C) 2015 The Qt Company Ltd." "

Copyright (C) 2016 Ivailo Monev" msgstr "" -#: src/tools/qtconfig/mainwindow.cpp:743 src/tools/qtconfig/mainwindow.cpp:744 -#: src/tools/qtconfig/mainwindow.cpp:751 +#: src/tools/qtconfig/mainwindow.cpp:731 src/tools/qtconfig/mainwindow.cpp:732 +#: src/tools/qtconfig/mainwindow.cpp:739 msgid "Katie Configuration" msgstr "" -#: src/tools/qtconfig/mainwindow.cpp:770 +#: src/tools/qtconfig/mainwindow.cpp:758 msgid "Save Changes" msgstr "" -#: src/tools/qtconfig/mainwindow.cpp:771 +#: src/tools/qtconfig/mainwindow.cpp:759 msgid "Save changes to settings?" msgstr "" -#: src/tools/qtconfig/paletteeditoradvanced.cpp:46 -#: src/tools/qtconfig/paletteeditoradvanced.cpp:52 +#: src/tools/qtconfig/paletteeditoradvanced.cpp:34 +#: src/tools/qtconfig/paletteeditoradvanced.cpp:40 msgid "Choose a color" msgstr "" -#: src/tools/qtconfig/paletteeditoradvanced.cpp:47 +#: src/tools/qtconfig/paletteeditoradvanced.cpp:35 msgid "Choose a color for the selected central color role." msgstr "" -#: src/tools/qtconfig/paletteeditoradvanced.cpp:53 +#: src/tools/qtconfig/paletteeditoradvanced.cpp:41 msgid "Choose a color for the selected effect color role." msgstr "" -#: src/tools/qdbusviewer/qdbusviewermain.cpp:63 +#: src/tools/qdbusviewer/qdbusviewermain.cpp:51 msgctxt "QtDBusViewer" msgid "Katie D-Bus Viewer" msgstr "" -#: src/tools/qdbusviewer/qdbusviewermain.cpp:70 +#: src/tools/qdbusviewer/qdbusviewermain.cpp:58 msgid "Session Bus" msgstr "" -#: src/tools/qdbusviewer/qdbusviewermain.cpp:71 +#: src/tools/qdbusviewer/qdbusviewermain.cpp:59 msgid "System Bus" msgstr "" -#: src/tools/qdbusviewer/qdbusviewermain.cpp:73 -#: src/tools/designer/qdesigner_workbench.cpp:188 +#: src/tools/qdbusviewer/qdbusviewermain.cpp:61 +#: src/tools/designer/qdesigner_workbench.cpp:176 msgid "&File" msgstr "" -#: src/tools/qdbusviewer/qdbusviewermain.cpp:74 -#: src/tools/designer/qdesigner_actions.cpp:177 +#: src/tools/qdbusviewer/qdbusviewermain.cpp:62 +#: src/tools/designer/qdesigner_actions.cpp:165 msgid "&Quit" msgstr "" -#: src/tools/qdbusviewer/qdbusviewermain.cpp:77 -#: src/tools/designer/qdesigner_workbench.cpp:205 +#: src/tools/qdbusviewer/qdbusviewermain.cpp:65 +#: src/tools/designer/qdesigner_workbench.cpp:193 msgid "&Help" msgstr "" -#: src/tools/qdbusviewer/qdbusviewermain.cpp:78 +#: src/tools/qdbusviewer/qdbusviewermain.cpp:66 msgid "&About" msgstr "" -#: src/tools/qdbusviewer/qdbusviewermain.cpp:82 +#: src/tools/qdbusviewer/qdbusviewermain.cpp:70 msgid "About &Katie" msgstr "" -#: src/tools/qdbusviewer/qdbusviewer.cpp:75 +#: src/tools/qdbusviewer/qdbusviewer.cpp:63 msgid "Search..." msgstr "" -#: src/tools/qdbusviewer/qdbusviewer.cpp:86 +#: src/tools/qdbusviewer/qdbusviewer.cpp:74 msgid "&Refresh" msgstr "" -#: src/tools/qdbusviewer/qdbusviewer.cpp:202 +#: src/tools/qdbusviewer/qdbusviewer.cpp:190 msgid "Arguments" msgstr "" -#: src/tools/qdbusviewer/qdbusviewer.cpp:203 +#: src/tools/qdbusviewer/qdbusviewer.cpp:191 msgid "Please enter the value of the property %1 (type %2)" msgstr "" -#: src/tools/qdbusviewer/qdbusviewer.cpp:211 +#: src/tools/qdbusviewer/qdbusviewer.cpp:199 msgid "Unable to marshall" msgstr "" -#: src/tools/qdbusviewer/qdbusviewer.cpp:212 +#: src/tools/qdbusviewer/qdbusviewer.cpp:200 msgid "Value conversion failed, unable to set property" msgstr "" -#: src/tools/qdbusviewer/qdbusviewer.cpp:249 +#: src/tools/qdbusviewer/qdbusviewer.cpp:237 msgid "Unable to find method" msgstr "" -#: src/tools/qdbusviewer/qdbusviewer.cpp:250 +#: src/tools/qdbusviewer/qdbusviewer.cpp:238 msgid "Unable to find method %1 on path %2 in interface %3" msgstr "" -#: src/tools/qdbusviewer/qdbusviewer.cpp:272 +#: src/tools/qdbusviewer/qdbusviewer.cpp:260 msgid "Please enter parameters for the method \"%1\"" msgstr "" -#: src/tools/qdbusviewer/qdbusviewer.cpp:322 +#: src/tools/qdbusviewer/qdbusviewer.cpp:310 msgid "&Connect" msgstr "" -#: src/tools/qdbusviewer/qdbusviewer.cpp:327 +#: src/tools/qdbusviewer/qdbusviewer.cpp:315 msgid "&Call" msgstr "" -#: src/tools/qdbusviewer/qdbusviewer.cpp:332 +#: src/tools/qdbusviewer/qdbusviewer.cpp:320 msgid "&Set value" msgstr "" -#: src/tools/qdbusviewer/qdbusviewer.cpp:334 +#: src/tools/qdbusviewer/qdbusviewer.cpp:322 msgid "&Get value" msgstr "" -#: src/tools/qdbusviewer/qdbusviewer.cpp:367 +#: src/tools/qdbusviewer/qdbusviewer.cpp:355 msgid "Unable to connect to service %1, path %2, interface %3, signal %4" msgstr "" -#: src/tools/qdbusviewer/qdbusviewer.cpp:489 -#: src/tools/qdbusviewer/qdbusviewer.cpp:490 +#: src/tools/qdbusviewer/qdbusviewer.cpp:477 +#: src/tools/qdbusviewer/qdbusviewer.cpp:478 msgid "D-Bus Viewer" msgstr "" -#: src/tools/designer/versiondialog.cpp:158 +#: src/tools/designer/versiondialog.cpp:146 msgid "

%1



Version %2" msgstr "" -#: src/tools/designer/versiondialog.cpp:159 -#: src/tools/designer/mainwindow.cpp:127 +#: src/tools/designer/versiondialog.cpp:147 +#: src/tools/designer/mainwindow.cpp:115 msgid "Katie Designer" msgstr "" -#: src/tools/designer/versiondialog.cpp:160 +#: src/tools/designer/versiondialog.cpp:148 msgid "" "
Katie Designer is a graphical user interface designer for Qt " "applications.
" msgstr "" -#: src/tools/designer/versiondialog.cpp:162 +#: src/tools/designer/versiondialog.cpp:150 msgid "" "%1
Copyright (C) 2015 The Qt Company Ltd.
Copyright (C) 2016 Ivailo " "Monev" msgstr "" -#: src/tools/designer/appfontdialog.cpp:143 +#: src/tools/designer/appfontdialog.cpp:131 msgctxt "AppFontManager" msgid "'%1' is not a file." msgstr "" -#: src/tools/designer/appfontdialog.cpp:147 +#: src/tools/designer/appfontdialog.cpp:135 msgctxt "AppFontManager" msgid "The font file '%1' does not have read permissions." msgstr "" -#: src/tools/designer/appfontdialog.cpp:155 +#: src/tools/designer/appfontdialog.cpp:143 msgctxt "AppFontManager" msgid "The font file '%1' is already loaded." msgstr "" -#: src/tools/designer/appfontdialog.cpp:162 +#: src/tools/designer/appfontdialog.cpp:150 msgctxt "AppFontManager" msgid "The font file '%1' could not be loaded." msgstr "" -#: src/tools/designer/appfontdialog.cpp:179 +#: src/tools/designer/appfontdialog.cpp:167 msgctxt "AppFontManager" msgid "'%1' is not a valid font id." msgstr "" -#: src/tools/designer/appfontdialog.cpp:190 +#: src/tools/designer/appfontdialog.cpp:178 msgctxt "AppFontManager" msgid "There is no loaded font matching the id '%1'." msgstr "" -#: src/tools/designer/appfontdialog.cpp:205 +#: src/tools/designer/appfontdialog.cpp:193 msgctxt "AppFontManager" msgid "The font '%1' (%2) could not be unloaded." msgstr "" -#: src/tools/designer/appfontdialog.cpp:231 +#: src/tools/designer/appfontdialog.cpp:219 msgid "Fonts" msgstr "" -#: src/tools/designer/appfontdialog.cpp:289 +#: src/tools/designer/appfontdialog.cpp:277 msgid "Add font files" msgstr "" -#: src/tools/designer/appfontdialog.cpp:294 +#: src/tools/designer/appfontdialog.cpp:282 msgid "Remove current font file" msgstr "" -#: src/tools/designer/appfontdialog.cpp:298 +#: src/tools/designer/appfontdialog.cpp:286 msgid "Remove all font files" msgstr "" -#: src/tools/designer/appfontdialog.cpp:317 +#: src/tools/designer/appfontdialog.cpp:305 msgid "Add Font Files" msgstr "" -#: src/tools/designer/appfontdialog.cpp:318 +#: src/tools/designer/appfontdialog.cpp:306 msgid "Font files (*.ttf)" msgstr "" -#: src/tools/designer/appfontdialog.cpp:331 +#: src/tools/designer/appfontdialog.cpp:319 msgid "Error Adding Fonts" msgstr "" -#: src/tools/designer/appfontdialog.cpp:355 +#: src/tools/designer/appfontdialog.cpp:343 msgid "Error Removing Fonts" msgstr "" -#: src/tools/designer/appfontdialog.cpp:377 +#: src/tools/designer/appfontdialog.cpp:365 msgid "Remove Fonts" msgstr "" -#: src/tools/designer/appfontdialog.cpp:377 +#: src/tools/designer/appfontdialog.cpp:365 msgid "Would you like to remove all fonts?" msgstr "" -#: src/tools/designer/appfontdialog.cpp:410 +#: src/tools/designer/appfontdialog.cpp:398 msgid "Additional Fonts" msgstr "" -#: src/tools/designer/qdesigner_formwindow.cpp:209 +#: src/tools/designer/qdesigner_formwindow.cpp:197 msgid "%1 - %2[*]" msgstr "" -#: src/tools/designer/qdesigner_formwindow.cpp:219 -#: src/tools/designer/qdesigner_actions.cpp:824 -#: src/tools/designer/qdesigner_actions.cpp:864 +#: src/tools/designer/qdesigner_formwindow.cpp:207 +#: src/tools/designer/qdesigner_actions.cpp:812 +#: src/tools/designer/qdesigner_actions.cpp:852 msgid "Save Form?" msgstr "" -#: src/tools/designer/qdesigner_formwindow.cpp:220 +#: src/tools/designer/qdesigner_formwindow.cpp:208 msgid "Do you want to save the changes to this document before closing?" msgstr "" -#: src/tools/designer/qdesigner_formwindow.cpp:222 +#: src/tools/designer/qdesigner_formwindow.cpp:210 msgid "If you don't save, your changes will be lost." msgstr "" -#: src/tools/designer/newform.cpp:65 +#: src/tools/designer/newform.cpp:53 msgid "Show this Dialog on Startup" msgstr "" -#: src/tools/designer/newform.cpp:66 +#: src/tools/designer/newform.cpp:54 msgctxt "NewForm" msgid "C&reate" msgstr "" -#: src/tools/designer/newform.cpp:67 +#: src/tools/designer/newform.cpp:55 msgctxt "NewForm" msgid "Recent" msgstr "" -#: src/tools/designer/newform.cpp:70 +#: src/tools/designer/newform.cpp:58 msgid "New Form" msgstr "" -#: src/tools/designer/newform.cpp:99 +#: src/tools/designer/newform.cpp:87 msgctxt "NewForm" msgid "&Close" msgstr "" -#: src/tools/designer/newform.cpp:102 +#: src/tools/designer/newform.cpp:90 msgctxt "NewForm" msgid "&Open..." msgstr "" -#: src/tools/designer/newform.cpp:106 -#: src/tools/designer/qdesigner_actions.cpp:481 +#: src/tools/designer/newform.cpp:94 +#: src/tools/designer/qdesigner_actions.cpp:469 msgid "&Recent Forms" msgstr "" -#: src/tools/designer/newform.cpp:170 -#: src/tools/designer/qdesigner_actions.cpp:742 +#: src/tools/designer/newform.cpp:158 +#: src/tools/designer/qdesigner_actions.cpp:730 msgid "Read error" msgstr "" -#: src/tools/designer/newform.cpp:193 +#: src/tools/designer/newform.cpp:181 msgid "A temporary form file could not be created in %1." msgstr "" -#: src/tools/designer/newform.cpp:199 +#: src/tools/designer/newform.cpp:187 msgid "The temporary form file %1 could not be written." msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:117 +#: src/tools/designer/qdesigner_actions.cpp:105 msgid "Saved %1." msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:143 +#: src/tools/designer/qdesigner_actions.cpp:131 msgid "" "%1 already exists.\n" "Do you want to replace it?" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:167 +#: src/tools/designer/qdesigner_actions.cpp:155 msgid "Edit Widgets" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:168 +#: src/tools/designer/qdesigner_actions.cpp:156 msgid "&New..." msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:169 +#: src/tools/designer/qdesigner_actions.cpp:157 msgid "&Open..." msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:170 +#: src/tools/designer/qdesigner_actions.cpp:158 msgid "&Save" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:171 +#: src/tools/designer/qdesigner_actions.cpp:159 msgid "Save &As..." msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:172 +#: src/tools/designer/qdesigner_actions.cpp:160 msgid "Save A&ll" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:173 +#: src/tools/designer/qdesigner_actions.cpp:161 msgid "Save As &Template..." msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:174 -#: src/tools/designer/qdesigner_actions.cpp:1023 +#: src/tools/designer/qdesigner_actions.cpp:162 +#: src/tools/designer/qdesigner_actions.cpp:1011 msgid "&Close" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:175 +#: src/tools/designer/qdesigner_actions.cpp:163 msgid "Save &Image..." msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:176 +#: src/tools/designer/qdesigner_actions.cpp:164 msgid "&Print..." msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:179 +#: src/tools/designer/qdesigner_actions.cpp:167 msgid "View &Code..." msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:180 +#: src/tools/designer/qdesigner_actions.cpp:168 msgid "&Minimize" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:182 +#: src/tools/designer/qdesigner_actions.cpp:170 msgid "Bring All to Front" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:184 +#: src/tools/designer/qdesigner_actions.cpp:172 msgid "Preferences..." msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:185 +#: src/tools/designer/qdesigner_actions.cpp:173 msgid "Additional Fonts..." msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:257 +#: src/tools/designer/qdesigner_actions.cpp:245 msgid "CTRL+SHIFT+S" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:378 +#: src/tools/designer/qdesigner_actions.cpp:366 msgid "CTRL+R" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:396 +#: src/tools/designer/qdesigner_actions.cpp:384 msgid "CTRL+M" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:427 +#: src/tools/designer/qdesigner_actions.cpp:415 msgid "About Plugins" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:433 -#: src/tools/designer/qdesigner_actions.cpp:1004 +#: src/tools/designer/qdesigner_actions.cpp:421 +#: src/tools/designer/qdesigner_actions.cpp:992 msgid "About Katie Designer" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:439 +#: src/tools/designer/qdesigner_actions.cpp:427 msgid "About Katie" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:475 +#: src/tools/designer/qdesigner_actions.cpp:463 msgid "Clear &Menu" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:558 -#: src/tools/designer/qdesigner_actions.cpp:755 +#: src/tools/designer/qdesigner_actions.cpp:546 +#: src/tools/designer/qdesigner_actions.cpp:743 msgid "Open Form" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:559 -#: src/tools/designer/qdesigner_actions.cpp:596 -#: src/tools/designer/qdesigner_actions.cpp:756 +#: src/tools/designer/qdesigner_actions.cpp:547 +#: src/tools/designer/qdesigner_actions.cpp:584 +#: src/tools/designer/qdesigner_actions.cpp:744 msgid "Designer UI files (*.%1);;All Files (*)" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:596 -#: src/tools/designer/qdesigner_actions.cpp:844 +#: src/tools/designer/qdesigner_actions.cpp:584 +#: src/tools/designer/qdesigner_actions.cpp:832 msgid "Save Form As" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:683 +#: src/tools/designer/qdesigner_actions.cpp:671 msgid "Designer" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:683 +#: src/tools/designer/qdesigner_actions.cpp:671 msgid "Feature not implemented yet!" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:698 +#: src/tools/designer/qdesigner_actions.cpp:686 msgid "Code generation failed" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:743 +#: src/tools/designer/qdesigner_actions.cpp:731 msgid "" "%1\n" "Do you want to update the file location or generate a new form?" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:746 +#: src/tools/designer/qdesigner_actions.cpp:734 msgid "&Update" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:747 +#: src/tools/designer/qdesigner_actions.cpp:735 msgid "&New Form" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:825 +#: src/tools/designer/qdesigner_actions.cpp:813 msgid "Could not open file" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:829 +#: src/tools/designer/qdesigner_actions.cpp:817 msgid "" "The file %1 could not be opened.\n" "Reason: %2\n" "Would you like to retry or select a different file?" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:835 +#: src/tools/designer/qdesigner_actions.cpp:823 msgid "Select New File" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:865 +#: src/tools/designer/qdesigner_actions.cpp:853 msgid "Could not write file" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:868 +#: src/tools/designer/qdesigner_actions.cpp:856 msgid "" "It was not possible to write the entire file %1 to disk.\n" "Reason:%2\n" "Would you like to retry?" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:1021 +#: src/tools/designer/qdesigner_actions.cpp:1009 msgid "&Close Preview" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:1062 -#: src/tools/designer/qdesigner_actions.cpp:1085 +#: src/tools/designer/qdesigner_actions.cpp:1050 +#: src/tools/designer/qdesigner_actions.cpp:1073 msgid "The backup file %1 could not be written." msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:1192 +#: src/tools/designer/qdesigner_actions.cpp:1180 msgid "The backup directory %1 could not be created." msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:1198 +#: src/tools/designer/qdesigner_actions.cpp:1186 msgid "The temporary backup directory %1 could not be created." msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:1228 +#: src/tools/designer/qdesigner_actions.cpp:1216 msgid "Preview failed" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:1252 +#: src/tools/designer/qdesigner_actions.cpp:1240 msgid "Image files (*.%1)" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:1261 -#: src/tools/designer/qdesigner_actions.cpp:1278 +#: src/tools/designer/qdesigner_actions.cpp:1249 +#: src/tools/designer/qdesigner_actions.cpp:1266 msgid "Save Image" msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:1274 +#: src/tools/designer/qdesigner_actions.cpp:1262 msgid "Saved image %1." msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:1279 +#: src/tools/designer/qdesigner_actions.cpp:1267 msgid "The file %1 could not be written." msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:1292 +#: src/tools/designer/qdesigner_actions.cpp:1280 msgid "Please close all forms to enable the loading of additional fonts." msgstr "" -#: src/tools/designer/qdesigner_actions.cpp:1343 +#: src/tools/designer/qdesigner_actions.cpp:1331 msgid "Printed %1." msgstr "" -#: src/tools/designer/saveformastemplate.cpp:64 +#: src/tools/designer/saveformastemplate.cpp:52 msgid "Add path..." msgstr "" -#: src/tools/designer/saveformastemplate.cpp:87 +#: src/tools/designer/saveformastemplate.cpp:75 msgid "Template Exists" msgstr "" -#: src/tools/designer/saveformastemplate.cpp:88 +#: src/tools/designer/saveformastemplate.cpp:76 msgid "" "A template with the name %1 already exists.\n" "Do you want overwrite the template?" msgstr "" -#: src/tools/designer/saveformastemplate.cpp:91 +#: src/tools/designer/saveformastemplate.cpp:79 msgid "Overwrite Template" msgstr "" -#: src/tools/designer/saveformastemplate.cpp:98 +#: src/tools/designer/saveformastemplate.cpp:86 msgid "Open Error" msgstr "" -#: src/tools/designer/saveformastemplate.cpp:99 +#: src/tools/designer/saveformastemplate.cpp:87 msgid "There was an error opening template %1 for writing. Reason: %2" msgstr "" -#: src/tools/designer/saveformastemplate.cpp:112 +#: src/tools/designer/saveformastemplate.cpp:100 msgid "Write Error" msgstr "" -#: src/tools/designer/saveformastemplate.cpp:113 +#: src/tools/designer/saveformastemplate.cpp:101 msgid "There was an error writing the template %1 to disk. Reason: %2" msgstr "" -#: src/tools/designer/saveformastemplate.cpp:140 +#: src/tools/designer/saveformastemplate.cpp:128 msgid "Pick a directory to save templates in" msgstr "" -#: src/tools/designer/mainwindow.cpp:111 +#: src/tools/designer/mainwindow.cpp:99 msgid "Main" msgstr "" -#: src/tools/designer/mainwindow.cpp:117 src/tools/designer/mainwindow.cpp:247 +#: src/tools/designer/mainwindow.cpp:105 src/tools/designer/mainwindow.cpp:235 msgid "File" msgstr "" -#: src/tools/designer/mainwindow.cpp:118 src/tools/designer/mainwindow.cpp:251 +#: src/tools/designer/mainwindow.cpp:106 src/tools/designer/mainwindow.cpp:239 msgid "Edit" msgstr "" -#: src/tools/designer/mainwindow.cpp:119 src/tools/designer/mainwindow.cpp:255 +#: src/tools/designer/mainwindow.cpp:107 src/tools/designer/mainwindow.cpp:243 msgid "Tools" msgstr "" -#: src/tools/designer/mainwindow.cpp:120 src/tools/designer/mainwindow.cpp:259 +#: src/tools/designer/mainwindow.cpp:108 src/tools/designer/mainwindow.cpp:247 msgid "Form" msgstr "" -#: src/tools/designer/mainwindow.cpp:216 +#: src/tools/designer/mainwindow.cpp:204 msgid "Configure Toolbars..." msgstr "" -#: src/tools/designer/mainwindow.cpp:231 +#: src/tools/designer/mainwindow.cpp:219 msgid "Window" msgstr "" -#: src/tools/designer/mainwindow.cpp:232 +#: src/tools/designer/mainwindow.cpp:220 msgid "Help" msgstr "" -#: src/tools/designer/mainwindow.cpp:239 +#: src/tools/designer/mainwindow.cpp:227 msgid "Style" msgstr "" -#: src/tools/designer/mainwindow.cpp:241 +#: src/tools/designer/mainwindow.cpp:229 msgid "Dock views" msgstr "" -#: src/tools/designer/mainwindow.cpp:263 -#: src/tools/designer/qdesigner_workbench.cpp:228 +#: src/tools/designer/mainwindow.cpp:251 +#: src/tools/designer/qdesigner_workbench.cpp:216 msgid "Toolbars" msgstr "" -#: src/tools/designer/qdesigner_toolwindow.cpp:179 +#: src/tools/designer/qdesigner_toolwindow.cpp:167 msgid "Property Editor" msgstr "" -#: src/tools/designer/qdesigner_toolwindow.cpp:233 +#: src/tools/designer/qdesigner_toolwindow.cpp:221 msgid "Action Editor" msgstr "" -#: src/tools/designer/qdesigner_toolwindow.cpp:275 +#: src/tools/designer/qdesigner_toolwindow.cpp:263 msgid "Object Inspector" msgstr "" -#: src/tools/designer/qdesigner_toolwindow.cpp:310 +#: src/tools/designer/qdesigner_toolwindow.cpp:298 msgid "Resource Browser" msgstr "" -#: src/tools/designer/qdesigner_toolwindow.cpp:344 +#: src/tools/designer/qdesigner_toolwindow.cpp:332 msgid "Signal/Slot Editor" msgstr "" -#: src/tools/designer/qdesigner_toolwindow.cpp:385 -#: src/tools/designer/qdesigner_workbench.cpp:394 +#: src/tools/designer/qdesigner_toolwindow.cpp:373 +#: src/tools/designer/qdesigner_workbench.cpp:382 msgid "Widget Box" msgstr "" -#: src/tools/designer/qdesigner_workbench.cpp:190 +#: src/tools/designer/qdesigner_workbench.cpp:178 msgid "&Edit" msgstr "" -#: src/tools/designer/qdesigner_workbench.cpp:194 +#: src/tools/designer/qdesigner_workbench.cpp:182 msgid "F&orm" msgstr "" -#: src/tools/designer/qdesigner_workbench.cpp:195 +#: src/tools/designer/qdesigner_workbench.cpp:183 msgid "Preview in" msgstr "" -#: src/tools/designer/qdesigner_workbench.cpp:199 +#: src/tools/designer/qdesigner_workbench.cpp:187 msgid "&View" msgstr "" -#: src/tools/designer/qdesigner_workbench.cpp:201 +#: src/tools/designer/qdesigner_workbench.cpp:189 msgid "&Settings" msgstr "" -#: src/tools/designer/qdesigner_workbench.cpp:203 +#: src/tools/designer/qdesigner_workbench.cpp:191 msgid "&Window" msgstr "" -#: src/tools/designer/qdesigner_workbench.cpp:683 +#: src/tools/designer/qdesigner_workbench.cpp:671 msgid "Save Forms?" msgstr "" -#: src/tools/designer/qdesigner_workbench.cpp:684 +#: src/tools/designer/qdesigner_workbench.cpp:672 msgid "" "There are %1 forms with unsaved changes. Do you want to review these changes " "before quitting?" msgstr "" -#: src/tools/designer/qdesigner_workbench.cpp:687 +#: src/tools/designer/qdesigner_workbench.cpp:675 msgid "If you do not review your documents, all your changes will be lost." msgstr "" -#: src/tools/designer/qdesigner_workbench.cpp:688 +#: src/tools/designer/qdesigner_workbench.cpp:676 msgid "Discard Changes" msgstr "" -#: src/tools/designer/qdesigner_workbench.cpp:690 +#: src/tools/designer/qdesigner_workbench.cpp:678 msgid "Review Changes" msgstr "" -#: src/tools/designer/qdesigner_workbench.cpp:785 +#: src/tools/designer/qdesigner_workbench.cpp:773 msgid "Backup Information" msgstr "" -#: src/tools/designer/qdesigner_workbench.cpp:786 +#: src/tools/designer/qdesigner_workbench.cpp:774 msgid "" "The last session of Designer was not terminated correctly. Backup files were " "left behind. Do you want to load them?" msgstr "" -#: src/tools/designer/qdesigner_workbench.cpp:896 +#: src/tools/designer/qdesigner_workbench.cpp:884 msgid "The file %1 could not be opened." msgstr "" -#: src/tools/designer/qdesigner_workbench.cpp:942 +#: src/tools/designer/qdesigner_workbench.cpp:930 msgid "The file %1 is not a valid Designer UI file." msgstr "" -#: src/tools/designer/qdesigner_appearanceoptions.cpp:77 +#: src/tools/designer/qdesigner_appearanceoptions.cpp:65 msgid "Docked Window" msgstr "" -#: src/tools/designer/qdesigner_appearanceoptions.cpp:78 +#: src/tools/designer/qdesigner_appearanceoptions.cpp:66 msgid "Multiple Top-Level Windows" msgstr "" -#: src/tools/designer/qdesigner_appearanceoptions.cpp:83 +#: src/tools/designer/qdesigner_appearanceoptions.cpp:71 msgid "Toolwindow Font" msgstr "" -#: src/tools/designer/qdesigner_appearanceoptions.cpp:128 +#: src/tools/designer/qdesigner_appearanceoptions.cpp:116 msgctxt "QDesignerAppearanceOptionsPage" msgid "Appearance" msgstr "" -#: src/tools/designer/qdesigner.cpp:121 +#: src/tools/designer/qdesigner.cpp:109 msgctxt "QDesigner" msgid "%1 - warning" msgstr "" -#: src/tools/designer/qttoolbardialog/qttoolbardialog.cpp:1234 +#: src/tools/designer/qttoolbardialog/qttoolbardialog.cpp:1222 msgid "Custom Toolbar" msgstr "" -#: src/tools/designer/qttoolbardialog/qttoolbardialog.cpp:1777 +#: src/tools/designer/qttoolbardialog/qttoolbardialog.cpp:1765 msgid "< S E P A R A T O R >" msgstr "" -#: src/tools/designer/fontpanel/fontpanel.cpp:54 +#: src/tools/designer/fontpanel/fontpanel.cpp:42 msgid "Font" msgstr "" -#: src/tools/designer/fontpanel/fontpanel.cpp:59 +#: src/tools/designer/fontpanel/fontpanel.cpp:47 msgid "&Family" msgstr "" -#: src/tools/designer/fontpanel/fontpanel.cpp:63 +#: src/tools/designer/fontpanel/fontpanel.cpp:51 msgid "&Style" msgstr "" -#: src/tools/designer/fontpanel/fontpanel.cpp:67 +#: src/tools/designer/fontpanel/fontpanel.cpp:55 msgid "&Point size" msgstr ""