diff options
author | Qt Continuous Integration System <qt-info@nokia.com> | 2010-06-02 02:03:07 (GMT) |
---|---|---|
committer | Qt Continuous Integration System <qt-info@nokia.com> | 2010-06-02 02:03:07 (GMT) |
commit | 179cc58660d4ba274ac95e39ed3cfb2845054121 (patch) | |
tree | e5b5b8a795cb7d2bcd5273d02b7ab2d65175348f | |
parent | 0fd09af3a05ac88c55fed73c85dc1c5aba68f057 (diff) | |
parent | 673d3af547ada38a489b06b21d11e77a9bb1d4a3 (diff) | |
download | Qt-179cc58660d4ba274ac95e39ed3cfb2845054121.zip Qt-179cc58660d4ba274ac95e39ed3cfb2845054121.tar.gz Qt-179cc58660d4ba274ac95e39ed3cfb2845054121.tar.bz2 |
Merge branch '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-1 into 4.7-integration
* '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-1:
Some optimizations for QImage::load()
fix setRawData()
Fix QML crashes on the N900
doc: Added DITA XML generator
Fix build failure on Symbian 3.1.
Add the Qt::TextBypassShaping flag.
QTextEngine: skip an unnecessary call to GetDeviceCaps on Windows.
Add my 4.7.0 changes
qdoc: Added DITA XML generator
doc: Fixed confusing ownership issue.
update Russian translations for Qt tools
update Russian translation for Qt libraries
QXmlSchema documentation correction
doc: Changed last breadcrumb to not be a link.
doc: Fixed reference to setSize(), which is in QRectF.
QNetworkCookie: do not accept cookies with non-alNum domain
QtDeclarative: Remove trailing commas in enums
Doc: MonotonicClock is obviously monotonic
34 files changed, 8835 insertions, 2111 deletions
diff --git a/dist/changes-4.7.0 b/dist/changes-4.7.0 index e7b1e84..dbb3add 100644 --- a/dist/changes-4.7.0 +++ b/dist/changes-4.7.0 @@ -52,12 +52,16 @@ QtCore - QMetaType * Significantly improved performance of the type() function + * [QTBUG-8235] Support QEasingCurve as a built in metatype. - QState * [QTBUG-7741] Added a function to get the out-going transitions - QXmlStreamReader * [QTBUG-9196] fixed crash when parsing - QTimer * singleShot with 0 timeout will now avoid allocating objects + - QAbstractAnimation + * [QTBUG-10654] Avoids animation with loopCount == 0 to change state + to running and stopped. QtGui ----- @@ -95,6 +99,8 @@ QtGui - QGraphicsTextItem * [QTBUG-7333] Fixed keyboard shortcuts not being triggered when the the item has focus and something else has the same shortcut sequence. + * [QTBUG-10574] Fixed crash when flag "QGraphicsItem::ItemIgnoresTransformations" + is set. - QGraphicsView * [QTBUG-7438] Fixed viewport cursor getting reset when releasing diff --git a/doc/src/snippets/qxmlschema/main.cpp b/doc/src/snippets/qxmlschema/main.cpp index 83fb245..26a8741 100644 --- a/doc/src/snippets/qxmlschema/main.cpp +++ b/doc/src/snippets/qxmlschema/main.cpp @@ -91,11 +91,8 @@ void Schema::loadFromData() const " elementFormDefault=\"qualified\">" "</xsd:schema>" ); - QBuffer buffer(&data); - buffer.open(QIODevice::ReadOnly); - QXmlSchema schema; - schema.load(&buffer); + schema.load(data); if (schema.isValid()) qDebug() << "schema is valid"; diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.cpp b/src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.cpp index 022689b..b3c229e 100644 --- a/src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.cpp +++ b/src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.cpp @@ -1094,6 +1094,10 @@ RVCT() #define DEFINE_STUB_FUNCTION(rtype, op) rtype JIT_STUB cti_##op(STUB_ARGS_DECLARATION) #endif +#if COMPILER(GCC) +#pragma GCC visibility push(hidden) +#endif + DEFINE_STUB_FUNCTION(EncodedJSValue, op_convert_this) { STUB_INIT_STACK_FRAME(stackFrame); @@ -3205,6 +3209,10 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, to_object) return JSValue::encode(stackFrame.args[0].jsValue().toObject(callFrame)); } +#if COMPILER(GCC) +#pragma GCC visibility pop +#endif + } // namespace JSC #endif // ENABLE(JIT) diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h index 08674d2..52a24de 100644 --- a/src/corelib/global/qnamespace.h +++ b/src/corelib/global/qnamespace.h @@ -236,7 +236,8 @@ public: TextJustificationForced = 0x10000, TextForceLeftToRight = 0x20000, TextForceRightToLeft = 0x40000, - TextLongestVariant = 0x80000 + TextLongestVariant = 0x80000, + TextBypassShaping = 0x100000 #if defined(QT3_SUPPORT) && !defined(Q_MOC_RUN) ,SingleLine = TextSingleLine, diff --git a/src/corelib/tools/qelapsedtimer.cpp b/src/corelib/tools/qelapsedtimer.cpp index 28dfc23..cb5e701 100644 --- a/src/corelib/tools/qelapsedtimer.cpp +++ b/src/corelib/tools/qelapsedtimer.cpp @@ -137,7 +137,7 @@ QT_BEGIN_NAMESPACE used. \value SystemTime The human-readable system time. This clock is not monotonic. - \value MonotonicClock The system's monotonic clock, usually found in Unix systems. This clock is not monotonic and does not overflow. + \value MonotonicClock The system's monotonic clock, usually found in Unix systems. This clock is monotonic and does not overflow. \value TickCounter The system's tick counter, used on Windows and Symbian systems. This clock may overflow. \value MachAbsoluteTime The Mach kernel's absolute time (Mac OS X). This clock is monotonic and does not overflow. diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp index 6acbcec..a0dbb8e 100644 --- a/src/corelib/tools/qstring.cpp +++ b/src/corelib/tools/qstring.cpp @@ -7093,7 +7093,7 @@ QString QString::fromRawData(const QChar *unicode, int size) */ QString &QString::setRawData(const QChar *unicode, int size) { - if (d->ref != 1 || d->alloc) { + if (d->ref != 1 || (d->data == d->array && d->alloc)) { *this = fromRawData(unicode, size); } else { #ifdef QT3_SUPPORT diff --git a/src/declarative/qml/qdeclarative.h b/src/declarative/qml/qdeclarative.h index d75f0a8..53ff51c 100644 --- a/src/declarative/qml/qdeclarative.h +++ b/src/declarative/qml/qdeclarative.h @@ -67,7 +67,7 @@ QT_BEGIN_HEADER QML_DECLARE_TYPE_HASMETATYPE(INTERFACE) enum { /* TYPEINFO flags */ - QML_HAS_ATTACHED_PROPERTIES = 0x01, + QML_HAS_ATTACHED_PROPERTIES = 0x01 }; #define QML_DECLARE_TYPEINFO(TYPE, FLAGS) \ diff --git a/src/declarative/qml/qdeclarativeinstruction_p.h b/src/declarative/qml/qdeclarativeinstruction_p.h index dc5f2f8..4627eb3 100644 --- a/src/declarative/qml/qdeclarativeinstruction_p.h +++ b/src/declarative/qml/qdeclarativeinstruction_p.h @@ -158,7 +158,7 @@ public: // // Deferred creation // - Defer, /* defer */ + Defer /* defer */ }; QDeclarativeInstruction() : line(0) {} diff --git a/src/declarative/qml/qdeclarativevaluetype_p.h b/src/declarative/qml/qdeclarativevaluetype_p.h index 476c73d..3eaecc1 100644 --- a/src/declarative/qml/qdeclarativevaluetype_p.h +++ b/src/declarative/qml/qdeclarativevaluetype_p.h @@ -446,7 +446,7 @@ public: InBounce = QEasingCurve::InBounce, OutBounce = QEasingCurve::OutBounce, InOutBounce = QEasingCurve::InOutBounce, OutInBounce = QEasingCurve::OutInBounce, InCurve = QEasingCurve::InCurve, OutCurve = QEasingCurve::OutCurve, - SineCurve = QEasingCurve::SineCurve, CosineCurve = QEasingCurve::CosineCurve, + SineCurve = QEasingCurve::SineCurve, CosineCurve = QEasingCurve::CosineCurve }; QDeclarativeEasingValueType(QObject *parent = 0); diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp index 3013726..20e4b50 100644 --- a/src/gui/image/qpixmap.cpp +++ b/src/gui/image/qpixmap.cpp @@ -82,6 +82,7 @@ #endif #include "qpixmap_raster_p.h" +#include "private/qstylehelper_p.h" QT_BEGIN_NAMESPACE @@ -829,8 +830,14 @@ bool QPixmap::load(const QString &fileName, const char *format, Qt::ImageConvers return false; QFileInfo info(fileName); - QString key = QLatin1String("qt_pixmap_") + info.absoluteFilePath() + QLatin1Char('_') + QString::number(info.lastModified().toTime_t()) + QLatin1Char('_') + - QString::number(info.size()) + QLatin1Char('_') + QString::number(data ? data->pixelType() : QPixmapData::PixmapType); + if (!info.exists()) + return false; + + QString key = QLatin1Literal("qt_pixmap") + % info.absoluteFilePath() + % HexString<uint>(info.lastModified().toTime_t()) + % HexString<quint64>(info.size()) + % HexString<uint>(data ? data->pixelType() : QPixmapData::PixmapType); if (QPixmapCache::find(key, *this)) return true; diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index 4596754..e460b7b 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -5948,6 +5948,23 @@ void QPainter::drawText(const QPointF &p, const QString &str, int tf, int justif if (!d->engine || str.isEmpty() || pen().style() == Qt::NoPen) return; + if (tf & Qt::TextBypassShaping) { + // Skip harfbuzz complex shaping, shape using glyph advances only + int len = str.length(); + int numGlyphs = len; + QVarLengthGlyphLayoutArray glyphs(len); + QFontEngine *fontEngine = d->state->font.d->engineForScript(QUnicodeTables::Common); + if (!fontEngine->stringToCMap(str.data(), len, &glyphs, &numGlyphs, 0)) { + glyphs.resize(numGlyphs); + if (!fontEngine->stringToCMap(str.data(), len, &glyphs, &numGlyphs, 0)) + Q_ASSERT_X(false, Q_FUNC_INFO, "stringToCMap shouldn't fail twice"); + } + + QTextItemInt gf(glyphs, &d->state->font, fontEngine); + drawTextItem(p, gf); + return; + } + QStackTextEngine engine(str, d->state->font); engine.option.setTextDirection(d->state->layoutDirection); if (tf & (Qt::TextForceLeftToRight|Qt::TextForceRightToLeft)) { diff --git a/src/gui/text/qfontmetrics.cpp b/src/gui/text/qfontmetrics.cpp index 5163c94..d02e841 100644 --- a/src/gui/text/qfontmetrics.cpp +++ b/src/gui/text/qfontmetrics.cpp @@ -526,6 +526,14 @@ int QFontMetrics::rightBearing(QChar ch) const */ int QFontMetrics::width(const QString &text, int len) const { + return width(text, len, 0); +} + +/*! + \internal +*/ +int QFontMetrics::width(const QString &text, int len, int flags) const +{ int pos = text.indexOf(QLatin1Char('\x9c')); if (pos != -1) { len = (len < 0) ? pos : qMin(pos, len); @@ -535,6 +543,23 @@ int QFontMetrics::width(const QString &text, int len) const if (len == 0) return 0; + if (flags & Qt::TextBypassShaping) { + // Skip harfbuzz complex shaping, only use advances + int numGlyphs = len; + QVarLengthGlyphLayoutArray glyphs(numGlyphs); + QFontEngine *engine = d->engineForScript(QUnicodeTables::Common); + if (!engine->stringToCMap(text.data(), len, &glyphs, &numGlyphs, 0)) { + glyphs.resize(numGlyphs); + if (!engine->stringToCMap(text.data(), len, &glyphs, &numGlyphs, 0)) + Q_ASSERT_X(false, Q_FUNC_INFO, "stringToCMap shouldn't fail twice"); + } + + QFixed width; + for (int i = 0; i < numGlyphs; ++i) + width += glyphs.advances_x[i]; + return qRound(width); + } + QStackTextEngine layout(text, d.data()); layout.ignoreBidi = true; return qRound(layout.width(0, len)); diff --git a/src/gui/text/qfontmetrics.h b/src/gui/text/qfontmetrics.h index dca4b93..2518b54 100644 --- a/src/gui/text/qfontmetrics.h +++ b/src/gui/text/qfontmetrics.h @@ -89,6 +89,7 @@ public: int leftBearing(QChar) const; int rightBearing(QChar) const; int width(const QString &, int len = -1) const; + int width(const QString &, int len, int flags) const; int width(QChar) const; int charWidth(const QString &str, int pos) const; diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index d34553f..3486264 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -885,7 +885,7 @@ void QTextEngine::shapeText(int item) const QFixed letterSpacing = font.d->letterSpacing; QFixed wordSpacing = font.d->wordSpacing; - if (letterSpacingIsAbsolute) + if (letterSpacingIsAbsolute && letterSpacing.value()) letterSpacing *= font.d->dpi / qt_defaultDpiY(); if (letterSpacing != 0) { @@ -2648,6 +2648,12 @@ QTextItemInt::QTextItemInt(const QScriptItem &si, QFont *font, const QTextCharFo flags |= QTextItem::StrikeOut; } +QTextItemInt::QTextItemInt(const QGlyphLayout &g, QFont *font, QFontEngine *fe) + : flags(0), justified(false), underlineStyle(QTextCharFormat::NoUnderline), + num_chars(0), chars(0), logClusters(0), f(font), fontEngine(fe), glyphs(g) +{ +} + QTextItemInt QTextItemInt::midItem(QFontEngine *fontEngine, int firstGlyphIndex, int numGlyphs) const { QTextItemInt ti = *this; diff --git a/src/gui/text/qtextengine_p.h b/src/gui/text/qtextengine_p.h index d92148f..00b1392 100644 --- a/src/gui/text/qtextengine_p.h +++ b/src/gui/text/qtextengine_p.h @@ -311,6 +311,7 @@ public: logClusters(0), f(0), fontEngine(0) {} QTextItemInt(const QScriptItem &si, QFont *font, const QTextCharFormat &format = QTextCharFormat()); + QTextItemInt(const QGlyphLayout &g, QFont *font, QFontEngine *fe); /// copy the structure items, adjusting the glyphs arrays to the right subarrays. /// the width of the returned QTextItemInt is not adjusted, for speed reasons diff --git a/src/gui/widgets/qstackedwidget.cpp b/src/gui/widgets/qstackedwidget.cpp index 2509a21..de8d3e6 100644 --- a/src/gui/widgets/qstackedwidget.cpp +++ b/src/gui/widgets/qstackedwidget.cpp @@ -186,11 +186,11 @@ int QStackedWidget::insertWidget(int index, QWidget *widget) } /*! - Removes the given \a widget from the QStackedWidget. + Removes \a widget from the QStackedWidget. i.e., \a widget is \e + not deleted but simply removed from the stacked layout, causing it + to be hidden. - \bold{Note:} The ownership of \a widget remains the same. - The widget is \e not deleted, but simply removed from the widget's - stacked layout, causing it to be hidden. + \bold{Note:} Ownership of \a widget reverts to the application. \sa addWidget(), insertWidget(), currentWidget() */ diff --git a/src/network/access/qnetworkcookie.cpp b/src/network/access/qnetworkcookie.cpp index 865d338..d1bdd57 100644 --- a/src/network/access/qnetworkcookie.cpp +++ b/src/network/access/qnetworkcookie.cpp @@ -991,6 +991,8 @@ QList<QNetworkCookie> QNetworkCookiePrivate::parseSetCookieHeaderLine(const QByt } QString normalizedDomain = QUrl::fromAce(QUrl::toAce(QString::fromUtf8(rawDomain))); + if (normalizedDomain.isEmpty() && !rawDomain.isEmpty()) + return result; cookie.setDomain(maybeLeadingDot + normalizedDomain); } else if (field.first == "max-age") { bool ok = false; diff --git a/src/plugins/bearer/symbian/symbianengine.cpp b/src/plugins/bearer/symbian/symbianengine.cpp index 8c26cf0..ab1ba28 100644 --- a/src/plugins/bearer/symbian/symbianengine.cpp +++ b/src/plugins/bearer/symbian/symbianengine.cpp @@ -389,9 +389,9 @@ void SymbianEngine::updateConfigurationsL() QNetworkConfigurationPrivatePointer ptr(cpPriv); accessPointConfigurations.insert(ident, ptr); - locker.unlock(); + mutex.unlock(); emit configurationAdded(ptr); - locker.relock(); + mutex.lock(); } else { delete cpPriv; } diff --git a/src/svg/qgraphicssvgitem.cpp b/src/svg/qgraphicssvgitem.cpp index 69ff7a3..e035e1d 100644 --- a/src/svg/qgraphicssvgitem.cpp +++ b/src/svg/qgraphicssvgitem.cpp @@ -124,8 +124,10 @@ public: \snippet doc/src/snippets/code/src_svg_qgraphicssvgitem.cpp 0 - Size of the item can be set via the setSize() method or via - direct manipulation of the items transformation matrix. + Size of the item can be set via the \l{QRectF::setSize()} + {setSize()} method of the \l{QGraphicsSvgItem::boundingRect()} + {bounding rectangle} or via direct manipulation of the items + transformation matrix. By default the SVG rendering is cached using QGraphicsItem::DeviceCoordinateCache mode to speedup the display of items. Caching can be disabled by passing diff --git a/tests/auto/qfontmetrics/tst_qfontmetrics.cpp b/tests/auto/qfontmetrics/tst_qfontmetrics.cpp index 5d73764..81e064e 100644 --- a/tests/auto/qfontmetrics/tst_qfontmetrics.cpp +++ b/tests/auto/qfontmetrics/tst_qfontmetrics.cpp @@ -71,6 +71,7 @@ private slots: void elidedText(); void veryNarrowElidedText(); void averageCharWidth(); + void bypassShaping(); void elidedMultiLength(); void elidedMultiLengthF(); void bearingIncludedInBoundingRect(); @@ -219,6 +220,20 @@ void tst_QFontMetrics::averageCharWidth() QVERIFY(fmf.averageCharWidth() != 0); } +void tst_QFontMetrics::bypassShaping() +{ + QFont f; + QFontMetrics fm(f); + QString text = " A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z"; + int textWidth = fm.width(text, -1, Qt::TextBypassShaping); + QVERIFY(textWidth != 0); + int charsWidth = 0; + for (int i = 0; i < text.size(); ++i) + charsWidth += fm.width(text[i]); + // This assertion is needed in QtWebKit's WebCore::Font::offsetForPositionForSimpleText + QCOMPARE(textWidth, charsWidth); +} + template<class FontMetrics> void elidedMultiLength_helper() { QString text1 = "Long Text 1\x9cShorter\x9csmall"; diff --git a/tests/auto/qnetworkcookie/tst_qnetworkcookie.cpp b/tests/auto/qnetworkcookie/tst_qnetworkcookie.cpp index 5854ae1..72d8eda 100644 --- a/tests/auto/qnetworkcookie/tst_qnetworkcookie.cpp +++ b/tests/auto/qnetworkcookie/tst_qnetworkcookie.cpp @@ -693,6 +693,12 @@ void tst_QNetworkCookie::parseMultipleCookies_data() cookieA.setPath("/foo"); list = QList<QNetworkCookie>() << cookieA << cookieB; QTest::newRow("real-3") << "a=b; expires=Mar 10 07:00:00 2009 GMT, Tue; path=/foo\nc=d; expires=Fri Mar 20 07:00:00 2009 GMT" << list; + + // do not accept cookies with non-alphanumeric characters in domain field (QTBUG-11029) + cookie = QNetworkCookie("NonAlphNumDomName", "NonAlphNumDomValue"); + cookie.setDomain("!@#$%^&*();:."); // the ';' is actually problematic, because it is a separator + list = QList<QNetworkCookie>(); + QTest::newRow("domain-non-alpha-numeric") << "NonAlphNumDomName=NonAlphNumDomValue; domain=!@#$%^&*()" << list; } void tst_QNetworkCookie::parseMultipleCookies() diff --git a/tools/linguist/phrasebooks/russian.qph b/tools/linguist/phrasebooks/russian.qph index ae1a9b9..750fda0 100644 --- a/tools/linguist/phrasebooks/russian.qph +++ b/tools/linguist/phrasebooks/russian.qph @@ -826,7 +826,7 @@ </phrase> <phrase> <source>slider</source> - <target>ползунок</target> + <target>регулятор</target> </phrase> <phrase> <source>spin box</source> diff --git a/tools/qdoc3/ditaxmlgenerator.cpp b/tools/qdoc3/ditaxmlgenerator.cpp new file mode 100644 index 0000000..a64e8e7 --- /dev/null +++ b/tools/qdoc3/ditaxmlgenerator.cpp @@ -0,0 +1,4773 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the tools applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, 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. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + ditaxmlgenerator.cpp +*/ + +#include "codemarker.h" +#include "codeparser.h" +#include "helpprojectwriter.h" +#include "ditaxmlgenerator.h" +#include "node.h" +#include "separator.h" +#include "tree.h" +#include <ctype.h> + +#include <qdebug.h> +#include <qlist.h> +#include <qiterator.h> +#include <qtextcodec.h> + +QT_BEGIN_NAMESPACE + +#define COMMAND_VERSION Doc::alias("version") +int DitaXmlGenerator::id = 0; + +QString DitaXmlGenerator::sinceTitles[] = + { + " New Namespaces", + " New Classes", + " New Member Functions", + " New Functions in Namespaces", + " New Global Functions", + " New Macros", + " New Enum Types", + " New Typedefs", + " New Properties", + " New Variables", + " New QML Elements", + " New Qml Properties", + " New Qml Signals", + " New Qml Methods", + "" + }; + +static bool showBrokenLinks = false; + +static void addLink(const QString &linkTarget, + const QStringRef &nestedStuff, + QString *res) +{ + if (!linkTarget.isEmpty()) { + *res += "<a href=\""; + *res += linkTarget; + *res += "\">"; + *res += nestedStuff; + *res += "</a>"; + } + else { + *res += nestedStuff; + } +} + + +DitaXmlGenerator::DitaXmlGenerator() + : helpProjectWriter(0), + inLink(false), + inContents(false), + inSectionHeading(false), + inTableHeader(false), + numTableRows(0), + threeColumnEnumValueTable(true), + offlineDocs(true), + funcLeftParen("\\S(\\()"), + myTree(0), + slow(false), + obsoleteLinks(false) +{ +} + +DitaXmlGenerator::~DitaXmlGenerator() +{ + if (helpProjectWriter) + delete helpProjectWriter; +} + +void DitaXmlGenerator::initializeGenerator(const Config &config) +{ + static const struct { + const char *key; + const char *left; + const char *right; + } defaults[] = { + { ATOM_FORMATTING_BOLD, "<b>", "</b>" }, + { ATOM_FORMATTING_INDEX, "<!--", "-->" }, + { ATOM_FORMATTING_ITALIC, "<i>", "</i>" }, + { ATOM_FORMATTING_PARAMETER, "<i>", "</i>" }, + { ATOM_FORMATTING_SUBSCRIPT, "<sub>", "</sub>" }, + { ATOM_FORMATTING_SUPERSCRIPT, "<sup>", "</sup>" }, + { ATOM_FORMATTING_TELETYPE, "<tt>", "</tt>" }, + { ATOM_FORMATTING_UNDERLINE, "<u>", "</u>" }, + { 0, 0, 0 } + }; + + Generator::initializeGenerator(config); + obsoleteLinks = config.getBool(QLatin1String(CONFIG_OBSOLETELINKS)); + setImageFileExtensions(QStringList() << "png" << "jpg" << "jpeg" << "gif"); + int i = 0; + while (defaults[i].key) { + formattingLeftMap().insert(defaults[i].key, defaults[i].left); + formattingRightMap().insert(defaults[i].key, defaults[i].right); + i++; + } + + style = config.getString(DitaXmlGenerator::format() + + Config::dot + + DITAXMLGENERATOR_STYLE); + postHeader = config.getString(DitaXmlGenerator::format() + + Config::dot + + DITAXMLGENERATOR_POSTHEADER); + postPostHeader = config.getString(DitaXmlGenerator::format() + + Config::dot + + DITAXMLGENERATOR_POSTPOSTHEADER); + footer = config.getString(DitaXmlGenerator::format() + + Config::dot + + DITAXMLGENERATOR_FOOTER); + address = config.getString(DitaXmlGenerator::format() + + Config::dot + + DITAXMLGENERATOR_ADDRESS); + pleaseGenerateMacRef = config.getBool(DitaXmlGenerator::format() + + Config::dot + + DITAXMLGENERATOR_GENERATEMACREFS); + + project = config.getString(CONFIG_PROJECT); + offlineDocs = !config.getBool(CONFIG_ONLINE); + projectDescription = config.getString(CONFIG_DESCRIPTION); + if (projectDescription.isEmpty() && !project.isEmpty()) + projectDescription = project + " Reference Documentation"; + + projectUrl = config.getString(CONFIG_URL); + + outputEncoding = config.getString(CONFIG_OUTPUTENCODING); + if (outputEncoding.isEmpty()) + outputEncoding = QLatin1String("ISO-8859-1"); + outputCodec = QTextCodec::codecForName(outputEncoding.toLocal8Bit()); + + naturalLanguage = config.getString(CONFIG_NATURALLANGUAGE); + if (naturalLanguage.isEmpty()) + naturalLanguage = QLatin1String("en"); + + QSet<QString> editionNames = config.subVars(CONFIG_EDITION); + QSet<QString>::ConstIterator edition = editionNames.begin(); + while (edition != editionNames.end()) { + QString editionName = *edition; + QStringList editionModules = config.getStringList(CONFIG_EDITION + + Config::dot + + editionName + + Config::dot + + "modules"); + QStringList editionGroups = config.getStringList(CONFIG_EDITION + + Config::dot + + editionName + + Config::dot + + "groups"); + + if (!editionModules.isEmpty()) + editionModuleMap[editionName] = editionModules; + if (!editionGroups.isEmpty()) + editionGroupMap[editionName] = editionGroups; + + ++edition; + } + + slow = config.getBool(CONFIG_SLOW); + + stylesheets = config.getStringList(DitaXmlGenerator::format() + + Config::dot + + DITAXMLGENERATOR_STYLESHEETS); + customHeadElements = config.getStringList(DitaXmlGenerator::format() + + Config::dot + + DITAXMLGENERATOR_CUSTOMHEADELEMENTS); + codeIndent = config.getInt(CONFIG_CODEINDENT); + + helpProjectWriter = new HelpProjectWriter(config, + project.toLower() + + ".qhp"); +} + +void DitaXmlGenerator::terminateGenerator() +{ + Generator::terminateGenerator(); +} + +QString DitaXmlGenerator::format() +{ + return "DITAXML"; +} + +/*! + This is where the html files and dcf files are written. + \note The html file generation is done in the base class, + PageGenerator::generateTree(). + */ +void DitaXmlGenerator::generateTree(const Tree *tree, CodeMarker *marker) +{ +#if 0 + // Copy the stylesheets from the directory containing the qdocconf file. + // ### This should be changed to use a special directory in doc/src. + QStringList::ConstIterator styleIter = stylesheets.begin(); + QDir configPath = QDir::current(); + while (styleIter != stylesheets.end()) { + QString filePath = configPath.absoluteFilePath(*styleIter); + Config::copyFile(Location(), filePath, filePath, outputDir()); + ++styleIter; + } +#endif + myTree = tree; + nonCompatClasses.clear(); + mainClasses.clear(); + compatClasses.clear(); + obsoleteClasses.clear(); + moduleClassMap.clear(); + moduleNamespaceMap.clear(); + funcIndex.clear(); + legaleseTexts.clear(); + serviceClasses.clear(); + findAllClasses(tree->root()); + findAllFunctions(tree->root()); + findAllLegaleseTexts(tree->root()); + findAllNamespaces(tree->root()); +#ifdef ZZZ_QDOC_QML + findAllQmlClasses(tree->root()); +#endif + findAllSince(tree->root()); + + PageGenerator::generateTree(tree, marker); + + dcfClassesRoot.ref = "classes.html"; + dcfClassesRoot.title = "Classes"; + qSort(dcfClassesRoot.subsections); + + dcfOverviewsRoot.ref = "overviews.html"; + dcfOverviewsRoot.title = "Overviews"; + qSort(dcfOverviewsRoot.subsections); + + dcfExamplesRoot.ref = "examples.html"; + dcfExamplesRoot.title = "Tutorial & Examples"; + qSort(dcfExamplesRoot.subsections); + + DcfSection qtRoot; + appendDcfSubSection(&qtRoot, dcfClassesRoot); + appendDcfSubSection(&qtRoot, dcfOverviewsRoot); + appendDcfSubSection(&qtRoot, dcfExamplesRoot); + + generateDcf(project.toLower().simplified().replace(" ", "-"), + "index.html", + projectDescription, qtRoot); + generateDcf("designer", + "designer-manual.html", + "Qt Designer Manual", + dcfDesignerRoot); + generateDcf("linguist", + "linguist-manual.html", + "Qt Linguist Manual", + dcfLinguistRoot); + generateDcf("assistant", + "assistant-manual.html", + "Qt Assistant Manual", + dcfAssistantRoot); + generateDcf("qmake", + "qmake-manual.html", + "qmake Manual", + dcfQmakeRoot); + + QString fileBase = project.toLower().simplified().replace(" ", "-"); + generateIndex(fileBase, projectUrl, projectDescription); + generatePageIndex(outputDir() + "/" + fileBase + ".pageindex", marker); + + helpProjectWriter->generate(myTree); +} + +void DitaXmlGenerator::startText(const Node * /* relative */, + CodeMarker * /* marker */) +{ + inLink = false; + inContents = false; + inSectionHeading = false; + inTableHeader = false; + numTableRows = 0; + threeColumnEnumValueTable = true; + link.clear(); + sectionNumber.clear(); +} + +/*! + Generate html from an instance of Atom. + */ +int DitaXmlGenerator::generateAtom(const Atom *atom, + const Node *relative, + CodeMarker *marker) +{ + int skipAhead = 0; + static bool in_para = false; + + switch (atom->type()) { + case Atom::AbstractLeft: + break; + case Atom::AbstractRight: + break; + case Atom::AutoLink: + if (!inLink && !inContents && !inSectionHeading) { + const Node *node = 0; + QString link = getLink(atom, relative, marker, &node); + if (!link.isEmpty()) { + beginLink(link, node, relative, marker); + generateLink(atom, relative, marker); + endLink(); + } + else { + out() << protectEnc(atom->string()); + } + } + else { + out() << protectEnc(atom->string()); + } + break; + case Atom::BaseName: + break; + case Atom::BriefLeft: + if (relative->type() == Node::Fake) { + skipAhead = skipAtoms(atom, Atom::BriefRight); + break; + } + + out() << "<p>"; + if (relative->type() == Node::Property || + relative->type() == Node::Variable) { + QString str; + atom = atom->next(); + while (atom != 0 && atom->type() != Atom::BriefRight) { + if (atom->type() == Atom::String || + atom->type() == Atom::AutoLink) + str += atom->string(); + skipAhead++; + atom = atom->next(); + } + str[0] = str[0].toLower(); + if (str.right(1) == ".") + str.truncate(str.length() - 1); + out() << "This "; + if (relative->type() == Node::Property) + out() << "property"; + else + out() << "variable"; + QStringList words = str.split(" "); + if (!(words.first() == "contains" || words.first() == "specifies" + || words.first() == "describes" || words.first() == "defines" + || words.first() == "holds" || words.first() == "determines")) + out() << " holds "; + else + out() << " "; + out() << str << "."; + } + break; + case Atom::BriefRight: + if (relative->type() != Node::Fake) + out() << "</p>\n"; + break; + case Atom::C: + out() << formattingLeftMap()[ATOM_FORMATTING_TELETYPE]; + if (inLink) { + out() << protectEnc(plainCode(atom->string())); + } + else { + out() << highlightedCode(atom->string(), marker, relative); + } + out() << formattingRightMap()[ATOM_FORMATTING_TELETYPE]; + break; + case Atom::Code: + out() << "<pre class=\"highlightedCode\">" + << trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()), + marker,relative)) + << "</pre>\n"; + break; +#ifdef QDOC_QML + case Atom::Qml: + out() << "<pre class=\"highlightedCode\">" + << trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()), + marker,relative)) + << "</pre>\n"; + break; +#endif + case Atom::CodeNew: + out() << "<p>you can rewrite it as</p>\n" + << "<pre class=\"highlightedCode\">" + << trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()), + marker,relative)) + << "</pre>\n"; + break; + case Atom::CodeOld: + out() << "<p>For example, if you have code like</p>\n"; + // fallthrough + case Atom::CodeBad: + out() << "<pre class=\"highlightedCode\">" + << trimmedTrailing(protectEnc(plainCode(indent(codeIndent,atom->string())))) + << "</pre>\n"; + break; + case Atom::FootnoteLeft: + // ### For now + if (in_para) { + out() << "</p>\n"; + in_para = false; + } + out() << "<!-- "; + break; + case Atom::FootnoteRight: + // ### For now + out() << "-->"; + break; + case Atom::FormatElse: + case Atom::FormatEndif: + case Atom::FormatIf: + break; + case Atom::FormattingLeft: + out() << formattingLeftMap()[atom->string()]; + if (atom->string() == ATOM_FORMATTING_PARAMETER) { + if (atom->next() != 0 && atom->next()->type() == Atom::String) { + QRegExp subscriptRegExp("([a-z]+)_([0-9n])"); + if (subscriptRegExp.exactMatch(atom->next()->string())) { + out() << subscriptRegExp.cap(1) << "<sub>" + << subscriptRegExp.cap(2) << "</sub>"; + skipAhead = 1; + } + } + } + break; + case Atom::FormattingRight: + if (atom->string() == ATOM_FORMATTING_LINK) { + endLink(); + } + else { + out() << formattingRightMap()[atom->string()]; + } + break; + case Atom::AnnotatedList: + { + QList<Node*> values = myTree->groups().values(atom->string()); + NodeMap nodeMap; + for (int i = 0; i < values.size(); ++i) { + const Node* n = values.at(i); + if ((n->status() != Node::Internal) && (n->access() != Node::Private)) { + nodeMap.insert(n->nameForLists(),n); + } + } + generateAnnotatedList(relative, marker, nodeMap); + } + break; + case Atom::GeneratedList: + if (atom->string() == "annotatedclasses") { + generateAnnotatedList(relative, marker, nonCompatClasses); + } + else if (atom->string() == "classes") { + generateCompactList(relative, marker, nonCompatClasses, true); + } + else if (atom->string().contains("classesbymodule")) { + QString arg = atom->string().trimmed(); + QString moduleName = atom->string().mid(atom->string().indexOf( + "classesbymodule") + 15).trimmed(); + if (moduleClassMap.contains(moduleName)) + generateAnnotatedList(relative, marker, moduleClassMap[moduleName]); + } + else if (atom->string().contains("classesbyedition")) { + + QString arg = atom->string().trimmed(); + QString editionName = atom->string().mid(atom->string().indexOf( + "classesbyedition") + 16).trimmed(); + + if (editionModuleMap.contains(editionName)) { + + // Add all classes in the modules listed for that edition. + NodeMap editionClasses; + foreach (const QString &moduleName, editionModuleMap[editionName]) { + if (moduleClassMap.contains(moduleName)) + editionClasses.unite(moduleClassMap[moduleName]); + } + + // Add additional groups and remove groups of classes that + // should be excluded from the edition. + + QMultiMap <QString, Node *> groups = myTree->groups(); + foreach (const QString &groupName, editionGroupMap[editionName]) { + QList<Node *> groupClasses; + if (groupName.startsWith("-")) { + groupClasses = groups.values(groupName.mid(1)); + foreach (const Node *node, groupClasses) + editionClasses.remove(node->name()); + } + else { + groupClasses = groups.values(groupName); + foreach (const Node *node, groupClasses) + editionClasses.insert(node->name(), node); + } + } + generateAnnotatedList(relative, marker, editionClasses); + } + } + else if (atom->string() == "classhierarchy") { + generateClassHierarchy(relative, marker, nonCompatClasses); + } + else if (atom->string() == "compatclasses") { + generateCompactList(relative, marker, compatClasses, false); + } + else if (atom->string() == "obsoleteclasses") { + generateCompactList(relative, marker, obsoleteClasses, false); + } + else if (atom->string() == "functionindex") { + generateFunctionIndex(relative, marker); + } + else if (atom->string() == "legalese") { + generateLegaleseList(relative, marker); + } + else if (atom->string() == "mainclasses") { + generateCompactList(relative, marker, mainClasses, true); + } + else if (atom->string() == "services") { + generateCompactList(relative, marker, serviceClasses, false); + } + else if (atom->string() == "overviews") { + generateOverviewList(relative, marker); + } + else if (atom->string() == "namespaces") { + generateAnnotatedList(relative, marker, namespaceIndex); + } + else if (atom->string() == "related") { + const FakeNode *fake = static_cast<const FakeNode *>(relative); + if (fake && !fake->groupMembers().isEmpty()) { + NodeMap groupMembersMap; + foreach (const Node *node, fake->groupMembers()) { + if (node->type() == Node::Fake) + groupMembersMap[fullName(node, relative, marker)] = node; + } + generateAnnotatedList(fake, marker, groupMembersMap); + } + } + else if (atom->string() == "relatedinline") { + const FakeNode *fake = static_cast<const FakeNode *>(relative); + if (fake && !fake->groupMembers().isEmpty()) { + // Reverse the list into the original scan order. + // Should be sorted. But on what? It may not be a + // regular class or page definition. + QList<const Node *> list; + foreach (const Node *node, fake->groupMembers()) + list.prepend(node); + foreach (const Node *node, list) + generateBody(node, marker); + } + } + break; + case Atom::SinceList: + { + NewSinceMaps::const_iterator nsmap; + nsmap = newSinceMaps.find(atom->string()); + NewClassMaps::const_iterator ncmap; + ncmap = newClassMaps.find(atom->string()); + NewClassMaps::const_iterator nqcmap; + nqcmap = newQmlClassMaps.find(atom->string()); + if ((nsmap != newSinceMaps.constEnd()) && !nsmap.value().isEmpty()) { + QList<Section> sections; + QList<Section>::ConstIterator s; + for (int i=0; i<LastSinceType; ++i) + sections.append(Section(sinceTitle(i),QString(),QString(),QString())); + + NodeMultiMap::const_iterator n = nsmap.value().constBegin(); + while (n != nsmap.value().constEnd()) { + const Node* node = n.value(); + switch (node->type()) { + case Node::Fake: + if (node->subType() == Node::QmlClass) { + sections[QmlClass].appendMember((Node*)node); + } + break; + case Node::Namespace: + sections[Namespace].appendMember((Node*)node); + break; + case Node::Class: + sections[Class].appendMember((Node*)node); + break; + case Node::Enum: + sections[Enum].appendMember((Node*)node); + break; + case Node::Typedef: + sections[Typedef].appendMember((Node*)node); + break; + case Node::Function: { + const FunctionNode* fn = static_cast<const FunctionNode*>(node); + if (fn->isMacro()) + sections[Macro].appendMember((Node*)node); + else { + Node* p = fn->parent(); + if (p) { + if (p->type() == Node::Class) + sections[MemberFunction].appendMember((Node*)node); + else if (p->type() == Node::Namespace) { + if (p->name().isEmpty()) + sections[GlobalFunction].appendMember((Node*)node); + else + sections[NamespaceFunction].appendMember((Node*)node); + } + else + sections[GlobalFunction].appendMember((Node*)node); + } + else + sections[GlobalFunction].appendMember((Node*)node); + } + break; + } + case Node::Property: + sections[Property].appendMember((Node*)node); + break; + case Node::Variable: + sections[Variable].appendMember((Node*)node); + break; + case Node::QmlProperty: + sections[QmlProperty].appendMember((Node*)node); + break; + case Node::QmlSignal: + sections[QmlSignal].appendMember((Node*)node); + break; + case Node::QmlMethod: + sections[QmlMethod].appendMember((Node*)node); + break; + default: + break; + } + ++n; + } + + /* + First generate the table of contents. + */ + out() << "<ul>\n"; + s = sections.constBegin(); + while (s != sections.constEnd()) { + if (!(*s).members.isEmpty()) { + + out() << "<li>" + << "<a href=\"#" + << Doc::canonicalTitle((*s).name) + << "\">" + << (*s).name + << "</a></li>\n"; + } + ++s; + } + out() << "</ul>\n"; + + int idx = 0; + s = sections.constBegin(); + while (s != sections.constEnd()) { + if (!(*s).members.isEmpty()) { + out() << "<a name=\"" + << Doc::canonicalTitle((*s).name) + << "\"></a>\n"; + out() << "<h3>" << protectEnc((*s).name) << "</h3>\n"; + if (idx == Class) + generateCompactList(0, marker, ncmap.value(), false, QString("Q")); + else if (idx == QmlClass) + generateCompactList(0, marker, nqcmap.value(), false, QString("Q")); + else if (idx == MemberFunction) { + ParentMaps parentmaps; + ParentMaps::iterator pmap; + NodeList::const_iterator i = s->members.constBegin(); + while (i != s->members.constEnd()) { + Node* p = (*i)->parent(); + pmap = parentmaps.find(p); + if (pmap == parentmaps.end()) + pmap = parentmaps.insert(p,NodeMultiMap()); + pmap->insert((*i)->name(),(*i)); + ++i; + } + pmap = parentmaps.begin(); + while (pmap != parentmaps.end()) { + NodeList nlist = pmap->values(); + out() << "<p>Class "; + + out() << "<a href=\"" + << linkForNode(pmap.key(), 0) + << "\">"; + QStringList pieces = fullName(pmap.key(), 0, marker).split("::"); + out() << protectEnc(pieces.last()); + out() << "</a>" << ":</p>\n"; + + generateSection(nlist, 0, marker, CodeMarker::Summary); + out() << "<br/>"; + ++pmap; + } + } + else + generateSection(s->members, 0, marker, CodeMarker::Summary); + } + ++idx; + ++s; + } + } + } + break; + case Atom::Image: + case Atom::InlineImage: + { + QString fileName = imageFileName(relative, atom->string()); + QString text; + if (atom->next() != 0) + text = atom->next()->string(); + if (atom->type() == Atom::Image) + out() << "<p class=\"centerAlign\">"; + if (fileName.isEmpty()) { + out() << "<font color=\"red\">[Missing image " + << protectEnc(atom->string()) << "]</font>"; + } + else { + out() << "<img src=\"" << protectEnc(fileName) << "\""; + if (!text.isEmpty()) + out() << " alt=\"" << protectEnc(text) << "\""; + out() << " />"; + helpProjectWriter->addExtraFile(fileName); + } + if (atom->type() == Atom::Image) + out() << "</p>"; + } + break; + case Atom::ImageText: + break; + case Atom::LegaleseLeft: + out() << "<div class=\"LegaleseLeft\">"; + break; + case Atom::LegaleseRight: + out() << "</div>"; + break; + case Atom::LineBreak: + out() << "<br/>"; + break; + case Atom::Link: + { + const Node *node = 0; + QString myLink = getLink(atom, relative, marker, &node); + if (myLink.isEmpty()) { + relative->doc().location().warning(tr("Cannot link to '%1' in %2") + .arg(atom->string()) + .arg(marker->plainFullName(relative))); + } + beginLink(myLink, node, relative, marker); + skipAhead = 1; + } + break; + case Atom::LinkNode: + { + const Node *node = CodeMarker::nodeForString(atom->string()); + beginLink(linkForNode(node, relative), node, relative, marker); + skipAhead = 1; + } + break; + case Atom::ListLeft: + if (in_para) { + out() << "</p>\n"; + in_para = false; + } + if (atom->string() == ATOM_LIST_BULLET) { + out() << "<ul>\n"; + } + else if (atom->string() == ATOM_LIST_TAG) { + out() << "<dl>\n"; + } + else if (atom->string() == ATOM_LIST_VALUE) { + threeColumnEnumValueTable = isThreeColumnEnumValueTable(atom); + if (threeColumnEnumValueTable) { + out() << "<table class=\"valuelist\">"; + // << "<tr>" + if (++numTableRows % 2 == 1) + out() << "<tr class=\"odd\">"; + else + out() << "<tr class=\"even\">"; + + out() << "<tr><th>Constant</th>" + << "<th>Value</th>" + << "<th>Description</th></tr>\n"; + } + else { + out() << "<table class=\"valuelist\">" + << "<tr><th>Constant</th><th>Value</th></tr>\n"; + } + } + else { + out() << "<ol type="; + if (atom->string() == ATOM_LIST_UPPERALPHA) { + out() << "\"A\""; + } /* why type? */ + else if (atom->string() == ATOM_LIST_LOWERALPHA) { + out() << "\"a\""; + } + else if (atom->string() == ATOM_LIST_UPPERROMAN) { + out() << "\"I\""; + } + else if (atom->string() == ATOM_LIST_LOWERROMAN) { + out() << "\"i\""; + } + else { // (atom->string() == ATOM_LIST_NUMERIC) + out() << "\"1\""; + } + if (atom->next() != 0 && atom->next()->string().toInt() != 1) + out() << " start=\"" << atom->next()->string() << "\""; + out() << ">\n"; + } + break; + case Atom::ListItemNumber: + break; + case Atom::ListTagLeft: + if (atom->string() == ATOM_LIST_TAG) { + out() << "<dt>"; + } + else { // (atom->string() == ATOM_LIST_VALUE) + // ### Trenton + + out() << "<tr><td class=\"topAlign\"><tt>" + << protectEnc(plainCode(marker->markedUpEnumValue(atom->next()->string(), + relative))) + << "</tt></td><td class=\" topAlign\">"; + + QString itemValue; + if (relative->type() == Node::Enum) { + const EnumNode *enume = static_cast<const EnumNode *>(relative); + itemValue = enume->itemValue(atom->next()->string()); + } + + if (itemValue.isEmpty()) + out() << "?"; + else + out() << "<tt>" << protectEnc(itemValue) << "</tt>"; + + skipAhead = 1; + } + break; + case Atom::ListTagRight: + if (atom->string() == ATOM_LIST_TAG) + out() << "</dt>\n"; + break; + case Atom::ListItemLeft: + if (atom->string() == ATOM_LIST_TAG) { + out() << "<dd>"; + } + else if (atom->string() == ATOM_LIST_VALUE) { + if (threeColumnEnumValueTable) { + out() << "</td><td class=\"topAlign\">"; + if (matchAhead(atom, Atom::ListItemRight)) + out() << " "; + } + } + else { + out() << "<li>"; + } + if (matchAhead(atom, Atom::ParaLeft)) + skipAhead = 1; + break; + case Atom::ListItemRight: + if (atom->string() == ATOM_LIST_TAG) { + out() << "</dd>\n"; + } + else if (atom->string() == ATOM_LIST_VALUE) { + out() << "</td></tr>\n"; + } + else { + out() << "</li>\n"; + } + break; + case Atom::ListRight: + if (atom->string() == ATOM_LIST_BULLET) { + out() << "</ul>\n"; + } + else if (atom->string() == ATOM_LIST_TAG) { + out() << "</dl>\n"; + } + else if (atom->string() == ATOM_LIST_VALUE) { + out() << "</table>\n"; + } + else { + out() << "</ol>\n"; + } + break; + case Atom::Nop: + break; + case Atom::ParaLeft: + out() << "<p>"; + in_para = true; + break; + case Atom::ParaRight: + endLink(); + if (in_para) { + out() << "</p>\n"; + in_para = false; + } + //if (!matchAhead(atom, Atom::ListItemRight) && !matchAhead(atom, Atom::TableItemRight)) + // out() << "</p>\n"; + break; + case Atom::QuotationLeft: + out() << "<blockquote>"; + break; + case Atom::QuotationRight: + out() << "</blockquote>\n"; + break; + case Atom::RawString: + out() << atom->string(); + break; + case Atom::SectionLeft: +#if 0 + { + int nextLevel = atom->string().toInt(); + if (sectionNumber.size() < nextLevel) { + do { + sectionNumber.append("1"); + } while (sectionNumber.size() < nextLevel); + } + else { + while (sectionNumber.size() > nextLevel) { + sectionNumber.removeLast(); + } + sectionNumber.last() = QString::number(sectionNumber.last().toInt() + 1); + } + out() << "<a name=\"sec-" << sectionNumber.join("-") << "\"></a>\n"; + } +#else + out() << "<a name=\"" << Doc::canonicalTitle(Text::sectionHeading(atom).toString()) + << "\"></a>\n"; +#endif + break; + case Atom::SectionRight: + break; + case Atom::SectionHeadingLeft: + out() << "<h" + QString::number(atom->string().toInt() + hOffset(relative)) + ">"; + inSectionHeading = true; + break; + case Atom::SectionHeadingRight: + out() << "</h" + QString::number(atom->string().toInt() + hOffset(relative)) + ">\n"; + inSectionHeading = false; + break; + case Atom::SidebarLeft: + break; + case Atom::SidebarRight: + break; + case Atom::String: + if (inLink && !inContents && !inSectionHeading) { + generateLink(atom, relative, marker); + } + else { + out() << protectEnc(atom->string()); + } + break; + case Atom::TableLeft: + if (in_para) { + out() << "</p>\n"; + in_para = false; + } + if (!atom->string().isEmpty()) { + if (atom->string().contains("%")) + out() << "<table class=\"generic\">\n "; // width=\"" << atom->string() << "\">\n "; + else { + out() << "<table class=\"generic\">\n"; + } + } + else { + out() << "<table class=\"generic\">\n"; + } + numTableRows = 0; + break; + case Atom::TableRight: + out() << "</table>\n"; + break; + case Atom::TableHeaderLeft: + out() << "<thead><tr class=\"qt-style topAlign\">"; + inTableHeader = true; + break; + case Atom::TableHeaderRight: + out() << "</tr>"; + if (matchAhead(atom, Atom::TableHeaderLeft)) { + skipAhead = 1; + out() << "\n<tr class=\"qt-style topAlign\">"; + } + else { + out() << "</thead>\n"; + inTableHeader = false; + } + break; + case Atom::TableRowLeft: + if (++numTableRows % 2 == 1) + out() << "<tr class=\"odd topAlign\">"; + else + out() << "<tr class=\"even topAlign\">"; + break; + case Atom::TableRowRight: + out() << "</tr>\n"; + break; + case Atom::TableItemLeft: + { + if (inTableHeader) + out() << "<th"; + else + out() << "<td"; + + QStringList spans = atom->string().split(","); + if (spans.size() == 2) { + if (spans.at(0) != "1") + out() << " colspan=\"" << spans.at(0) << "\""; + if (spans.at(1) != "1") + out() << " rowspan=\"" << spans.at(1) << "\""; + if (inTableHeader) + out() << ">"; + else + out() << "><p>"; + } + if (matchAhead(atom, Atom::ParaLeft)) + skipAhead = 1; + } + break; + case Atom::TableItemRight: + if (inTableHeader) + out() << "</th>"; + else + out() << "</p></td>"; + if (matchAhead(atom, Atom::ParaLeft)) + skipAhead = 1; + break; + case Atom::TableOfContents: + { + int numColumns = 1; + const Node *node = relative; + + Doc::SectioningUnit sectioningUnit = Doc::Section4; + QStringList params = atom->string().split(","); + QString columnText = params.at(0); + QStringList pieces = columnText.split(" ", QString::SkipEmptyParts); + if (pieces.size() >= 2) { + columnText = pieces.at(0); + pieces.pop_front(); + QString path = pieces.join(" ").trimmed(); + node = findNodeForTarget(path, relative, marker, atom); + } + + if (params.size() == 2) { + numColumns = qMax(columnText.toInt(), numColumns); + sectioningUnit = (Doc::SectioningUnit)params.at(1).toInt(); + } + + if (node) + generateTableOfContents(node, + marker, + sectioningUnit, + numColumns, + relative); + } + break; + case Atom::Target: + out() << "<a name=\"" << Doc::canonicalTitle(atom->string()) << "\"></a>"; + break; + case Atom::UnhandledFormat: + out() << "<b class=\"redFont\"><Missing DITAXML></b>"; + break; + case Atom::UnknownCommand: + out() << "<b class=\"redFont\"><code>\\" << protectEnc(atom->string()) + << "</code></b>"; + break; +#ifdef QDOC_QML + case Atom::QmlText: + case Atom::EndQmlText: + // don't do anything with these. They are just tags. + break; +#endif + default: + unknownAtom(atom); + } + return skipAhead; +} + +/*! + Generate a reference page for a C++ class. + */ +void DitaXmlGenerator::generateClassLikeNode(const InnerNode *inner, + CodeMarker *marker) +{ + QList<Section> sections; + QList<Section>::ConstIterator s; + + const ClassNode *classe = 0; + const NamespaceNode *namespasse = 0; + + QString title; + QString rawTitle; + QString fullTitle; + if (inner->type() == Node::Namespace) { + namespasse = static_cast<const NamespaceNode *>(inner); + rawTitle = marker->plainName(inner); + fullTitle = marker->plainFullName(inner); + title = rawTitle + " Namespace"; + } + else if (inner->type() == Node::Class) { + classe = static_cast<const ClassNode *>(inner); + rawTitle = marker->plainName(inner); + fullTitle = marker->plainFullName(inner); + title = rawTitle + " Class Reference"; + } + + DcfSection classSection; + classSection.title = title; + classSection.ref = linkForNode(inner, 0); + classSection.keywords += qMakePair(inner->name(), classSection.ref); + + Text subtitleText; + if (rawTitle != fullTitle) + subtitleText << "(" << Atom(Atom::AutoLink, fullTitle) << ")" + << Atom(Atom::LineBreak); + +#if 0 + // No longer used because the modeule name is a breadcrumb. + QString fixedModule = inner->moduleName(); + if (fixedModule == "Qt3SupportLight") + fixedModule = "Qt3Support"; + if (!fixedModule.isEmpty()) + subtitleText << "[" << Atom(Atom::AutoLink, fixedModule) << " module]"; + + if (fixedModule.isEmpty()) { + QMultiMap<QString, QString> publicGroups = myTree->publicGroups(); + QList<QString> groupNames = publicGroups.values(inner->name()); + if (!groupNames.isEmpty()) { + qSort(groupNames.begin(), groupNames.end()); + subtitleText << "["; + for (int j=0; j<groupNames.count(); j++) { + subtitleText << Atom(Atom::AutoLink, groupNames[j]); + if (j<groupNames.count()-1) + subtitleText <<", "; + } + subtitleText << "]"; + } + } +#endif + + generateHeader(title, inner, marker); + sections = marker->sections(inner, CodeMarker::Summary, CodeMarker::Okay); + generateTableOfContents(inner,marker,§ions); + generateTitle(title, subtitleText, SmallSubTitle, inner, marker); + +#ifdef QDOC_QML + if (classe && !classe->qmlElement().isEmpty()) { + generateInstantiatedBy(classe,marker); + } +#endif + + generateBrief(inner, marker); + generateIncludes(inner, marker); + generateStatus(inner, marker); + if (classe) { + generateInherits(classe, marker); + generateInheritedBy(classe, marker); + } + generateThreadSafeness(inner, marker); + generateSince(inner, marker); + + out() << "<ul>\n"; + + QString membersLink = generateListOfAllMemberFile(inner, marker); + if (!membersLink.isEmpty()) + out() << "<li><a href=\"" << membersLink << "\">" + << "List of all members, including inherited members</a></li>\n"; + + QString obsoleteLink = generateLowStatusMemberFile(inner, + marker, + CodeMarker::Obsolete); + if (!obsoleteLink.isEmpty()) + out() << "<li><a href=\"" << obsoleteLink << "\">" + << "Obsolete members</a></li>\n"; + + QString compatLink = generateLowStatusMemberFile(inner, + marker, + CodeMarker::Compat); + if (!compatLink.isEmpty()) + out() << "<li><a href=\"" << compatLink << "\">" + << "Qt 3 support members</a></li>\n"; + + out() << "</ul>\n"; + + bool needOtherSection = false; + + /* + sections is built above for the call to generateTableOfContents(). + */ + s = sections.begin(); + while (s != sections.end()) { + if (s->members.isEmpty() && s->reimpMembers.isEmpty()) { + if (!s->inherited.isEmpty()) + needOtherSection = true; + } + else { + if (!s->members.isEmpty()) { + out() << "<hr />\n"; + out() << "<a name=\"" + << registerRef((*s).name.toLower()) + << "\"></a>\n"; + out() << "<h2>" << protectEnc((*s).name) << "</h2>\n"; + generateSection(s->members, inner, marker, CodeMarker::Summary); + } + if (!s->reimpMembers.isEmpty()) { + QString name = QString("Reimplemented ") + (*s).name; + out() << "<hr />\n"; + out() << "<a name=\"" + << registerRef(name.toLower()) + << "\"></a>\n"; + out() << "<h2>" << protectEnc(name) << "</h2>\n"; + generateSection(s->reimpMembers, inner, marker, CodeMarker::Summary); + } + + if (!s->inherited.isEmpty()) { + out() << "<ul>\n"; + generateSectionInheritedList(*s, inner, marker, true); + out() << "</ul>\n"; + } + } + ++s; + } + + if (needOtherSection) { + out() << "<h3>Additional Inherited Members</h3>\n" + "<ul>\n"; + + s = sections.begin(); + while (s != sections.end()) { + if (s->members.isEmpty() && !s->inherited.isEmpty()) + generateSectionInheritedList(*s, inner, marker); + ++s; + } + out() << "</ul>\n"; + } + + out() << "<a name=\"" << registerRef("details") << "\"></a>\n"; + + if (!inner->doc().isEmpty()) { + out() << "<hr />\n" + << "<div class=\"descr\"/>\n" // QTBUG-9504 + << "<h2>" << "Detailed Description" << "</h2>\n"; + generateBody(inner, marker); + out() << "</div>\n"; // QTBUG-9504 + generateAlsoList(inner, marker); + } + + sections = marker->sections(inner, CodeMarker::Detailed, CodeMarker::Okay); + s = sections.begin(); + while (s != sections.end()) { + out() << "<hr />\n"; + if (!(*s).divClass.isEmpty()) + out() << "<div class=\"" << (*s).divClass << "\"/>\n"; // QTBUG-9504 + out() << "<h2>" << protectEnc((*s).name) << "</h2>\n"; + + NodeList::ConstIterator m = (*s).members.begin(); + while (m != (*s).members.end()) { + if ((*m)->access() != Node::Private) { // ### check necessary? + if ((*m)->type() != Node::Class) + generateDetailedMember(*m, inner, marker); + else { + out() << "<h3> class "; + generateFullName(*m, inner, marker); + out() << "</h3>"; + generateBrief(*m, marker, inner); + } + + QStringList names; + names << (*m)->name(); + if ((*m)->type() == Node::Function) { + const FunctionNode *func = reinterpret_cast<const FunctionNode *>(*m); + if (func->metaness() == FunctionNode::Ctor || + func->metaness() == FunctionNode::Dtor || + func->overloadNumber() != 1) + names.clear(); + } + else if ((*m)->type() == Node::Property) { + const PropertyNode *prop = reinterpret_cast<const PropertyNode *>(*m); + if (!prop->getters().isEmpty() && + !names.contains(prop->getters().first()->name())) + names << prop->getters().first()->name(); + if (!prop->setters().isEmpty()) + names << prop->setters().first()->name(); + if (!prop->resetters().isEmpty()) + names << prop->resetters().first()->name(); + } + else if ((*m)->type() == Node::Enum) { + const EnumNode *enume = reinterpret_cast<const EnumNode*>(*m); + if (enume->flagsType()) + names << enume->flagsType()->name(); + + foreach (const QString &enumName, + enume->doc().enumItemNames().toSet() - + enume->doc().omitEnumItemNames().toSet()) + names << plainCode(marker->markedUpEnumValue(enumName, + enume)); + } + foreach (const QString &name, names) + classSection.keywords += qMakePair(name,linkForNode(*m,0)); + } + ++m; + } + if (!(*s).divClass.isEmpty()) + out() << "</div>\n"; // QTBUG-9504 + ++s; + } + generateFooter(inner); + + if (!membersLink.isEmpty()) { + DcfSection membersSection; + membersSection.title = "List of all members"; + membersSection.ref = membersLink; + appendDcfSubSection(&classSection, membersSection); + } + if (!obsoleteLink.isEmpty()) { + DcfSection obsoleteSection; + obsoleteSection.title = "Obsolete members"; + obsoleteSection.ref = obsoleteLink; + appendDcfSubSection(&classSection, obsoleteSection); + } + if (!compatLink.isEmpty()) { + DcfSection compatSection; + compatSection.title = "Qt 3 support members"; + compatSection.ref = compatLink; + appendDcfSubSection(&classSection, compatSection); + } + + appendDcfSubSection(&dcfClassesRoot, classSection); +} + +/*! + Generate the html page for a qdoc file that doesn't map + to an underlying c++ file. + */ +void DitaXmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker) +{ + SubTitleSize subTitleSize = LargeSubTitle; + DcfSection fakeSection; + fakeSection.title = fake->fullTitle(); + fakeSection.ref = linkForNode(fake, 0); + + QList<Section> sections; + QList<Section>::const_iterator s; + + QString fullTitle = fake->fullTitle(); + QString htmlTitle = fullTitle; + if (fake->subType() == Node::File && !fake->subTitle().isEmpty()) { + subTitleSize = SmallSubTitle; + htmlTitle += " (" + fake->subTitle() + ")"; + } + else if (fake->subType() == Node::QmlBasicType) { + fullTitle = "QML Basic Type: " + fullTitle; + htmlTitle = fullTitle; + } + + generateHeader(htmlTitle, fake, marker); + + /* + Generate the TOC for the new doc format. + Don't generate a TOC for the home page. + */ + if (fake->name() != QString("index.html")) + generateTableOfContents(fake,marker,0); + + generateTitle(fullTitle, + Text() << fake->subTitle(), + subTitleSize, + fake, + marker); + + if (fake->subType() == Node::Module) { + // Generate brief text and status for modules. + generateBrief(fake, marker); + generateStatus(fake, marker); + + if (moduleNamespaceMap.contains(fake->name())) { + out() << "<a name=\"" << registerRef("namespaces") << "\"></a>\n"; + out() << "<h2>Namespaces</h2>\n"; + generateAnnotatedList(fake, marker, moduleNamespaceMap[fake->name()]); + } + if (moduleClassMap.contains(fake->name())) { + out() << "<a name=\"" << registerRef("classes") << "\"></a>\n"; + out() << "<h2>Classes</h2>\n"; + generateAnnotatedList(fake, marker, moduleClassMap[fake->name()]); + } + } + else if (fake->subType() == Node::HeaderFile) { + // Generate brief text and status for modules. + generateBrief(fake, marker); + generateStatus(fake, marker); + + out() << "<ul>\n"; + + QString membersLink = generateListOfAllMemberFile(fake, marker); + if (!membersLink.isEmpty()) + out() << "<li><a href=\"" << membersLink << "\">" + << "List of all members, including inherited members</a></li>\n"; + + QString obsoleteLink = generateLowStatusMemberFile(fake, + marker, + CodeMarker::Obsolete); + if (!obsoleteLink.isEmpty()) + out() << "<li><a href=\"" << obsoleteLink << "\">" + << "Obsolete members</a></li>\n"; + + QString compatLink = generateLowStatusMemberFile(fake, + marker, + CodeMarker::Compat); + if (!compatLink.isEmpty()) + out() << "<li><a href=\"" << compatLink << "\">" + << "Qt 3 support members</a></li>\n"; + + out() << "</ul>\n"; + + if (!membersLink.isEmpty()) { + DcfSection membersSection; + membersSection.title = "List of all members"; + membersSection.ref = membersLink; + appendDcfSubSection(&fakeSection, membersSection); + } + if (!obsoleteLink.isEmpty()) { + DcfSection obsoleteSection; + obsoleteSection.title = "Obsolete members"; + obsoleteSection.ref = obsoleteLink; + appendDcfSubSection(&fakeSection, obsoleteSection); + } + if (!compatLink.isEmpty()) { + DcfSection compatSection; + compatSection.title = "Qt 3 support members"; + compatSection.ref = compatLink; + appendDcfSubSection(&fakeSection, compatSection); + } + } +#ifdef QDOC_QML + else if (fake->subType() == Node::QmlClass) { + const QmlClassNode* qml_cn = static_cast<const QmlClassNode*>(fake); + const ClassNode* cn = qml_cn->classNode(); + generateQmlInherits(qml_cn, marker); + generateQmlInstantiates(qml_cn, marker); + generateBrief(qml_cn, marker); + generateQmlInheritedBy(qml_cn, marker); + sections = marker->qmlSections(qml_cn,CodeMarker::Summary); + s = sections.begin(); + while (s != sections.end()) { + out() << "<a name=\"" << registerRef((*s).name) << "\"></a>\n"; + out() << "<h2>" << protectEnc((*s).name) << "</h2>\n"; + generateQmlSummary(*s,fake,marker); + ++s; + } + + out() << "<a name=\"" << registerRef("details") << "\"></a>\n"; + out() << "<h2>" << "Detailed Description" << "</h2>\n"; + generateBody(fake, marker); + if (cn) + generateQmlText(cn->doc().body(), cn, marker, fake->name()); + generateAlsoList(fake, marker); + out() << "<hr />\n"; + + sections = marker->qmlSections(qml_cn,CodeMarker::Detailed); + s = sections.begin(); + while (s != sections.end()) { + out() << "<h2>" << protectEnc((*s).name) << "</h2>\n"; + NodeList::ConstIterator m = (*s).members.begin(); + while (m != (*s).members.end()) { + generateDetailedQmlMember(*m, fake, marker); + out() << "<br/>\n"; + fakeSection.keywords += qMakePair((*m)->name(), + linkForNode(*m,0)); + ++m; + } + ++s; + } + generateFooter(fake); + return; + } +#endif + + sections = marker->sections(fake, CodeMarker::Summary, CodeMarker::Okay); + s = sections.begin(); + while (s != sections.end()) { + out() << "<a name=\"" << registerRef((*s).name) << "\"></a>\n"; + out() << "<h2>" << protectEnc((*s).name) << "</h2>\n"; + generateSectionList(*s, fake, marker, CodeMarker::Summary); + ++s; + } + + Text brief = fake->doc().briefText(); + if (fake->subType() == Node::Module && !brief.isEmpty()) { + out() << "<a name=\"" << registerRef("details") << "\"></a>\n"; + out() << "<div class=\"descr\"/>\n"; // QTBUG-9504 + out() << "<h2>" << "Detailed Description" << "</h2>\n"; + } + else + out() << "<div class=\"descr\"/>\n"; // QTBUG-9504 + + generateBody(fake, marker); + out() << "</div>\n"; // QTBUG-9504 + generateAlsoList(fake, marker); + + if (!fake->groupMembers().isEmpty()) { + NodeMap groupMembersMap; + foreach (const Node *node, fake->groupMembers()) { + if (node->type() == Node::Class || node->type() == Node::Namespace) + groupMembersMap[node->name()] = node; + } + generateAnnotatedList(fake, marker, groupMembersMap); + } + + fakeSection.keywords += qMakePair(fakeSection.title, fakeSection.ref); + + sections = marker->sections(fake, CodeMarker::Detailed, CodeMarker::Okay); + s = sections.begin(); + while (s != sections.end()) { + out() << "<hr />\n"; + out() << "<h2>" << protectEnc((*s).name) << "</h2>\n"; + + NodeList::ConstIterator m = (*s).members.begin(); + while (m != (*s).members.end()) { + generateDetailedMember(*m, fake, marker); + fakeSection.keywords += qMakePair((*m)->name(), linkForNode(*m, 0)); + ++m; + } + ++s; + } + generateFooter(fake); + + if (fake->subType() == Node::Example) { + appendDcfSubSection(&dcfExamplesRoot, fakeSection); + } + else if (fake->subType() != Node::File) { + QString contentsPage = fake->links().value(Node::ContentsLink).first; + + if (contentsPage == "Qt Designer Manual") { + appendDcfSubSection(&dcfDesignerRoot, fakeSection); + } + else if (contentsPage == "Qt Linguist Manual") { + appendDcfSubSection(&dcfLinguistRoot, fakeSection); + } + else if (contentsPage == "Qt Assistant Manual") { + appendDcfSubSection(&dcfAssistantRoot, fakeSection); + } + else if (contentsPage == "qmake Manual") { + appendDcfSubSection(&dcfQmakeRoot, fakeSection); + } + else { + appendDcfSubSection(&dcfOverviewsRoot, fakeSection); + } + } +} + +/*! + Returns "html" for this subclass of Generator. + */ +QString DitaXmlGenerator::fileExtension(const Node * /* node */) const +{ + return "html"; +} + +/*! + Output breadcrumb list in the html file. + */ +void DitaXmlGenerator::generateBreadCrumbs(const QString& title, + const Node *node, + CodeMarker *marker) +{ + Text breadcrumb; + if (node->type() == Node::Class) { + const ClassNode* cn = static_cast<const ClassNode*>(node); + QString name = node->moduleName(); + out() << " <li><a href=\"modules.html\">All Modules</a></li>"; + if (!name.isEmpty()) { + out() << " <li>"; + breadcrumb << Atom(Atom::AutoLink,name); + generateText(breadcrumb, node, marker); + out() << "</li>\n"; + } + breadcrumb.clear(); + if (!cn->name().isEmpty()) { + out() << " <li>"; + breadcrumb << Atom(Atom::AutoLink,cn->name()); + generateText(breadcrumb, 0, marker); + out() << "</li>\n"; + } + } + else if (node->type() == Node::Fake) { + const FakeNode* fn = static_cast<const FakeNode*>(node); + if (node->subType() == Node::Module) { + out() << " <li><a href=\"modules.html\">All Modules</a></li>"; + QString name = node->name(); + if (!name.isEmpty()) { + out() << " <li>"; + breadcrumb << Atom(Atom::AutoLink,name); + generateText(breadcrumb, 0, marker); + out() << "</li>\n"; + } + } + else if (node->subType() == Node::Group) { + if (fn->name() == QString("modules")) + out() << " <li><a href=\"modules.html\">All Modules</a></li>"; + else { + out() << " <li><a href=\"" << fn->name() << "\">" << title + << "</a></li>"; + } + } + else if (node->subType() == Node::Page) { + if (fn->name() == QString("examples.html")) { + out() << " <li><a href=\"all-examples.html\">Examples</a></li>"; + } + else if (fn->name().startsWith("examples-")) { + out() << " <li><a href=\"all-examples.html\">Examples</a></li>"; + out() << " <li><a href=\"" << fn->name() << "\">" << title + << "</a></li>"; + } + else if (fn->name() == QString("namespaces.html")) { + out() << " <li><a href=\"namespaces.html\">All Namespaces</a></li>"; + } + else { + out() << " <li><a href=\"" << fn->name() << "\">" << title + << "</a></li>"; + } + } + else if (node->subType() == Node::QmlClass) { + out() << " <li><a href=\"qdeclarativeelements.html\">QML Elements</a></li>"; + out() << " <li><a href=\"" << fn->name() << "\">" << title + << "</a></li>"; + } + else if (node->subType() == Node::Example) { + out() << " <li><a href=\"all-examples.html\">Examples</a></li>"; + QStringList sl = fn->name().split('/'); + QString name = "examples-" + sl.at(0) + ".html"; + QString t = CodeParser::titleFromName(name); + out() << " <li><a href=\"" << name << "\">" + << t << "</a></li>"; + out() << " <li><a href=\"" << sl.at(0) + << "-" << sl.at(sl.size()-1) << ".html\">" + << title << "</a></li>"; + } + } + else if (node->type() == Node::Namespace) { + const NamespaceNode* nsn = static_cast<const NamespaceNode*>(node); + out() << " <li><a href=\"namespaces.html\">All Namespaces</a></li>"; + out() << " <li><a href=\"" << fileName(nsn) << "\">" << title + << "</a></li>"; + } +} + +void DitaXmlGenerator::generateHeader(const QString& title, + const Node *node, + CodeMarker *marker) +{ + out() << QString("<?xml version=\"1.0\" encoding=\"%1\"?>\n").arg(outputEncoding); + out() << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n"; + out() << QString("<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"%1\" lang=\"%1\">\n").arg(naturalLanguage); + out() << "<head>\n"; + out() << " <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n"; + QString shortVersion; + shortVersion = project + " " + shortVersion + ": "; + if (node && !node->doc().location().isEmpty()) + out() << "<!-- " << node->doc().location().fileName() << " -->\n"; + + shortVersion = myTree->version(); + if (shortVersion.count(QChar('.')) == 2) + shortVersion.truncate(shortVersion.lastIndexOf(QChar('.'))); + if (!shortVersion.isEmpty()) { + if (project == "QSA") + shortVersion = "QSA " + shortVersion + ": "; + else + shortVersion = "Qt " + shortVersion + ": "; + } + + out() << " <title>" << shortVersion << protectEnc(title) << "</title>\n"; + + out() << " <!--[if IE]>"; + out() << "<meta name=\"MSSmartTagsPreventParsing\" content=\"true\">"; + out() << "<meta http-equiv=\"imagetoolbar\" content=\"no\">"; + out() << "<![endif]-->"; + out() << "<!--[if lt IE 7]>"; + out() << "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style_ie6.css\">"; + out() << "<![endif]-->"; + out() << "<!--[if IE 7]>"; + out() << "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style_ie7.css\">"; + out() << "<![endif]-->"; + out() << "<!--[if IE 8]>"; + out() << "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style_ie8.css\">"; + out() << "<![endif]-->"; + + + //out() << " <title>Qt Reference Documentation</title>"; + out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/style.css\" />\n"; + out() << " <script src=\"scripts/jquery.js\" type=\"text/javascript\"></script>\n"; + out() << " <script src=\"scripts/functions.js\" type=\"text/javascript\"></script>\n"; + out() << "</head>\n"; + + if (offlineDocs) + out() << "<body class=\"offline\" onload=\"CheckEmptyAndLoadList();\">\n"; + else + out() << "<body class=\"\" onload=\"CheckEmptyAndLoadList();\">\n"; + +#ifdef GENERATE_MAC_REFS + if (mainPage) + generateMacRef(node, marker); +#endif + out() << QString(postHeader).replace("\\" + COMMAND_VERSION, myTree->version()); + generateBreadCrumbs(title,node,marker); + out() << QString(postPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); + +#if 0 // Removed for new docf format. MWS + if (node && !node->links().empty()) + out() << "<p>\n" << navigationLinks << "</p>\n"; +#endif +} + +void DitaXmlGenerator::generateTitle(const QString& title, + const Text &subTitle, + SubTitleSize subTitleSize, + const Node *relative, + CodeMarker *marker) +{ + if (!title.isEmpty()) + out() << "<h1 class=\"title\">" << protectEnc(title) << "</h1>\n"; + if (!subTitle.isEmpty()) { + out() << "<span"; + if (subTitleSize == SmallSubTitle) + out() << " class=\"small-subtitle\">"; + else + out() << " class=\"subtitle\">"; + generateText(subTitle, relative, marker); + out() << "</span>\n"; + } +} + +void DitaXmlGenerator::generateFooter(const Node *node) +{ + if (node && !node->links().empty()) + out() << "<p>\n" << navigationLinks << "</p>\n"; + + out() << QString(footer).replace("\\" + COMMAND_VERSION, myTree->version()) + << QString(address).replace("\\" + COMMAND_VERSION, myTree->version()); + out() << " <script src=\"scripts/functions.js\" type=\"text/javascript\"></script>\n"; + out() << "</body>\n"; + out() << "</html>\n"; +} + +void DitaXmlGenerator::generateBrief(const Node *node, CodeMarker *marker, + const Node *relative) +{ + Text brief = node->doc().briefText(); + if (!brief.isEmpty()) { + out() << "<p>"; + generateText(brief, node, marker); + if (!relative || node == relative) + out() << " <a href=\"#"; + else + out() << " <a href=\"" << linkForNode(node, relative) << "#"; + out() << registerRef("details") << "\">More...</a></p>\n"; + } +} + +void DitaXmlGenerator::generateIncludes(const InnerNode *inner, CodeMarker *marker) +{ + if (!inner->includes().isEmpty()) { + out() << "<pre class=\"highlightedCode\">" + << trimmedTrailing(highlightedCode(indent(codeIndent, + marker->markedUpIncludes(inner->includes())), + marker,inner)) + << "</pre>"; + } +} + +/*! + Generates a table of contents begining at \a node. + */ +void DitaXmlGenerator::generateTableOfContents(const Node *node, + CodeMarker *marker, + Doc::SectioningUnit sectioningUnit, + int numColumns, + const Node *relative) + +{ + return; + if (!node->doc().hasTableOfContents()) + return; + QList<Atom *> toc = node->doc().tableOfContents(); + if (toc.isEmpty()) + return; + + QString nodeName = ""; + if (node != relative) + nodeName = node->name(); + + QStringList sectionNumber; + int columnSize = 0; + + QString tdTag; + if (numColumns > 1) { + tdTag = "<td>"; /* width=\"" + QString::number((100 + numColumns - 1) / numColumns) + "%\">";*/ + out() << "<table class=\"toc\">\n<tr class=\"topAlign\">" + << tdTag << "\n"; + } + + // disable nested links in table of contents + inContents = true; + inLink = true; + + for (int i = 0; i < toc.size(); ++i) { + Atom *atom = toc.at(i); + + int nextLevel = atom->string().toInt(); + if (nextLevel > (int)sectioningUnit) + continue; + + if (sectionNumber.size() < nextLevel) { + do { + out() << "<ul>"; + sectionNumber.append("1"); + } while (sectionNumber.size() < nextLevel); + } + else { + while (sectionNumber.size() > nextLevel) { + out() << "</ul>\n"; + sectionNumber.removeLast(); + } + sectionNumber.last() = QString::number(sectionNumber.last().toInt() + 1); + } + int numAtoms; + Text headingText = Text::sectionHeading(atom); + + if (sectionNumber.size() == 1 && columnSize > toc.size() / numColumns) { + out() << "</ul></td>" << tdTag << "<ul>\n"; + columnSize = 0; + } + out() << "<li>"; + out() << "<a href=\"" + << nodeName + << "#" + << Doc::canonicalTitle(headingText.toString()) + << "\">"; + generateAtomList(headingText.firstAtom(), node, marker, true, numAtoms); + out() << "</a></li>\n"; + + ++columnSize; + } + while (!sectionNumber.isEmpty()) { + out() << "</ul>\n"; + sectionNumber.removeLast(); + } + + if (numColumns > 1) + out() << "</td></tr></table>\n"; + + inContents = false; + inLink = false; +} + +/*! + Revised for the new doc format. + Generates a table of contents begining at \a node. + */ +void DitaXmlGenerator::generateTableOfContents(const Node *node, + CodeMarker *marker, + QList<Section>* sections) +{ + QList<Atom*> toc; + if (node->doc().hasTableOfContents()) + toc = node->doc().tableOfContents(); + if (toc.isEmpty() && !sections && (node->subType() != Node::Module)) + return; + + QStringList sectionNumber; + int detailsBase = 0; + + // disable nested links in table of contents + inContents = true; + inLink = true; + + out() << "<div class=\"toc\">\n"; + out() << "<h3>Contents</h3>\n"; + sectionNumber.append("1"); + out() << "<ul>\n"; + + if (node->subType() == Node::Module) { + if (moduleNamespaceMap.contains(node->name())) { + out() << "<li class=\"level" + << sectionNumber.size() + << "\"><a href=\"#" + << registerRef("namespaces") + << "\">Namespaces</a></li>\n"; + } + if (moduleClassMap.contains(node->name())) { + out() << "<li class=\"level" + << sectionNumber.size() + << "\"><a href=\"#" + << registerRef("classes") + << "\">Classes</a></li>\n"; + } + out() << "<li class=\"level" + << sectionNumber.size() + << "\"><a href=\"#" + << registerRef("details") + << "\">Detailed Description</a></li>\n"; + for (int i = 0; i < toc.size(); ++i) { + if (toc.at(i)->string().toInt() == 1) { + detailsBase = 1; + break; + } + } + } + else if (sections && (node->type() == Node::Class)) { + QList<Section>::ConstIterator s = sections->begin(); + while (s != sections->end()) { + if (!s->members.isEmpty() || !s->reimpMembers.isEmpty()) { + out() << "<li class=\"level" + << sectionNumber.size() + << "\"><a href=\"#" + << registerRef((*s).pluralMember) + << "\">" << (*s).name + << "</a></li>\n"; + } + ++s; + } + out() << "<li class=\"level" + << sectionNumber.size() + << "\"><a href=\"#" + << registerRef("details") + << "\">Detailed Description</a></li>\n"; + for (int i = 0; i < toc.size(); ++i) { + if (toc.at(i)->string().toInt() == 1) { + detailsBase = 1; + break; + } + } + } + + for (int i = 0; i < toc.size(); ++i) { + Atom *atom = toc.at(i); + int nextLevel = atom->string().toInt() + detailsBase; + if (sectionNumber.size() < nextLevel) { + do { + sectionNumber.append("1"); + } while (sectionNumber.size() < nextLevel); + } + else { + while (sectionNumber.size() > nextLevel) { + sectionNumber.removeLast(); + } + sectionNumber.last() = QString::number(sectionNumber.last().toInt() + 1); + } + int numAtoms; + Text headingText = Text::sectionHeading(atom); + QString s = headingText.toString(); + out() << "<li class=\"level" + << sectionNumber.size() + << "\">"; + out() << "<a href=\"" + << "#" + << Doc::canonicalTitle(s) + << "\">"; + generateAtomList(headingText.firstAtom(), node, marker, true, numAtoms); + out() << "</a></li>\n"; + } + while (!sectionNumber.isEmpty()) { + sectionNumber.removeLast(); + } + out() << "</ul>\n"; + out() << "</div>\n"; + inContents = false; + inLink = false; +} + +#if 0 +void DitaXmlGenerator::generateNavigationBar(const NavigationBar& bar, + const Node *node, + CodeMarker *marker) +{ + if (bar.prev.begin() != 0 || bar.current.begin() != 0 || + bar.next.begin() != 0) { + out() << "<p class=\"rightAlign\">"; + if (bar.prev.begin() != 0) { +#if 0 + out() << "[<a href=\"" << section.previousBaseName() + << ".html\">Prev: "; + generateText(section.previousHeading(), node, marker); + out() << "</a>]\n"; +#endif + } + if (bar.current.begin() != 0) { + out() << "[<a href=\"" << "home" + << ".html\">Home</a>]\n"; + } + if (bar.next.begin() != 0) { + out() << "[<a href=\"" << fileBase(node, bar.next) + << ".html\">Next: "; + generateText(Text::sectionHeading(bar.next.begin()), node, marker); + out() << "</a>]\n"; + } + out() << "</p>\n"; + } +} +#endif + +QString DitaXmlGenerator::generateListOfAllMemberFile(const InnerNode *inner, + CodeMarker *marker) +{ + QList<Section> sections; + QList<Section>::ConstIterator s; + + sections = marker->sections(inner, + CodeMarker::SeparateList, + CodeMarker::Okay); + if (sections.isEmpty()) + return QString(); + + QString fileName = fileBase(inner) + "-members." + fileExtension(inner); + beginSubPage(inner->location(), fileName); + QString title = "List of All Members for " + inner->name(); + generateHeader(title, inner, marker); + generateTitle(title, Text(), SmallSubTitle, inner, marker); + out() << "<p>This is the complete list of members for "; + generateFullName(inner, 0, marker); + out() << ", including inherited members.</p>\n"; + + Section section = sections.first(); + generateSectionList(section, 0, marker, CodeMarker::SeparateList); + + generateFooter(); + endSubPage(); + return fileName; +} + +QString DitaXmlGenerator::generateLowStatusMemberFile(const InnerNode *inner, + CodeMarker *marker, + CodeMarker::Status status) +{ + QList<Section> sections = marker->sections(inner, + CodeMarker::Summary, + status); + QMutableListIterator<Section> j(sections); + while (j.hasNext()) { + if (j.next().members.size() == 0) + j.remove(); + } + if (sections.isEmpty()) + return QString(); + + int i; + + QString title; + QString fileName; + + if (status == CodeMarker::Compat) { + title = "Qt 3 Support Members for " + inner->name(); + fileName = fileBase(inner) + "-qt3." + fileExtension(inner); + } + else { + title = "Obsolete Members for " + inner->name(); + fileName = fileBase(inner) + "-obsolete." + fileExtension(inner); + } + + beginSubPage(inner->location(), fileName); + generateHeader(title, inner, marker); + generateTitle(title, Text(), SmallSubTitle, inner, marker); + + if (status == CodeMarker::Compat) { + out() << "<p><b>The following class members are part of the " + "<a href=\"qt3support.html\">Qt 3 support layer</a>.</b> " + "They are provided to help you port old code to Qt 4. We advise against " + "using them in new code.</p>\n"; + } + else { + out() << "<p><b>The following class members are obsolete.</b> " + << "They are provided to keep old source code working. " + << "We strongly advise against using them in new code.</p>\n"; + } + + out() << "<p><ul><li><a href=\"" + << linkForNode(inner, 0) << "\">" + << protectEnc(inner->name()) + << " class reference</a></li></ul></p>\n"; + + for (i = 0; i < sections.size(); ++i) { + out() << "<h2>" << protectEnc(sections.at(i).name) << "</h2>\n"; + generateSectionList(sections.at(i), inner, marker, CodeMarker::Summary); + } + + sections = marker->sections(inner, CodeMarker::Detailed, status); + for (i = 0; i < sections.size(); ++i) { + out() << "<hr />\n"; + out() << "<h2>" << protectEnc(sections.at(i).name) << "</h2>\n"; + + NodeList::ConstIterator m = sections.at(i).members.begin(); + while (m != sections.at(i).members.end()) { + if ((*m)->access() != Node::Private) + generateDetailedMember(*m, inner, marker); + ++m; + } + } + + generateFooter(); + endSubPage(); + return fileName; +} + +void DitaXmlGenerator::generateClassHierarchy(const Node *relative, + CodeMarker *marker, + const QMap<QString,const Node*> &classMap) +{ + if (classMap.isEmpty()) + return; + + NodeMap topLevel; + NodeMap::ConstIterator c = classMap.begin(); + while (c != classMap.end()) { + const ClassNode *classe = static_cast<const ClassNode *>(*c); + if (classe->baseClasses().isEmpty()) + topLevel.insert(classe->name(), classe); + ++c; + } + + QStack<NodeMap > stack; + stack.push(topLevel); + + out() << "<ul>\n"; + while (!stack.isEmpty()) { + if (stack.top().isEmpty()) { + stack.pop(); + out() << "</ul>\n"; + } + else { + const ClassNode *child = + static_cast<const ClassNode *>(*stack.top().begin()); + out() << "<li>"; + generateFullName(child, relative, marker); + out() << "</li>\n"; + stack.top().erase(stack.top().begin()); + + NodeMap newTop; + foreach (const RelatedClass &d, child->derivedClasses()) { + if (d.access != Node::Private) + newTop.insert(d.node->name(), d.node); + } + if (!newTop.isEmpty()) { + stack.push(newTop); + out() << "<ul>\n"; + } + } + } +} + +void DitaXmlGenerator::generateAnnotatedList(const Node *relative, + CodeMarker *marker, + const NodeMap &nodeMap) +{ + out() << "<table class=\"annotated\">\n"; + + int row = 0; + foreach (const QString &name, nodeMap.keys()) { + const Node *node = nodeMap[name]; + + if (node->status() == Node::Obsolete) + continue; + + if (++row % 2 == 1) + out() << "<tr class=\"odd topAlign\">"; + else + out() << "<tr class=\"even topAlign\">"; + out() << "<td><p>"; + generateFullName(node, relative, marker); + out() << "</p></td>"; + + if (!(node->type() == Node::Fake)) { + Text brief = node->doc().trimmedBriefText(name); + if (!brief.isEmpty()) { + out() << "<td><p>"; + generateText(brief, node, marker); + out() << "</p></td>"; + } + } + else { + out() << "<td><p>"; + out() << protectEnc(node->doc().briefText().toString()); + out() << "</p></td>"; + } + out() << "</tr>\n"; + } + out() << "</table>\n"; +} + +/*! + This function finds the common prefix of the names of all + the classes in \a classMap and then generates a compact + list of the class names alphabetized on the part of the + name not including the common prefix. You can tell the + function to use \a comonPrefix as the common prefix, but + normally you let it figure it out itself by looking at + the name of the first and last classes in \a classMap. + */ +void DitaXmlGenerator::generateCompactList(const Node *relative, + CodeMarker *marker, + const NodeMap &classMap, + bool includeAlphabet, + QString commonPrefix) +{ + const int NumParagraphs = 37; // '0' to '9', 'A' to 'Z', '_' + + if (classMap.isEmpty()) + return; + + /* + If commonPrefix is not empty, then the caller knows what + the common prefix is and has passed it in, so just use that + one. + */ + int commonPrefixLen = commonPrefix.length(); + if (commonPrefixLen == 0) { + QString first; + QString last; + + /* + The caller didn't pass in a common prefix, so get the common + prefix by looking at the class names of the first and last + classes in the class map. Discard any namespace names and + just use the bare class names. For Qt, the prefix is "Q". + + Note that the algorithm used here to derive the common prefix + from the first and last classes in alphabetical order (QAccel + and QXtWidget in Qt 2.1), fails if either class name does not + begin with Q. + */ + + NodeMap::const_iterator iter = classMap.begin(); + while (iter != classMap.end()) { + if (!iter.key().contains("::")) { + first = iter.key(); + break; + } + ++iter; + } + + if (first.isEmpty()) + first = classMap.begin().key(); + + iter = classMap.end(); + while (iter != classMap.begin()) { + --iter; + if (!iter.key().contains("::")) { + last = iter.key(); + break; + } + } + + if (last.isEmpty()) + last = classMap.begin().key(); + + if (classMap.size() > 1) { + while (commonPrefixLen < first.length() + 1 && + commonPrefixLen < last.length() + 1 && + first[commonPrefixLen] == last[commonPrefixLen]) + ++commonPrefixLen; + } + + commonPrefix = first.left(commonPrefixLen); + } + + /* + Divide the data into 37 paragraphs: 0, ..., 9, A, ..., Z, + underscore (_). QAccel will fall in paragraph 10 (A) and + QXtWidget in paragraph 33 (X). This is the only place where we + assume that NumParagraphs is 37. Each paragraph is a NodeMap. + */ + NodeMap paragraph[NumParagraphs+1]; + QString paragraphName[NumParagraphs+1]; + QSet<char> usedParagraphNames; + + NodeMap::ConstIterator c = classMap.begin(); + while (c != classMap.end()) { + QStringList pieces = c.key().split("::"); + QString key; + int idx = commonPrefixLen; + if (!pieces.last().startsWith(commonPrefix)) + idx = 0; + if (pieces.size() == 1) + key = pieces.last().mid(idx).toLower(); + else + key = pieces.last().toLower(); + + int paragraphNr = NumParagraphs - 1; + + if (key[0].digitValue() != -1) { + paragraphNr = key[0].digitValue(); + } + else if (key[0] >= QLatin1Char('a') && key[0] <= QLatin1Char('z')) { + paragraphNr = 10 + key[0].unicode() - 'a'; + } + + paragraphName[paragraphNr] = key[0].toUpper(); + usedParagraphNames.insert(key[0].toLower().cell()); + paragraph[paragraphNr].insert(key, c.value()); + ++c; + } + + /* + Each paragraph j has a size: paragraph[j].count(). In the + discussion, we will assume paragraphs 0 to 5 will have sizes + 3, 1, 4, 1, 5, 9. + + We now want to compute the paragraph offset. Paragraphs 0 to 6 + start at offsets 0, 3, 4, 8, 9, 14, 23. + */ + int paragraphOffset[NumParagraphs + 1]; // 37 + 1 + paragraphOffset[0] = 0; + for (int i=0; i<NumParagraphs; i++) // i = 0..36 + paragraphOffset[i+1] = paragraphOffset[i] + paragraph[i].count(); + + int curParNr = 0; + int curParOffset = 0; + + /* + Output the alphabet as a row of links. + */ + if (includeAlphabet) { + out() << "<p class=\"centerAlign functionIndex\"><b>"; + for (int i = 0; i < 26; i++) { + QChar ch('a' + i); + if (usedParagraphNames.contains(char('a' + i))) + out() << QString("<a href=\"#%1\">%2</a> ").arg(ch).arg(ch.toUpper()); + } + out() << "</b></p>\n"; + } + + /* + Output a <div> element to contain all the <dl> elements. + */ + out() << "<div class=\"flowListDiv\">\n"; + + for (int i=0; i<classMap.count()-1; i++) { + while ((curParNr < NumParagraphs) && + (curParOffset == paragraph[curParNr].count())) { + ++curParNr; + curParOffset = 0; + } + + /* + Starting a new paragraph means starting a new <dl>. + */ + if (curParOffset == 0) { + if (i > 0) + out() << "</dl>\n"; + if (++numTableRows % 2 == 1) + out() << "<dl class=\"flowList odd\">"; + else + out() << "<dl class=\"flowList even\">"; + out() << "<dt class=\"alphaChar\">"; + if (includeAlphabet) { + QChar c = paragraphName[curParNr][0].toLower(); + out() << QString("<a name=\"%1\"></a>").arg(c); + } + out() << "<b>" + << paragraphName[curParNr] + << "</b>"; + out() << "</dt>\n"; + } + + /* + Output a <dd> for the current offset in the current paragraph. + */ + out() << "<dd>"; + if ((curParNr < NumParagraphs) && + !paragraphName[curParNr].isEmpty()) { + NodeMap::Iterator it; + it = paragraph[curParNr].begin(); + for (int i=0; i<curParOffset; i++) + ++it; + + /* + Previously, we used generateFullName() for this, but we + require some special formatting. + */ + out() << "<a href=\"" << linkForNode(it.value(), relative) << "\">"; + + QStringList pieces; + if (it.value()->subType() == Node::QmlClass) + pieces << it.value()->name(); + else + pieces = fullName(it.value(), relative, marker).split("::"); + out() << protectEnc(pieces.last()); + out() << "</a>"; + if (pieces.size() > 1) { + out() << " ("; + generateFullName(it.value()->parent(), relative, marker); + out() << ")"; + } + } + out() << "</dd>\n"; + curParOffset++; + } + out() << "</dl>\n"; + out() << "</div>\n"; +} + +void DitaXmlGenerator::generateFunctionIndex(const Node *relative, + CodeMarker *marker) +{ + out() << "<p class=\"centerAlign functionIndex\"><b>"; + for (int i = 0; i < 26; i++) { + QChar ch('a' + i); + out() << QString("<a href=\"#%1\">%2</a> ").arg(ch).arg(ch.toUpper()); + } + out() << "</b></p>\n"; + + char nextLetter = 'a'; + char currentLetter; + +#if 1 + out() << "<ul>\n"; +#endif + QMap<QString, NodeMap >::ConstIterator f = funcIndex.begin(); + while (f != funcIndex.end()) { +#if 1 + out() << "<li>"; +#else + out() << "<p>"; +#endif + out() << protectEnc(f.key()) << ":"; + + currentLetter = f.key()[0].unicode(); + while (islower(currentLetter) && currentLetter >= nextLetter) { + out() << QString("<a name=\"%1\"></a>").arg(nextLetter); + nextLetter++; + } + + NodeMap::ConstIterator s = (*f).begin(); + while (s != (*f).end()) { + out() << " "; + generateFullName((*s)->parent(), relative, marker, *s); + ++s; + } +#if 1 + out() << "</li>"; +#else + out() << "</p>"; +#endif + out() << "\n"; + ++f; + } +#if 1 + out() << "</ul>\n"; +#endif +} + +void DitaXmlGenerator::generateLegaleseList(const Node *relative, + CodeMarker *marker) +{ + QMap<Text, const Node *>::ConstIterator it = legaleseTexts.begin(); + while (it != legaleseTexts.end()) { + Text text = it.key(); + out() << "<hr />\n"; + generateText(text, relative, marker); + out() << "<ul>\n"; + do { + out() << "<li>"; + generateFullName(it.value(), relative, marker); + out() << "</li>\n"; + ++it; + } while (it != legaleseTexts.end() && it.key() == text); + out() << "</ul>\n"; + } +} + +/*void DitaXmlGenerator::generateSynopsis(const Node *node, + const Node *relative, + CodeMarker *marker, + CodeMarker::SynopsisStyle style) +{ + QString marked = marker->markedUpSynopsis(node, relative, style); + QRegExp templateTag("(<[^@>]*>)"); + if (marked.indexOf(templateTag) != -1) { + QString contents = protectEnc(marked.mid(templateTag.pos(1), + templateTag.cap(1).length())); + marked.replace(templateTag.pos(1), templateTag.cap(1).length(), + contents); + } + marked.replace(QRegExp("<@param>([a-z]+)_([1-9n])</@param>"), + "<i>\\1<sub>\\2</sub></i>"); + marked.replace("<@param>", "<i>"); + marked.replace("</@param>", "</i>"); + + if (style == CodeMarker::Summary) + marked.replace("@name>", "b>"); + + if (style == CodeMarker::SeparateList) { + QRegExp extraRegExp("<@extra>.*</@extra>"); + extraRegExp.setMinimal(true); + marked.replace(extraRegExp, ""); + } + else { + marked.replace("<@extra>", " <tt>"); + marked.replace("</@extra>", "</tt>"); + } + + if (style != CodeMarker::Detailed) { + marked.replace("<@type>", ""); + marked.replace("</@type>", ""); + } + out() << highlightedCode(marked, marker, relative); +}*/ + +#ifdef QDOC_QML +void DitaXmlGenerator::generateQmlItem(const Node *node, + const Node *relative, + CodeMarker *marker, + bool summary) +{ + QString marked = marker->markedUpQmlItem(node,summary); + QRegExp templateTag("(<[^@>]*>)"); + if (marked.indexOf(templateTag) != -1) { + QString contents = protectEnc(marked.mid(templateTag.pos(1), + templateTag.cap(1).length())); + marked.replace(templateTag.pos(1), templateTag.cap(1).length(), + contents); + } + marked.replace(QRegExp("<@param>([a-z]+)_([1-9n])</@param>"), + "<i>\\1<sub>\\2</sub></i>"); + marked.replace("<@param>", "<i>"); + marked.replace("</@param>", "</i>"); + + if (summary) + marked.replace("@name>", "b>"); + + marked.replace("<@extra>", "<tt>"); + marked.replace("</@extra>", "</tt>"); + + if (summary) { + marked.replace("<@type>", ""); + marked.replace("</@type>", ""); + } + out() << highlightedCode(marked, marker, relative); +} +#endif + +void DitaXmlGenerator::generateOverviewList(const Node *relative, CodeMarker * /* marker */) +{ + QMap<const FakeNode *, QMap<QString, FakeNode *> > fakeNodeMap; + QMap<QString, const FakeNode *> groupTitlesMap; + QMap<QString, FakeNode *> uncategorizedNodeMap; + QRegExp singleDigit("\\b([0-9])\\b"); + + const NodeList children = myTree->root()->childNodes(); + foreach (Node *child, children) { + if (child->type() == Node::Fake && child != relative) { + FakeNode *fakeNode = static_cast<FakeNode *>(child); + + // Check whether the page is part of a group or is the group + // definition page. + QString group; + bool isGroupPage = false; + if (fakeNode->doc().metaCommandsUsed().contains("group")) { + group = fakeNode->doc().metaCommandArgs("group")[0]; + isGroupPage = true; + } + + // there are too many examples; they would clutter the list + if (fakeNode->subType() == Node::Example) + continue; + + // not interested either in individual (Qt Designer etc.) manual chapters + if (fakeNode->links().contains(Node::ContentsLink)) + continue; + + // Discard external nodes. + if (fakeNode->subType() == Node::ExternalPage) + continue; + + QString sortKey = fakeNode->fullTitle().toLower(); + if (sortKey.startsWith("the ")) + sortKey.remove(0, 4); + sortKey.replace(singleDigit, "0\\1"); + + if (!group.isEmpty()) { + if (isGroupPage) { + // If we encounter a group definition page, we add all + // the pages in that group to the list for that group. + foreach (Node *member, fakeNode->groupMembers()) { + if (member->type() != Node::Fake) + continue; + FakeNode *page = static_cast<FakeNode *>(member); + if (page) { + QString sortKey = page->fullTitle().toLower(); + if (sortKey.startsWith("the ")) + sortKey.remove(0, 4); + sortKey.replace(singleDigit, "0\\1"); + fakeNodeMap[const_cast<const FakeNode *>(fakeNode)].insert(sortKey, page); + groupTitlesMap[fakeNode->fullTitle()] = const_cast<const FakeNode *>(fakeNode); + } + } + } + else if (!isGroupPage) { + // If we encounter a page that belongs to a group then + // we add that page to the list for that group. + const FakeNode *groupNode = static_cast<const FakeNode *>(myTree->root()->findNode(group, Node::Fake)); + if (groupNode) + fakeNodeMap[groupNode].insert(sortKey, fakeNode); + //else + // uncategorizedNodeMap.insert(sortKey, fakeNode); + }// else + // uncategorizedNodeMap.insert(sortKey, fakeNode); + }// else + // uncategorizedNodeMap.insert(sortKey, fakeNode); + } + } + + // We now list all the pages found that belong to groups. + // If only certain pages were found for a group, but the definition page + // for that group wasn't listed, the list of pages will be intentionally + // incomplete. However, if the group definition page was listed, all the + // pages in that group are listed for completeness. + + if (!fakeNodeMap.isEmpty()) { + foreach (const QString &groupTitle, groupTitlesMap.keys()) { + const FakeNode *groupNode = groupTitlesMap[groupTitle]; + out() << QString("<h3><a href=\"%1\">%2</a></h3>\n").arg( + linkForNode(groupNode, relative)).arg( + protectEnc(groupNode->fullTitle())); + + if (fakeNodeMap[groupNode].count() == 0) + continue; + + out() << "<ul>\n"; + + foreach (const FakeNode *fakeNode, fakeNodeMap[groupNode]) { + QString title = fakeNode->fullTitle(); + if (title.startsWith("The ")) + title.remove(0, 4); + out() << "<li><a href=\"" << linkForNode(fakeNode, relative) << "\">" + << protectEnc(title) << "</a></li>\n"; + } + out() << "</ul>\n"; + } + } + + if (!uncategorizedNodeMap.isEmpty()) { + out() << QString("<h3>Miscellaneous</h3>\n"); + out() << "<ul>\n"; + foreach (const FakeNode *fakeNode, uncategorizedNodeMap) { + QString title = fakeNode->fullTitle(); + if (title.startsWith("The ")) + title.remove(0, 4); + out() << "<li><a href=\"" << linkForNode(fakeNode, relative) << "\">" + << protectEnc(title) << "</a></li>\n"; + } + out() << "</ul>\n"; + } +} + +#ifdef QDOC_NAME_ALIGNMENT +void DitaXmlGenerator::generateSection(const NodeList& nl, + const Node *relative, + CodeMarker *marker, + CodeMarker::SynopsisStyle style) +{ + bool name_alignment = true; + if (!nl.isEmpty()) { + bool twoColumn = false; + if (style == CodeMarker::SeparateList) { + name_alignment = false; + twoColumn = (nl.count() >= 16); + } + else if (nl.first()->type() == Node::Property) { + twoColumn = (nl.count() >= 5); + name_alignment = false; + } + if (name_alignment) { + out() << "<table class=\"alignedsummary\">\n"; + } + else { + if (twoColumn) + out() << "<table class=\"propsummary\">\n" + << "<tr><td class=\"topAlign\">"; + out() << "<ul>\n"; + } + + int i = 0; + NodeList::ConstIterator m = nl.begin(); + while (m != nl.end()) { + if ((*m)->access() == Node::Private) { + ++m; + continue; + } + + if (name_alignment) { + out() << "<tr><td class=\"memItemLeft rightAlign topAlign\"> "; + } + else { + if (twoColumn && i == (int) (nl.count() + 1) / 2) + out() << "</ul></td><td class=\"topAlign\"><ul>\n"; + out() << "<li class=\"fn\">"; + } + + generateSynopsis(*m, relative, marker, style, name_alignment); + if (name_alignment) + out() << "</td></tr>\n"; + else + out() << "</li>\n"; + i++; + ++m; + } + if (name_alignment) + out() << "</table>\n"; + else { + out() << "</ul>\n"; + if (twoColumn) + out() << "</td></tr>\n</table>\n"; + } + } +} + +void DitaXmlGenerator::generateSectionList(const Section& section, + const Node *relative, + CodeMarker *marker, + CodeMarker::SynopsisStyle style) +{ + bool name_alignment = true; + if (!section.members.isEmpty()) { + bool twoColumn = false; + if (style == CodeMarker::SeparateList) { + name_alignment = false; + twoColumn = (section.members.count() >= 16); + } + else if (section.members.first()->type() == Node::Property) { + twoColumn = (section.members.count() >= 5); + name_alignment = false; + } + if (name_alignment) { + out() << "<table class=\"alignedsummary\">\n"; + } + else { + if (twoColumn) + out() << "<table class=\"propsummary\">\n" + << "<tr><td class=\"topAlign\">"; + out() << "<ul>\n"; + } + + int i = 0; + NodeList::ConstIterator m = section.members.begin(); + while (m != section.members.end()) { + if ((*m)->access() == Node::Private) { + ++m; + continue; + } + + if (name_alignment) { + out() << "<tr><td class=\"memItemLeft topAlign rightAlign\"> "; + } + else { + if (twoColumn && i == (int) (section.members.count() + 1) / 2) + out() << "</ul></td><td class=\"topAlign\"><ul>\n"; + out() << "<li class=\"fn\">"; + } + + generateSynopsis(*m, relative, marker, style, name_alignment); + if (name_alignment) + out() << "</td></tr>\n"; + else + out() << "</li>\n"; + i++; + ++m; + } + if (name_alignment) + out() << "</table>\n"; + else { + out() << "</ul>\n"; + if (twoColumn) + out() << "</td></tr>\n</table>\n"; + } + } + + if (style == CodeMarker::Summary && !section.inherited.isEmpty()) { + out() << "<ul>\n"; + generateSectionInheritedList(section, relative, marker, name_alignment); + out() << "</ul>\n"; + } +} + +void DitaXmlGenerator::generateSectionInheritedList(const Section& section, + const Node *relative, + CodeMarker *marker, + bool nameAlignment) +{ + QList<QPair<ClassNode *, int> >::ConstIterator p = section.inherited.begin(); + while (p != section.inherited.end()) { + if (nameAlignment) + out() << "<li class=\"fn\">"; + else + out() << "<li class=\"fn\">"; + out() << (*p).second << " "; + if ((*p).second == 1) { + out() << section.singularMember; + } + else { + out() << section.pluralMember; + } + out() << " inherited from <a href=\"" << fileName((*p).first) + << "#" << DitaXmlGenerator::cleanRef(section.name.toLower()) << "\">" + << protectEnc(marker->plainFullName((*p).first, relative)) + << "</a></li>\n"; + ++p; + } +} + +void DitaXmlGenerator::generateSynopsis(const Node *node, + const Node *relative, + CodeMarker *marker, + CodeMarker::SynopsisStyle style, + bool nameAlignment) +{ + QString marked = marker->markedUpSynopsis(node, relative, style); + QRegExp templateTag("(<[^@>]*>)"); + if (marked.indexOf(templateTag) != -1) { + QString contents = protectEnc(marked.mid(templateTag.pos(1), + templateTag.cap(1).length())); + marked.replace(templateTag.pos(1), templateTag.cap(1).length(), + contents); + } + marked.replace(QRegExp("<@param>([a-z]+)_([1-9n])</@param>"), + "<i>\\1<sub>\\2</sub></i>"); + marked.replace("<@param>", "<i>"); + marked.replace("</@param>", "</i>"); + + if (style == CodeMarker::Summary) { + marked.replace("<@name>", ""); // was "<b>" + marked.replace("</@name>", ""); // was "</b>" + } + + if (style == CodeMarker::SeparateList) { + QRegExp extraRegExp("<@extra>.*</@extra>"); + extraRegExp.setMinimal(true); + marked.replace(extraRegExp, ""); + } else { + marked.replace("<@extra>", "<tt>"); + marked.replace("</@extra>", "</tt>"); + } + + if (style != CodeMarker::Detailed) { + marked.replace("<@type>", ""); + marked.replace("</@type>", ""); + } + out() << highlightedCode(marked, marker, relative, style, nameAlignment); +} + +QString DitaXmlGenerator::highlightedCode(const QString& markedCode, + CodeMarker *marker, + const Node *relative, + CodeMarker::SynopsisStyle , + bool nameAlignment) +{ + QString src = markedCode; + QString html; + QStringRef arg; + QStringRef par1; + + const QChar charLangle = '<'; + const QChar charAt = '@'; + + // replace all <@link> tags: "(<@link node=\"([^\"]+)\">).*(</@link>)" + static const QString linkTag("link"); + bool done = false; + for (int i = 0, n = src.size(); i < n;) { + if (src.at(i) == charLangle && src.at(i + 1).unicode() == '@') { + if (nameAlignment && !done) {// && (i != 0)) Why was this here? + html += "</td><td class=\"memItemRight bottomAlign\">"; + done = true; + } + i += 2; + if (parseArg(src, linkTag, &i, n, &arg, &par1)) { + html += "<b>"; + QString link = linkForNode( + CodeMarker::nodeForString(par1.toString()), relative); + addLink(link, arg, &html); + html += "</b>"; + } + else { + html += charLangle; + html += charAt; + } + } + else { + html += src.at(i++); + } + } + + + if (slow) { + // is this block ever used at all? + // replace all <@func> tags: "(<@func target=\"([^\"]*)\">)(.*)(</@func>)" + src = html; + html = QString(); + static const QString funcTag("func"); + for (int i = 0, n = src.size(); i < n;) { + if (src.at(i) == charLangle && src.at(i + 1) == charAt) { + i += 2; + if (parseArg(src, funcTag, &i, n, &arg, &par1)) { + QString link = linkForNode( + marker->resolveTarget(par1.toString(), + myTree, + relative), + relative); + addLink(link, arg, &html); + par1 = QStringRef(); + } + else { + html += charLangle; + html += charAt; + } + } + else { + html += src.at(i++); + } + } + } + + // replace all "(<@(type|headerfile|func)(?: +[^>]*)?>)(.*)(</@\\2>)" tags + src = html; + html = QString(); + static const QString typeTags[] = { "type", "headerfile", "func" }; + for (int i = 0, n = src.size(); i < n;) { + if (src.at(i) == charLangle && src.at(i + 1) == charAt) { + i += 2; + bool handled = false; + for (int k = 0; k != 3; ++k) { + if (parseArg(src, typeTags[k], &i, n, &arg, &par1)) { + par1 = QStringRef(); + QString link = linkForNode( + marker->resolveTarget(arg.toString(), myTree, relative), + relative); + addLink(link, arg, &html); + handled = true; + break; + } + } + if (!handled) { + html += charLangle; + html += charAt; + } + } + else { + html += src.at(i++); + } + } + + // replace all + // "<@comment>" -> "<span class=\"comment\">"; + // "<@preprocessor>" -> "<span class=\"preprocessor\">"; + // "<@string>" -> "<span class=\"string\">"; + // "<@char>" -> "<span class=\"char\">"; + // "</@(?:comment|preprocessor|string|char)>" -> "</span>" + src = html; + html = QString(); + static const QString spanTags[] = { + "<@comment>", "<span class=\"comment\">", + "<@preprocessor>", "<span class=\"preprocessor\">", + "<@string>", "<span class=\"string\">", + "<@char>", "<span class=\"char\">", + "</@comment>", "</span>", + "</@preprocessor>","</span>", + "</@string>", "</span>", + "</@char>", "</span>" + // "<@char>", "<font color=blue>", + // "</@char>", "</font>", + // "<@func>", "<font color=green>", + // "</@func>", "</font>", + // "<@id>", "<i>", + // "</@id>", "</i>", + // "<@keyword>", "<b>", + // "</@keyword>", "</b>", + // "<@number>", "<font color=yellow>", + // "</@number>", "</font>", + // "<@op>", "<b>", + // "</@op>", "</b>", + // "<@param>", "<i>", + // "</@param>", "</i>", + // "<@string>", "<font color=green>", + // "</@string>", "</font>", + }; + for (int i = 0, n = src.size(); i < n;) { + if (src.at(i) == charLangle) { + bool handled = false; + for (int k = 0; k != 8; ++k) { + const QString & tag = spanTags[2 * k]; + if (tag == QStringRef(&src, i, tag.length())) { + html += spanTags[2 * k + 1]; + i += tag.length(); + handled = true; + break; + } + } + if (!handled) { + ++i; + if (src.at(i) == charAt || + (src.at(i) == QLatin1Char('/') && src.at(i + 1) == charAt)) { + // drop 'our' unknown tags (the ones still containing '@') + while (i < n && src.at(i) != QLatin1Char('>')) + ++i; + ++i; + } + else { + // retain all others + html += charLangle; + } + } + } + else { + html += src.at(i); + ++i; + } + } + + return html; +} + +#else +void DitaXmlGenerator::generateSectionList(const Section& section, + const Node *relative, + CodeMarker *marker, + CodeMarker::SynopsisStyle style) +{ + if (!section.members.isEmpty()) { + bool twoColumn = false; + if (style == CodeMarker::SeparateList) { + twoColumn = (section.members.count() >= 16); + } + else if (section.members.first()->type() == Node::Property) { + twoColumn = (section.members.count() >= 5); + } + if (twoColumn) + out() << "<table class=\"generic\">\n"; + if (++numTableRows % 2 == 1) + out() << "<tr class=\"odd topAlign\">"; + else + out() << "<tr class=\"even topAlign\">"; + +// << "<tr><td class=\"topAlign\">"; + out() << "<ul>\n"; + + int i = 0; + NodeList::ConstIterator m = section.members.begin(); + while (m != section.members.end()) { + if ((*m)->access() == Node::Private) { + ++m; + continue; + } + + if (twoColumn && i == (int) (section.members.count() + 1) / 2) + out() << "</ul></td><td class=\"topAlign\"><ul>\n"; + + out() << "<li class=\"fn\">"; + if (style == CodeMarker::Accessors) + out() << "<b>"; + generateSynopsis(*m, relative, marker, style); + if (style == CodeMarker::Accessors) + out() << "</b>"; + out() << "</li>\n"; + i++; + ++m; + } + out() << "</ul>\n"; + if (twoColumn) + out() << "</td></tr>\n</table>\n"; + } + + if (style == CodeMarker::Summary && !section.inherited.isEmpty()) { + out() << "<ul>\n"; + generateSectionInheritedList(section, relative, marker); + out() << "</ul>\n"; + } +} + +void DitaXmlGenerator::generateSectionInheritedList(const Section& section, + const Node *relative, + CodeMarker *marker) +{ + QList<QPair<ClassNode *, int> >::ConstIterator p = section.inherited.begin(); + while (p != section.inherited.end()) { + out() << "<li class=\"fn\">"; + out() << (*p).second << " "; + if ((*p).second == 1) { + out() << section.singularMember; + } else { + out() << section.pluralMember; + } + out() << " inherited from <a href=\"" << fileName((*p).first) + << "#" << DitaXmlGenerator::cleanRef(section.name.toLower()) << "\">" + << protectEnc(marker->plainFullName((*p).first, relative)) + << "</a></li>\n"; + ++p; + } +} + +void DitaXmlGenerator::generateSynopsis(const Node *node, + const Node *relative, + CodeMarker *marker, + CodeMarker::SynopsisStyle style) +{ + QString marked = marker->markedUpSynopsis(node, relative, style); + QRegExp templateTag("(<[^@>]*>)"); + if (marked.indexOf(templateTag) != -1) { + QString contents = protectEnc(marked.mid(templateTag.pos(1), + templateTag.cap(1).length())); + marked.replace(templateTag.pos(1), templateTag.cap(1).length(), + contents); + } + marked.replace(QRegExp("<@param>([a-z]+)_([1-9n])</@param>"), "<i>\\1<sub>\\2</sub></i>"); + marked.replace("<@param>", "<i>"); + marked.replace("</@param>", "</i>"); + + if (style == CodeMarker::Summary) + marked.replace("@name>", "b>"); + + if (style == CodeMarker::SeparateList) { + QRegExp extraRegExp("<@extra>.*</@extra>"); + extraRegExp.setMinimal(true); + marked.replace(extraRegExp, ""); + } else { + marked.replace("<@extra>", "<tt>"); + marked.replace("</@extra>", "</tt>"); + } + + if (style != CodeMarker::Detailed) { + marked.replace("<@type>", ""); + marked.replace("</@type>", ""); + } + out() << highlightedCode(marked, marker, relative); +} + +QString DitaXmlGenerator::highlightedCode(const QString& markedCode, + CodeMarker *marker, + const Node *relative) +{ + QString src = markedCode; + QString html; + QStringRef arg; + QStringRef par1; + + const QChar charLangle = '<'; + const QChar charAt = '@'; + + // replace all <@link> tags: "(<@link node=\"([^\"]+)\">).*(</@link>)" + static const QString linkTag("link"); + for (int i = 0, n = src.size(); i < n;) { + if (src.at(i) == charLangle && src.at(i + 1) == charAt) { + i += 2; + if (parseArg(src, linkTag, &i, n, &arg, &par1)) { + const Node* node = CodeMarker::nodeForString(par1.toString()); + QString link = linkForNode(node, relative); + addLink(link, arg, &html); + } + else { + html += charLangle; + html += charAt; + } + } + else { + html += src.at(i++); + } + } + + if (slow) { + // is this block ever used at all? + // replace all <@func> tags: "(<@func target=\"([^\"]*)\">)(.*)(</@func>)" + src = html; + html = QString(); + static const QString funcTag("func"); + for (int i = 0, n = src.size(); i < n;) { + if (src.at(i) == charLangle && src.at(i + 1) == charAt) { + i += 2; + if (parseArg(src, funcTag, &i, n, &arg, &par1)) { + QString link = linkForNode( + marker->resolveTarget(par1.toString(), + myTree, + relative), + relative); + addLink(link, arg, &html); + par1 = QStringRef(); + } + else { + html += charLangle; + html += charAt; + } + } + else { + html += src.at(i++); + } + } + } + + // replace all "(<@(type|headerfile|func)(?: +[^>]*)?>)(.*)(</@\\2>)" tags + src = html; + html = QString(); + static const QString typeTags[] = { "type", "headerfile", "func" }; + for (int i = 0, n = src.size(); i < n;) { + if (src.at(i) == charLangle && src.at(i + 1) == charAt) { + i += 2; + bool handled = false; + for (int k = 0; k != 3; ++k) { + if (parseArg(src, typeTags[k], &i, n, &arg, &par1)) { + par1 = QStringRef(); + QString link = linkForNode( + marker->resolveTarget(arg.toString(), myTree, relative), + relative); + addLink(link, arg, &html); + handled = true; + break; + } + } + if (!handled) { + html += charLangle; + html += charAt; + } + } + else { + html += src.at(i++); + } + } + + // replace all + // "<@comment>" -> "<span class=\"comment\">"; + // "<@preprocessor>" -> "<span class=\"preprocessor\">"; + // "<@string>" -> "<span class=\"string\">"; + // "<@char>" -> "<span class=\"char\">"; + // "</@(?:comment|preprocessor|string|char)>" -> "</span>" + src = html; + html = QString(); + static const QString spanTags[] = { + "<@comment>", "<span class=\"comment\">", + "<@preprocessor>", "<span class=\"preprocessor\">", + "<@string>", "<span class=\"string\">", + "<@char>", "<span class=\"char\">", + "</@comment>", "</span>", + "</@preprocessor>","</span>", + "</@string>", "</span>", + "</@char>", "</span>" + // "<@char>", "<font color=blue>", + // "</@char>", "</font>", + // "<@func>", "<font color=green>", + // "</@func>", "</font>", + // "<@id>", "<i>", + // "</@id>", "</i>", + // "<@keyword>", "<b>", + // "</@keyword>", "</b>", + // "<@number>", "<font color=yellow>", + // "</@number>", "</font>", + // "<@op>", "<b>", + // "</@op>", "</b>", + // "<@param>", "<i>", + // "</@param>", "</i>", + // "<@string>", "<font color=green>", + // "</@string>", "</font>", + }; + for (int i = 0, n = src.size(); i < n;) { + if (src.at(i) == charLangle) { + bool handled = false; + for (int k = 0; k != 8; ++k) { + const QString & tag = spanTags[2 * k]; + if (tag == QStringRef(&src, i, tag.length())) { + html += spanTags[2 * k + 1]; + i += tag.length(); + handled = true; + break; + } + } + if (!handled) { + ++i; + if (src.at(i) == charAt || + (src.at(i) == QLatin1Char('/') && src.at(i + 1) == charAt)) { + // drop 'our' unknown tags (the ones still containing '@') + while (i < n && src.at(i) != QLatin1Char('>')) + ++i; + ++i; + } + else { + // retain all others + html += charLangle; + } + } + } + else { + html += src.at(i); + ++i; + } + } + + return html; +} +#endif + +void DitaXmlGenerator::generateLink(const Atom* atom, + const Node* /* relative */, + CodeMarker* marker) +{ + static QRegExp camelCase("[A-Z][A-Z][a-z]|[a-z][A-Z0-9]|_"); + + if (funcLeftParen.indexIn(atom->string()) != -1 && marker->recognizeLanguage("Cpp")) { + // hack for C++: move () outside of link + int k = funcLeftParen.pos(1); + out() << protectEnc(atom->string().left(k)); + if (link.isEmpty()) { + if (showBrokenLinks) + out() << "</i>"; + } else { + out() << "</a>"; + } + inLink = false; + out() << protectEnc(atom->string().mid(k)); + } else if (marker->recognizeLanguage("Java")) { + // hack for Java: remove () and use <tt> when appropriate + bool func = atom->string().endsWith("()"); + bool tt = (func || atom->string().contains(camelCase)); + if (tt) + out() << "<tt>"; + if (func) { + out() << protectEnc(atom->string().left(atom->string().length() - 2)); + } else { + out() << protectEnc(atom->string()); + } + out() << "</tt>"; + } else { + out() << protectEnc(atom->string()); + } +} + +QString DitaXmlGenerator::cleanRef(const QString& ref) +{ + QString clean; + + if (ref.isEmpty()) + return clean; + + clean.reserve(ref.size() + 20); + const QChar c = ref[0]; + const uint u = c.unicode(); + + if ((u >= 'a' && u <= 'z') || + (u >= 'A' && u <= 'Z') || + (u >= '0' && u <= '9')) { + clean += c; + } else if (u == '~') { + clean += "dtor."; + } else if (u == '_') { + clean += "underscore."; + } else { + clean += "A"; + } + + for (int i = 1; i < (int) ref.length(); i++) { + const QChar c = ref[i]; + const uint u = c.unicode(); + if ((u >= 'a' && u <= 'z') || + (u >= 'A' && u <= 'Z') || + (u >= '0' && u <= '9') || u == '-' || + u == '_' || u == ':' || u == '.') { + clean += c; + } else if (c.isSpace()) { + clean += "-"; + } else if (u == '!') { + clean += "-not"; + } else if (u == '&') { + clean += "-and"; + } else if (u == '<') { + clean += "-lt"; + } else if (u == '=') { + clean += "-eq"; + } else if (u == '>') { + clean += "-gt"; + } else if (u == '#') { + clean += "#"; + } else { + clean += "-"; + clean += QString::number((int)u, 16); + } + } + return clean; +} + +QString DitaXmlGenerator::registerRef(const QString& ref) +{ + QString clean = DitaXmlGenerator::cleanRef(ref); + + for (;;) { + QString& prevRef = refMap[clean.toLower()]; + if (prevRef.isEmpty()) { + prevRef = ref; + break; + } else if (prevRef == ref) { + break; + } + clean += "x"; + } + return clean; +} + +QString DitaXmlGenerator::protectEnc(const QString &string) +{ + return protect(string, outputEncoding); +} + +QString DitaXmlGenerator::protect(const QString &string, const QString &outputEncoding) +{ +#define APPEND(x) \ + if (html.isEmpty()) { \ + html = string; \ + html.truncate(i); \ + } \ + html += (x); + + QString html; + int n = string.length(); + + for (int i = 0; i < n; ++i) { + QChar ch = string.at(i); + + if (ch == QLatin1Char('&')) { + APPEND("&"); + } else if (ch == QLatin1Char('<')) { + APPEND("<"); + } else if (ch == QLatin1Char('>')) { + APPEND(">"); + } else if (ch == QLatin1Char('"')) { + APPEND("""); + } else if ((outputEncoding == "ISO-8859-1" && ch.unicode() > 0x007F) + || (ch == QLatin1Char('*') && i + 1 < n && string.at(i) == QLatin1Char('/')) + || (ch == QLatin1Char('.') && i > 2 && string.at(i - 2) == QLatin1Char('.'))) { + // we escape '*/' and the last dot in 'e.g.' and 'i.e.' for the Javadoc generator + APPEND("&#x"); + html += QString::number(ch.unicode(), 16); + html += QLatin1Char(';'); + } else { + if (!html.isEmpty()) + html += ch; + } + } + + if (!html.isEmpty()) + return html; + return string; + +#undef APPEND +} + +QString DitaXmlGenerator::fileBase(const Node *node) +{ + QString result; + + result = PageGenerator::fileBase(node); + + if (!node->isInnerNode()) { + switch (node->status()) { + case Node::Compat: + result += "-qt3"; + break; + case Node::Obsolete: + result += "-obsolete"; + break; + default: + ; + } + } + return result; +} + +#if 0 +QString DitaXmlGenerator::fileBase(const Node *node, + const SectionIterator& section) +{ + QStringList::ConstIterator s = section.sectionNumber().end(); + QStringList::ConstIterator b = section.baseNameStack().end(); + + QString suffix; + QString base = fileBase(node); + + while (s != section.sectionNumber().begin()) { + --s; + --b; + if (!(*b).isEmpty()) { + base = *b; + break; + } + suffix.prepend("-" + *s); + } + return base + suffix; +} +#endif + +QString DitaXmlGenerator::fileName(const Node *node) +{ + if (node->type() == Node::Fake) { + if (static_cast<const FakeNode *>(node)->subType() == Node::ExternalPage) + return node->name(); + if (static_cast<const FakeNode *>(node)->subType() == Node::Image) + return node->name(); + } + return PageGenerator::fileName(node); +} + +QString DitaXmlGenerator::refForNode(const Node *node) +{ + const FunctionNode *func; + const TypedefNode *typedeffe; + QString ref; + + switch (node->type()) { + case Node::Namespace: + case Node::Class: + default: + break; + case Node::Enum: + ref = node->name() + "-enum"; + break; + case Node::Typedef: + typedeffe = static_cast<const TypedefNode *>(node); + if (typedeffe->associatedEnum()) { + return refForNode(typedeffe->associatedEnum()); + } + else { + ref = node->name() + "-typedef"; + } + break; + case Node::Function: + func = static_cast<const FunctionNode *>(node); + if (func->associatedProperty()) { + return refForNode(func->associatedProperty()); + } + else { + ref = func->name(); + if (func->overloadNumber() != 1) + ref += "-" + QString::number(func->overloadNumber()); + } + break; +#ifdef QDOC_QML + case Node::Fake: + if (node->subType() != Node::QmlPropertyGroup) + break; + case Node::QmlProperty: +#endif + case Node::Property: + ref = node->name() + "-prop"; + break; +#ifdef QDOC_QML + case Node::QmlSignal: + ref = node->name() + "-signal"; + break; + case Node::QmlMethod: + ref = node->name() + "-method"; + break; +#endif + case Node::Variable: + ref = node->name() + "-var"; + break; + case Node::Target: + return protectEnc(node->name()); + } + return registerRef(ref); +} + +QString DitaXmlGenerator::linkForNode(const Node *node, const Node *relative) +{ + QString link; + QString fn; + QString ref; + + if (node == 0 || node == relative) + return QString(); + if (!node->url().isEmpty()) + return node->url(); + if (fileBase(node).isEmpty()) + return QString(); + if (node->access() == Node::Private) + return QString(); + + fn = fileName(node); +/* if (!node->url().isEmpty()) + return fn;*/ +#if 0 + // ### reintroduce this test, without breaking .dcf files + if (fn != outFileName()) +#endif + link += fn; + + if (!node->isInnerNode() || node->subType() == Node::QmlPropertyGroup) { + ref = refForNode(node); + if (relative && fn == fileName(relative) && ref == refForNode(relative)) + return QString(); + + link += "#"; + link += ref; + } + return link; +} + +QString DitaXmlGenerator::refForAtom(Atom *atom, const Node * /* node */) +{ + if (atom->type() == Atom::SectionLeft) { + return Doc::canonicalTitle(Text::sectionHeading(atom).toString()); + } + else if (atom->type() == Atom::Target) { + return Doc::canonicalTitle(atom->string()); + } + else { + return QString(); + } +} + +void DitaXmlGenerator::generateFullName(const Node *apparentNode, + const Node *relative, + CodeMarker *marker, + const Node *actualNode) +{ + if (actualNode == 0) + actualNode = apparentNode; + out() << "<a href=\"" << linkForNode(actualNode, relative); + if (true || relative == 0 || relative->status() != actualNode->status()) { + switch (actualNode->status()) { + case Node::Obsolete: + out() << "\" class=\"obsolete"; + break; + case Node::Compat: + out() << "\" class=\"compat"; + break; + default: + ; + } + } + out() << "\">"; + out() << protectEnc(fullName(apparentNode, relative, marker)); + out() << "</a>"; +} + +void DitaXmlGenerator::generateDetailedMember(const Node *node, + const InnerNode *relative, + CodeMarker *marker) +{ + const EnumNode *enume; + +#ifdef GENERATE_MAC_REFS + generateMacRef(node, marker); +#endif + if (node->type() == Node::Enum + && (enume = static_cast<const EnumNode *>(node))->flagsType()) { +#ifdef GENERATE_MAC_REFS + generateMacRef(enume->flagsType(), marker); +#endif + out() << "<h3 class=\"flags\">"; + out() << "<a name=\"" + refForNode(node) + "\"></a>"; + generateSynopsis(enume, relative, marker, CodeMarker::Detailed); + out() << "<br/>"; + generateSynopsis(enume->flagsType(), + relative, + marker, + CodeMarker::Detailed); + out() << "</h3>\n"; + } + else { + out() << "<h3 class=\"fn\">"; + out() << "<a name=\"" + refForNode(node) + "\"></a>"; + generateSynopsis(node, relative, marker, CodeMarker::Detailed); + out() << "</h3>\n"; + } + + generateStatus(node, marker); + generateBody(node, marker); + generateThreadSafeness(node, marker); + generateSince(node, marker); + + if (node->type() == Node::Property) { + const PropertyNode *property = static_cast<const PropertyNode *>(node); + Section section; + + section.members += property->getters(); + section.members += property->setters(); + section.members += property->resetters(); + + if (!section.members.isEmpty()) { + out() << "<p><b>Access functions:</b></p>\n"; + generateSectionList(section, node, marker, CodeMarker::Accessors); + } + + Section notifiers; + notifiers.members += property->notifiers(); + + if (!notifiers.members.isEmpty()) { + out() << "<p><b>Notifier signal:</b></p>\n"; + //out() << "<p>This signal is emitted when the property value is changed.</p>\n"; + generateSectionList(notifiers, node, marker, CodeMarker::Accessors); + } + } + else if (node->type() == Node::Enum) { + const EnumNode *enume = static_cast<const EnumNode *>(node); + if (enume->flagsType()) { + out() << "<p>The " << protectEnc(enume->flagsType()->name()) + << " type is a typedef for " + << "<a href=\"qflags.html\">QFlags</a><" + << protectEnc(enume->name()) + << ">. It stores an OR combination of " + << protectEnc(enume->name()) + << " values.</p>\n"; + } + } + generateAlsoList(node, marker); +} + +void DitaXmlGenerator::findAllClasses(const InnerNode *node) +{ + NodeList::const_iterator c = node->childNodes().constBegin(); + while (c != node->childNodes().constEnd()) { + if ((*c)->access() != Node::Private && (*c)->url().isEmpty()) { + if ((*c)->type() == Node::Class && !(*c)->doc().isEmpty()) { + QString className = (*c)->name(); + if ((*c)->parent() && + (*c)->parent()->type() == Node::Namespace && + !(*c)->parent()->name().isEmpty()) + className = (*c)->parent()->name()+"::"+className; + + if (!(static_cast<const ClassNode *>(*c))->hideFromMainList()) { + if ((*c)->status() == Node::Compat) { + compatClasses.insert(className, *c); + } + else if ((*c)->status() == Node::Obsolete) { + obsoleteClasses.insert(className, *c); + } + else { + nonCompatClasses.insert(className, *c); + if ((*c)->status() == Node::Main) + mainClasses.insert(className, *c); + } + } + + QString moduleName = (*c)->moduleName(); + if (moduleName == "Qt3SupportLight") { + moduleClassMap[moduleName].insert((*c)->name(), *c); + moduleName = "Qt3Support"; + } + if (!moduleName.isEmpty()) + moduleClassMap[moduleName].insert((*c)->name(), *c); + + QString serviceName = + (static_cast<const ClassNode *>(*c))->serviceName(); + if (!serviceName.isEmpty()) + serviceClasses.insert(serviceName, *c); + } + else if ((*c)->isInnerNode()) { + findAllClasses(static_cast<InnerNode *>(*c)); + } + } + ++c; + } +} + +/*! + For generating the "New Classes... in 4.6" section on the + What's New in 4.6" page. + */ +void DitaXmlGenerator::findAllSince(const InnerNode *node) +{ + NodeList::const_iterator child = node->childNodes().constBegin(); + while (child != node->childNodes().constEnd()) { + QString sinceVersion = (*child)->since(); + if (((*child)->access() != Node::Private) && !sinceVersion.isEmpty()) { + NewSinceMaps::iterator nsmap = newSinceMaps.find(sinceVersion); + if (nsmap == newSinceMaps.end()) + nsmap = newSinceMaps.insert(sinceVersion,NodeMultiMap()); + NewClassMaps::iterator ncmap = newClassMaps.find(sinceVersion); + if (ncmap == newClassMaps.end()) + ncmap = newClassMaps.insert(sinceVersion,NodeMap()); + NewClassMaps::iterator nqcmap = newQmlClassMaps.find(sinceVersion); + if (nqcmap == newQmlClassMaps.end()) + nqcmap = newQmlClassMaps.insert(sinceVersion,NodeMap()); + + if ((*child)->type() == Node::Function) { + FunctionNode *func = static_cast<FunctionNode *>(*child); + if ((func->status() > Node::Obsolete) && + (func->metaness() != FunctionNode::Ctor) && + (func->metaness() != FunctionNode::Dtor)) { + nsmap.value().insert(func->name(),(*child)); + } + } + else if ((*child)->url().isEmpty()) { + if ((*child)->type() == Node::Class && !(*child)->doc().isEmpty()) { + QString className = (*child)->name(); + if ((*child)->parent() && + (*child)->parent()->type() == Node::Namespace && + !(*child)->parent()->name().isEmpty()) + className = (*child)->parent()->name()+"::"+className; + nsmap.value().insert(className,(*child)); + ncmap.value().insert(className,(*child)); + } + else if ((*child)->subType() == Node::QmlClass) { + QString className = (*child)->name(); + if ((*child)->parent() && + (*child)->parent()->type() == Node::Namespace && + !(*child)->parent()->name().isEmpty()) + className = (*child)->parent()->name()+"::"+className; + nsmap.value().insert(className,(*child)); + nqcmap.value().insert(className,(*child)); + } + } + else { + QString name = (*child)->name(); + if ((*child)->parent() && + (*child)->parent()->type() == Node::Namespace && + !(*child)->parent()->name().isEmpty()) + name = (*child)->parent()->name()+"::"+name; + nsmap.value().insert(name,(*child)); + } + if ((*child)->isInnerNode()) { + findAllSince(static_cast<InnerNode *>(*child)); + } + } + ++child; + } +} + +#if 0 + const QRegExp versionSeparator("[\\-\\.]"); + const int minorIndex = version.indexOf(versionSeparator); + const int patchIndex = version.indexOf(versionSeparator, minorIndex+1); + version = version.left(patchIndex); +#endif + +void DitaXmlGenerator::findAllFunctions(const InnerNode *node) +{ + NodeList::ConstIterator c = node->childNodes().begin(); + while (c != node->childNodes().end()) { + if ((*c)->access() != Node::Private) { + if ((*c)->isInnerNode() && (*c)->url().isEmpty()) { + findAllFunctions(static_cast<const InnerNode *>(*c)); + } + else if ((*c)->type() == Node::Function) { + const FunctionNode *func = static_cast<const FunctionNode *>(*c); + if ((func->status() > Node::Obsolete) && + (func->metaness() != FunctionNode::Ctor) && + (func->metaness() != FunctionNode::Dtor)) { + funcIndex[(*c)->name()].insert(myTree->fullDocumentName((*c)->parent()), *c); + } + } + } + ++c; + } +} + +void DitaXmlGenerator::findAllLegaleseTexts(const InnerNode *node) +{ + NodeList::ConstIterator c = node->childNodes().begin(); + while (c != node->childNodes().end()) { + if ((*c)->access() != Node::Private) { + if (!(*c)->doc().legaleseText().isEmpty()) + legaleseTexts.insertMulti((*c)->doc().legaleseText(), *c); + if ((*c)->isInnerNode()) + findAllLegaleseTexts(static_cast<const InnerNode *>(*c)); + } + ++c; + } +} + +void DitaXmlGenerator::findAllNamespaces(const InnerNode *node) +{ + NodeList::ConstIterator c = node->childNodes().begin(); + while (c != node->childNodes().end()) { + if ((*c)->access() != Node::Private) { + if ((*c)->isInnerNode() && (*c)->url().isEmpty()) { + findAllNamespaces(static_cast<const InnerNode *>(*c)); + if ((*c)->type() == Node::Namespace) { + const NamespaceNode *nspace = static_cast<const NamespaceNode *>(*c); + // Ensure that the namespace's name is not empty (the root + // namespace has no name). + if (!nspace->name().isEmpty()) { + namespaceIndex.insert(nspace->name(), *c); + QString moduleName = (*c)->moduleName(); + if (moduleName == "Qt3SupportLight") { + moduleNamespaceMap[moduleName].insert((*c)->name(), *c); + moduleName = "Qt3Support"; + } + if (!moduleName.isEmpty()) + moduleNamespaceMap[moduleName].insert((*c)->name(), *c); + } + } + } + } + ++c; + } +} + +#ifdef ZZZ_QDOC_QML +/*! + This function finds all the qml element nodes and + stores them in a map for later use. + */ +void DitaXmlGenerator::findAllQmlClasses(const InnerNode *node) +{ + NodeList::const_iterator c = node->childNodes().constBegin(); + while (c != node->childNodes().constEnd()) { + if ((*c)->type() == Node::Fake) { + const FakeNode* fakeNode = static_cast<const FakeNode *>(*c); + if (fakeNode->subType() == Node::QmlClass) { + const QmlClassNode* qmlNode = + static_cast<const QmlClassNode*>(fakeNode); + const Node* n = qmlNode->classNode(); + } + qmlClasses.insert(fakeNode->name(),*c); + } + ++c; + } +} +#endif + +int DitaXmlGenerator::hOffset(const Node *node) +{ + switch (node->type()) { + case Node::Namespace: + case Node::Class: + return 2; + case Node::Fake: + return 1; +#if 0 + if (node->doc().briefText().isEmpty()) + return 1; + else + return 2; +#endif + case Node::Enum: + case Node::Typedef: + case Node::Function: + case Node::Property: + default: + return 3; + } +} + +bool DitaXmlGenerator::isThreeColumnEnumValueTable(const Atom *atom) +{ + while (atom != 0 && !(atom->type() == Atom::ListRight && atom->string() == ATOM_LIST_VALUE)) { + if (atom->type() == Atom::ListItemLeft && !matchAhead(atom, Atom::ListItemRight)) + return true; + atom = atom->next(); + } + return false; +} + +const Node *DitaXmlGenerator::findNodeForTarget(const QString &target, + const Node *relative, + CodeMarker *marker, + const Atom *atom) +{ + const Node *node = 0; + + if (target.isEmpty()) { + node = relative; + } + else if (target.endsWith(".html")) { + node = myTree->root()->findNode(target, Node::Fake); + } + else if (marker) { + node = marker->resolveTarget(target, myTree, relative); + if (!node) + node = myTree->findFakeNodeByTitle(target); + if (!node && atom) { + node = myTree->findUnambiguousTarget(target, + *const_cast<Atom**>(&atom)); + } + } + + if (!node) + relative->doc().location().warning(tr("Cannot link to '%1'").arg(target)); + + return node; +} + +const QPair<QString,QString> DitaXmlGenerator::anchorForNode(const Node *node) +{ + QPair<QString,QString> anchorPair; + + anchorPair.first = PageGenerator::fileName(node); + if (node->type() == Node::Fake) { + const FakeNode *fakeNode = static_cast<const FakeNode*>(node); + anchorPair.second = fakeNode->title(); + } + + return anchorPair; +} + +QString DitaXmlGenerator::getLink(const Atom *atom, + const Node *relative, + CodeMarker *marker, + const Node** node) +{ + QString link; + *node = 0; + inObsoleteLink = false; + + if (atom->string().contains(":") && + (atom->string().startsWith("file:") + || atom->string().startsWith("http:") + || atom->string().startsWith("https:") + || atom->string().startsWith("ftp:") + || atom->string().startsWith("mailto:"))) { + + link = atom->string(); + } + else { + QStringList path; + if (atom->string().contains('#')) { + path = atom->string().split('#'); + } + else { + path.append(atom->string()); + } + + Atom *targetAtom = 0; + + QString first = path.first().trimmed(); + if (first.isEmpty()) { + *node = relative; + } + else if (first.endsWith(".html")) { + *node = myTree->root()->findNode(first, Node::Fake); + } + else { + *node = marker->resolveTarget(first, myTree, relative); + if (!*node) { + *node = myTree->findFakeNodeByTitle(first); + } + if (!*node) { + *node = myTree->findUnambiguousTarget(first, targetAtom); + } + } + + if (*node) { + if (!(*node)->url().isEmpty()) + return (*node)->url(); + else + path.removeFirst(); + } + else { + *node = relative; + } + + if (*node) { + if ((*node)->status() == Node::Obsolete) { + if (relative) { + if (relative->parent() != *node) { + if (relative->status() != Node::Obsolete) { + bool porting = false; + if (relative->type() == Node::Fake) { + const FakeNode* fake = static_cast<const FakeNode*>(relative); + if (fake->title().startsWith("Porting")) + porting = true; + } + QString name = marker->plainFullName(relative); + if (!porting && !name.startsWith("Q3")) { + if (obsoleteLinks) { + relative->doc().location().warning(tr("Link to obsolete item '%1' in %2") + .arg(atom->string()) + .arg(name)); + } + inObsoleteLink = true; + } + } + } + } + else { + qDebug() << "Link to Obsolete entity" + << (*node)->name() << "no relative"; + } + } +#if 0 + else if ((*node)->status() == Node::Deprecated) { + qDebug() << "Link to Deprecated entity"; + } + else if ((*node)->status() == Node::Internal) { + qDebug() << "Link to Internal entity"; + } +#endif + } + + while (!path.isEmpty()) { + targetAtom = myTree->findTarget(path.first(), *node); + if (targetAtom == 0) + break; + path.removeFirst(); + } + + if (path.isEmpty()) { + link = linkForNode(*node, relative); + if (*node && (*node)->subType() == Node::Image) + link = "images/used-in-examples/" + link; + if (targetAtom) + link += "#" + refForAtom(targetAtom, *node); + } + } + return link; +} + +void DitaXmlGenerator::generateDcf(const QString &fileBase, + const QString &startPage, + const QString &title, + DcfSection &dcfRoot) +{ + dcfRoot.ref = startPage; + dcfRoot.title = title; + generateDcfSections(dcfRoot, outputDir() + "/" + fileBase + ".dcf", fileBase + "/reference"); +} + +void DitaXmlGenerator::generateIndex(const QString &fileBase, + const QString &url, + const QString &title) +{ + myTree->generateIndex(outputDir() + "/" + fileBase + ".index", url, title); +} + +void DitaXmlGenerator::generateStatus(const Node *node, CodeMarker *marker) +{ + Text text; + + switch (node->status()) { + case Node::Obsolete: + if (node->isInnerNode()) + Generator::generateStatus(node, marker); + break; + case Node::Compat: + if (node->isInnerNode()) { + text << Atom::ParaLeft + << Atom(Atom::FormattingLeft,ATOM_FORMATTING_BOLD) + << "This " + << typeString(node) + << " is part of the Qt 3 support library." + << Atom(Atom::FormattingRight, ATOM_FORMATTING_BOLD) + << " It is provided to keep old source code working. " + << "We strongly advise against " + << "using it in new code. See "; + + const FakeNode *fakeNode = myTree->findFakeNodeByTitle("Porting To Qt 4"); + Atom *targetAtom = 0; + if (fakeNode && node->type() == Node::Class) { + QString oldName(node->name()); + targetAtom = myTree->findTarget(oldName.replace("3", ""), + fakeNode); + } + + if (targetAtom) { + text << Atom(Atom::Link, linkForNode(fakeNode, node) + "#" + + refForAtom(targetAtom, fakeNode)); + } + else + text << Atom(Atom::Link, "Porting to Qt 4"); + + text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) + << Atom(Atom::String, "Porting to Qt 4") + << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) + << " for more information." + << Atom::ParaRight; + } + generateText(text, node, marker); + break; + default: + Generator::generateStatus(node, marker); + } +} + +#ifdef GENERATE_MAC_REFS +/* + No longer valid. + */ +void DitaXmlGenerator::generateMacRef(const Node *node, CodeMarker *marker) +{ + if (!pleaseGenerateMacRef || marker == 0) + return; + + QStringList macRefs = marker->macRefsForNode(node); + foreach (const QString &macRef, macRefs) + out() << "<a name=\"" << "//apple_ref/" << macRef << "\"></a>\n"; +} +#endif + +void DitaXmlGenerator::beginLink(const QString &link, + const Node *node, + const Node *relative, + CodeMarker *marker) +{ + Q_UNUSED(marker) + Q_UNUSED(relative) + + this->link = link; + if (link.isEmpty()) { + if (showBrokenLinks) + out() << "<i>"; + } + else if (node == 0 || (relative != 0 && + node->status() == relative->status())) { + out() << "<a href=\"" << link << "\">"; + } + else { + switch (node->status()) { + case Node::Obsolete: + out() << "<a href=\"" << link << "\" class=\"obsolete\">"; + break; + case Node::Compat: + out() << "<a href=\"" << link << "\" class=\"compat\">"; + break; + default: + out() << "<a href=\"" << link << "\">"; + } + } + inLink = true; +} + +void DitaXmlGenerator::endLink() +{ + if (inLink) { + if (link.isEmpty()) { + if (showBrokenLinks) + out() << "</i>"; + } + else { + if (inObsoleteLink) { + out() << "<sup>(obsolete)</sup>"; + } + out() << "</a>"; + } + } + inLink = false; + inObsoleteLink = false; +} + +#ifdef QDOC_QML + +/*! + Generates the summary for the \a section. Only used for + sections of QML element documentation. + + Currently handles only the QML property group. + */ +void DitaXmlGenerator::generateQmlSummary(const Section& section, + const Node *relative, + CodeMarker *marker) +{ + if (!section.members.isEmpty()) { + NodeList::ConstIterator m; + int count = section.members.size(); + bool twoColumn = false; + if (section.members.first()->type() == Node::QmlProperty) { + twoColumn = (count >= 5); + } + if (twoColumn) + out() << "<table class=\"qmlsummary\">\n"; + if (++numTableRows % 2 == 1) + out() << "<tr class=\"odd topAlign\">"; + else + out() << "<tr class=\"even topAlign\">"; + // << "<tr><td class=\"topAlign\">"; + out() << "<ul>\n"; + + int row = 0; + m = section.members.begin(); + while (m != section.members.end()) { + if (twoColumn && row == (int) (count + 1) / 2) + out() << "</ul></td><td class=\"topAlign\"><ul>\n"; + out() << "<li class=\"fn\">"; + generateQmlItem(*m,relative,marker,true); + out() << "</li>\n"; + row++; + ++m; + } + out() << "</ul>\n"; + if (twoColumn) + out() << "</td></tr>\n</table>\n"; + } +} + +/*! + Outputs the html detailed documentation for a section + on a QML element reference page. + */ +void DitaXmlGenerator::generateDetailedQmlMember(const Node *node, + const InnerNode *relative, + CodeMarker *marker) +{ + const QmlPropertyNode* qpn = 0; +#ifdef GENERATE_MAC_REFS + generateMacRef(node, marker); +#endif + out() << "<div class=\"qmlitem\">"; + if (node->subType() == Node::QmlPropertyGroup) { + const QmlPropGroupNode* qpgn = static_cast<const QmlPropGroupNode*>(node); + NodeList::ConstIterator p = qpgn->childNodes().begin(); + out() << "<div class=\"qmlproto\">"; + out() << "<table class=\"qmlname\">"; + + while (p != qpgn->childNodes().end()) { + if ((*p)->type() == Node::QmlProperty) { + qpn = static_cast<const QmlPropertyNode*>(*p); + + if (++numTableRows % 2 == 1) + out() << "<tr class=\"odd\">"; + else + out() << "<tr class=\"even\">"; + + out() << "<td><p>"; + //out() << "<tr><td>"; // old + out() << "<a name=\"" + refForNode(qpn) + "\"></a>"; + if (!qpn->isWritable()) + out() << "<span class=\"qmlreadonly\">read-only</span>"; + if (qpgn->isDefault()) + out() << "<span class=\"qmldefault\">default</span>"; + generateQmlItem(qpn, relative, marker, false); + out() << "</td></tr>"; + } + ++p; + } + out() << "</table>"; + out() << "</div>"; + } + else if (node->type() == Node::QmlSignal) { + const FunctionNode* qsn = static_cast<const FunctionNode*>(node); + out() << "<div class=\"qmlproto\">"; + out() << "<table class=\"qmlname\">"; + //out() << "<tr>"; + if (++numTableRows % 2 == 1) + out() << "<tr class=\"odd\">"; + else + out() << "<tr class=\"even\">"; + out() << "<td><p>"; + out() << "<a name=\"" + refForNode(qsn) + "\"></a>"; + generateSynopsis(qsn,relative,marker,CodeMarker::Detailed,false); + //generateQmlItem(qsn,relative,marker,false); + out() << "</p></td></tr>"; + out() << "</table>"; + out() << "</div>"; + } + else if (node->type() == Node::QmlMethod) { + const FunctionNode* qmn = static_cast<const FunctionNode*>(node); + out() << "<div class=\"qmlproto\">"; + out() << "<table class=\"qmlname\">"; + //out() << "<tr>"; + if (++numTableRows % 2 == 1) + out() << "<tr class=\"odd\">"; + else + out() << "<tr class=\"even\">"; + out() << "<td><p>"; + out() << "<a name=\"" + refForNode(qmn) + "\"></a>"; + generateSynopsis(qmn,relative,marker,CodeMarker::Detailed,false); + out() << "</p></td></tr>"; + out() << "</table>"; + out() << "</div>"; + } + out() << "<div class=\"qmldoc\">"; + generateStatus(node, marker); + generateBody(node, marker); + generateThreadSafeness(node, marker); + generateSince(node, marker); + generateAlsoList(node, marker); + out() << "</div>"; + out() << "</div>"; +} + +/*! + Output the "Inherits" line for the QML element, + if there should be one. + */ +void DitaXmlGenerator::generateQmlInherits(const QmlClassNode* cn, + CodeMarker* marker) +{ + if (cn && !cn->links().empty()) { + if (cn->links().contains(Node::InheritsLink)) { + QPair<QString,QString> linkPair; + linkPair = cn->links()[Node::InheritsLink]; + QStringList strList(linkPair.first); + const Node* n = myTree->findNode(strList,Node::Fake); + if (n && n->subType() == Node::QmlClass) { + const QmlClassNode* qcn = static_cast<const QmlClassNode*>(n); + out() << "<p class=\"centerAlign\">"; + Text text; + text << "[Inherits "; + text << Atom(Atom::LinkNode,CodeMarker::stringForNode(qcn)); + text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK); + text << Atom(Atom::String, linkPair.second); + text << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); + text << "]"; + generateText(text, cn, marker); + out() << "</p>"; + } + } + } +} + +/*! + Output the "Inherit by" list for the QML element, + if it is inherited by any other elements. + */ +void DitaXmlGenerator::generateQmlInheritedBy(const QmlClassNode* cn, + CodeMarker* marker) +{ + if (cn) { + NodeList subs; + QmlClassNode::subclasses(cn->name(),subs); + if (!subs.isEmpty()) { + Text text; + text << Atom::ParaLeft << "Inherited by "; + appendSortedQmlNames(text,cn,subs,marker); + text << Atom::ParaRight; + generateText(text, cn, marker); + } + } +} + +/*! + Output the "[Xxx instantiates the C++ class QmlGraphicsXxx]" + line for the QML element, if there should be one. + + If there is no class node, or if the class node status + is set to Node::Internal, do nothing. + */ +void DitaXmlGenerator::generateQmlInstantiates(const QmlClassNode* qcn, + CodeMarker* marker) +{ + const ClassNode* cn = qcn->classNode(); + if (cn && (cn->status() != Node::Internal)) { + out() << "<p class=\"centerAlign\">"; + Text text; + text << "["; + text << Atom(Atom::LinkNode,CodeMarker::stringForNode(qcn)); + text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK); + text << Atom(Atom::String, qcn->name()); + text << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); + text << " instantiates the C++ class "; + text << Atom(Atom::LinkNode,CodeMarker::stringForNode(cn)); + text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK); + text << Atom(Atom::String, cn->name()); + text << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); + text << "]"; + generateText(text, qcn, marker); + out() << "</p>"; + } +} + +/*! + Output the "[QmlGraphicsXxx is instantiated by QML element Xxx]" + line for the class, if there should be one. + + If there is no QML element, or if the class node status + is set to Node::Internal, do nothing. + */ +void DitaXmlGenerator::generateInstantiatedBy(const ClassNode* cn, + CodeMarker* marker) +{ + if (cn && cn->status() != Node::Internal && !cn->qmlElement().isEmpty()) { + const Node* n = myTree->root()->findNode(cn->qmlElement(),Node::Fake); + if (n && n->subType() == Node::QmlClass) { + out() << "<p class=\"centerAlign\">"; + Text text; + text << "["; + text << Atom(Atom::LinkNode,CodeMarker::stringForNode(cn)); + text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK); + text << Atom(Atom::String, cn->name()); + text << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); + text << " is instantiated by QML element "; + text << Atom(Atom::LinkNode,CodeMarker::stringForNode(n)); + text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK); + text << Atom(Atom::String, n->name()); + text << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); + text << "]"; + generateText(text, cn, marker); + out() << "</p>"; + } + } +} + +/*! + Generate the <page> element for the given \a node using the \a writer. + Return true if a <page> element was written; otherwise return false. + */ +bool DitaXmlGenerator::generatePageElement(QXmlStreamWriter& writer, + const Node* node, + CodeMarker* marker) const +{ + if (node->pageType() == Node::NoPageType) + return false; + if (node->name().isEmpty()) + return true; + if (node->access() == Node::Private) + return false; + if (!node->isInnerNode()) + return false; + + QString title; + QString rawTitle; + QString fullTitle; + const InnerNode* inner = static_cast<const InnerNode*>(node); + + writer.writeStartElement("page"); + QXmlStreamAttributes attributes; + QString t; + t.setNum(id++); + switch (node->type()) { + case Node::Fake: + { + const FakeNode* fake = static_cast<const FakeNode*>(node); + title = fake->fullTitle(); + break; + } + case Node::Class: + { + title = node->name() + " Class Reference"; + break; + } + case Node::Namespace: + { + rawTitle = marker->plainName(inner); + fullTitle = marker->plainFullName(inner); + title = rawTitle + " Namespace Reference"; + break; + } + default: + title = node->name(); + break; + } + writer.writeAttribute("id",t); + writer.writeStartElement("pageWords"); + writer.writeCharacters(title); + if (!inner->pageKeywords().isEmpty()) { + const QStringList& w = inner->pageKeywords(); + for (int i = 0; i < w.size(); ++i) { + writer.writeCharacters(" "); + writer.writeCharacters(w.at(i).toLocal8Bit().constData()); + } + } + writer.writeEndElement(); + writer.writeStartElement("pageTitle"); + writer.writeCharacters(title); + writer.writeEndElement(); + writer.writeStartElement("pageUrl"); + writer.writeCharacters(PageGenerator::fileName(node)); + writer.writeEndElement(); + writer.writeStartElement("pageType"); + switch (node->pageType()) { + case Node::ApiPage: + writer.writeCharacters("APIPage"); + break; + case Node::ArticlePage: + writer.writeCharacters("Article"); + break; + case Node::ExamplePage: + writer.writeCharacters("Example"); + break; + default: + break; + } + writer.writeEndElement(); + writer.writeEndElement(); + return true; +} + +/*! + Traverse the tree recursively and generate the <keyword> + elements. + */ +void DitaXmlGenerator::generatePageElements(QXmlStreamWriter& writer, const Node* node, CodeMarker* marker) const +{ + if (generatePageElement(writer, node, marker)) { + + if (node->isInnerNode()) { + const InnerNode *inner = static_cast<const InnerNode *>(node); + + // Recurse to write an element for this child node and all its children. + foreach (const Node *child, inner->childNodes()) + generatePageElements(writer, child, marker); + } + } +} + +/*! + Outputs the file containing the index used for searching the html docs. + */ +void DitaXmlGenerator::generatePageIndex(const QString& fileName, CodeMarker* marker) const +{ + QFile file(fileName); + if (!file.open(QFile::WriteOnly | QFile::Text)) + return ; + + QXmlStreamWriter writer(&file); + writer.setAutoFormatting(true); + writer.writeStartDocument(); + writer.writeStartElement("qtPageIndex"); + + generatePageElements(writer, myTree->root(), marker); + + writer.writeEndElement(); // qtPageIndex + writer.writeEndDocument(); + file.close(); +} + +#endif + +#if 0 // fossil removed for new doc format MWS 19/04/2010 + out() << "<!DOCTYPE html\n" + " PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"DTD/xhtml1-strict.dtd\">\n"; + out() << QString("<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"%1\" lang=\"%1\">\n").arg(naturalLanguage); + + QString shortVersion; + if ((project != "Qtopia") && (project != "Qt Extended")) { + shortVersion = project + " " + shortVersion + ": "; + if (node && !node->doc().location().isEmpty()) + out() << "<!-- " << node->doc().location().fileName() << " -->\n"; + + shortVersion = myTree->version(); + if (shortVersion.count(QChar('.')) == 2) + shortVersion.truncate(shortVersion.lastIndexOf(QChar('.'))); + if (!shortVersion.isEmpty()) { + if (project == "QSA") + shortVersion = "QSA " + shortVersion + ": "; + else + shortVersion = "Qt " + shortVersion + ": "; + } + } + + out() << "<head>\n" + " <title>" << shortVersion << protectEnc(title) << "</title>\n"; + out() << QString("<meta http-equiv=\"Content-type\" content=\"text/html; charset=%1\" />").arg(outputEncoding); + + if (!style.isEmpty()) + out() << " <style type=\"text/css\">" << style << "</style>\n"; + + const QMap<QString, QString> &metaMap = node->doc().metaTagMap(); + if (!metaMap.isEmpty()) { + QMapIterator<QString, QString> i(metaMap); + while (i.hasNext()) { + i.next(); + out() << " <meta name=\"" << protectEnc(i.key()) << "\" contents=\"" + << protectEnc(i.value()) << "\" />\n"; + } + } + + navigationLinks.clear(); + + if (node && !node->links().empty()) { + QPair<QString,QString> linkPair; + QPair<QString,QString> anchorPair; + const Node *linkNode; + + if (node->links().contains(Node::PreviousLink)) { + linkPair = node->links()[Node::PreviousLink]; + linkNode = findNodeForTarget(linkPair.first, node, marker); + if (!linkNode || linkNode == node) + anchorPair = linkPair; + else + anchorPair = anchorForNode(linkNode); + + out() << " <link rel=\"prev\" href=\"" + << anchorPair.first << "\" />\n"; + + navigationLinks += "[Previous: <a href=\"" + anchorPair.first + "\">"; + if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty()) + navigationLinks += protectEnc(anchorPair.second); + else + navigationLinks += protectEnc(linkPair.second); + navigationLinks += "</a>]\n"; + } + if (node->links().contains(Node::ContentsLink)) { + linkPair = node->links()[Node::ContentsLink]; + linkNode = findNodeForTarget(linkPair.first, node, marker); + if (!linkNode || linkNode == node) + anchorPair = linkPair; + else + anchorPair = anchorForNode(linkNode); + + out() << " <link rel=\"contents\" href=\"" + << anchorPair.first << "\" />\n"; + + navigationLinks += "[<a href=\"" + anchorPair.first + "\">"; + if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty()) + navigationLinks += protectEnc(anchorPair.second); + else + navigationLinks += protectEnc(linkPair.second); + navigationLinks += "</a>]\n"; + } + if (node->links().contains(Node::NextLink)) { + linkPair = node->links()[Node::NextLink]; + linkNode = findNodeForTarget(linkPair.first, node, marker); + if (!linkNode || linkNode == node) + anchorPair = linkPair; + else + anchorPair = anchorForNode(linkNode); + + out() << " <link rel=\"next\" href=\"" + << anchorPair.first << "\" />\n"; + + navigationLinks += "[Next: <a href=\"" + anchorPair.first + "\">"; + if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty()) + navigationLinks += protectEnc(anchorPair.second); + else + navigationLinks += protectEnc(linkPair.second); + navigationLinks += "</a>]\n"; + } + if (node->links().contains(Node::IndexLink)) { + linkPair = node->links()[Node::IndexLink]; + linkNode = findNodeForTarget(linkPair.first, node, marker); + if (!linkNode || linkNode == node) + anchorPair = linkPair; + else + anchorPair = anchorForNode(linkNode); + out() << " <link rel=\"index\" href=\"" + << anchorPair.first << "\" />\n"; + } + if (node->links().contains(Node::StartLink)) { + linkPair = node->links()[Node::StartLink]; + linkNode = findNodeForTarget(linkPair.first, node, marker); + if (!linkNode || linkNode == node) + anchorPair = linkPair; + else + anchorPair = anchorForNode(linkNode); + out() << " <link rel=\"start\" href=\"" + << anchorPair.first << "\" />\n"; + } + } + + foreach (const QString &stylesheet, stylesheets) { + out() << " <link href=\"" << stylesheet << "\" rel=\"stylesheet\" " + << "type=\"text/css\" />\n"; + } + + foreach (const QString &customHeadElement, customHeadElements) { + out() << " " << customHeadElement << "\n"; + } + + out() << "</head>\n" + #endif + + QT_END_NAMESPACE diff --git a/tools/qdoc3/ditaxmlgenerator.h b/tools/qdoc3/ditaxmlgenerator.h new file mode 100644 index 0000000..4de578d --- /dev/null +++ b/tools/qdoc3/ditaxmlgenerator.h @@ -0,0 +1,358 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the tools applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, 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. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + ditaxmlgenerator.h +*/ + +#ifndef DITAXMLGENERATOR_H +#define DITAXMLGENERATOR_H + +#define QDOC_NAME_ALIGNMENT + +#include <qmap.h> +#include <qregexp.h> +#include <QXmlStreamWriter> + +#include "codemarker.h" +#include "config.h" +#include "dcfsection.h" +#include "pagegenerator.h" + +QT_BEGIN_NAMESPACE + +#if 0 +struct NavigationBar +{ + SectionIterator prev; + SectionIterator current; + SectionIterator next; +}; +#endif + +typedef QMultiMap<QString, Node*> NodeMultiMap; +typedef QMap<QString, NodeMultiMap> NewSinceMaps; +typedef QMap<Node*, NodeMultiMap> ParentMaps; +typedef QMap<QString, const Node*> NodeMap; +typedef QMap<QString, NodeMap> NewClassMaps; + +class HelpProjectWriter; + +class DitaXmlGenerator : public PageGenerator +{ + public: + enum SinceType { + Namespace, + Class, + MemberFunction, + NamespaceFunction, + GlobalFunction, + Macro, + Enum, + Typedef, + Property, + Variable, + QmlClass, + QmlProperty, + QmlSignal, + QmlMethod, + LastSinceType + }; + + public: + DitaXmlGenerator(); + ~DitaXmlGenerator(); + + virtual void initializeGenerator(const Config& config); + virtual void terminateGenerator(); + virtual QString format(); + virtual void generateTree(const Tree *tree, CodeMarker *marker); + + QString protectEnc(const QString &string); + static QString protect(const QString &string, const QString &encoding = "ISO-8859-1"); + static QString cleanRef(const QString& ref); + static QString sinceTitle(int i) { return sinceTitles[i]; } + + protected: + virtual void startText(const Node *relative, CodeMarker *marker); + virtual int generateAtom(const Atom *atom, + const Node *relative, + CodeMarker *marker); + virtual void generateClassLikeNode(const InnerNode *inner, CodeMarker *marker); + virtual void generateFakeNode(const FakeNode *fake, CodeMarker *marker); + virtual QString fileExtension(const Node *node) const; + virtual QString refForNode(const Node *node); + virtual QString linkForNode(const Node *node, const Node *relative); + virtual QString refForAtom(Atom *atom, const Node *node); + + private: + enum SubTitleSize { SmallSubTitle, LargeSubTitle }; + + const QPair<QString,QString> anchorForNode(const Node *node); + const Node *findNodeForTarget(const QString &target, + const Node *relative, + CodeMarker *marker, + const Atom *atom = 0); + void generateBreadCrumbs(const QString& title, + const Node *node, + CodeMarker *marker); + void generateHeader(const QString& title, + const Node *node = 0, + CodeMarker *marker = 0); + void generateTitle(const QString& title, + const Text &subTitle, + SubTitleSize subTitleSize, + const Node *relative, + CodeMarker *marker); + void generateFooter(const Node *node = 0); + void generateBrief(const Node *node, + CodeMarker *marker, + const Node *relative = 0); + void generateIncludes(const InnerNode *inner, CodeMarker *marker); +#if 0 + void generateNavigationBar(const NavigationBar& bar, + const Node *node, + CodeMarker *marker); +#endif + void generateTableOfContents(const Node *node, + CodeMarker *marker, + Doc::SectioningUnit sectioningUnit, + int numColumns, + const Node *relative = 0); + void generateTableOfContents(const Node *node, + CodeMarker *marker, + QList<Section>* sections = 0); + QString generateListOfAllMemberFile(const InnerNode *inner, CodeMarker *marker); + QString generateLowStatusMemberFile(const InnerNode *inner, + CodeMarker *marker, + CodeMarker::Status status); + void generateClassHierarchy(const Node *relative, + CodeMarker *marker, + const NodeMap &classMap); + void generateAnnotatedList(const Node *relative, + CodeMarker *marker, + const NodeMap &nodeMap); + void generateCompactList(const Node *relative, + CodeMarker *marker, + const NodeMap &classMap, + bool includeAlphabet, + QString commonPrefix = QString()); + void generateFunctionIndex(const Node *relative, CodeMarker *marker); + void generateLegaleseList(const Node *relative, CodeMarker *marker); + void generateOverviewList(const Node *relative, CodeMarker *marker); + void generateSectionList(const Section& section, + const Node *relative, + CodeMarker *marker, + CodeMarker::SynopsisStyle style); +#ifdef QDOC_QML + void generateQmlSummary(const Section& section, + const Node *relative, + CodeMarker *marker); + void generateQmlItem(const Node *node, + const Node *relative, + CodeMarker *marker, + bool summary); + void generateDetailedQmlMember(const Node *node, + const InnerNode *relative, + CodeMarker *marker); + void generateQmlInherits(const QmlClassNode* cn, CodeMarker* marker); + void generateQmlInheritedBy(const QmlClassNode* cn, CodeMarker* marker); + void generateQmlInstantiates(const QmlClassNode* qcn, CodeMarker* marker); + void generateInstantiatedBy(const ClassNode* cn, CodeMarker* marker); +#endif +#ifdef QDOC_NAME_ALIGNMENT + void generateSection(const NodeList& nl, + const Node *relative, + CodeMarker *marker, + CodeMarker::SynopsisStyle style); + void generateSynopsis(const Node *node, + const Node *relative, + CodeMarker *marker, + CodeMarker::SynopsisStyle style, + bool nameAlignment = false); + void generateSectionInheritedList(const Section& section, + const Node *relative, + CodeMarker *marker, + bool nameAlignment = false); + QString highlightedCode(const QString& markedCode, + CodeMarker *marker, + const Node *relative, + CodeMarker::SynopsisStyle style = CodeMarker::Accessors, + bool nameAlignment = false); +#else + void generateSynopsis(const Node *node, + const Node *relative, + CodeMarker *marker, + CodeMarker::SynopsisStyle style); + void generateSectionInheritedList(const Section& section, + const Node *relative, + CodeMarker *marker); + QString highlightedCode(const QString& markedCode, + CodeMarker *marker, + const Node *relative); +#endif + void generateFullName(const Node *apparentNode, + const Node *relative, + CodeMarker *marker, + const Node *actualNode = 0); + void generateDetailedMember(const Node *node, + const InnerNode *relative, + CodeMarker *marker); + void generateLink(const Atom *atom, + const Node *relative, + CodeMarker *marker); + void generateStatus(const Node *node, CodeMarker *marker); + + QString registerRef(const QString& ref); + QString fileBase(const Node *node); +#if 0 + QString fileBase(const Node *node, const SectionIterator& section); +#endif + QString fileName(const Node *node); + void findAllClasses(const InnerNode *node); + void findAllFunctions(const InnerNode *node); + void findAllLegaleseTexts(const InnerNode *node); + void findAllNamespaces(const InnerNode *node); +#ifdef ZZZ_QDOC_QML + void findAllQmlClasses(const InnerNode *node); +#endif + void findAllSince(const InnerNode *node); + static int hOffset(const Node *node); + static bool isThreeColumnEnumValueTable(const Atom *atom); + virtual QString getLink(const Atom *atom, + const Node *relative, + CodeMarker *marker, + const Node** node); + virtual void generateDcf(const QString &fileBase, + const QString &startPage, + const QString &title, DcfSection &dcfRoot); + virtual void generateIndex(const QString &fileBase, + const QString &url, + const QString &title); +#ifdef GENERATE_MAC_REFS + void generateMacRef(const Node *node, CodeMarker *marker); +#endif + void beginLink(const QString &link, + const Node *node, + const Node *relative, + CodeMarker *marker); + void endLink(); + bool generatePageElement(QXmlStreamWriter& writer, + const Node* node, + CodeMarker* marker) const; + void generatePageElements(QXmlStreamWriter& writer, + const Node* node, + CodeMarker* marker) const; + void generatePageIndex(const QString& fileName, + CodeMarker* marker) const; + +#if 0 + NavigationBar currentNavigationBar; +#endif + QMap<QString, QString> refMap; + int codeIndent; + DcfSection dcfClassesRoot; + DcfSection dcfOverviewsRoot; + DcfSection dcfExamplesRoot; + DcfSection dcfDesignerRoot; + DcfSection dcfLinguistRoot; + DcfSection dcfAssistantRoot; + DcfSection dcfQmakeRoot; + HelpProjectWriter *helpProjectWriter; + bool inLink; + bool inObsoleteLink; + bool inContents; + bool inSectionHeading; + bool inTableHeader; + int numTableRows; + bool threeColumnEnumValueTable; + bool offlineDocs; + QString link; + QStringList sectionNumber; + QRegExp funcLeftParen; + QString style; + QString postHeader; + QString postPostHeader; + QString footer; + QString address; + bool pleaseGenerateMacRef; + QString project; + QString projectDescription; + QString projectUrl; + QString navigationLinks; + QStringList stylesheets; + QStringList customHeadElements; + const Tree *myTree; + bool slow; + bool obsoleteLinks; + QMap<QString, NodeMap > moduleClassMap; + QMap<QString, NodeMap > moduleNamespaceMap; + NodeMap nonCompatClasses; + NodeMap mainClasses; + NodeMap compatClasses; + NodeMap obsoleteClasses; + NodeMap namespaceIndex; + NodeMap serviceClasses; +#ifdef QDOC_QML + NodeMap qmlClasses; +#endif + QMap<QString, NodeMap > funcIndex; + QMap<Text, const Node *> legaleseTexts; + NewSinceMaps newSinceMaps; + static QString sinceTitles[]; + NewClassMaps newClassMaps; + NewClassMaps newQmlClassMaps; + static int id; +}; + +#define DITAXMLGENERATOR_ADDRESS "address" +#define DITAXMLGENERATOR_FOOTER "footer" +#define DITAXMLGENERATOR_GENERATEMACREFS "generatemacrefs" // ### document me +#define DITAXMLGENERATOR_POSTHEADER "postheader" +#define DITAXMLGENERATOR_POSTPOSTHEADER "postpostheader" +#define DITAXMLGENERATOR_STYLE "style" +#define DITAXMLGENERATOR_STYLESHEETS "stylesheets" +#define DITAXMLGENERATOR_CUSTOMHEADELEMENTS "customheadelements" + +QT_END_NAMESPACE + +#endif + diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index b103981..bf80277 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -1711,62 +1711,49 @@ void HtmlGenerator::generateBreadCrumbs(const QString& title, if (node->type() == Node::Class) { const ClassNode* cn = static_cast<const ClassNode*>(node); QString name = node->moduleName(); - out() << " <li><a href=\"modules.html\">All Modules</a></li>"; + out() << " <li><a href=\"modules.html\">Modules</a></li>"; if (!name.isEmpty()) { out() << " <li>"; breadcrumb << Atom(Atom::AutoLink,name); generateText(breadcrumb, node, marker); out() << "</li>\n"; } - breadcrumb.clear(); - if (!cn->name().isEmpty()) { - out() << " <li>"; - breadcrumb << Atom(Atom::AutoLink,cn->name()); - generateText(breadcrumb, 0, marker); - out() << "</li>\n"; - } + if (!cn->name().isEmpty()) + out() << " <li>" << cn->name() << "</li>\n"; } else if (node->type() == Node::Fake) { const FakeNode* fn = static_cast<const FakeNode*>(node); if (node->subType() == Node::Module) { - out() << " <li><a href=\"modules.html\">All Modules</a></li>"; + out() << " <li><a href=\"modules.html\">Modules</a></li>"; QString name = node->name(); - if (!name.isEmpty()) { - out() << " <li>"; - breadcrumb << Atom(Atom::AutoLink,name); - generateText(breadcrumb, 0, marker); - out() << "</li>\n"; - } + if (!name.isEmpty()) + out() << " <li>" << name << "</li>\n"; } else if (node->subType() == Node::Group) { if (fn->name() == QString("modules")) - out() << " <li><a href=\"modules.html\">All Modules</a></li>"; + out() << " <li>Modules</li>"; else { - out() << " <li><a href=\"" << fn->name() << "\">" << title - << "</a></li>"; + out() << " <li>" << title << "</li>"; } } else if (node->subType() == Node::Page) { if (fn->name() == QString("examples.html")) { - out() << " <li><a href=\"all-examples.html\">Examples</a></li>"; + out() << " <li>Examples</li>"; } else if (fn->name().startsWith("examples-")) { out() << " <li><a href=\"all-examples.html\">Examples</a></li>"; - out() << " <li><a href=\"" << fn->name() << "\">" << title - << "</a></li>"; + out() << " <li>" << title << "</li>"; } else if (fn->name() == QString("namespaces.html")) { - out() << " <li><a href=\"namespaces.html\">All Namespaces</a></li>"; + out() << " <li>Namespaces</li>"; } else { - out() << " <li><a href=\"" << fn->name() << "\">" << title - << "</a></li>"; + out() << " <li>" << title << "</li>"; } } else if (node->subType() == Node::QmlClass) { out() << " <li><a href=\"qdeclarativeelements.html\">QML Elements</a></li>"; - out() << " <li><a href=\"" << fn->name() << "\">" << title - << "</a></li>"; + out() << " <li>" << title << "</li>"; } else if (node->subType() == Node::Example) { out() << " <li><a href=\"all-examples.html\">Examples</a></li>"; @@ -1775,16 +1762,12 @@ void HtmlGenerator::generateBreadCrumbs(const QString& title, QString t = CodeParser::titleFromName(name); out() << " <li><a href=\"" << name << "\">" << t << "</a></li>"; - out() << " <li><a href=\"" << sl.at(0) - << "-" << sl.at(sl.size()-1) << ".html\">" - << title << "</a></li>"; + out() << " <li>" << title << "</li>"; } } else if (node->type() == Node::Namespace) { - const NamespaceNode* nsn = static_cast<const NamespaceNode*>(node); - out() << " <li><a href=\"namespaces.html\">All Namespaces</a></li>"; - out() << " <li><a href=\"" << fileName(nsn) << "\">" << title - << "</a></li>"; + out() << " <li><a href=\"namespaces.html\">Namespaces</a></li>"; + out() << " <li>" << title << "</li>"; } } diff --git a/tools/qdoc3/pagegenerator.cpp b/tools/qdoc3/pagegenerator.cpp index f0f14fe..13c83a8 100644 --- a/tools/qdoc3/pagegenerator.cpp +++ b/tools/qdoc3/pagegenerator.cpp @@ -45,7 +45,7 @@ #include <qfile.h> #include <qfileinfo.h> - +#include <qdebug.h> #include "pagegenerator.h" #include "tree.h" @@ -68,6 +68,110 @@ PageGenerator::~PageGenerator() endSubPage(); } +static QRegExp linkTag("(<@link node=\"([^\"]+)\">).*(</@link>)"); +static QRegExp funcTag("(<@func target=\"([^\"]*)\">)(.*)(</@func>)"); +static QRegExp typeTag("(<@(type|headerfile|func)(?: +[^>]*)?>)(.*)(</@\\2>)"); +static QRegExp spanTag("</@(?:comment|preprocessor|string|char)>"); +static QRegExp unknownTag("</?@[^>]*>"); + +bool PageGenerator::parseArg(const QString& src, + const QString& tag, + int* pos, + int n, + QStringRef* contents, + QStringRef* par1, + bool debug) +{ +#define SKIP_CHAR(c) \ + if (debug) \ + qDebug() << "looking for " << c << " at " << QString(src.data() + i, n - i); \ + if (i >= n || src[i] != c) { \ + if (debug) \ + qDebug() << " char '" << c << "' not found"; \ + return false; \ + } \ + ++i; + + +#define SKIP_SPACE \ + while (i < n && src[i] == ' ') \ + ++i; + + int i = *pos; + int j = i; + + // assume "<@" has been parsed outside + //SKIP_CHAR('<'); + //SKIP_CHAR('@'); + + if (tag != QStringRef(&src, i, tag.length())) { + if (0 && debug) + qDebug() << "tag " << tag << " not found at " << i; + return false; + } + + if (debug) + qDebug() << "haystack:" << src << "needle:" << tag << "i:" <<i; + + // skip tag + i += tag.length(); + + // parse stuff like: linkTag("(<@link node=\"([^\"]+)\">).*(</@link>)"); + if (par1) { + SKIP_SPACE; + // read parameter name + j = i; + while (i < n && src[i].isLetter()) + ++i; + if (src[i] == '=') { + if (debug) + qDebug() << "read parameter" << QString(src.data() + j, i - j); + SKIP_CHAR('='); + SKIP_CHAR('"'); + // skip parameter name + j = i; + while (i < n && src[i] != '"') + ++i; + *par1 = QStringRef(&src, j, i - j); + SKIP_CHAR('"'); + SKIP_SPACE; + } else { + if (debug) + qDebug() << "no optional parameter found"; + } + } + SKIP_SPACE; + SKIP_CHAR('>'); + + // find contents up to closing "</@tag> + j = i; + for (; true; ++i) { + if (i + 4 + tag.length() > n) + return false; + if (src[i] != '<') + continue; + if (src[i + 1] != '/') + continue; + if (src[i + 2] != '@') + continue; + if (tag != QStringRef(&src, i + 3, tag.length())) + continue; + if (src[i + 3 + tag.length()] != '>') + continue; + break; + } + + *contents = QStringRef(&src, j, i - j); + + i += tag.length() + 4; + + *pos = i; + if (debug) + qDebug() << " tag " << tag << " found: pos now: " << i; + return true; +#undef SKIP_CHAR +} + /*! This function is recursive. */ diff --git a/tools/qdoc3/pagegenerator.h b/tools/qdoc3/pagegenerator.h index 7ab7e5e..1aa24a1 100644 --- a/tools/qdoc3/pagegenerator.h +++ b/tools/qdoc3/pagegenerator.h @@ -80,10 +80,17 @@ class PageGenerator : public Generator QString naturalLanguage; QString outputEncoding; - QTextCodec *outputCodec; + QTextCodec* outputCodec; + bool parseArg(const QString& src, + const QString& tag, + int* pos, + int n, + QStringRef* contents, + QStringRef* par1 = 0, + bool debug = false); private: - QStack<QTextStream *> outStreamStack; + QStack<QTextStream*> outStreamStack; }; QT_END_NAMESPACE diff --git a/tools/qdoc3/qdoc3.pro b/tools/qdoc3/qdoc3.pro index 81ff93a..5bedc29 100644 --- a/tools/qdoc3/qdoc3.pro +++ b/tools/qdoc3/qdoc3.pro @@ -37,6 +37,7 @@ HEADERS += apigenerator.h \ cppcodeparser.h \ cpptoqsconverter.h \ dcfsection.h \ + ditaxmlgenerator.h \ doc.h \ editdistance.h \ generator.h \ @@ -81,6 +82,7 @@ SOURCES += apigenerator.cpp \ cppcodeparser.cpp \ cpptoqsconverter.cpp \ dcfsection.cpp \ + ditaxmlgenerator.cpp \ doc.cpp \ editdistance.cpp \ generator.cpp \ diff --git a/translations/assistant_ru.ts b/translations/assistant_ru.ts index ade4c85..5244483 100644 --- a/translations/assistant_ru.ts +++ b/translations/assistant_ru.ts @@ -4,7 +4,7 @@ <context> <name>AboutDialog</name> <message> - <location filename="../tools/assistant/tools/assistant/aboutdialog.cpp" line="+110"/> + <location filename="../tools/assistant/tools/assistant/aboutdialog.cpp" line="+117"/> <source>&Close</source> <translation>&Закрыть</translation> </message> @@ -12,7 +12,7 @@ <context> <name>AboutLabel</name> <message> - <location line="-14"/> + <location line="-15"/> <source>Warning</source> <translation>Предупреждение</translation> </message> @@ -24,12 +24,81 @@ </translation> </message> <message> - <location line="+1"/> + <location line="+0"/> <source>OK</source> <translation>Закрыть</translation> </message> </context> <context> + <name>Assistant</name> + <message> + <location filename="../tools/assistant/tools/assistant/main.cpp" line="+177"/> + <source>Error registering documentation file '%1': %2</source> + <translation>Ошибка регистрации файла документации '%1': %2</translation> + </message> + <message> + <location line="+39"/> + <source>Error: %1</source> + <translation>Ошибка: %1</translation> + </message> + <message> + <location line="+42"/> + <source>Could not register documentation file +%1 + +Reason: +%2</source> + <translation>Не удалось зарегистрировать файл документации +%1 + +Причина: +%2</translation> + </message> + <message> + <location line="+6"/> + <source>Documentation successfully registered.</source> + <translation>Документация успешно зарегистрирована.</translation> + </message> + <message> + <location line="+12"/> + <source>Could not unregister documentation file +%1 + +Reason: +%2</source> + <translation>Не удалось дерегистрировать файл документации +%1 + +Причина: +%2</translation> + </message> + <message> + <location line="+8"/> + <source>Documentation successfully unregistered.</source> + <translation>Документация успешно дерегистрирована.</translation> + </message> + <message> + <location line="+55"/> + <source>Error reading collection file '%1': %2.</source> + <translation type="unfinished">Ошибка чтения файла коллекции справки '%1': %2.</translation> + </message> + <message> + <location line="+11"/> + <source>Error creating collection file '%1': %2.</source> + <translation type="unfinished">Ошибка создания файла коллекции справки '%1': %2.</translation> + </message> + <message> + <location line="+7"/> + <source>Error reading collection file '%1': %2</source> + <translation type="unfinished">Ошибка чтения файла коллекции справки '%1': %2</translation> + </message> + <message> + <location line="+53"/> + <source>Cannot load sqlite database driver!</source> + <translation>Не удалось загрузить драйвер баз данных sqlite!</translation> + </message> +</context> +<context> <name>BookmarkDialog</name> <message> <location filename="../tools/assistant/tools/assistant/bookmarkdialog.ui"/> @@ -56,35 +125,11 @@ <source>New Folder</source> <translation>Новая папка</translation> </message> - <message> - <location filename="../tools/assistant/tools/assistant/bookmarkmanager.cpp" line="+187"/> - <location line="+18"/> - <location line="+39"/> - <location line="+18"/> - <location line="+33"/> - <source>Bookmarks</source> - <translation>Закладки</translation> - </message> - <message> - <location line="-64"/> - <source>Delete Folder</source> - <translation>Удалить папку</translation> - </message> - <message> - <location line="+1"/> - <source>Rename Folder</source> - <translation>Переименовать папку</translation> - </message> </context> <context> <name>BookmarkManager</name> <message> - <location line="+452"/> - <source>Bookmarks</source> - <translation>Закладки</translation> - </message> - <message> - <location line="+37"/> + <location filename="../tools/assistant/tools/assistant/bookmarkmanager.cpp" line="+216"/> <source>Remove</source> <translation>Удалить</translation> </message> @@ -94,16 +139,27 @@ <translation>Удаление папки приведёт к удалению её содержимого.<br>Желаете продолжить?</translation> </message> <message> - <location line="+143"/> - <location line="+9"/> - <source>New Folder</source> - <translation>Новая папка</translation> + <location line="+150"/> + <source>Add Bookmark...</source> + <translation>Добавить закладку...</translation> + </message> + <message> + <location line="+1"/> + <source>Ctrl+D</source> + <translation></translation> + </message> + <message> + <location line="-217"/> + <source>Untitled</source> + <translation>Неозаглавлено</translation> </message> -</context> -<context> - <name>BookmarkWidget</name> <message> - <location line="-474"/> + <location line="+213"/> + <source>Manage Bookmarks...</source> + <translation>Управление закладками...</translation> + </message> + <message> + <location line="+72"/> <source>Delete Folder</source> <translation>Удалить папку</translation> </message> @@ -123,7 +179,7 @@ <translation>Открыть закладку в новой вкладке</translation> </message> <message> - <location line="+3"/> + <location line="+2"/> <source>Delete Bookmark</source> <translation>Удалить закладку</translation> </message> @@ -132,26 +188,11 @@ <source>Rename Bookmark</source> <translation>Переименовать закладку</translation> </message> - <message> - <location line="+38"/> - <source>Filter:</source> - <translation>Фильтр:</translation> - </message> - <message> - <location line="+24"/> - <source>Add</source> - <translation>Добавить</translation> - </message> - <message> - <location line="+9"/> - <source>Remove</source> - <translation>Удалить</translation> - </message> </context> <context> <name>CentralWidget</name> <message> - <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="+239"/> + <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="+121"/> <source>Add new page</source> <translation>Открыть новую страницу</translation> </message> @@ -161,18 +202,18 @@ <translation>Закрыть текущую страницу</translation> </message> <message> - <location line="+312"/> + <location line="+287"/> <source>Print Document</source> <translation>Печать документа</translation> </message> <message> - <location line="+130"/> + <location line="+126"/> <location line="+2"/> <source>unknown</source> <translation>безымянная вкладка</translation> </message> <message> - <location line="+93"/> + <location line="+101"/> <source>Add New Page</source> <translation>Открыть новую страницу</translation> </message> @@ -192,15 +233,78 @@ <translation>Добавить закладку для этой страницы...</translation> </message> <message> - <location line="+248"/> + <location line="+264"/> <source>Search</source> <translation>Поиск</translation> </message> </context> <context> + <name>CmdLineParser</name> + <message> + <location filename="../tools/assistant/tools/assistant/cmdlineparser.cpp" line="+137"/> + <source>Unknown option: %1</source> + <translation>Неизвестный параметр: %1</translation> + </message> + <message> + <location line="+87"/> + <source>Unknown widget: %1</source> + <translation>Неизвестный виджет: %1</translation> + </message> + <message> + <location line="-54"/> + <source>The collection file '%1' does not exist.</source> + <translation type="unfinished">Файл коллекции справки '%1' не существует.</translation> + </message> + <message> + <location line="+3"/> + <source>Missing collection file.</source> + <translation type="unfinished">Отсутствует файл коллекции справки.</translation> + </message> + <message> + <location line="+13"/> + <source>Invalid URL '%1'.</source> + <translation>Некорректный URL '%1'.</translation> + </message> + <message> + <location line="+2"/> + <source>Missing URL.</source> + <translation>Отсутствует URL.</translation> + </message> + <message> + <location line="+38"/> + <source>Missing widget.</source> + <translation>Отсутствует виджет.</translation> + </message> + <message> + <location line="+23"/> + <source>The Qt help file '%1' does not exist.</source> + <translation>Файл справки Qt '%1' не существует.</translation> + </message> + <message> + <location line="+4"/> + <source>Missing help file.</source> + <translation>Отсутствует файл справки.</translation> + </message> + <message> + <location line="+10"/> + <source>Missing filter argument.</source> + <translation>Отсутствует параметр фильтра.</translation> + </message> + <message> + <location line="+20"/> + <source>Error</source> + <translation>Ошибка</translation> + </message> + <message> + <location line="+2"/> + <source>Notice</source> + <translation>Замечание</translation> + </message> +</context> +<context> <name>ContentWindow</name> <message> - <location filename="../tools/assistant/tools/assistant/contentwindow.cpp" line="+158"/> + <location filename="../tools/assistant/tools/assistant/contentwindow.cpp" line="+173"/> <source>Open Link</source> <translation>Открыть ссылку</translation> </message> @@ -224,34 +328,6 @@ </message> </context> <context> - <name>FindWidget</name> - <message> - <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="-931"/> - <source>Previous</source> - <translation>Предыдущее</translation> - </message> - <message> - <location line="+4"/> - <source>Next</source> - <translation>Следующее</translation> - </message> - <message> - <location line="+4"/> - <source>Case Sensitive</source> - <translation>Учитывать регистр</translation> - </message> - <message> - <location line="+3"/> - <source>Whole words</source> - <translation>Слова целиком</translation> - </message> - <message> - <location line="+12"/> - <source><img src=":/trolltech/assistant/images/wrap.png">&nbsp;Search wrapped</source> - <translation><img src=":/trolltech/assistant/images/wrap.png">&nbsp;Поиск с начала</translation> - </message> -</context> -<context> <name>FontPanel</name> <message> <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="+63"/> @@ -282,52 +358,25 @@ <context> <name>HelpViewer</name> <message> - <location filename="../tools/assistant/tools/assistant/helpviewer.cpp" line="+283"/> - <source>Open Link in New Tab</source> - <translation>Открыть ссылку в новой вкладке</translation> + <location filename="../tools/assistant/tools/assistant/helpviewer.cpp" line="+58"/> + <source><title>about:blank</title></source> + <translation></translation> </message> <message> - <location line="+147"/> + <location line="+6"/> <source><title>Error 404...</title><div align="center"><br><br><h1>The page could not be found</h1><br><h3>'%1'</h3></div></source> <translation><title>Ошибка 404...</title><div align="center"><br><br><h1>Страница не найдена</h1><br><h3>'%1'</h3></div></translation> </message> - <message> - <location line="+61"/> - <source>Help</source> - <translation>Справка</translation> - </message> - <message> - <location line="+1"/> - <source>Unable to launch external application. -</source> - <translation>Невозможно запустить внешнее приложение. -</translation> - </message> - <message> - <location line="+0"/> - <source>OK</source> - <translation>Закрыть</translation> - </message> - <message> - <location line="+63"/> - <source>Copy &Link Location</source> - <translation>Копировать &адрес ссылки</translation> - </message> - <message> - <location line="+3"/> - <source>Open Link in New Tab Ctrl+LMB</source> - <translation>Открыть ссылку в новой вкладке Ctrl+LMB</translation> - </message> </context> <context> <name>IndexWindow</name> <message> - <location filename="../tools/assistant/tools/assistant/indexwindow.cpp" line="+66"/> + <location filename="../tools/assistant/tools/assistant/indexwindow.cpp" line="+68"/> <source>&Look for:</source> <translation>&Искать:</translation> </message> <message> - <location line="+72"/> + <location line="+74"/> <source>Open Link</source> <translation>Открыть ссылку</translation> </message> @@ -341,29 +390,29 @@ <name>InstallDialog</name> <message> <location filename="../tools/assistant/tools/assistant/installdialog.ui"/> - <location filename="../tools/assistant/tools/assistant/installdialog.cpp" line="+76"/> + <location filename="../tools/assistant/tools/assistant/installdialog.cpp" line="+78"/> <source>Install Documentation</source> <translation>Установка документации</translation> </message> <message> - <location filename="../tools/assistant/tools/assistant/installdialog.cpp" line="+30"/> + <location filename="../tools/assistant/tools/assistant/installdialog.cpp" line="+33"/> <source>Downloading documentation info...</source> <translation>Загрузка информации о документации...</translation> </message> <message> - <location line="+48"/> + <location line="+51"/> <source>Download canceled.</source> <translation>Загрузка отменена.</translation> </message> <message> - <location line="+26"/> - <location line="+78"/> + <location line="+28"/> + <location line="+79"/> <location line="+27"/> <source>Done.</source> <translation>Готово.</translation> </message> <message> - <location line="-90"/> + <location line="-91"/> <source>The file %1 already exists. Do you want to overwrite it?</source> <translation>Файл %1 уже существует. Желаете перезаписать его?</translation> </message> @@ -378,14 +427,14 @@ <translation>Загрузка %1...</translation> </message> <message> - <location line="+19"/> + <location line="+20"/> <location line="+42"/> - <location line="+38"/> + <location line="+40"/> <source>Download failed: %1.</source> <translation>Загрузка не удалась: %1.</translation> </message> <message> - <location line="-70"/> + <location line="-72"/> <source>Documentation info file is corrupt!</source> <translation>Файл информации о документации повреждён!</translation> </message> @@ -400,7 +449,7 @@ <translation>Установка документации %1...</translation> </message> <message> - <location line="+22"/> + <location line="+23"/> <source>Error while installing documentation: %1</source> <translation>При установке документации возникла ошибка: @@ -440,48 +489,42 @@ <context> <name>MainWindow</name> <message> - <location filename="../tools/assistant/tools/assistant/mainwindow.cpp" line="+110"/> - <location line="+383"/> + <location filename="../tools/assistant/tools/assistant/mainwindow.cpp" line="+123"/> + <location line="+369"/> <source>Index</source> <translation>Указатель</translation> </message> <message> - <location line="-377"/> - <location line="+375"/> + <location line="-363"/> + <location line="+361"/> <source>Contents</source> <translation>Содержание</translation> </message> <message> - <location line="-370"/> - <location line="+374"/> + <location line="-354"/> + <location line="+358"/> <source>Bookmarks</source> <translation>Закладки</translation> </message> <message> - <location line="-362"/> - <location line="+207"/> - <location line="+514"/> + <location line="-336"/> + <location line="+680"/> + <location line="+284"/> <source>Qt Assistant</source> <translation>Qt Assistant</translation> </message> <message> - <location line="-546"/> - <location line="+5"/> - <source>Unfiltered</source> - <translation>Без фильтрации</translation> - </message> - <message> - <location line="+21"/> + <location line="-772"/> <source>Looking for Qt Documentation...</source> <translation>Поиск документации Qt...</translation> </message> <message> - <location line="+84"/> + <location line="+60"/> <source>&File</source> <translation>&Файл</translation> </message> <message> - <location line="+2"/> + <location line="+7"/> <source>Page Set&up...</source> <translation>Параметры &страницы...</translation> </message> @@ -496,22 +539,27 @@ <translation>&Печать...</translation> </message> <message> - <location line="+7"/> + <location line="-10"/> <source>New &Tab</source> <translation>Новая &вкладка</translation> </message> <message> - <location line="+3"/> + <location line="+17"/> <source>&Close Tab</source> <translation>&Закрыть вкладку</translation> </message> <message> - <location line="+4"/> + <location line="+5"/> <source>&Quit</source> <translation>В&ыход</translation> </message> <message> - <location line="+4"/> + <location line="+3"/> + <source>CTRL+Q</source> + <translation></translation> + </message> + <message> + <location line="+5"/> <source>&Edit</source> <translation>&Правка</translation> </message> @@ -568,22 +616,22 @@ <message> <location line="+4"/> <source>Ctrl+0</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location line="+5"/> <source>ALT+C</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location line="+2"/> <source>ALT+I</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location line="+2"/> <source>ALT+O</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location line="+1"/> @@ -593,7 +641,7 @@ <message> <location line="+1"/> <source>ALT+S</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location line="+2"/> @@ -608,7 +656,7 @@ <message> <location line="+1"/> <source>ALT+Home</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location line="+3"/> @@ -638,7 +686,7 @@ <message> <location line="+1"/> <source>Ctrl+Alt+Right</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location line="+3"/> @@ -648,25 +696,20 @@ <message> <location line="+1"/> <source>Ctrl+Alt+Left</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> - <location line="+3"/> + <location line="+4"/> <source>&Bookmarks</source> <translation>&Закладки</translation> </message> <message> - <location line="+1"/> - <source>Add Bookmark...</source> - <translation>Добавить закладку...</translation> - </message> - <message> - <location line="+2"/> - <source>CTRL+D</source> - <translation type="unfinished"></translation> + <location line="+592"/> + <source>Could not register file '%1': %2</source> + <translation>Не удалось зарегистрировать файл '%1': %2</translation> </message> <message> - <location line="+2"/> + <location line="-590"/> <source>&Help</source> <translation>&Справка</translation> </message> @@ -676,7 +719,7 @@ <translation>О программе...</translation> </message> <message> - <location line="+16"/> + <location line="+21"/> <source>Navigation Toolbar</source> <translation>Панель навигации</translation> </message> @@ -698,15 +741,15 @@ <message> <location line="+1"/> <source>Ctrl+M</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> - <location line="+50"/> + <location line="+43"/> <source>Toolbars</source> <translation>Панели инструментов</translation> </message> <message> - <location line="+15"/> + <location line="+16"/> <source>Filter Toolbar</source> <translation>Панель фильтров</translation> </message> @@ -716,7 +759,7 @@ <translation>Отфильтровано по:</translation> </message> <message> - <location line="+25"/> + <location line="+26"/> <source>Address Toolbar</source> <translation>Панель адреса</translation> </message> @@ -726,17 +769,17 @@ <translation>Адрес:</translation> </message> <message> - <location line="+114"/> + <location line="+112"/> <source>Could not find the associated content item.</source> <translation>Не удалось найти элемент, связанный с содержанием.</translation> </message> <message> - <location line="+71"/> + <location line="+60"/> <source>About %1</source> <translation>О %1</translation> </message> <message> - <location line="+114"/> + <location line="+175"/> <source>Updating search index</source> <translation>Обновление поискового индекса</translation> </message> @@ -744,18 +787,18 @@ <context> <name>PreferencesDialog</name> <message> - <location filename="../tools/assistant/tools/assistant/preferencesdialog.cpp" line="+259"/> - <location line="+43"/> + <location filename="../tools/assistant/tools/assistant/preferencesdialog.cpp" line="+252"/> + <location line="+44"/> <source>Add Documentation</source> <translation>Добавить документацию</translation> </message> <message> - <location line="-43"/> + <location line="-44"/> <source>Qt Compressed Help Files (*.qch)</source> <translation>Сжатые файлы справки Qt (*.qch)</translation> </message> <message> - <location line="+29"/> + <location line="+30"/> <source>The namespace %1 is already registered!</source> <translation>Пространство имён %1 уже зарегистрировано!</translation> </message> @@ -765,7 +808,7 @@ <translation>Указанный файл не является корректным файлом справки Qt!</translation> </message> <message> - <location line="+23"/> + <location line="+24"/> <source>Remove Documentation</source> <translation>Удалить документацию</translation> </message> @@ -785,7 +828,7 @@ <translation>Удалить</translation> </message> <message> - <location line="+88"/> + <location line="+83"/> <source>Use custom settings</source> <translation>Использовать индивидуальные настройки</translation> </message> @@ -909,120 +952,9 @@ </message> </context> <context> - <name>QObject</name> - <message> - <location filename="../tools/assistant/tools/assistant/cmdlineparser.cpp" line="+112"/> - <source>The specified collection file does not exist!</source> - <translation type="unfinished">Указанный файл набора отсутствует!</translation> - </message> - <message> - <location line="+4"/> - <source>Missing collection file!</source> - <translation type="unfinished">Отсутствует файл набора!</translation> - </message> - <message> - <location line="+9"/> - <source>Invalid URL!</source> - <translation>Некорректный URL!</translation> - </message> - <message> - <location line="+4"/> - <source>Missing URL!</source> - <translation>Отсутствует URL!</translation> - </message> - <message> - <location line="+17"/> - <location line="+19"/> - <location line="+19"/> - <source>Unknown widget: %1</source> - <translation>Неизвестный виджет: %1</translation> - </message> - <message> - <location line="-34"/> - <location line="+19"/> - <location line="+19"/> - <source>Missing widget!</source> - <translation>Отсутствует виджет!</translation> - </message> - <message> - <location line="+7"/> - <location line="+12"/> - <source>The specified Qt help file does not exist!</source> - <translation>Указанный файл справки Qt отсутствует!</translation> - </message> - <message> - <location line="-7"/> - <location line="+12"/> - <source>Missing help file!</source> - <translation>Отсутствует файл справки!</translation> - </message> - <message> - <location line="+7"/> - <source>Missing filter argument!</source> - <translation>Отсутствует параметр фильтра!</translation> - </message> - <message> - <location line="+12"/> - <source>Unknown option: %1</source> - <translation>Неизвестный параметр: %1</translation> - </message> - <message> - <location line="+30"/> - <location line="+2"/> - <source>Qt Assistant</source> - <translation>Qt Assistant</translation> - </message> - <message> - <location filename="../tools/assistant/tools/assistant/main.cpp" line="+228"/> - <source>Could not register documentation file -%1 - -Reason: -%2</source> - <translation>Не удалось зарегистрировать файл документации -%1 - -Причина: -%2</translation> - </message> - <message> - <location line="+4"/> - <source>Documentation successfully registered.</source> - <translation>Документация успешно зарегистрирована.</translation> - </message> - <message> - <location line="+8"/> - <source>Documentation successfully unregistered.</source> - <translation>Документация успешно дерегистрирована.</translation> - </message> - <message> - <location line="+3"/> - <source>Could not unregister documentation file -%1 - -Reason: -%2</source> - <translation>Не удалось дерегистрировать файл документации -%1 - -Причина: -%2</translation> - </message> - <message> - <location line="+37"/> - <source>Cannot load sqlite database driver!</source> - <translation>Не удалось загрузить драйвер базы данных sqlite!</translation> - </message> - <message> - <location line="+9"/> - <source>The specified collection file could not be read!</source> - <translation type="unfinished">Не удалось прочитать указанный файл набора!</translation> - </message> -</context> -<context> <name>RemoteControl</name> <message> - <location filename="../tools/assistant/tools/assistant/remotecontrol.cpp" line="+163"/> + <location filename="../tools/assistant/tools/assistant/remotecontrol.cpp" line="+165"/> <source>Debugging Remote Control</source> <translation>Отладочное удалённое управление</translation> </message> @@ -1035,7 +967,7 @@ Reason: <context> <name>SearchWidget</name> <message> - <location filename="../tools/assistant/tools/assistant/searchwidget.cpp" line="+196"/> + <location filename="../tools/assistant/tools/assistant/searchwidget.cpp" line="+210"/> <source>&Copy</source> <translation>&Копировать</translation> </message> @@ -1058,7 +990,7 @@ Reason: <context> <name>TopicChooser</name> <message> - <location filename="../tools/assistant/tools/assistant/topicchooser.cpp" line="+54"/> + <location filename="../tools/assistant/tools/assistant/topicchooser.cpp" line="+53"/> <source>Choose a topic for <b>%1</b>:</source> <translation>Выберите раздел для <b>%1</b>:</translation> </message> diff --git a/translations/designer_ru.ts b/translations/designer_ru.ts index 412be47..72f3532 100644 --- a/translations/designer_ru.ts +++ b/translations/designer_ru.ts @@ -255,7 +255,7 @@ <translation>Пересекающиеся диагонали</translation> </message> <message> - <location line="+83"/> + <location line="+93"/> <source>Style</source> <translation>Стиль</translation> </message> @@ -611,28 +611,28 @@ <translation>Вставить меню</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="+1213"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="+1225"/> <source>Changed '%1' of '%2'</source> - <translation type="unfinished">Изменено '%1' у '%2'</translation> + <translation>Изменено '%1' у '%2'</translation> </message> <message numerus="yes"> <location line="+3"/> <source>Changed '%1' of %n objects</source> - <translation type="unfinished"> + <translation> <numerusform>Изменено '%1' у %n объекта</numerusform> <numerusform>Изменено '%1' у %n объектов</numerusform> <numerusform>Изменено '%1' у %n объектов</numerusform> </translation> </message> <message> - <location line="+76"/> + <location line="+84"/> <source>Reset '%1' of '%2'</source> - <translation type="unfinished">Восстановлено '%1' у '%2'</translation> + <translation>Восстановлено '%1' у '%2'</translation> </message> <message numerus="yes"> <location line="+3"/> <source>Reset '%1' of %n objects</source> - <translation type="unfinished"> + <translation> <numerusform>Восстановлено '%1' у %n объекта</numerusform> <numerusform>Восстановлено '%1' у %n объектов</numerusform> <numerusform>Восстановлено '%1' у %n объектов</numerusform> @@ -641,12 +641,12 @@ <message> <location line="+89"/> <source>Add dynamic property '%1' to '%2'</source> - <translation type="unfinished">Добавлено динамическое свойство '%1' '%2'</translation> + <translation>Добавлено динамическое свойство '%1' '%2'</translation> </message> <message numerus="yes"> <location line="+3"/> <source>Add dynamic property '%1' to %n objects</source> - <translation type="unfinished"> + <translation> <numerusform>Добавлено динамическое свойство '%1' %n объекту</numerusform> <numerusform>Добавлено динамическое свойство '%1' %n объектам</numerusform> <numerusform>Добавлено динамическое свойство '%1' %n объектам</numerusform> @@ -655,12 +655,12 @@ <message> <location line="+86"/> <source>Remove dynamic property '%1' from '%2'</source> - <translation type="unfinished">Удалено динамическое свойство '%1' у '%2'</translation> + <translation>Удалено динамическое свойство '%1' у '%2'</translation> </message> <message numerus="yes"> <location line="+3"/> <source>Remove dynamic property '%1' from %n objects</source> - <translation type="unfinished"> + <translation> <numerusform>Удалено динамическое свойство '%1' у %n объекта</numerusform> <numerusform>Удалено динамическое свойство '%1' у %n объектов</numerusform> <numerusform>Удалено динамическое свойство '%1' у %n объектов</numerusform> @@ -742,7 +742,7 @@ <context> <name>Designer</name> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="+449"/> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="+446"/> <source>Qt Designer</source> <translation>Qt Designer</translation> </message> @@ -1074,8 +1074,7 @@ <message> <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui"/> <source>Add Form Layout Row</source> - <translatorcomment>нелепица какая-то</translatorcomment> - <translation type="unfinished">Добавление строки компоновки компоновщика формы</translation> + <translation type="unfinished">Добавление строки компоновщика формы</translation> </message> <message> <location/> @@ -1111,7 +1110,7 @@ <context> <name>FormWindow</name> <message> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="+1701"/> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="+1754"/> <source>Unexpected element <%1></source> <translation>Неожиданный элемент <%1></translation> </message> @@ -1204,7 +1203,7 @@ <context> <name>MainWindowBase</name> <message> - <location filename="../tools/designer/src/designer/mainwindow.cpp" line="+119"/> + <location filename="../tools/designer/src/designer/mainwindow.cpp" line="+121"/> <source>Main</source> <extracomment>Not currently used (main tool bar)</extracomment> <translation>Главное</translation> @@ -1584,7 +1583,7 @@ Script: %3</source> <context> <name>QDesignerActions</name> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="+128"/> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="+130"/> <source>Saved %1.</source> <translation>Сохранено %1.</translation> </message> @@ -1614,24 +1613,24 @@ Script: %3</source> <translation>Настройки...</translation> </message> <message> - <location line="+298"/> + <location line="+322"/> <source>Clear &Menu</source> <translation>Очистить &меню</translation> </message> <message> - <location line="-233"/> + <location line="-247"/> <source>CTRL+SHIFT+S</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> - <location line="+113"/> + <location line="+127"/> <source>CTRL+R</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location line="+18"/> <source>CTRL+M</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location line="+31"/> @@ -1678,7 +1677,7 @@ Script: %3</source> <translation>UI файлы Qt Designer (*.%1);;Все файлы (*)</translation> </message> <message> - <location line="-620"/> + <location line="-644"/> <source>%1 already exists. Do you want to replace it?</source> <translation>%1 уже существует. @@ -1690,7 +1689,7 @@ Do you want to replace it?</source> <translation>Дополнительные шрифты...</translation> </message> <message> - <location line="+303"/> + <location line="+327"/> <source>&Recent Forms</source> <translation>&Последние формы</translation> </message> @@ -1753,7 +1752,7 @@ Do you want to update the file location or generate a new form?</source> <translation>&Закрыть предпросмотр</translation> </message> <message> - <location line="-905"/> + <location line="-929"/> <source>&New...</source> <translation>&Новый...</translation> </message> @@ -1784,12 +1783,12 @@ Do you want to update the file location or generate a new form?</source> </message> <message> <location line="+1"/> - <location line="+901"/> + <location line="+925"/> <source>&Close</source> <translation>&Закрыть</translation> </message> <message> - <location line="-900"/> + <location line="-924"/> <source>Save &Image...</source> <translation>Сохранить &Изображение...</translation> </message> @@ -1804,12 +1803,12 @@ Do you want to update the file location or generate a new form?</source> <translation>Показать &код...</translation> </message> <message> - <location line="+68"/> + <location line="+78"/> <source>ALT+CTRL+S</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> - <location line="+356"/> + <location line="+370"/> <location line="+248"/> <source>Save Form As</source> <translation>Сохранить форму как</translation> @@ -2059,17 +2058,17 @@ Would you like to retry?</source> <message> <location line="+5"/> <source>A required attribute ('%1') is missing.</source> - <translation type="unfinished">Отсутствует необходимый атрибут ('%1').</translation> + <translation>Отсутствует необходимый атрибут ('%1').</translation> </message> <message> <location line="+38"/> <source>An invalid property specification ('%1') was encountered. Supported types: %2</source> - <translation type="unfinished">Обнаружена неверная спецификация ('%1') свойства. Поддерживаются типы: %2</translation> + <translation>Обнаружена неверная спецификация ('%1') свойства. Поддерживаются типы: %2</translation> </message> <message> <location line="+20"/> <source>'%1' is not a valid string property specification.</source> - <translation type="unfinished">'%1' не является корректной спецификацией строкового свойства.</translation> + <translation>'%1' не является корректной спецификацией строкового свойства.</translation> </message> <message> <location line="+40"/> @@ -2090,7 +2089,7 @@ Would you like to retry?</source> <context> <name>QDesignerPropertySheet</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_propertysheet.cpp" line="+754"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_propertysheet.cpp" line="+758"/> <source>Dynamic Properties</source> <translation>Динамические свойства</translation> </message> @@ -2103,14 +2102,14 @@ Would you like to retry?</source> <translation>Компоновка типа '%1' не поддерживается, заменена на компоновку сеткой.</translation> </message> <message> - <location line="+243"/> + <location line="+239"/> <source>The container extension of the widget '%1' (%2) returned a widget not managed by Designer '%3' (%4) when queried for page #%5. Container pages should only be added by specifying them in XML returned by the domXml() method of the custom widget.</source> <translation>Контейнерное расширение виджета '%1' (%2) возвратило виджет, который не управляется Qt Designer '%3' (%4), при запросе страницы №%5. Страницы контейнера должны быть добавлены указанием их в XML, который возвращается методом domXml() пользовательского виджета.</translation> </message> <message> - <location line="+599"/> + <location line="+545"/> <source>Unexpected element <%1></source> <extracomment>Parsing clipboard contents</extracomment> <translation>Неожиданный элемент <%1></translation> @@ -2212,21 +2211,21 @@ Container pages should only be added by specifying them in XML returned by the d <translation>Панель инструментов</translation> </message> <message> - <location line="+465"/> + <location line="+466"/> <source>Save Forms?</source> <translation>Сохранить форму?</translation> </message> <message numerus="yes"> <location line="+1"/> <source>There are %n forms with unsaved changes. Do you want to review these changes before quitting?</source> - <translation type="unfinished"> - <numerusform>Есть %n форма с несохранёнными изменениями. Показать изменения перед выходом?</numerusform> - <numerusform>Есть %n формы с несохранёнными изменениями. Показать изменения перед выходом?</numerusform> - <numerusform>Есть %n форм с несохранёнными изменениями. Показать изменения перед выходом?</numerusform> + <translation> + <numerusform>Имеется %n форма с несохранёнными изменениями. Желаете просмотреть изменения перед выходом?</numerusform> + <numerusform>Имеется %n формы с несохранёнными изменениями. Желаете просмотреть изменения перед выходом?</numerusform> + <numerusform>Имеется %n форм с несохранёнными изменениями. Желаете просмотреть изменения перед выходом?</numerusform> </translation> </message> <message> - <location line="-495"/> + <location line="-496"/> <source>&View</source> <translation>&Вид</translation> </message> @@ -2241,9 +2240,9 @@ Container pages should only be added by specifying them in XML returned by the d <translation>Панель виджетов</translation> </message> <message> - <location line="+292"/> + <location line="+293"/> <source>If you do not review your documents, all your changes will be lost.</source> - <translation type="unfinished">Если вы не пересмотрите документы, то все ваши изменения будут потеряны.</translation> + <translation type="unfinished">Если не просматривать изменения, все изменения будут потеряны.</translation> </message> <message> <location line="+1"/> @@ -2258,7 +2257,7 @@ Container pages should only be added by specifying them in XML returned by the d <message> <location line="+95"/> <source>Backup Information</source> - <translation type="unfinished">Информация о резервировании</translation> + <translation type="unfinished">Информация о резервированых копиях</translation> </message> <message> <location line="+1"/> @@ -2273,7 +2272,7 @@ Container pages should only be added by specifying them in XML returned by the d <message> <location line="+46"/> <source>The file <b>%1</b> is not a valid Designer UI file.</source> - <translation type="unfinished">Файл <b>%1</b> не является корректным UI файлом Qt Designer.</translation> + <translation>Файл <b>%1</b> не является корректным UI файлом Qt Designer.</translation> </message> </context> <context> @@ -2322,7 +2321,7 @@ Container pages should only be added by specifying them in XML returned by the d <message> <location filename="../tools/designer/src/lib/uilib/properties_p.h" line="+132"/> <source>The enumeration-value '%1' is invalid. The default value '%2' will be used instead.</source> - <translation>Значение '%1' перечисляемого типа некорректно. Будет использовано значение '%2'.</translation> + <translation>Значение '%1' перечисляемого типа некорректно. Будет использовано значение по умолчанию '%2'.</translation> </message> <message> <location line="+14"/> @@ -2466,13 +2465,13 @@ Container pages should only be added by specifying them in XML returned by the d <location line="+10"/> <location line="+25"/> <source>True</source> - <translation type="unfinished">Вкл.</translation> + <translation>Вкл.</translation> </message> <message> <location line="-25"/> <location line="+25"/> <source>False</source> - <translation type="unfinished">Выкл.</translation> + <translation>Выкл.</translation> </message> </context> <context> @@ -2480,12 +2479,12 @@ Container pages should only be added by specifying them in XML returned by the d <message> <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+1507"/> <source>True</source> - <translation type="unfinished">Вкл.</translation> + <translation>Вкл.</translation> </message> <message> <location line="+1"/> <source>False</source> - <translation type="unfinished">Выкл.</translation> + <translation>Выкл.</translation> </message> </context> <context> @@ -3503,7 +3502,7 @@ to <context> <name>QtResourceView</name> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceview.cpp" line="+566"/> + <location filename="../tools/designer/src/lib/shared/qtresourceview.cpp" line="+567"/> <source>Size: %1 x %2 %3</source> <translation>Размер: %1 x %2 @@ -3528,7 +3527,7 @@ to <context> <name>QtResourceViewDialog</name> <message> - <location line="+250"/> + <location line="+252"/> <source>Select Resource</source> <translation>Выбрать ресурс</translation> </message> @@ -3915,6 +3914,26 @@ Do you want overwrite the template?</source> </message> <message> <location line="+6"/> + <source>File</source> + <translation type="unfinished">Файл</translation> + </message> + <message> + <location line="+4"/> + <source>Edit</source> + <translation type="unfinished">Правка</translation> + </message> + <message> + <location line="+4"/> + <source>Tools</source> + <translation type="unfinished">Инструменты</translation> + </message> + <message> + <location line="+4"/> + <source>Form</source> + <translation type="unfinished">Форма</translation> + </message> + <message> + <location line="+4"/> <source>Toolbars</source> <translation>Панели инструментов</translation> </message> @@ -3939,7 +3958,7 @@ Do you want overwrite the template?</source> <message> <location line="+2"/> <source>%1<br/>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</source> - <translation type="unfinished">%1<br/>Copyright (C) 2010 Корпорация Nokia и/или её дочерние подразделения.</translation> + <translation>%1<br/>Copyright (C) 2010 Корпорация Nokia и/или её дочерние подразделения.</translation> </message> </context> <context> @@ -4424,38 +4443,38 @@ Do you want overwrite the template?</source> <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="+647"/> <location line="+6"/> <source>AlignLeft</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location line="-5"/> <source>AlignHCenter</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location line="+1"/> <source>AlignRight</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location line="+1"/> <source>AlignJustify</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location line="+9"/> <source>AlignTop</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location line="+1"/> <location line="+4"/> <source>AlignVCenter</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location line="-3"/> <source>AlignBottom</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location line="+565"/> @@ -4708,9 +4727,14 @@ Do you want overwrite the template?</source> <context> <name>qdesigner_internal::FilterWidget</name> <message> - <location filename="../tools/designer/src/lib/shared/filterwidget.cpp" line="+185"/> - <source><Filter></source> - <translation><Фильтр></translation> + <location filename="../tools/designer/src/lib/shared/filterwidget.cpp" line="+163"/> + <source>Filter</source> + <translation>Фильтр</translation> + </message> + <message> + <location line="+36"/> + <source>Clear text</source> + <translation>Очистить текст</translation> </message> </context> <context> @@ -4737,33 +4761,37 @@ Do you want overwrite the template?</source> <context> <name>qdesigner_internal::FormWindow</name> <message> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="-1267"/> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="-1322"/> <source>Edit contents</source> <translation>Изменить содержимое</translation> </message> <message> <location line="+1"/> <source>F2</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> - <location line="+774"/> + <location line="+775"/> <source>Insert widget '%1'</source> <translation>Вставить виджет '%1'</translation> </message> <message> - <location line="+67"/> + <location line="+65"/> <source>Resize</source> <translation>Изменение размера</translation> </message> <message> - <location line="+218"/> - <location line="+15"/> + <location line="+248"/> <source>Key Move</source> <translation type="unfinished">Перемещение клавишей</translation> </message> + <message> + <location line="+0"/> + <source>Key Resize</source> + <translation type="unfinished">Изменение размера клавишей</translation> + </message> <message numerus="yes"> - <location line="+211"/> + <location line="+252"/> <source>Paste %n action(s)</source> <translation type="unfinished"> <numerusform>Вставлено %n действие</numerusform> @@ -4801,7 +4829,7 @@ Do you want overwrite the template?</source> <translation>Ошибка вставки</translation> </message> <message> - <location line="+183"/> + <location line="+181"/> <source>Raise widgets</source> <translation>Поднятие виджетов</translation> </message> @@ -4821,7 +4849,7 @@ Do you want overwrite the template?</source> <translation>Компоновка</translation> </message> <message> - <location line="+493"/> + <location line="+485"/> <location line="+55"/> <source>Drop widget</source> <translation type="unfinished">Вставка виджета</translation> @@ -4835,7 +4863,7 @@ Do you want overwrite the template?</source> <context> <name>qdesigner_internal::FormWindowBase</name> <message> - <location filename="../tools/designer/src/lib/shared/formwindowbase.cpp" line="+393"/> + <location filename="../tools/designer/src/lib/shared/formwindowbase.cpp" line="+404"/> <source>Delete '%1'</source> <translation>Удалить '%1'</translation> </message> @@ -4932,7 +4960,7 @@ Do you want overwrite the template?</source> <message> <location line="+6"/> <source>Lay Out &Horizontally</source> - <translation>Скомпоновать по &горизонтальная</translation> + <translation>Скомпоновать по &горизонтали</translation> </message> <message> <location line="+3"/> @@ -5025,7 +5053,7 @@ Do you want overwrite the template?</source> <translation>&Настройки формы...</translation> </message> <message> - <location line="+92"/> + <location line="+94"/> <source>Break Layout</source> <translation>Удалить компоновщик</translation> </message> @@ -5441,7 +5469,7 @@ Please select another name.</source> <message> <location/> <source>horizontalSpacer</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location/> @@ -5500,7 +5528,7 @@ Please select another name.</source> <message> <location line="+244"/> <source>Unable to open the form template file '%1': %2</source> - <translation type="unfinished">Невозможно открыть файл шаблона формы '%1': %2</translation> + <translation>Невозможно открыть файл шаблона формы '%1': %2</translation> </message> <message> <location line="+67"/> @@ -5869,7 +5897,7 @@ Please select another name.</source> <source>The moose in the noose ate the goose who was loose.</source> <extracomment>Palette editor background</extracomment> - <translation type="unfinished"></translation> + <translation></translation> </message> </context> <context> @@ -5945,12 +5973,12 @@ ate the goose who was loose.</source> <message> <location line="+1"/> <source>Global include</source> - <translation type="unfinished">Глобальное включение</translation> + <translation>Глобальное включение</translation> </message> <message> <location line="+1"/> <source>Usage</source> - <translation type="unfinished">Использование</translation> + <translation>Использование</translation> </message> </context> <context> @@ -5984,7 +6012,7 @@ ate the goose who was loose.</source> <context> <name>qdesigner_internal::PropertyEditor</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="+183"/> + <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="+231"/> <source>Add Dynamic Property...</source> <translation>Добавить динамическое свойство...</translation> </message> @@ -6014,7 +6042,7 @@ ate the goose who was loose.</source> <translation type="unfinished">Вид выпадающего списка</translation> </message> <message> - <location line="+50"/> + <location line="+45"/> <source>String...</source> <translation>Строка...</translation> </message> @@ -6034,7 +6062,7 @@ ate the goose who was loose.</source> <translation>Настроить радактор свойств</translation> </message> <message> - <location line="+533"/> + <location line="+539"/> <source>Object: %1 Class: %2</source> <translation>Объект: %1 @@ -6372,7 +6400,7 @@ Class: %2</source> <message> <location line="+1"/> <source>CTRL+B</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location line="+5"/> @@ -6382,7 +6410,7 @@ Class: %2</source> <message> <location line="+1"/> <source>CTRL+I</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location line="+5"/> @@ -6392,7 +6420,7 @@ Class: %2</source> <message> <location line="+1"/> <source>CTRL+U</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location line="+13"/> @@ -6495,7 +6523,7 @@ Class: %2</source> <message> <location line="+2"/> <source>F4</source> - <translation type="unfinished"></translation> + <translation></translation> </message> </context> <context> diff --git a/translations/linguist_ru.ts b/translations/linguist_ru.ts index 3f26c49..625a0f1 100644 --- a/translations/linguist_ru.ts +++ b/translations/linguist_ru.ts @@ -290,19 +290,19 @@ Will assume a single universal form.</source> <location filename="../tools/linguist/linguist/messageeditorwidgets.cpp" line="+302"/> <source>Alt+Delete</source> <extracomment>translate, but don't change</extracomment> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location line="+1"/> <source>Shift+Alt+Insert</source> <extracomment>translate, but don't change</extracomment> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location line="+1"/> <source>Alt+Insert</source> <extracomment>translate, but don't change</extracomment> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location line="+131"/> @@ -312,7 +312,7 @@ Will assume a single universal form.</source> <message> <location line="+1"/> <source>Delete non-empty length variant?</source> - <translation>Удалить непустой вариант длины?</translation> + <translation>Удалить вариант перевода?</translation> </message> </context> <context> @@ -320,7 +320,7 @@ Will assume a single universal form.</source> <message numerus="yes"> <location filename="../tools/linguist/shared/qm.cpp" line="+763"/> <source>Dropped %n message(s) which had no ID.</source> - <translation type="unfinished"> + <translation> <numerusform>Удалено %n сообщение, у которого не было ID.</numerusform> <numerusform>Удалено %n сообщения, у которых не было ID.</numerusform> <numerusform>Удалено %n сообщений, у которых не было ID.</numerusform> @@ -329,7 +329,7 @@ Will assume a single universal form.</source> <message numerus="yes"> <location line="+4"/> <source>Excess context/disambiguation dropped from %n message(s).</source> - <translation type="unfinished"> + <translation> <numerusform>Удалён лишний контекст из %n сообщения.</numerusform> <numerusform>Удалён лишний контекст из %n сообщений.</numerusform> <numerusform>Удалён лишний контекст из %n сообщений.</numerusform> @@ -481,12 +481,12 @@ Skip loading the first named file?</source> <message> <location filename="../tools/linguist/linguist/mainwindow.ui"/> <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+15"/> - <location line="+1165"/> + <location line="+1187"/> <source>Release</source> <translation>Скомпилировать</translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1164"/> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1186"/> <source>Qt message files for released applications (*.qm) All files (*)</source> <translation>Скомпилированные файлы перевода для приложений Qt (*.qm) @@ -553,7 +553,7 @@ All files (*)</source> <location line="+34"/> <location line="+24"/> <location line="+22"/> - <location line="+516"/> + <location line="+538"/> <location line="+1"/> <location line="+274"/> <location line="+40"/> @@ -562,7 +562,7 @@ All files (*)</source> <translation>Qt Linguist</translation> </message> <message> - <location line="-1198"/> + <location line="-1220"/> <location line="+102"/> <source>Cannot find the string '%1'.</source> <translation>Не удалось найти строку '%1'.</translation> @@ -693,7 +693,7 @@ All files (*)</source> <translation>Непереведённых записей не осталось.</translation> </message> <message> - <location line="+176"/> + <location line="+198"/> <source>&Window</source> <translation>&Окно</translation> </message> @@ -705,7 +705,7 @@ All files (*)</source> <message> <location line="+1"/> <source>Ctrl+M</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location line="+12"/> @@ -969,7 +969,7 @@ All files (*)</source> <message> <location/> <source>Ctrl+O</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location/> @@ -984,7 +984,7 @@ All files (*)</source> <message> <location/> <source>Ctrl+Q</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location/> @@ -1024,7 +1024,7 @@ All files (*)</source> <message> <location/> <source>Ctrl+P</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location/> @@ -1039,7 +1039,7 @@ All files (*)</source> <message> <location/> <source>Ctrl+Z</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location/> @@ -1054,7 +1054,7 @@ All files (*)</source> <message> <location/> <source>Ctrl+Y</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location/> @@ -1069,7 +1069,7 @@ All files (*)</source> <message> <location/> <source>Ctrl+X</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location/> @@ -1084,7 +1084,7 @@ All files (*)</source> <message> <location/> <source>Ctrl+C</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location/> @@ -1099,7 +1099,7 @@ All files (*)</source> <message> <location/> <source>Ctrl+V</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location/> @@ -1114,7 +1114,7 @@ All files (*)</source> <message> <location/> <source>Ctrl+A</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location/> @@ -1129,7 +1129,7 @@ All files (*)</source> <message> <location/> <source>Ctrl+F</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location/> @@ -1144,7 +1144,7 @@ All files (*)</source> <message> <location/> <source>F3</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location/> @@ -1159,7 +1159,7 @@ All files (*)</source> <message> <location/> <source>Length Variants</source> - <translation>Варианты длины</translation> + <translation>Варианты перевода</translation> </message> <message> <location/> @@ -1169,7 +1169,7 @@ All files (*)</source> <message> <location/> <source>Ctrl+K</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location/> @@ -1184,7 +1184,7 @@ All files (*)</source> <message> <location/> <source>Ctrl+J</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location/> @@ -1199,7 +1199,7 @@ All files (*)</source> <message> <location/> <source>Ctrl+Shift+K</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location/> @@ -1214,7 +1214,7 @@ All files (*)</source> <message> <location/> <source>Ctrl+Shift+J</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location/> @@ -1239,7 +1239,7 @@ All files (*)</source> <message> <location/> <source>Ctrl+B</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location/> @@ -1294,7 +1294,7 @@ All files (*)</source> <message> <location/> <source>Ctrl+N</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location/> @@ -1309,7 +1309,7 @@ All files (*)</source> <message> <location/> <source>Ctrl+H</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location/> @@ -1349,7 +1349,7 @@ All files (*)</source> <message> <location/> <source>F1</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location/> @@ -1363,11 +1363,6 @@ All files (*)</source> </message> <message> <location/> - <source>Display information about the Qt toolkit by Trolltech.</source> - <translation>Показать информацию об инструментарии Qt от Nokia.</translation> - </message> - <message> - <location/> <source>&What's This?</source> <translation>&Что это?</translation> </message> @@ -1384,7 +1379,7 @@ All files (*)</source> <message> <location/> <source>Shift+F1</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location/> @@ -1414,7 +1409,7 @@ All files (*)</source> <message> <location/> <source>F5</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location/> @@ -1424,7 +1419,7 @@ All files (*)</source> <message> <location/> <source>Ctrl+T</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location/> @@ -1439,7 +1434,7 @@ All files (*)</source> <message> <location/> <source>Ctrl+S</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location/> @@ -1454,7 +1449,7 @@ All files (*)</source> <message> <location/> <source>Ctrl+W</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <location/> @@ -1506,6 +1501,11 @@ All files (*)</source> <source>Toggle the validity check of place markers</source> <translation>Переключение проверки маркеров форматирования</translation> </message> + <message> + <location/> + <source>Display information about the Qt toolkit by Nokia.</source> + <translation>Показать информацию об инструментарии Qt от Nokia.</translation> + </message> </context> <context> <name>MessageEditor</name> @@ -1795,7 +1795,7 @@ Line: %2</source> <context> <name>QObject</name> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1842"/> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1864"/> <source>Translation files (%1);;</source> <translation>Файлы перевода (%1);;</translation> </message> @@ -1816,11 +1816,16 @@ Line: %2</source> <translation>Qt Linguist</translation> </message> <message> - <location filename="../tools/linguist/shared/po.cpp" line="+658"/> + <location filename="../tools/linguist/shared/po.cpp" line="+817"/> <source>GNU Gettext localization files</source> <translation>Файлы локализации GNU Gettext</translation> </message> <message> + <location line="+7"/> + <source>GNU Gettext localization template files</source> + <translation>Файлы шаблонов локализации GNU Gettext</translation> + </message> + <message> <location filename="../tools/linguist/shared/qm.cpp" line="+12"/> <source>Compiled Qt translations</source> <translation>Скомпилированные переводы Qt</translation> @@ -1846,7 +1851,7 @@ Line: %2</source> <translation>Исходные файлы перевода Qt (последний формат)</translation> </message> <message> - <location filename="../tools/linguist/shared/xliff.cpp" line="+827"/> + <location filename="../tools/linguist/shared/xliff.cpp" line="+829"/> <source>XLIFF localization files</source> <translation>Файлы локализации XLIFF</translation> </message> diff --git a/translations/qt_help_ru.ts b/translations/qt_help_ru.ts index 341cf19..f1aa0fa 100644 --- a/translations/qt_help_ru.ts +++ b/translations/qt_help_ru.ts @@ -34,7 +34,7 @@ <message> <location filename="../tools/assistant/lib/qhelpcollectionhandler.cpp" line="+79"/> <source>The collection file '%1' is not set up yet!</source> - <translation type="unfinished">Файл набора '%1' ещё не установлен!</translation> + <translation>Файл коллекции справки '%1' ещё не установлен!</translation> </message> <message> <location line="+23"/> @@ -43,9 +43,9 @@ </message> <message> <location line="+11"/> - <location line="+49"/> + <location line="+52"/> <source>Cannot open collection file: %1</source> - <translation type="unfinished">Не удалось открыть файл набора: %1</translation> + <translation>Не удалось открыть файл коллекции справки: %1</translation> </message> <message> <location line="-40"/> @@ -55,15 +55,15 @@ <message> <location line="+16"/> <source>The collection file '%1' already exists!</source> - <translation type="unfinished">Файл набора '%1' уже существует!</translation> + <translation>Файл коллекции справки '%1' уже существует!</translation> </message> <message> - <location line="+148"/> + <location line="+151"/> <source>Unknown filter '%1'!</source> <translation>Неизвестный фильтр '%1'!</translation> </message> <message> - <location line="+105"/> + <location line="+103"/> <source>Invalid documentation file '%1'!</source> <translation>Некорректный файл документации '%1'!</translation> </message> @@ -78,17 +78,17 @@ <translation>Не удалось открыть базу данных '%1' для оптимизации!</translation> </message> <message> - <location line="-438"/> + <location line="-439"/> <source>Cannot create directory: %1</source> <translation>Не удалось создать каталог: %1</translation> </message> <message> - <location line="+23"/> + <location line="+26"/> <source>Cannot copy collection file: %1</source> - <translation type="unfinished">Не удалось скопировать файл набора: %1</translation> + <translation>Не удалось скопировать файл коллекции справки: %1</translation> </message> <message> - <location line="+174"/> + <location line="+172"/> <source>Cannot register filter %1!</source> <translation>Не удалось зарегистрировать фильтр %1!</translation> </message> @@ -120,23 +120,20 @@ <context> <name>QHelpEngineCore</name> <message> - <location filename="../tools/assistant/lib/qhelpenginecore.cpp" line="+525"/> - <source>The specified namespace does not exist!</source> - <translation>Указанное пространство имён не существует!</translation> - </message> -</context> -<context> - <name>QHelpEngineCorePrivate</name> - <message> - <location line="-403"/> + <location filename="../tools/assistant/lib/qhelpenginecore.cpp" line="+122"/> <source>Cannot open documentation file %1: %2!</source> <translation>Не удалось открыть файл документации %1: %2!</translation> </message> + <message> + <location line="+404"/> + <source>The specified namespace does not exist!</source> + <translation>Указанное пространство имён не существует!</translation> + </message> </context> <context> <name>QHelpGenerator</name> <message> - <location filename="../tools/assistant/lib/qhelpgenerator.cpp" line="+157"/> + <location filename="../tools/assistant/lib/qhelpgenerator.cpp" line="+158"/> <source>Invalid help data!</source> <translation>Некорректные данные справки!</translation> </message> @@ -161,7 +158,7 @@ <translation>Не удалось открыть файл базы данных %1!</translation> </message> <message> - <location line="+11"/> + <location line="+14"/> <source>Cannot register namespace %1!</source> <translation>Не удалось зарегистрировать пространство имён %1!</translation> </message> @@ -216,7 +213,7 @@ <translation>Не удалось открыть файл %1! Пропускаем.</translation> </message> <message> - <location line="+131"/> + <location line="+133"/> <source>The filter %1 is already registered!</source> <translation>Фильтр %1 уже зарегистрирован!</translation> </message> @@ -231,7 +228,7 @@ <translation>Добавление указателей...</translation> </message> <message> - <location line="+80"/> + <location line="+91"/> <source>Insert contents...</source> <translation>Добавление оглавления...</translation> </message> @@ -245,11 +242,79 @@ <source>Cannot register contents!</source> <translation>Не удалось зарегистрировать оглавление!</translation> </message> + <message> + <location line="+56"/> + <source>File '%1' does not exist.</source> + <translation>Файл '%1' не существует.</translation> + </message> + <message> + <location line="+19"/> + <source>File '%1' cannot be opened.</source> + <translation>Невозможно открыть файл '%1'.</translation> + </message> + <message> + <location line="+19"/> + <source>File '%1' contains an invalid link to file '%2'</source> + <translation>Файл '%1' содержит некорректную ссылку на файл '%2'</translation> + </message> + <message> + <location line="+9"/> + <source>Invalid links in HTML files.</source> + <translation>В файлах HTML обнаружены некорректные ссылки.</translation> + </message> +</context> +<context> + <name>QHelpProject</name> + <message> + <location filename="../tools/assistant/lib/qhelpprojectdata.cpp" line="+88"/> + <source>Unknown token.</source> + <translation>Неизвестный идентификатор.</translation> + </message> + <message> + <location line="+13"/> + <source>Unknown token. Expected "QtHelpProject"!</source> + <translation>Неизвестный идентификатор. Ожидается "QtHelpProject"!</translation> + </message> + <message> + <location line="+6"/> + <source>Error in line %1: %2</source> + <translation>Ошибка в строке %1: %2</translation> + </message> + <message> + <location line="+14"/> + <source>Virtual folder has invalid syntax.</source> + <translation>Виртуальный каталог имеет некорректный синтаксис.</translation> + </message> + <message> + <location line="+5"/> + <source>Namespace has invalid syntax.</source> + <translation>Пространство имён имеет некорректный синтаксис.</translation> + </message> + <message> + <location line="+19"/> + <source>Missing namespace in QtHelpProject.</source> + <translation>В QtHelpProject отсутствует пространство имён.</translation> + </message> + <message> + <location line="+3"/> + <source>Missing virtual folder in QtHelpProject</source> + <translation>В QtHelpProject отсутствует виртуальный каталог</translation> + </message> + <message> + <location line="+89"/> + <source>Missing attribute in keyword at line %1.</source> + <translation>Отсутствует атрибут у ключевого слова в строке %1.</translation> + </message> + <message> + <location line="+141"/> + <source>The input file %1 could not be opened!</source> + <translation>Невозможно открыть исходный файл %1!</translation> + </message> </context> <context> <name>QHelpSearchQueryWidget</name> <message> - <location filename="../tools/assistant/lib/qhelpsearchquerywidget.cpp" line="+125"/> + <location filename="../tools/assistant/lib/qhelpsearchquerywidget.cpp" line="+124"/> <source>Search for:</source> <translation>Искать:</translation> </message> @@ -301,66 +366,19 @@ </context> <context> <name>QHelpSearchResultWidget</name> + <message numerus="yes"> + <location filename="../tools/assistant/lib/qhelpsearchresultwidget.cpp" line="+174"/> + <source>%1 - %2 of %n Hits</source> + <translation> + <numerusform>%1 - %2 из %n совпадения</numerusform> + <numerusform>%1 - %2 из %n совпадений</numerusform> + <numerusform>%1 - %2 из %n совпадений</numerusform> + </translation> + </message> <message> - <location filename="../tools/assistant/lib/qhelpsearchresultwidget.cpp" line="+235"/> + <location line="+61"/> <source>0 - 0 of 0 Hits</source> <translation>0 - 0 из 0 совпадений</translation> </message> </context> -<context> - <name>QHelpSearchResultWidgetPrivate</name> - <message> - <location line="-61"/> - <source>%1 - %2 of %3 Hits</source> - <translation>%1 - %2 из %3 совпадений</translation> - </message> -</context> -<context> - <name>QObject</name> - <message> - <location filename="../tools/assistant/lib/qhelpprojectdata.cpp" line="+85"/> - <source>Unknown token.</source> - <translation>Неизвестный идентификатор.</translation> - </message> - <message> - <location line="+13"/> - <source>Unknown token. Expected "QtHelpProject"!</source> - <translation>Неизвестный идентификатор. Ожидается "QtHelpProject"!</translation> - </message> - <message> - <location line="+5"/> - <source>Error in line %1: %2</source> - <translation>Ошибка в строке %1: %2</translation> - </message> - <message> - <location line="+13"/> - <source>A virtual folder must not contain a '/' character!</source> - <translation>Виртуальный каталог не должен содержать символ '/'!</translation> - </message> - <message> - <location line="+4"/> - <source>A namespace must not contain a '/' character!</source> - <translation>Пространство имён не должно содержать символ '/'!</translation> - </message> - <message> - <location line="+16"/> - <source>Missing namespace in QtHelpProject.</source> - <translation>Отсутствует пространство имён в QtHelpProject.</translation> - </message> - <message> - <location line="+2"/> - <source>Missing virtual folder in QtHelpProject</source> - <translation>Отсутствует виртуальный каталог в QtHelpProject</translation> - </message> - <message> - <location line="+88"/> - <source>Missing attribute in keyword at line %1.</source> - <translation>Отсутствует атрибут у ключевого слова в строке %1.</translation> - </message> - <message> - <location line="+123"/> - <source>The input file %1 could not be opened!</source> - <translation>Невозможно открыть исходный файл %1!</translation> - </message> -</context> </TS> diff --git a/translations/qt_ru.ts b/translations/qt_ru.ts index e9cdfd4..deae134 100644 --- a/translations/qt_ru.ts +++ b/translations/qt_ru.ts @@ -1,10 +1,31 @@ <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> -<TS version="2.0" language="ru_RU"> +<TS version="2.0" language="ru"> +<context> + <name>CloseButton</name> + <message> + <location filename="../src/gui/widgets/qtabbar.cpp" line="+2313"/> + <source>Close Tab</source> + <translation>Закрыть вкладку</translation> + </message> +</context> +<context> + <name>FakeReply</name> + <message> + <location filename="../src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp" line="+2273"/> + <source>Fake error !</source> + <translation>Фиктивная ошибка !</translation> + </message> + <message> + <location line="+3"/> + <source>Invalid URL</source> + <translation>Некорректный адрес URL</translation> + </message> +</context> <context> <name>MAC_APPLICATION_MENU</name> <message> - <location filename="../src/gui/kernel/qapplication.cpp" line="+2316"/> + <location filename="../src/gui/kernel/qapplication.cpp" line="+2335"/> <source>Services</source> <translation>Службы</translation> </message> @@ -40,27 +61,6 @@ </message> </context> <context> - <name>CloseButton</name> - <message> - <location filename="../src/gui/widgets/qtabbar.cpp" line="+2264"/> - <source>Close Tab</source> - <translation>Закрыть вкладку</translation> - </message> -</context> -<context> - <name>FakeReply</name> - <message> - <location filename="../src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp" line="+2200"/> - <source>Fake error !</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+3"/> - <source>Invalid URL</source> - <translation>Некорректный URL</translation> - </message> -</context> -<context> <name>Phonon::</name> <message> <location filename="../src/3rdparty/phonon/phonon/phononnamespace.cpp" line="+55"/> @@ -96,25 +96,32 @@ <context> <name>Phonon::AudioOutput</name> <message> - <location filename="../src/3rdparty/phonon/phonon/audiooutput.cpp" line="+385"/> + <location filename="../src/3rdparty/phonon/phonon/audiooutput.cpp" line="+444"/> + <location line="+34"/> <source><html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html></source> <translation><html>Звуковое устройство <b>%1</b> не работает.<br/>Будет использоваться <b>%2</b>.</html></translation> </message> <message> - <location line="+13"/> + <location line="-21"/> <source><html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html></source> - <translation><html>Переключение на звуковое устройство <b>%1</b><br/>, которое доступно и имеет высший приоритет.</html></translation> + <translation><html>Переключение на звуковое устройство <b>%1</b><br/>, которое стало доступно и имеет высший приоритет.</html></translation> </message> <message> <location line="+3"/> + <location line="+14"/> <source>Revert back to device '%1'</source> - <translation>Возвращение к устройству '%1'</translation> + <translation>Возвращение к устройству "%1"</translation> + </message> + <message> + <location line="-3"/> + <source><html>Switching to the audio playback device <b>%1</b><br/>which has higher preference or is specifically configured for this stream.</html></source> + <translation><html>Переключение на устройство вывода звука <b>%1</b><br/>, которое имеет высший приоритет или настроено для обработки данного потока.</html></translation> </message> </context> <context> <name>Phonon::Gstreamer::Backend</name> <message> - <location filename="../src/3rdparty/phonon/gstreamer/backend.cpp" line="+182"/> + <location filename="../src/3rdparty/phonon/gstreamer/backend.cpp" line="+188"/> <source>Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. Some video features have been disabled.</source> <translation>Внимание: Похоже, пакет gstreamer0.10-plugins-good не установлен. @@ -131,40 +138,50 @@ <context> <name>Phonon::Gstreamer::MediaObject</name> <message> - <location filename="../src/3rdparty/phonon/gstreamer/mediaobject.cpp" line="+90"/> + <location filename="../src/3rdparty/phonon/gstreamer/mediaobject.cpp" line="+93"/> <source>Cannot start playback. Check your GStreamer installation and make sure you have libgstreamer-plugins-base installed.</source> <translation>Невозможно начать воспроизведение. -Проверьте установку GStreamer и убедитесь, +Проверьте правильность установки GStreamer и убедитесь, что пакет libgstreamer-plugins-base установлен.</translation> </message> <message> - <location line="+113"/> + <location line="+129"/> + <source>Missing codec helper script assistant.</source> + <translation>Отсутствует сценарий установки кодека.</translation> + </message> + <message> + <location line="+2"/> + <source>Plugin codec installation failed for codec: %0</source> + <translation>Не удалось установить модуль кодека: %0</translation> + </message> + <message> + <location line="+11"/> <source>A required codec is missing. You need to install the following codec(s) to play this content: %0</source> <translation>Отсутствует необходимый кодек. Вам нужно установить следующие кодеки для воспроизведения данного содержимого: %0</translation> </message> <message> - <location line="+702"/> - <location line="+8"/> - <location line="+15"/> - <location line="+26"/> + <location line="+730"/> <location line="+6"/> - <location line="+19"/> - <location line="+339"/> + <location line="+13"/> + <location line="+24"/> + <location line="+6"/> + <location line="+18"/> + <location line="+434"/> <location line="+24"/> <source>Could not open media source.</source> <translation>Не удалось открыть источник медиа-данных.</translation> </message> <message> - <location line="-424"/> + <location line="-514"/> <source>Invalid source type.</source> - <translation>Неверный тип источника медиа-данных.</translation> + <translation>Некорректный тип источника медиа-данных.</translation> </message> <message> - <location line="+398"/> + <location line="+488"/> <source>Could not locate media source.</source> <translation>Не удалось найти источник медиа-данных.</translation> </message> @@ -192,14 +209,14 @@ have libgstreamer-plugins-base installed.</source> <translation>Устройство воспроизведения звука</translation> </message> <message> - <location filename="../src/3rdparty/phonon/mmf/utils.cpp" line="+87"/> + <location filename="../src/3rdparty/phonon/mmf/utils.cpp" line="+89"/> <source>No error</source> <translation>Нет ошибки</translation> </message> <message> <location line="+2"/> <source>Not found</source> - <translation>Не найден</translation> + <translation>Не найдено</translation> </message> <message> <location line="+2"/> @@ -214,12 +231,12 @@ have libgstreamer-plugins-base installed.</source> <message> <location line="+2"/> <source>Overflow</source> - <translation type="unfinished"></translation> + <translation>Переполнение</translation> </message> <message> <location line="+2"/> <source>Underflow</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Переполнение</translation> </message> <message> <location line="+2"/> @@ -239,7 +256,7 @@ have libgstreamer-plugins-base installed.</source> <message> <location line="+2"/> <source>Not ready</source> - <translation>Не готов</translation> + <translation>Не готово</translation> </message> <message> <location line="+2"/> @@ -264,7 +281,7 @@ have libgstreamer-plugins-base installed.</source> <message> <location line="+4"/> <source>Insufficient bandwidth</source> - <translation type="unfinished">Недостаточная ширина канала</translation> + <translation>Недостаточная скорость передачи данных</translation> </message> <message> <location line="+3"/> @@ -274,17 +291,17 @@ have libgstreamer-plugins-base installed.</source> <message> <location line="+4"/> <source>Network communication error</source> - <translation type="unfinished">Ошибка сетевого обмена данными</translation> + <translation>Ошибка сетевого обмена данными</translation> </message> <message> <location line="+2"/> <source>Streaming not supported</source> - <translation type="unfinished"></translation> + <translation>Потоковое воспроизведение не поддерживается</translation> </message> <message> <location line="+2"/> <source>Server alert</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Сигнал сервера</translation> </message> <message> <location line="+2"/> @@ -294,12 +311,12 @@ have libgstreamer-plugins-base installed.</source> <message> <location line="+2"/> <source>Invalid URL</source> - <translation>Некорректный URL</translation> + <translation>Некорректный адрес URL</translation> </message> <message> <location line="+2"/> <source>Multicast error</source> - <translation type="unfinished"></translation> + <translation>Ошибка широковещательной передачи</translation> </message> <message> <location line="+3"/> @@ -358,7 +375,7 @@ have libgstreamer-plugins-base installed.</source> <message> <location line="+4"/> <source>Error opening URL</source> - <translation>Ошибка открытия URL</translation> + <translation>Ошибка открытия адреса URL</translation> </message> <message> <location line="+83"/> @@ -366,12 +383,40 @@ have libgstreamer-plugins-base installed.</source> <translation>Не удалось установить уровень громкости</translation> </message> <message> - <location line="+50"/> + <location line="+45"/> + <source>Loading clip failed</source> + <translation>Не удалось загрузить клип</translation> + </message> + <message> + <location line="+24"/> <source>Playback complete</source> <translation>Воспроизведение завершено</translation> </message> </context> <context> + <name>Phonon::MMF::AbstractVideoPlayer</name> + <message> + <location filename="../src/3rdparty/phonon/mmf/abstractvideoplayer.cpp" line="+108"/> + <source>Pause failed</source> + <translation>Не удалось приостановить воспроизведение</translation> + </message> + <message> + <location line="+16"/> + <source>Seek failed</source> + <translation>Не удалось установить позицию</translation> + </message> + <message> + <location line="+54"/> + <source>Getting position failed</source> + <translation>Не удалось получить позицию</translation> + </message> + <message> + <location line="+66"/> + <source>Opening clip failed</source> + <translation>Не удалось открыть клип</translation> + </message> +</context> +<context> <name>Phonon::MMF::AudioEqualizer</name> <message> <location filename="../src/3rdparty/phonon/mmf/audioequalizer.cpp" line="+92"/> @@ -384,12 +429,19 @@ have libgstreamer-plugins-base installed.</source> <message> <location filename="../src/3rdparty/phonon/mmf/audioplayer.cpp" line="+173"/> <source>Getting position failed</source> - <translation type="unfinished"></translation> + <translation>Не удалось получить позицию</translation> </message> +</context> +<context> + <name>Phonon::MMF::DsaVideoPlayer</name> <message> - <location line="+36"/> - <source>Opening clip failed</source> - <translation type="unfinished"></translation> + <location filename="../src/3rdparty/phonon/mmf/videoplayer_dsa.cpp" line="+238"/> + <location line="+15"/> + <location line="+8"/> + <location line="+22"/> + <location line="+22"/> + <source>Video display error</source> + <translation>Ошибка отображения видео</translation> </message> </context> <context> @@ -397,7 +449,7 @@ have libgstreamer-plugins-base installed.</source> <message> <location filename="../src/3rdparty/phonon/mmf/effectfactory.cpp" line="+181"/> <source>Enabled</source> - <translation type="unfinished">Активно</translation> + <translation>Включено</translation> </message> </context> <context> @@ -406,74 +458,74 @@ have libgstreamer-plugins-base installed.</source> <location filename="../src/3rdparty/phonon/mmf/environmentalreverb.cpp" line="+146"/> <source>Decay HF ratio (%)</source> <extracomment>DecayHFRatio: Ratio of high-frequency decay time to the value specified by DecayTime.</extracomment> - <translation type="unfinished"></translation> + <translation>Коэффициент затухания ВЧ (%)</translation> </message> <message> <location line="+6"/> <source>Decay time (ms)</source> <extracomment>DecayTime: Time over which reverberation is diminished.</extracomment> - <translation type="unfinished"></translation> + <translation>Время затухания (мс)</translation> </message> <message> <location line="+7"/> <source>Density (%)</source> <extracomment>Density Delay between first and subsequent reflections. Note that the S60 platform documentation does not make clear the distinction between this value and the Diffusion value.</extracomment> - <translation type="unfinished"></translation> + <translation>Плотность (%)</translation> </message> <message> <location line="+6"/> <source>Diffusion (%)</source> <extracomment>Diffusion: Delay between first and subsequent reflections. Note that the S60 platform documentation does not make clear the distinction between this value and the Density value.</extracomment> - <translation type="unfinished"></translation> + <translation>Рассеивание (%)</translation> </message> <message> <location line="+5"/> <source>Reflections delay (ms)</source> <extracomment>ReflectionsDelay: Amount of delay between the arrival the direct path from the source and the arrival of the first reflection.</extracomment> - <translation type="unfinished"></translation> + <translation>Затухание отражений (мс)</translation> </message> <message> <location line="+7"/> <source>Reflections level (mB)</source> <extracomment>ReflectionsLevel: Amplitude of reflections. This value is corrected by the RoomLevel to give the final reflection amplitude.</extracomment> - <translation type="unfinished"></translation> + <translation>Уровень отражений (мБар)</translation> </message> <message> <location line="+7"/> <source>Reverb delay (ms)</source> <extracomment>ReverbDelay: Amount of time between arrival of the first reflection and start of the late reverberation.</extracomment> - <translation type="unfinished"></translation> + <translation>Задержка эха (мс)</translation> </message> <message> <location line="+8"/> <source>Reverb level (mB)</source> <extracomment>ReverbLevel Amplitude of reverberations. This value is corrected by the RoomLevel to give the final reverberation amplitude.</extracomment> - <translation type="unfinished"></translation> + <translation>Уровень эха (мБар)</translation> </message> <message> <location line="+7"/> <source>Room HF level</source> <extracomment>RoomHFLevel: Amplitude of low-pass filter used to attenuate the high frequency component of reflected sound.</extracomment> - <translation type="unfinished"></translation> + <translation>Уровень ВЧ отражений</translation> </message> <message> <location line="+6"/> <source>Room level (mB)</source> <extracomment>RoomLevel: Master volume control for all reflected sound.</extracomment> - <translation type="unfinished"></translation> + <translation>Уровень отражений (мБар)</translation> </message> </context> <context> <name>Phonon::MMF::MediaObject</name> <message> - <location filename="../src/3rdparty/phonon/mmf/mediaobject.cpp" line="+270"/> + <location filename="../src/3rdparty/phonon/mmf/mediaobject.cpp" line="+276"/> <source>Error opening source: type not supported</source> <translation>Ошибка открытыия источника: тип не поддерживается</translation> </message> <message> <location line="+18"/> <source>Error opening source: media type could not be determined</source> - <translation>Ошибка открытыия источника: тип медиа-данных не определён</translation> + <translation>Ошибка открытыия источника: тип носителя не определён</translation> </message> </context> <context> @@ -485,40 +537,12 @@ have libgstreamer-plugins-base installed.</source> </message> </context> <context> - <name>Phonon::MMF::VideoPlayer</name> - <message> - <location filename="../src/3rdparty/phonon/mmf/mmf_videoplayer.cpp" line="+125"/> - <source>Pause failed</source> - <translation type="unfinished"></translation> - </message> + <name>Phonon::MMF::SurfaceVideoPlayer</name> <message> + <location filename="../src/3rdparty/phonon/mmf/videoplayer_surface.cpp" line="+126"/> <location line="+16"/> - <source>Seek failed</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+54"/> - <source>Getting position failed</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+26"/> - <source>Opening clip failed</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+26"/> - <source>Buffering clip failed</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+174"/> - <location line="+12"/> - <location line="+176"/> - <location line="+15"/> - <location line="+6"/> <source>Video display error</source> - <translation type="unfinished"></translation> + <translation>Ошибка отображения видео</translation> </message> </context> <context> @@ -536,7 +560,7 @@ have libgstreamer-plugins-base installed.</source> <location line="+18"/> <location line="+54"/> <source>Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%</source> - <translation>Используйте данный ползунок для настройки громкости. Крайнее левое положение соответствует 0%, крайнее правое - %1%</translation> + <translation>Используйте данный регулятор для настройки громкости. Крайнее левое положение соответствует 0%, крайнее правое - %1%</translation> </message> <message> <location line="+67"/> @@ -549,7 +573,7 @@ have libgstreamer-plugins-base installed.</source> <message> <location filename="../src/qt3support/other/q3accel.cpp" line="+481"/> <source>%1, %2 not defined</source> - <translation type="unfinished">%1, %2 не определён</translation> + <translation>%1, %2 не определён</translation> </message> <message> <location line="+36"/> @@ -1149,43 +1173,43 @@ to <location line="+260"/> <location line="+4"/> <source>The protocol `%1' is not supported</source> - <translation>Протокол '%1' не поддерживается</translation> + <translation>Протокол "%1" не поддерживается</translation> </message> <message> <location line="-260"/> <source>The protocol `%1' does not support listing directories</source> - <translation>Протокол '%1' не поддерживает просмотр каталогов</translation> + <translation>Протокол "%1" не поддерживает просмотр каталогов</translation> </message> <message> <location line="+3"/> <source>The protocol `%1' does not support creating new directories</source> - <translation>Протокол '%1' не поддерживает создание каталогов</translation> + <translation>Протокол "%1" не поддерживает создание каталогов</translation> </message> <message> <location line="+3"/> <source>The protocol `%1' does not support removing files or directories</source> - <translation>Протокол '%1' не поддерживает удаление файлов или каталогов</translation> + <translation>Протокол "%1" не поддерживает удаление файлов или каталогов</translation> </message> <message> <location line="+3"/> <source>The protocol `%1' does not support renaming files or directories</source> - <translation>Протокол '%1' не поддерживает переименование файлов или каталогов</translation> + <translation>Протокол "%1" не поддерживает переименование файлов или каталогов</translation> </message> <message> <location line="+3"/> <source>The protocol `%1' does not support getting files</source> - <translation>Протокол '%1' не поддерживает доставку файлов</translation> + <translation>Протокол "%1" не поддерживает доставку файлов</translation> </message> <message> <location line="+3"/> <source>The protocol `%1' does not support putting files</source> - <translation>Протокол '%1' не поддерживает отправку файлов</translation> + <translation>Протокол "%1" не поддерживает отправку файлов</translation> </message> <message> <location line="+243"/> <location line="+4"/> <source>The protocol `%1' does not support copying or moving files or directories</source> - <translation>Протокол '%1' не поддерживает копирование или перемещение файлов или каталогов</translation> + <translation>Протокол "%1" не поддерживает копирование или перемещение файлов или каталогов</translation> </message> <message> <location line="+237"/> @@ -1225,7 +1249,7 @@ to <context> <name>QAbstractSocket</name> <message> - <location filename="../src/network/socket/qabstractsocket.cpp" line="+906"/> + <location filename="../src/network/socket/qabstractsocket.cpp" line="+916"/> <location filename="../src/network/socket/qhttpsocketengine.cpp" line="+629"/> <location filename="../src/network/socket/qsocks5socketengine.cpp" line="+661"/> <location line="+26"/> @@ -1247,12 +1271,12 @@ to <message> <location line="-559"/> <location line="+809"/> - <location line="+208"/> + <location line="+220"/> <source>Operation on socket is not supported</source> <translation>Операция с сокетом не поддерживается</translation> </message> <message> - <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+598"/> + <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+625"/> <location filename="../src/network/socket/qabstractsocket.cpp" line="+203"/> <source>Socket operation timed out</source> <translation>Время на операцию с сокетом истекло</translation> @@ -1271,7 +1295,7 @@ to <context> <name>QAbstractSpinBox</name> <message> - <location filename="../src/gui/widgets/qabstractspinbox.cpp" line="+1260"/> + <location filename="../src/gui/widgets/qabstractspinbox.cpp" line="+1263"/> <source>&Step up</source> <translation>Шаг вв&ерх</translation> </message> @@ -1297,14 +1321,9 @@ to <context> <name>QApplication</name> <message> - <location filename="../src/gui/accessible/qaccessibleobject.cpp" line="+376"/> - <source>Activate</source> - <translation>Активировать</translation> - </message> - <message> <location filename="../src/gui/dialogs/qmessagebox.h" line="+354"/> <source>Executable '%1' requires Qt %2, found Qt %3.</source> - <translation>Программный модуль '%1' требует Qt %2, найдена версия %3.</translation> + <translation>Программный модуль "%1" требует Qt %2, найдена версия %3.</translation> </message> <message> <location line="+2"/> @@ -1312,16 +1331,21 @@ to <translation>Ошибка совместимости библиотеки Qt</translation> </message> <message> - <location filename="../src/gui/kernel/qapplication.cpp" line="+2287"/> - <source>QT_LAYOUT_DIRECTION</source> - <comment>Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.</comment> - <translation>LTR</translation> + <location filename="../src/gui/accessible/qaccessibleobject.cpp" line="+376"/> + <source>Activate</source> + <translation>Активировать</translation> </message> <message> - <location filename="../src/gui/accessible/qaccessibleobject.cpp" line="+2"/> + <location line="+2"/> <source>Activates the program's main window</source> <translation>Активирует главное окно программы</translation> </message> + <message> + <location filename="../src/gui/kernel/qapplication.cpp" line="-13"/> + <source>QT_LAYOUT_DIRECTION</source> + <comment>Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.</comment> + <translation>LTR</translation> + </message> </context> <context> <name>QAxSelect</name> @@ -1367,7 +1391,7 @@ to <context> <name>QColorDialog</name> <message> - <location filename="../src/gui/dialogs/qcolordialog.cpp" line="+1355"/> + <location filename="../src/gui/dialogs/qcolordialog.cpp" line="+1378"/> <source>Hu&e:</source> <translation>&Тон:</translation> </message> @@ -1425,7 +1449,7 @@ to <context> <name>QComboBox</name> <message> - <location filename="../src/plugins/accessible/widgets/complexwidgets.cpp" line="+1771"/> + <location filename="../src/plugins/accessible/widgets/complexwidgets.cpp" line="+1772"/> <location line="+65"/> <source>Open</source> <translation>Открыть</translation> @@ -1572,6 +1596,1113 @@ to </message> </context> <context> + <name>QDeclarativeAbstractAnimation</name> + <message> + <location filename="../src/declarative/util/qdeclarativeanimation.cpp" line="+166"/> + <source>Cannot animate non-existent property "%1"</source> + <translation>Невозможно анимировать несуществуещее свойство "%1"</translation> + </message> + <message> + <location line="+3"/> + <source>Cannot animate read-only property "%1"</source> + <translation>Невозможно анимировать свойство только для чтения "%1"</translation> + </message> + <message> + <location filename="../src/declarative/util/qdeclarativeutilmodule.cpp" line="+122"/> + <source>Animation is an abstract class</source> + <translation>Animation - это абстрактный класс</translation> + </message> +</context> +<context> + <name>QDeclarativeAnchorAnimation</name> + <message> + <location filename="../src/declarative/util/qdeclarativeanimation.cpp" line="+2553"/> + <source>Cannot set a duration of < 0</source> + <translation>Невозможно установить длительность < 0</translation> + </message> +</context> +<context> + <name>QDeclarativeAnchors</name> + <message> + <location filename="../src/declarative/graphicsitems/qdeclarativeanchors.cpp" line="+180"/> + <source>Possible anchor loop detected on fill.</source> + <translation type="unfinished">Обнаружена возможная цикличная привязка на fill.</translation> + </message> + <message> + <location line="+29"/> + <source>Possible anchor loop detected on centerIn.</source> + <translation type="unfinished">Обнаружена возможная цикличная привязка на centerIn.</translation> + </message> + <message> + <location line="+201"/> + <location line="+34"/> + <location line="+610"/> + <location line="+37"/> + <source>Cannot anchor to an item that isn't a parent or sibling.</source> + <translation type="unfinished">Невозможно установить привязку к элементу, не являющемуся родителем или соседом.</translation> + </message> + <message> + <location line="-534"/> + <source>Possible anchor loop detected on vertical anchor.</source> + <translation type="unfinished">Обнаружена возможная цикличная привязка к вертикальной привязке.</translation> + </message> + <message> + <location line="+59"/> + <source>Possible anchor loop detected on horizontal anchor.</source> + <translation type="unfinished">Обнаружена возможная цикличная привязка к горизонтальной привязке.</translation> + </message> + <message> + <location line="+422"/> + <source>Cannot specify left, right, and hcenter anchors.</source> + <translation type="unfinished">Невозможно задать левую, правую и среднюю привязки.</translation> + </message> + <message> + <location line="+10"/> + <location line="+37"/> + <source>Cannot anchor to a null item.</source> + <translation type="unfinished">Невозможно привязаться к нулевому элементу.</translation> + </message> + <message> + <location line="-34"/> + <source>Cannot anchor a horizontal edge to a vertical edge.</source> + <translation type="unfinished">Невозможно привязать горизонтальный край к вертикальному.</translation> + </message> + <message> + <location line="+6"/> + <location line="+37"/> + <source>Cannot anchor item to self.</source> + <translation type="unfinished">Невозможно привязать элемент к самому себе.</translation> + </message> + <message> + <location line="-25"/> + <source>Cannot specify top, bottom, and vcenter anchors.</source> + <translation type="unfinished">Невозможно задать верхнюю, нижнюю и среднюю привязки.</translation> + </message> + <message> + <location line="+6"/> + <source>Baseline anchor cannot be used in conjunction with top, bottom, or vcenter anchors.</source> + <translation type="unfinished">Невозможно использовать базовую привязку вместе с верхней, нижней и центральной по вертикали.</translation> + </message> + <message> + <location line="+13"/> + <source>Cannot anchor a vertical edge to a horizontal edge.</source> + <translation type="unfinished">Невозможно привязать вертикальный край к горизонтальному.</translation> + </message> +</context> +<context> + <name>QDeclarativeAnimatedImage</name> + <message> + <location filename="../src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp" line="+86"/> + <source>Qt was built without support for QMovie</source> + <translation>Qt было собрано без поддержки QMovie</translation> + </message> +</context> +<context> + <name>QDeclarativeBehavior</name> + <message> + <location filename="../src/declarative/util/qdeclarativebehavior.cpp" line="+127"/> + <source>Cannot change the animation assigned to a Behavior.</source> + <translation type="unfinished">Невозможно изменить анимацию, назначенную поведению.</translation> + </message> +</context> +<context> + <name>QDeclarativeBinding</name> + <message> + <location filename="../src/declarative/qml/qdeclarativebinding.cpp" line="+238"/> + <source>Binding loop detected for property "%1"</source> + <translation type="unfinished">Обнаружена цикличная привязка для свойства "%1"</translation> + </message> +</context> +<context> + <name>QDeclarativeCompiledBindings</name> + <message> + <location filename="../src/declarative/qml/qdeclarativecompiledbindings.cpp" line="+372"/> + <source>Binding loop detected for property "%1"</source> + <translation type="unfinished">Обнаружена цикличная привязка для свойства "%1"</translation> + </message> +</context> +<context> + <name>QDeclarativeCompiler</name> + <message> + <location filename="../src/declarative/qml/qdeclarativecompiler.cpp" line="+186"/> + <location line="+1592"/> + <location line="+186"/> + <location line="+81"/> + <location line="+75"/> + <location line="+487"/> + <source>Invalid property assignment: "%1" is a read-only property</source> + <translation>Некорректное присваивание свойства: "%1" свойство только для чтения</translation> + </message> + <message> + <location line="-2412"/> + <source>Invalid property assignment: unknown enumeration</source> + <translation>Некорректное присваивание свойства: неизвестное перечисление</translation> + </message> + <message> + <location line="+8"/> + <source>Invalid property assignment: string expected</source> + <translation>Некорректное присваивание свойства: ожидается значение типа "string"</translation> + </message> + <message> + <location line="+3"/> + <source>Invalid property assignment: url expected</source> + <translation>Некорректное присваивание свойства: ожидается значение типа "url"</translation> + </message> + <message> + <location line="+10"/> + <source>Invalid property assignment: unsigned int expected</source> + <translation>Некорректное присваивание свойства: ожидается значение типа "unsigned int"</translation> + </message> + <message> + <location line="+11"/> + <source>Invalid property assignment: int expected</source> + <translation>Некорректное присваивание свойства: ожидается значение типа "int"</translation> + </message> + <message> + <location line="+4"/> + <source>Invalid property assignment: float expected</source> + <translation>Некорректное присваивание свойства: ожидается значение типа "float"</translation> + </message> + <message> + <location line="+3"/> + <source>Invalid property assignment: double expected</source> + <translation>Некорректное присваивание свойства: ожидается значение типа "double"</translation> + </message> + <message> + <location line="+6"/> + <source>Invalid property assignment: color expected</source> + <translation>Некорректное присваивание свойства: ожидается значение типа "color"</translation> + </message> + <message> + <location line="+7"/> + <source>Invalid property assignment: date expected</source> + <translation>Некорректное присваивание свойства: ожидается значение типа "date"</translation> + </message> + <message> + <location line="+7"/> + <source>Invalid property assignment: time expected</source> + <translation>Некорректное присваивание свойства: ожидается значение типа "time"</translation> + </message> + <message> + <location line="+7"/> + <source>Invalid property assignment: datetime expected</source> + <translation>Некорректное присваивание свойства: ожидается значение типа "datetime"</translation> + </message> + <message> + <location line="+8"/> + <source>Invalid property assignment: point expected</source> + <translation>Некорректное присваивание свойства: ожидается значение типа "point"</translation> + </message> + <message> + <location line="+8"/> + <source>Invalid property assignment: size expected</source> + <translation>Некорректное присваивание свойства: ожидается значение типа "size"</translation> + </message> + <message> + <location line="+8"/> + <source>Invalid property assignment: rect expected</source> + <translation>Некорректное присваивание свойства: ожидается значение типа "rect"</translation> + </message> + <message> + <location line="+5"/> + <source>Invalid property assignment: boolean expected</source> + <translation>Некорректное присваивание свойства: ожидается значение булевого типа</translation> + </message> + <message> + <location line="+7"/> + <source>Invalid property assignment: 3D vector expected</source> + <translation>Некорректное присваивание свойства: ожидается значение типа "трёхмерный вектор"</translation> + </message> + <message> + <location line="+9"/> + <source>Invalid property assignment: unsupported type "%1"</source> + <translation>Некорректное присваивание свойства: неподдерживаемый тип "%1"</translation> + </message> + <message> + <location line="+275"/> + <source>Element is not creatable.</source> + <translation>Элемент не является создаваемым.</translation> + </message> + <message> + <location line="+618"/> + <source>Component elements may not contain properties other than id</source> + <translation type="unfinished">Элементы Component не могут содержать свойств кроме id</translation> + </message> + <message> + <location line="+7"/> + <source>Invalid component id specification</source> + <translation type="unfinished">Некорректная спецификация id компонента</translation> + </message> + <message> + <location line="+6"/> + <location line="+478"/> + <source>id is not unique</source> + <translation>id не уникален</translation> + </message> + <message> + <location line="-468"/> + <source>Invalid component body specification</source> + <translation type="unfinished">Некорректная спецификация тела компонента</translation> + </message> + <message> + <location line="+3"/> + <source>Component objects cannot declare new properties.</source> + <translation type="unfinished">Объекты Component не могут объявлять новые свойства.</translation> + </message> + <message> + <location line="+2"/> + <source>Component objects cannot declare new signals.</source> + <translation type="unfinished">Объекты Component не могут объявлять новые сигналы.</translation> + </message> + <message> + <location line="+2"/> + <source>Component objects cannot declare new functions.</source> + <translation type="unfinished">Объекты Component не могут объявлять новые функции.</translation> + </message> + <message> + <location line="+7"/> + <source>Cannot create empty component specification</source> + <translation type="unfinished">Невозможно создать пустую спецификацю компонента</translation> + </message> + <message> + <location line="+89"/> + <source>Incorrectly specified signal assignment</source> + <translation type="unfinished">Неверно указано назначение сигнала</translation> + </message> + <message> + <location line="+12"/> + <source>Cannot assign a value to a signal (expecting a script to be run)</source> + <translation type="unfinished">Невозможно назначить значение сигналу (сценарий должен быть запущен)</translation> + </message> + <message> + <location line="+4"/> + <source>Empty signal assignment</source> + <translation type="unfinished">Пустое назначение сигнала</translation> + </message> + <message> + <location line="+38"/> + <source>Empty property assignment</source> + <translation type="unfinished">Пустое назначение свойства</translation> + </message> + <message> + <location line="+12"/> + <source>Attached properties cannot be used here</source> + <translatorcomment>здесь - в данном контексте?</translatorcomment> + <translation type="unfinished">Прикреплённые свойства не могут быть использованы здесь</translation> + </message> + <message> + <location line="+15"/> + <location line="+102"/> + <source>Non-existent attached object</source> + <translation type="unfinished">Несуществующий прикреплённый объект</translation> + </message> + <message> + <location line="-98"/> + <location line="+101"/> + <source>Invalid attached object assignment</source> + <translation type="unfinished">Некорректное назначение прикреплённого объекта</translation> + </message> + <message> + <location line="-48"/> + <source>Cannot assign to non-existent default property</source> + <translation type="unfinished">Невозможно назначить несуществующему свойству по умолчанию</translation> + </message> + <message> + <location line="+2"/> + <location line="+352"/> + <source>Cannot assign to non-existent property "%1"</source> + <translation type="unfinished">Невозможно назначить несуществующему свойству "%1"</translation> + </message> + <message> + <location line="-322"/> + <source>Invalid use of namespace</source> + <translation>Некорректное использование пространства имён</translation> + </message> + <message> + <location line="+5"/> + <source>Not an attached property name</source> + <translation type="unfinished">Не является именем привязанного свойства</translation> + </message> + <message> + <location line="+182"/> + <source>Invalid use of id property</source> + <translation type="unfinished">Некорректное использование свойства id</translation> + </message> + <message> + <location line="+89"/> + <location line="+2"/> + <source>Property has already been assigned a value</source> + <translation type="unfinished">Свойству уже назначено значение</translation> + </message> + <message> + <location line="+12"/> + <location line="+7"/> + <source>Invalid grouped property access</source> + <translation type="unfinished">Некорректный доступ к сгруппированному свойству</translation> + </message> + <message> + <location line="+3"/> + <source>Cannot assign a value directly to a grouped property</source> + <translation type="unfinished">Невозможно присвоить значение непосредственно сгруппированному свойству</translation> + </message> + <message> + <location line="+16"/> + <source>Invalid property use</source> + <translation>Некорректное использование свойства</translation> + </message> + <message> + <location line="+13"/> + <source>Property assignment expected</source> + <translation type="unfinished">Ожидается назначение свойства</translation> + </message> + <message> + <location line="+3"/> + <source>Single property assignment expected</source> + <translation type="unfinished">Ожидается одиночное назначение свойства</translation> + </message> + <message> + <location line="+5"/> + <source>Unexpected object assignment</source> + <translation type="unfinished">Неожиданное назначение объекта</translation> + </message> + <message> + <location line="+57"/> + <source>Cannot assign object to list</source> + <translation type="unfinished">Невозможно назначить объект списку</translation> + </message> + <message> + <location line="+6"/> + <source>Can only assign one binding to lists</source> + <translation type="unfinished">Можно назначить только одну связь для списка</translation> + </message> + <message> + <location line="+6"/> + <source>Cannot assign primitives to lists</source> + <translation type="unfinished">Невозможно назначить примитивы списку</translation> + </message> + <message> + <location line="+13"/> + <source>Cannot assign multiple values to a script property</source> + <translation type="unfinished">Невозможно назначить множественное значение свойству сценария</translation> + </message> + <message> + <location line="+3"/> + <source>Invalid property assignment: script expected</source> + <translation type="unfinished">Некорректное присваивание свойства: ожидается сценарий</translation> + </message> + <message> + <location line="+105"/> + <source>Cannot assign object to property</source> + <translation type="unfinished">Невозможно назначить объектсвойству</translation> + </message> + <message> + <location line="+50"/> + <source>"%1" cannot operate on "%2"</source> + <translation>"%1" не может воздействовать на "%2"</translation> + </message> + <message> + <location line="+117"/> + <source>Duplicate default property</source> + <translation type="unfinished">Дублирование свойства по умолчанию</translation> + </message> + <message> + <location line="+5"/> + <source>Duplicate property name</source> + <translation type="unfinished">Дублирование названия свойства</translation> + </message> + <message> + <location line="+3"/> + <source>Property names cannot begin with an upper case letter</source> + <translation>Названия свойств не могут начинаться с заглавной буквы</translation> + </message> + <message> + <location line="+7"/> + <source>Duplicate signal name</source> + <translation type="unfinished">Дублирование названия сигнала</translation> + </message> + <message> + <location line="+2"/> + <source>Signal names cannot begin with an upper case letter</source> + <translation>Названия сигналов не могут начинаться с заглавной буквы</translation> + </message> + <message> + <location line="+6"/> + <source>Duplicate method name</source> + <translation type="unfinished">Дублирование название метода</translation> + </message> + <message> + <location line="+2"/> + <source>Method names cannot begin with an upper case letter</source> + <translation>Названия методов не могут начинаться с заглавной буквы</translation> + </message> + <message> + <location line="+21"/> + <source>Property value set multiple times</source> + <translation type="unfinished">Значение свойства задано несколько раз</translation> + </message> + <message> + <location line="+4"/> + <source>Invalid property nesting</source> + <translation type="unfinished">Некорректное вложенность свойств</translation> + </message> + <message> + <location line="+53"/> + <source>Cannot override FINAL property</source> + <translation>Невозможно переопределить свойство FINAL</translation> + </message> + <message> + <location line="+24"/> + <source>Invalid property type</source> + <translation>Некорректный тип свойства</translation> + </message> + <message> + <location line="+159"/> + <source>Invalid empty ID</source> + <translation>Некорректный пустой идентификатор</translation> + </message> + <message> + <location line="+3"/> + <source>IDs cannot start with an uppercase letter</source> + <translation>Идентификаторы не могут начинаться с заглавной буквы</translation> + </message> + <message> + <location line="+6"/> + <source>IDs must start with a letter or underscore</source> + <translation>Идентификаторы должны начинаться с буквы или подчёркивания</translation> + </message> + <message> + <location line="+2"/> + <source>IDs must contain only letters, numbers, and underscores</source> + <translation>Идентификаторы должны содержать только буквы, цифры и подчёркивания</translation> + </message> + <message> + <location line="+6"/> + <source>ID illegally masks global JavaScript property</source> + <translation type="unfinished">Идентификатор неверно маскирует глобальное свойство JavaScript</translation> + </message> + <message> + <location line="+31"/> + <location line="+9"/> + <source>No property alias location</source> + <translation type="unfinished">Отсутствует размещение псевдонима свойства</translation> + </message> + <message> + <location line="-4"/> + <location line="+25"/> + <source>Invalid alias location</source> + <translation type="unfinished">Некорректное размещение псевдонима</translation> + </message> + <message> + <location line="-16"/> + <source>Invalid alias reference. An alias reference must be specified as <id> or <id>.<property></source> + <translation type="unfinished">Некорректная ссылка на псевдоним. Ссылка на псевдоним должна быть указана, как <id> или <id>.<property></translation> + </message> + <message> + <location line="+3"/> + <source>Invalid alias reference. Unable to find id "%1"</source> + <translation type="unfinished">Некорректная ссылка на псевдоним. Не удалось найти id "%1"</translation> + </message> +</context> +<context> + <name>QDeclarativeComponent</name> + <message> + <location filename="../src/declarative/qml/qdeclarativecomponent.cpp" line="+459"/> + <source>Invalid empty URL</source> + <translation>Пустой адрес URL</translation> + </message> +</context> +<context> + <name>QDeclarativeCompositeTypeManager</name> + <message> + <location filename="../src/declarative/qml/qdeclarativecompositetypemanager.cpp" line="+475"/> + <location line="+266"/> + <source>Resource %1 unavailable</source> + <translation>Ресурс "%1" недоступен</translation> + </message> + <message> + <location line="-122"/> + <source>Namespace %1 cannot be used as a type</source> + <translation>Пространство имён "%1" не может быть использовано в качестве типа</translation> + </message> + <message> + <location line="+2"/> + <source>%1 %2</source> + <translation>%1 %2</translation> + </message> + <message> + <location line="+47"/> + <source>Type %1 unavailable</source> + <translation>Тип "%1" недоступен</translation> + </message> +</context> +<context> + <name>QDeclarativeConnections</name> + <message> + <location filename="../src/declarative/util/qdeclarativeconnections.cpp" line="+209"/> + <location line="+60"/> + <source>Cannot assign to non-existent property "%1"</source> + <translation type="unfinished">Невозможно назначить несуществующему свойству "%1"</translation> + </message> + <message> + <location line="-50"/> + <source>Connections: nested objects not allowed</source> + <translation>Подключения: вложенные объекты недопустимы</translation> + </message> + <message> + <location line="+3"/> + <source>Connections: syntax error</source> + <translation>Подключения: синтаксическая ошибка</translation> + </message> + <message> + <location line="+8"/> + <source>Connections: script expected</source> + <translation>Подключения: ожидается сценарий</translation> + </message> +</context> +<context> + <name>QDeclarativeEngine</name> + <message> + <location filename="../src/declarative/qml/qdeclarativesqldatabase.cpp" line="+204"/> + <source>executeSql called outside transaction()</source> + <translation>executeSql() вызван вне transaction()</translation> + </message> + <message> + <location line="+58"/> + <source>Read-only Transaction</source> + <translation>Транзакция только для чтения</translation> + </message> + <message> + <location line="+20"/> + <source>Version mismatch: expected %1, found %2</source> + <translation>Несовпадение версий: ожидалась %1, найдена %2</translation> + </message> + <message> + <location line="+14"/> + <source>SQL transaction failed</source> + <translation>Не удалось выполнить транзакцию SQL</translation> + </message> + <message> + <location line="+21"/> + <source>transaction: missing callback</source> + <translation>транзакция: отсутствует обратный вызов</translation> + </message> + <message> + <location line="+57"/> + <location line="+16"/> + <source>SQL: database version mismatch</source> + <translation>Не совпадает версия базы данных SQL</translation> + </message> +</context> +<context> + <name>QDeclarativeFlipable</name> + <message> + <location filename="../src/declarative/graphicsitems/qdeclarativeflipable.cpp" line="+127"/> + <source>front is a write-once property</source> + <translation>front - свойство для однократной записи</translation> + </message> + <message> + <location line="+19"/> + <source>back is a write-once property</source> + <translation>back - свойство для однократной записи</translation> + </message> +</context> +<context> + <name>QDeclarativeImportDatabase</name> + <message> + <location filename="../src/declarative/qml/qdeclarativeimport.cpp" line="+294"/> + <source>module "%1" definition "%2" not readable</source> + <translation type="unfinished">невозможно прочитать определение "%2" модуля "%1"</translation> + </message> + <message> + <location line="+20"/> + <source>plugin cannot be loaded for module "%1": %2</source> + <translation type="unfinished">модуль не может быть загружен для подмодуля "%1": %2</translation> + </message> + <message> + <location line="+5"/> + <source>module "%1" plugin "%2" not found</source> + <translation type="unfinished">подмодуль "%1" модуля "%2" не найден</translation> + </message> + <message> + <location line="+79"/> + <location line="+55"/> + <source>module "%1" version %2.%3 is not installed</source> + <translation>модуль "%1" версии %2.%3 не установлен</translation> + </message> + <message> + <location line="-53"/> + <source>module "%1" is not installed</source> + <translation>модуль "%1" не установлен</translation> + </message> + <message> + <location line="+14"/> + <location line="+19"/> + <source>"%1": no such directory</source> + <translation>"%1": каталог не существует</translation> + </message> + <message> + <location line="-2"/> + <source>import "%1" has no qmldir and no namespace</source> + <translation type="unfinished">каталог "%1" не содержит ни qmldir, ни namespace</translation> + </message> + <message> + <location line="+46"/> + <source>- %1 is not a namespace</source> + <translation>- %1 - некорректное пространство имён</translation> + </message> + <message> + <location line="+6"/> + <source>- nested namespaces not allowed</source> + <translation>- вложенные пространства имён недопустимы</translation> + </message> + <message> + <location line="+47"/> + <location line="+4"/> + <source>local directory</source> + <translation>локальный каталог</translation> + </message> + <message> + <location line="+6"/> + <source>is ambiguous. Found in %1 and in %2</source> + <translation>неоднозначно. Найдено в %1 и %2</translation> + </message> + <message> + <location line="+4"/> + <source>is ambiguous. Found in %1 in version %2.%3 and %4.%5</source> + <translation>неоднозначно. Найдено в %1 версий %2.%3 и %4.%5</translation> + </message> + <message> + <location line="+14"/> + <source>is instantiated recursively</source> + <translation>обрабатывается рекурсивно</translation> + </message> + <message> + <location line="+2"/> + <source>is not a type</source> + <translation>не является типом</translation> + </message> +</context> +<context> + <name>QDeclarativeKeyNavigationAttached</name> + <message> + <location filename="../src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp" line="+66"/> + <source>KeyNavigation is only available via attached properties</source> + <translation type="unfinished">KeyNavigation доступна только через прикреплённые свойства</translation> + </message> +</context> +<context> + <name>QDeclarativeKeysAttached</name> + <message> + <location line="+1"/> + <source>Keys is only available via attached properties</source> + <translation type="unfinished">Keys доступны только через прикреплённые свойства</translation> + </message> +</context> +<context> + <name>QDeclarativeListModel</name> + <message> + <location filename="../src/declarative/util/qdeclarativelistmodel.cpp" line="+399"/> + <source>remove: index %1 out of range</source> + <translation>remove: индекс %1 вне диапазона</translation> + </message> + <message> + <location line="+33"/> + <source>insert: value is not an object</source> + <translation>insert: значение не является объектом</translation> + </message> + <message> + <location line="+5"/> + <source>insert: index %1 out of range</source> + <translation>insert: индекс %1 вне диапазона</translation> + </message> + <message> + <location line="+30"/> + <source>move: out of range</source> + <translation>move: индекс вне диапазона</translation> + </message> + <message> + <location line="+40"/> + <source>append: value is not an object</source> + <translation>append: значение не является объектом</translation> + </message> + <message> + <location line="+55"/> + <source>set: value is not an object</source> + <translation>set: значение не является объектом</translation> + </message> + <message> + <location line="+4"/> + <location line="+34"/> + <source>set: index %1 out of range</source> + <translation>set: индекс %1 вне диапазона</translation> + </message> + <message> + <location line="+39"/> + <location line="+15"/> + <source>ListElement: cannot contain nested elements</source> + <translation>ListElement: не может содержать вложенные элементы</translation> + </message> + <message> + <location line="+4"/> + <source>ListElement: cannot use reserved "id" property</source> + <translation>ListElement: невозможно использовать зарезервированное свойство "id"</translation> + </message> + <message> + <location line="+49"/> + <source>ListElement: cannot use script for property value</source> + <translation>ListElement: невозможно использовать сценарий в качестве значения свойства</translation> + </message> + <message> + <location line="+29"/> + <source>ListModel: undefined property '%1'</source> + <translation>ListModel: неопределённое свойство "%1"</translation> + </message> +</context> +<context> + <name>QDeclarativeLoader</name> + <message> + <location filename="../src/declarative/graphicsitems/qdeclarativeloader.cpp" line="+313"/> + <source>Loader does not support loading non-visual elements.</source> + <translation>Загрузчик не поддерживает загрузку невизуальных элементов.</translation> + </message> +</context> +<context> + <name>QDeclarativeParentAnimation</name> + <message> + <location filename="../src/declarative/util/qdeclarativeanimation.cpp" line="-169"/> + <source>Unable to preserve appearance under complex transform</source> + <translation>Невозможно сохранить внешний вид при сложном преобразовании</translation> + </message> + <message> + <location line="+10"/> + <location line="+7"/> + <source>Unable to preserve appearance under non-uniform scale</source> + <translation>Невозможно сохранить внешний вид при неоднородном масштабе</translation> + </message> + <message> + <location line="+7"/> + <source>Unable to preserve appearance under scale of 0</source> + <translation>Невозможно сохранить внешний вид при масштабе 0</translation> + </message> +</context> +<context> + <name>QDeclarativeParentChange</name> + <message> + <location filename="../src/declarative/util/qdeclarativestateoperations.cpp" line="+95"/> + <source>Unable to preserve appearance under complex transform</source> + <translation>Невозможно сохранить внешний вид при сложном преобразовании</translation> + </message> + <message> + <location line="+10"/> + <location line="+7"/> + <source>Unable to preserve appearance under non-uniform scale</source> + <translation>Невозможно сохранить внешний вид при неоднородном масштабе</translation> + </message> + <message> + <location line="+7"/> + <source>Unable to preserve appearance under scale of 0</source> + <translation>Невозможно сохранить внешний вид при масштабе 0</translation> + </message> +</context> +<context> + <name>QDeclarativeParser</name> + <message> + <location filename="../src/declarative/qml/parser/qdeclarativejslexer.cpp" line="+542"/> + <location line="+123"/> + <location line="+54"/> + <source>Illegal unicode escape sequence</source> + <translation type="unfinished">Неверная unicode esc-последовательность</translation> + </message> + <message> + <location line="-140"/> + <source>Illegal character</source> + <translation>Недопустимый символ</translation> + </message> + <message> + <location line="+14"/> + <source>Unclosed string at end of line</source> + <translation>Незакрытый текст в конце строки</translation> + </message> + <message> + <location line="+26"/> + <source>Illegal escape squence</source> + <translation type="unfinished">Неверная esc-последовательность</translation> + </message> + <message> + <location line="+72"/> + <source>Unclosed comment at end of file</source> + <translation>Незакрытый комментарий в конце строки</translation> + </message> + <message> + <location line="+102"/> + <source>Illegal syntax for exponential number</source> + <translation type="unfinished">Недопустимый синтаксис для экспоненциального числа</translation> + </message> + <message> + <location line="+26"/> + <source>Identifier cannot start with numeric literal</source> + <translation>Идентификатор не может начинаться с цифры</translation> + </message> + <message> + <location line="+338"/> + <source>Unterminated regular expression literal</source> + <translation>Незаконченный литерал регулярного выражения</translation> + </message> + <message> + <location line="+15"/> + <source>Invalid regular expression flag '%0'</source> + <translation>Некорректный флаг "%0" в регулярном выражении</translation> + </message> + <message> + <location line="+16"/> + <location line="+22"/> + <source>Unterminated regular expression backslash sequence</source> + <translation>Регулярное выражение содержит незавершённую экранированную последовательность</translation> + </message> + <message> + <location line="+13"/> + <source>Unterminated regular expression class</source> + <translation>Регулярное выражение содержит незавершённый класс</translation> + </message> + <message> + <location filename="../src/declarative/qml/parser/qdeclarativejsparser.cpp" line="+1828"/> + <location line="+67"/> + <source>Syntax error</source> + <translation>Синтаксическая ошибка</translation> + </message> + <message> + <location line="-65"/> + <source>Unexpected token `%1'</source> + <translation>Неожиданный символ "%1"</translation> + </message> + <message> + <location line="+28"/> + <location line="+24"/> + <source>Expected token `%1'</source> + <translation>Ожидается символ "%1"</translation> + </message> + <message> + <location filename="../src/declarative/qml/qdeclarativescriptparser.cpp" line="+260"/> + <location line="+431"/> + <location line="+59"/> + <source>Property value set multiple times</source> + <translation type="unfinished">Значение свойства установлено несколько раз</translation> + </message> + <message> + <location line="-479"/> + <source>Expected type name</source> + <translation>Ожидается название типа</translation> + </message> + <message> + <location line="+136"/> + <source>Invalid import qualifier ID</source> + <translation type="unfinished">Некорректный ID спецификатора импорта</translation> + </message> + <message> + <location line="+8"/> + <source>Reserved name "Qt" cannot be used as an qualifier</source> + <translation type="unfinished">Зарезервированное имя "Qt" не может быть использовано в качестве спецификатора</translation> + </message> + <message> + <location line="+15"/> + <source>Script import qualifiers must be unique.</source> + <translation type="unfinished">Спецификаторы импорта сценария должны быть уникальными.</translation> + </message> + <message> + <location line="+10"/> + <source>Script import requires a qualifier</source> + <translation type="unfinished">Для импорта сценария требуется спецификатор</translation> + </message> + <message> + <location line="+11"/> + <source>Library import requires a version</source> + <translation type="unfinished">Импорт библиотеки требует версию</translation> + </message> + <message> + <location line="+59"/> + <source>Expected parameter type</source> + <translation>Ожидается тип параметра</translation> + </message> + <message> + <location line="+42"/> + <source>Invalid property type modifier</source> + <translation>Некорректный модификатор типа свойства</translation> + </message> + <message> + <location line="+9"/> + <source>Unexpected property type modifier</source> + <translation>Неожиданный модификатор типа свойства</translation> + </message> + <message> + <location line="+9"/> + <source>Expected property type</source> + <translation>Ожидается тип свойства</translation> + </message> + <message> + <location line="+9"/> + <source>Readonly not yet supported</source> + <translation type="unfinished">Readonly ещё не поддерживается</translation> + </message> + <message> + <location line="+215"/> + <source>JavaScript declaration outside Script element</source> + <translation>Определение JavaScript вне элемента Script</translation> + </message> +</context> +<context> + <name>QDeclarativePauseAnimation</name> + <message> + <location filename="../src/declarative/util/qdeclarativeanimation.cpp" line="-1977"/> + <source>Cannot set a duration of < 0</source> + <translation>Невозможно установить длительность < 0</translation> + </message> +</context> +<context> + <name>QDeclarativePixmapCache</name> + <message> + <location filename="../src/declarative/util/qdeclarativepixmapcache.cpp" line="+190"/> + <source>Error decoding: %1: %2</source> + <translation>Ошибка декодирования: %1: %2</translation> + </message> + <message> + <location line="+70"/> + <source>Failed to get image from provider: %1</source> + <translation>Не удалось получить изображение от поставщика: %1</translation> + </message> + <message> + <location line="+19"/> + <location line="+345"/> + <source>Cannot open: %1</source> + <translation>Не удалось открыть: %1</translation> + </message> + <message> + <location line="+37"/> + <source>Unknown Error loading %1</source> + <translation>Неизвестная ошибка загрузки %1</translation> + </message> +</context> +<context> + <name>QDeclarativePropertyAnimation</name> + <message> + <location filename="../src/declarative/util/qdeclarativeanimation.cpp" line="+1102"/> + <source>Cannot set a duration of < 0</source> + <translation>Невозможно установить длительность < 0</translation> + </message> +</context> +<context> + <name>QDeclarativePropertyChanges</name> + <message> + <location filename="../src/declarative/util/qdeclarativepropertychanges.cpp" line="+252"/> + <source>PropertyChanges does not support creating state-specific objects.</source> + <translation type="unfinished">PropertyChanges не поддерживают создание объектов, зависимых от состояния.</translation> + </message> + <message> + <location line="+157"/> + <source>Cannot assign to non-existent property "%1"</source> + <translation type="unfinished">Невозможно назначить несуществующему свойству "%1"</translation> + </message> + <message> + <location line="+3"/> + <source>Cannot assign to read-only property "%1"</source> + <translation type="unfinished">Невозможно назначить свойству только для чтения "%1"</translation> + </message> +</context> +<context> + <name>QDeclarativeTextInput</name> + <message> + <location filename="../src/declarative/graphicsitems/qdeclarativetextinput.cpp" line="+798"/> + <location line="+8"/> + <source>Could not load cursor delegate</source> + <translation type="unfinished">Не удалось загрузить делегат курсора</translation> + </message> + <message> + <location line="+11"/> + <source>Could not instantiate cursor delegate</source> + <translation type="unfinished">Не удалось инстанциировать делегат курсора</translation> + </message> +</context> +<context> + <name>QDeclarativeVME</name> + <message> + <location filename="../src/declarative/qml/qdeclarativevme.cpp" line="+194"/> + <source>Unable to create object of type %1</source> + <translation>Невозможно создать объект типа "%1"</translation> + </message> + <message> + <location line="+390"/> + <source>Cannot assign value %1 to property %2</source> + <translation>Невозможно установить значение "%1" свойству "%2"</translation> + </message> + <message> + <location line="+22"/> + <source>Cannot assign object type %1 with no default method</source> + <translation type="unfinished">Невозможно назначить объект типа %1 без метода по умолчанию</translation> + </message> + <message> + <location line="+3"/> + <source>Cannot connect mismatched signal/slot %1 %vs. %2</source> + <translation type="unfinished">Невозможно подключить отсутствующий сигнал/слот %1 к %2</translation> + </message> + <message> + <location line="+5"/> + <source>Cannot assign an object to signal property %1</source> + <translation type="unfinished">Невозможно назначить объект к свойству сигнала %1</translation> + </message> + <message> + <location line="+146"/> + <source>Cannot assign object to list</source> + <translation type="unfinished">Невозможно назначить объект списку</translation> + </message> + <message> + <location line="+41"/> + <source>Cannot assign object to interface property</source> + <translation type="unfinished">Невозможно назначить объект свойству интерфейса</translation> + </message> + <message> + <location line="+11"/> + <source>Unable to create attached object</source> + <translation type="unfinished">Не удалось создать вложенный объект</translation> + </message> + <message> + <location line="+32"/> + <source>Cannot set properties on %1 as it is null</source> + <translation type="unfinished">Невозможно установить свойства для %1, так как он нулевой</translation> + </message> +</context> +<context> + <name>QDeclarativeVisualDataModel</name> + <message> + <location filename="../src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp" line="+1088"/> + <source>Delegate component must be Item type.</source> + <translation type="unfinished">Компинент делегата должен быть типа Item.</translation> + </message> +</context> +<context> + <name>QDeclarativeXmlListModel</name> + <message> + <location filename="../src/declarative/util/qdeclarativeutilmodule.cpp" line="-12"/> + <location line="+2"/> + <source>Qt was built without support for xmlpatterns</source> + <translation>Qt было собрано без поддержки xmlpatterns</translation> + </message> +</context> +<context> + <name>QDeclarativeXmlListModelRole</name> + <message> + <location filename="../src/declarative/util/qdeclarativexmllistmodel_p.h" line="+174"/> + <source>An XmlRole query must not start with '/'</source> + <translation type="unfinished">Запрос XmlRole не должен начинаться с '/'</translation> + </message> +</context> +<context> + <name>QDeclarativeXmlRoleList</name> + <message> + <location filename="../src/declarative/util/qdeclarativexmllistmodel.cpp" line="+712"/> + <source>An XmlListModel query must start with '/' or "//"</source> + <translation type="unfinished">Запрос XmlListModel должен начинаться с '/' или "//"</translation> + </message> +</context> +<context> <name>QDial</name> <message> <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="+951"/> @@ -1592,12 +2723,12 @@ to <context> <name>QDialog</name> <message> - <location filename="../src/gui/dialogs/qdialog.cpp" line="+652"/> + <location filename="../src/gui/dialogs/qdialog.cpp" line="+645"/> <source>What's This?</source> <translation>Что это?</translation> </message> <message> - <location line="-135"/> + <location line="-122"/> <source>Done</source> <translation>Готово</translation> </message> @@ -1605,51 +2736,46 @@ to <context> <name>QDialogButtonBox</name> <message> - <location filename="../src/gui/dialogs/qmessagebox.cpp" line="+1876"/> + <location filename="../src/gui/dialogs/qmessagebox.cpp" line="+1920"/> <location line="+464"/> - <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+650"/> + <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+649"/> <source>OK</source> <translation>ОК</translation> </message> <message> - <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+0"/> - <source>&OK</source> - <translation>&ОК</translation> + <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+3"/> + <source>Save</source> + <translation>Сохранить</translation> </message> <message> - <location line="+3"/> + <location line="+0"/> <source>&Save</source> <translation>&Сохранить</translation> </message> <message> - <location line="+0"/> - <source>Save</source> - <translation>Сохранить</translation> - </message> - <message> <location line="+3"/> <source>Open</source> <translation>Открыть</translation> </message> <message> <location line="+3"/> - <source>&Cancel</source> - <translation>От&мена</translation> + <source>Cancel</source> + <translation>Отмена</translation> </message> <message> <location line="+0"/> - <source>Cancel</source> - <translation>Отмена</translation> + <source>&Cancel</source> + <translation>От&мена</translation> </message> <message> <location line="+3"/> - <source>&Close</source> - <translation>&Закрыть</translation> + <source>Close</source> + <translation>Закрыть</translation> </message> <message> <location line="+0"/> - <source>Close</source> - <translation>Закрыть</translation> + <source>&Close</source> + <translation>&Закрыть</translation> </message> <message> <location line="+3"/> @@ -1726,6 +2852,11 @@ to <source>Close without Saving</source> <translation>Закрыть без сохранения</translation> </message> + <message> + <location line="-27"/> + <source>&OK</source> + <translation>&ОК</translation> + </message> </context> <context> <name>QDirModel</name> @@ -1791,7 +2922,17 @@ to <context> <name>QErrorMessage</name> <message> - <location filename="../src/gui/dialogs/qerrormessage.cpp" line="+208"/> + <location filename="../src/gui/dialogs/qerrormessage.cpp" line="+414"/> + <source>&Show this message again</source> + <translation>&Показывать это сообщение в дальнейшем</translation> + </message> + <message> + <location line="+1"/> + <source>&OK</source> + <translation>&Закрыть</translation> + </message> + <message> + <location line="-207"/> <source>Debug Message:</source> <translation>Отладочное сообщение:</translation> </message> @@ -1805,21 +2946,11 @@ to <source>Fatal Error:</source> <translation>Критическая ошибка:</translation> </message> - <message> - <location line="+200"/> - <source>&Show this message again</source> - <translation>&Показывать это сообщение в дальнейшем</translation> - </message> - <message> - <location line="+1"/> - <source>&OK</source> - <translation>&Закрыть</translation> - </message> </context> <context> <name>QFile</name> <message> - <location filename="../src/corelib/io/qfile.cpp" line="+698"/> + <location filename="../src/corelib/io/qfile.cpp" line="+703"/> <location line="+155"/> <source>Destination file exists</source> <translation>Файл существует</translation> @@ -1858,18 +2989,71 @@ to <context> <name>QFileDialog</name> <message> - <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+557"/> - <location line="+471"/> + <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+558"/> + <location line="+481"/> <source>All Files (*)</source> <translation>Все файлы (*)</translation> </message> <message> - <location line="+216"/> - <source>Directories</source> - <translation>Каталоги</translation> + <location filename="../src/gui/dialogs/qfiledialog.ui"/> + <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/> + <source>Back</source> + <translation>Назад</translation> </message> <message> - <location line="-3"/> + <location/> + <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/> + <source>List View</source> + <translation>Список</translation> + </message> + <message> + <location/> + <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/> + <source>Detail View</source> + <translation>Подробный вид</translation> + </message> + <message> + <location filename="../src/gui/itemviews/qfileiconprovider.cpp" line="+467"/> + <location line="+1"/> + <source>File</source> + <translation>Файл</translation> + </message> + <message> + <location line="+5"/> + <source>File Folder</source> + <comment>Match Windows Explorer</comment> + <translation>Папка с файлами</translation> + </message> + <message> + <location line="+2"/> + <source>Folder</source> + <comment>All other platforms</comment> + <translation>Папка</translation> + </message> + <message> + <location line="+9"/> + <source>Alias</source> + <comment>Mac OS X Finder</comment> + <translation>Псевдоним</translation> + </message> + <message> + <location line="+2"/> + <source>Shortcut</source> + <comment>All other platforms</comment> + <translation>Ярлык</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-498"/> + <source>Open</source> + <translation>Открыть</translation> + </message> + <message> + <location line="+2"/> + <source>Save As</source> + <translation>Сохранить как</translation> + </message> + <message> + <location line="+709"/> <location line="+55"/> <location line="+1532"/> <source>&Open</source> @@ -1882,12 +3066,59 @@ to <translation>&Сохранить</translation> </message> <message> - <location line="-756"/> - <source>Open</source> - <translation>Открыть</translation> + <location line="+1381"/> + <source>'%1' is write protected. +Do you want to delete it anyway?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+424"/> + <source>Recent Places</source> + <translation>Недавние документы</translation> </message> <message> - <location line="+1527"/> + <location line="-2540"/> + <source>&Rename</source> + <translation>&Переименовать</translation> + </message> + <message> + <location line="+1"/> + <source>&Delete</source> + <translation>&Удалить</translation> + </message> + <message> + <location line="+1"/> + <source>Show &hidden files</source> + <translation>Показать ск&рытые файлы</translation> + </message> + <message> + <location line="+1986"/> + <source>New Folder</source> + <translation>Новая папка</translation> + </message> + <message> + <location line="-2021"/> + <source>Find Directory</source> + <translation>Найти каталог</translation> + </message> + <message> + <location line="+716"/> + <source>Directories</source> + <translation>Каталоги</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qfiledialog_win.cpp" line="+148"/> + <source>All Files (*.*)</source> + <translation>Все файлы (*.*)</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-675"/> + <location line="+679"/> + <source>Directory:</source> + <translation>Каталог:</translation> + </message> + <message> + <location line="+819"/> <source>%1 already exists. Do you want to replace it?</source> <translation>%1 уже существует. @@ -1908,58 +3139,19 @@ Please verify the correct file name was given.</source> <translation>Мой компьютер</translation> </message> <message> - <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-1516"/> - <source>&Rename</source> - <translation>&Переименовать</translation> - </message> - <message> - <location line="+1"/> - <source>&Delete</source> - <translation>&Удалить</translation> - </message> - <message> - <location line="+1"/> - <source>Show &hidden files</source> - <translation>Показать ск&рытые файлы</translation> - </message> - <message> <location filename="../src/gui/dialogs/qfiledialog.ui"/> <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/> - <source>Back</source> - <translation>Назад</translation> - </message> - <message> - <location/> - <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/> <source>Parent Directory</source> <translation>Родительский каталог</translation> </message> <message> <location/> <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/> - <source>List View</source> - <translation>Список</translation> - </message> - <message> - <location/> - <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/> - <source>Detail View</source> - <translation>Подробный вид</translation> - </message> - <message> - <location/> - <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/> <source>Files of type:</source> <translation>Типы файлов:</translation> </message> <message> - <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+6"/> - <location line="+669"/> - <source>Directory:</source> - <translation>Каталог:</translation> - </message> - <message> - <location line="+785"/> + <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-54"/> <location line="+862"/> <source>%1 Directory not found. @@ -1969,16 +3161,9 @@ Please verify the correct directory name was given.</source> Проверьте правильность указанного имени каталога.</translation> </message> <message> - <location line="-218"/> - <source>'%1' is write protected. -Do you want to delete it anyway?</source> - <translation>'%1' защищён от записи. -Всё-равно хотите удалить?</translation> - </message> - <message> - <location line="+5"/> + <location line="-213"/> <source>Are sure you want to delete '%1'?</source> - <translation>Вы действительно хотите удалить '%1'?</translation> + <translation>Вы действительно хотите удалить "%1"?</translation> </message> <message> <location line="+15"/> @@ -1986,67 +3171,17 @@ Do you want to delete it anyway?</source> <translation>Не удалось удалить каталог.</translation> </message> <message> - <location line="+404"/> - <source>Recent Places</source> - <translation>Недавние документы</translation> - </message> - <message> - <location filename="../src/gui/dialogs/qfiledialog_win.cpp" line="+174"/> - <source>All Files (*.*)</source> - <translation>Все файлы (*.*)</translation> - </message> - <message> - <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-2559"/> - <source>Save As</source> - <translation>Сохранить как</translation> - </message> - <message> - <location filename="../src/gui/itemviews/qfileiconprovider.cpp" line="+462"/> + <location filename="../src/gui/itemviews/qfileiconprovider.cpp" line="-22"/> <source>Drive</source> <translation>Диск</translation> </message> <message> - <location line="+3"/> - <location line="+1"/> - <source>File</source> - <translation>Файл</translation> - </message> - <message> - <location line="+5"/> - <source>File Folder</source> - <comment>Match Windows Explorer</comment> - <translation>Папка с файлами</translation> - </message> - <message> - <location line="+2"/> - <source>Folder</source> - <comment>All other platforms</comment> - <translation>Папка</translation> - </message> - <message> - <location line="+9"/> - <source>Alias</source> - <comment>Mac OS X Finder</comment> - <translation>Псевдоним</translation> - </message> - <message> - <location line="+2"/> - <source>Shortcut</source> - <comment>All other platforms</comment> - <translation>Ярлык</translation> - </message> - <message> - <location line="+7"/> + <location line="+29"/> <source>Unknown</source> <translation>Неизвестный</translation> </message> <message> - <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-4"/> - <source>Find Directory</source> - <translation>Найти каталог</translation> - </message> - <message> - <location line="+29"/> + <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-2140"/> <source>Show </source> <translation>Показать </translation> </message> @@ -2057,17 +3192,12 @@ Do you want to delete it anyway?</source> <translation>Вперёд</translation> </message> <message> - <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+1982"/> - <source>New Folder</source> - <translation>Новая папка</translation> - </message> - <message> - <location line="-1975"/> + <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+7"/> <source>&New Folder</source> <translation>&Новая папка</translation> </message> <message> - <location line="+677"/> + <location line="+687"/> <location line="+43"/> <source>&Choose</source> <translation>&Выбрать</translation> @@ -2078,8 +3208,8 @@ Do you want to delete it anyway?</source> <translation>Удалить</translation> </message> <message> - <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-713"/> - <location line="+673"/> + <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-723"/> + <location line="+683"/> <source>File &name:</source> <translation>&Имя файла:</translation> </message> @@ -2095,16 +3225,70 @@ Do you want to delete it anyway?</source> <source>Create New Folder</source> <translation>Создать папку</translation> </message> + <message> + <location/> + <source>Go back</source> + <translation>Назад</translation> + </message> + <message> + <location/> + <source>Go forward</source> + <translation>Вперёд</translation> + </message> + <message> + <location/> + <source>Go to the parent directory</source> + <translation>Перейти в родительский каталог</translation> + </message> + <message> + <location/> + <source>Create a New Folder</source> + <translation>Создать новую папку</translation> + </message> + <message> + <location/> + <source>Change to list view mode</source> + <translation>Переключить в режим списка</translation> + </message> + <message> + <location/> + <source>Change to detail view mode</source> + <translation>Переключить в подробный режим</translation> + </message> </context> <context> <name>QFileSystemModel</name> <message> - <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+483"/> - <source>%1 byte(s)</source> + <location filename="../src/gui/dialogs/qfilesystemmodel.cpp" line="+740"/> + <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+482"/> + <source>%1 TB</source> + <translation>%1 Тб</translation> + </message> + <message> + <location line="+2"/> + <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+2"/> + <source>%1 GB</source> + <translation>%1 Гб</translation> + </message> + <message> + <location line="+2"/> + <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+2"/> + <source>%1 MB</source> + <translation>%1 Мб</translation> + </message> + <message> + <location line="+2"/> + <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+2"/> + <source>%1 KB</source> + <translation>%1 Кб</translation> + </message> + <message> + <location line="+1"/> + <source>%1 bytes</source> <translation>%1 байт</translation> </message> <message> - <location filename="../src/gui/dialogs/qfilesystemmodel.cpp" line="+828"/> + <location line="+89"/> <source>Invalid filename</source> <translation>Некорректное имя файла</translation> </message> @@ -2141,7 +3325,7 @@ Do you want to delete it anyway?</source> <translation>Дата изменения</translation> </message> <message> - <location filename="../src/gui/dialogs/qfilesystemmodel_p.h" line="+258"/> + <location filename="../src/gui/dialogs/qfilesystemmodel_p.h" line="+261"/> <source>My Computer</source> <translation>Мой компьютер</translation> </message> @@ -2151,32 +3335,8 @@ Do you want to delete it anyway?</source> <translation>Компьютер</translation> </message> <message> - <location filename="../src/gui/dialogs/qfilesystemmodel.cpp" line="-164"/> - <location filename="../src/gui/itemviews/qdirmodel.cpp" line="-7"/> - <source>%1 TB</source> - <translation>%1 Тб</translation> - </message> - <message> - <location line="+2"/> - <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+2"/> - <source>%1 GB</source> - <translation>%1 Гб</translation> - </message> - <message> - <location line="+2"/> - <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+2"/> - <source>%1 MB</source> - <translation>%1 Мб</translation> - </message> - <message> - <location line="+2"/> - <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+2"/> - <source>%1 KB</source> - <translation>%1 Кб</translation> - </message> - <message> - <location line="+1"/> - <source>%1 bytes</source> + <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+1"/> + <source>%1 byte(s)</source> <translation>%1 байт</translation> </message> </context> @@ -2319,7 +3479,7 @@ Do you want to delete it anyway?</source> <message> <location line="+3"/> <source>Malayalam</source> - <translation>Малаяльская</translation> + <translation>Малайялам</translation> </message> <message> <location line="+3"/> @@ -2344,7 +3504,7 @@ Do you want to delete it anyway?</source> <message> <location line="+3"/> <source>Myanmar</source> - <translation>Майанмарская</translation> + <translation>Мьянма</translation> </message> <message> <location line="+3"/> @@ -2405,7 +3565,7 @@ Do you want to delete it anyway?</source> <context> <name>QFontDialog</name> <message> - <location filename="../src/gui/dialogs/qfontdialog.cpp" line="+776"/> + <location filename="../src/gui/dialogs/qfontdialog.cpp" line="+768"/> <source>&Font</source> <translation>&Шрифт</translation> </message> @@ -2440,28 +3600,55 @@ Do you want to delete it anyway?</source> <translation>Пример</translation> </message> <message> - <location line="+1"/> - <source>Wr&iting System</source> - <translation>&Система письма</translation> - </message> - <message> - <location line="-609"/> - <location line="+257"/> + <location line="-595"/> <source>Select Font</source> <translation>Выбор шрифта</translation> </message> + <message> + <location line="+596"/> + <source>Wr&iting System</source> + <translation>&Система письма</translation> + </message> </context> <context> <name>QFtp</name> <message> - <location filename="../src/network/access/qftp.cpp" line="+828"/> - <location filename="../src/qt3support/network/q3ftp.cpp" line="+683"/> - <source>Not connected</source> - <translation>Соединение не установлено</translation> + <location filename="../src/qt3support/network/q3ftp.cpp" line="+2303"/> + <source>Host %1 found</source> + <translation>Узел %1 найден</translation> </message> <message> - <location line="+68"/> - <location filename="../src/qt3support/network/q3ftp.cpp" line="+65"/> + <location line="+7"/> + <source>Host found</source> + <translation>Узел найден</translation> + </message> + <message> + <location filename="../src/network/access/qftp.cpp" line="+1008"/> + <location filename="../src/qt3support/network/q3ftp.cpp" line="-1456"/> + <location line="+1451"/> + <source>Connected to host %1</source> + <translation>Установлено соединение с узлом %1</translation> + </message> + <message> + <location filename="../src/qt3support/network/q3ftp.cpp" line="+7"/> + <source>Connected to host</source> + <translation>Соединение с узлом установлено</translation> + </message> + <message> + <location line="-5"/> + <source>Connection to %1 closed</source> + <translation>Соединение с %1 закрыто</translation> + </message> + <message> + <location filename="../src/network/access/qftp.cpp" line="+1383"/> + <location filename="../src/qt3support/network/q3ftp.cpp" line="-243"/> + <location line="+250"/> + <source>Connection closed</source> + <translation>Соединение закрыто</translation> + </message> + <message> + <location line="-1495"/> + <location filename="../src/qt3support/network/q3ftp.cpp" line="-1566"/> <source>Host %1 not found</source> <translation>Узел %1 не найден</translation> </message> @@ -2477,28 +3664,15 @@ Do you want to delete it anyway?</source> <translation>Время на соединение с узлом %1 истекло</translation> </message> <message> - <location line="+104"/> - <location filename="../src/qt3support/network/q3ftp.cpp" line="+102"/> - <location line="+1451"/> - <source>Connected to host %1</source> - <translation>Установлено соединение с узлом %1</translation> - </message> - <message> - <location line="+219"/> - <location filename="../src/qt3support/network/q3ftp.cpp" line="-1290"/> - <source>Connection refused for data connection</source> - <translation>Отказ в соединении для передачи данных</translation> - </message> - <message> - <location line="+178"/> + <location line="+501"/> <location line="+29"/> - <location filename="../src/qt3support/network/q3ftp.cpp" line="+195"/> + <location filename="../src/qt3support/network/q3ftp.cpp" line="+458"/> <location line="+728"/> <source>Unknown error</source> <translation>Неизвестная ошибка</translation> </message> <message> - <location line="+891"/> + <location line="+897"/> <location filename="../src/qt3support/network/q3ftp.cpp" line="+77"/> <source>Connecting to host failed: %1</source> @@ -2570,47 +3744,37 @@ Do you want to delete it anyway?</source> %1</translation> </message> <message> - <location line="+28"/> - <location filename="../src/qt3support/network/q3ftp.cpp" line="+25"/> - <location line="+250"/> - <source>Connection closed</source> - <translation>Соединение закрыто</translation> - </message> - <message> - <location filename="../src/qt3support/network/q3ftp.cpp" line="-11"/> - <source>Host %1 found</source> - <translation>Узел %1 найден</translation> - </message> - <message> - <location line="+4"/> - <source>Connection to %1 closed</source> - <translation>Соединение с %1 закрыто</translation> - </message> - <message> - <location line="+3"/> - <source>Host found</source> - <translation>Узел найден</translation> + <location line="-1535"/> + <location filename="../src/qt3support/network/q3ftp.cpp" line="-1356"/> + <source>Not connected</source> + <translation>Соединение не установлено</translation> </message> <message> - <location line="+2"/> - <source>Connected to host</source> - <translation>Соединение с узлом установлено</translation> + <location line="+399"/> + <location filename="../src/qt3support/network/q3ftp.cpp" line="+332"/> + <source>Connection refused for data connection</source> + <translation>Отказ в соединении для передачи данных</translation> </message> </context> <context> <name>QHostInfo</name> <message> - <location filename="../src/network/kernel/qhostinfo_p.h" line="+101"/> + <location filename="../src/network/kernel/qhostinfo_p.h" line="+103"/> <source>Unknown error</source> <translation>Неизвестная ошибка</translation> </message> + <message> + <location filename="../src/network/kernel/qhostinfo.cpp" line="+171"/> + <source>No host name given</source> + <translation>Имя узла не задано</translation> + </message> </context> <context> <name>QHostInfoAgent</name> <message> - <location filename="../src/network/kernel/qhostinfo_unix.cpp" line="+257"/> + <location filename="../src/network/kernel/qhostinfo_unix.cpp" line="+260"/> <location line="+32"/> - <location filename="../src/network/kernel/qhostinfo_win.cpp" line="+216"/> + <location filename="../src/network/kernel/qhostinfo_win.cpp" line="+215"/> <location line="+27"/> <source>Host not found</source> <translation>Узел не найден</translation> @@ -2631,12 +3795,14 @@ Do you want to delete it anyway?</source> <translation>Неизвестная ошибка</translation> </message> <message> + <location line="-98"/> <location filename="../src/network/kernel/qhostinfo_win.cpp" line="-67"/> <source>No host name given</source> <translation>Имя узла не задано</translation> </message> <message> - <location line="+0"/> + <location line="+1"/> + <location filename="../src/network/kernel/qhostinfo_win.cpp" line="+0"/> <source>Invalid hostname</source> <translation>Некорректное имя узла</translation> </message> @@ -2644,113 +3810,113 @@ Do you want to delete it anyway?</source> <context> <name>QHttp</name> <message> - <location filename="../src/network/access/qhttp.cpp" line="+1582"/> - <location line="+820"/> - <location filename="../src/qt3support/network/q3http.cpp" line="+1159"/> - <location line="+567"/> - <source>Unknown error</source> - <translation>Неизвестная ошибка</translation> - </message> - <message> - <location line="-568"/> - <location filename="../src/qt3support/network/q3http.cpp" line="-370"/> - <source>Request aborted</source> - <translation>Запрос прерван</translation> + <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-6"/> + <location filename="../src/qt3support/network/q3http.cpp" line="+1835"/> + <source>Connection refused</source> + <translation>Отказано в соединении</translation> </message> <message> - <location line="+579"/> - <location filename="../src/qt3support/network/q3http.cpp" line="+381"/> - <source>No server set to connect to</source> - <translation>Не указан сервер для подключения</translation> + <location filename="../src/network/access/qhttp.cpp" line="+2639"/> + <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-4"/> + <location filename="../src/qt3support/network/q3http.cpp" line="+3"/> + <source>Host %1 not found</source> + <translation>Узел %1 не найден</translation> </message> <message> - <location line="+164"/> - <location filename="../src/qt3support/network/q3http.cpp" line="+56"/> + <location line="-62"/> + <location filename="../src/qt3support/network/q3http.cpp" line="-45"/> <source>Wrong content length</source> <translation>Неверная длина содержимого</translation> </message> <message> - <location line="+4"/> - <location filename="../src/qt3support/network/q3http.cpp" line="+4"/> - <source>Server closed connection unexpectedly</source> - <translation>Сервер неожиданно разорвал соединение</translation> + <location line="+82"/> + <location filename="../src/qt3support/network/q3http.cpp" line="+48"/> + <source>HTTP request failed</source> + <translation>HTTP-запрос не удался</translation> </message> <message> - <location line="+200"/> - <source>Unknown authentication method</source> - <translation>Неизвестный метод авторизации</translation> + <location filename="../src/qt3support/network/q3http.cpp" line="+450"/> + <source>Host %1 found</source> + <translation>Узел %1 найден</translation> </message> <message> - <location line="+183"/> - <source>Error writing response to device</source> - <translation>Ошибка записи ответа на устройство</translation> + <location line="+14"/> + <source>Host found</source> + <translation>Узел найден</translation> </message> <message> - <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-6"/> - <location filename="../src/qt3support/network/q3http.cpp" line="+38"/> - <source>Connection refused</source> - <translation>Отказано в соединении</translation> + <location line="-11"/> + <source>Connected to host %1</source> + <translation>Установлено соединение с узлом %1</translation> </message> <message> - <location filename="../src/network/access/qhttp.cpp" line="-325"/> - <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-4"/> - <location filename="../src/qt3support/network/q3http.cpp" line="+3"/> - <source>Host %1 not found</source> - <translation>Узел %1 не найден</translation> + <location line="+14"/> + <source>Connected to host</source> + <translation>Соединение с узлом установлено</translation> </message> <message> - <location line="+20"/> - <location filename="../src/qt3support/network/q3http.cpp" line="+3"/> - <source>HTTP request failed</source> - <translation>HTTP-запрос не удался</translation> + <location line="-11"/> + <source>Connection to %1 closed</source> + <translation>Соединение с узлом %1 закрыто</translation> </message> <message> - <location line="+94"/> - <location filename="../src/qt3support/network/q3http.cpp" line="+69"/> - <source>Invalid HTTP response header</source> - <translation>Некорректный HTTP-заголовок ответа</translation> + <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+7"/> + <location filename="../src/qt3support/network/q3http.cpp" line="+14"/> + <source>Connection closed</source> + <translation>Соединение закрыто</translation> </message> <message> - <location line="+125"/> - <location line="+48"/> - <location filename="../src/qt3support/network/q3http.cpp" line="+40"/> - <location line="+47"/> - <source>Invalid HTTP chunked body</source> - <translation>Некорректное HTTP-фрагментирование данных</translation> + <location filename="../src/network/access/qhttp.cpp" line="-1077"/> + <location line="+820"/> + <location filename="../src/qt3support/network/q3http.cpp" line="-1152"/> + <location line="+567"/> + <source>Unknown error</source> + <translation>Неизвестная ошибка</translation> </message> <message> - <location filename="../src/qt3support/network/q3http.cpp" line="+294"/> - <source>Host %1 found</source> - <translation>Узел %1 найден</translation> + <location line="-568"/> + <location filename="../src/qt3support/network/q3http.cpp" line="-370"/> + <source>Request aborted</source> + <translation>Запрос прерван</translation> </message> <message> - <location line="+3"/> - <source>Connected to host %1</source> - <translation>Установлено соединение с узлом %1</translation> + <location line="+579"/> + <location filename="../src/qt3support/network/q3http.cpp" line="+381"/> + <source>No server set to connect to</source> + <translation>Не указан сервер для подключения</translation> </message> <message> - <location line="+3"/> - <source>Connection to %1 closed</source> - <translation>Соединение с узлом %1 закрыто</translation> + <location line="+168"/> + <location filename="../src/qt3support/network/q3http.cpp" line="+60"/> + <source>Server closed connection unexpectedly</source> + <translation>Сервер неожиданно разорвал соединение</translation> </message> <message> - <location line="+8"/> - <source>Host found</source> - <translation>Узел найден</translation> + <location line="+172"/> + <location filename="../src/qt3support/network/q3http.cpp" line="+113"/> + <source>Invalid HTTP response header</source> + <translation>Некорректный HTTP-заголовок ответа</translation> </message> <message> - <location line="+3"/> - <source>Connected to host</source> - <translation>Соединение с узлом установлено</translation> + <location line="+28"/> + <source>Unknown authentication method</source> + <translation>Неизвестный метод авторизации</translation> </message> <message> - <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+7"/> - <location filename="../src/qt3support/network/q3http.cpp" line="+3"/> - <source>Connection closed</source> - <translation>Соединение закрыто</translation> + <location line="+97"/> + <location line="+48"/> + <location filename="../src/qt3support/network/q3http.cpp" line="+40"/> + <location line="+47"/> + <source>Invalid HTTP chunked body</source> + <translation>Некорректное HTTP-фрагментирование данных</translation> + </message> + <message> + <location line="+38"/> + <source>Error writing response to device</source> + <translation>Ошибка записи ответа на устройство</translation> </message> <message> - <location filename="../src/network/access/qhttp.cpp" line="-135"/> + <location line="-173"/> <source>Proxy authentication required</source> <translation>Требуется авторизация на прокси-сервере</translation> </message> @@ -2760,11 +3926,6 @@ Do you want to delete it anyway?</source> <translation>Требуется авторизация</translation> </message> <message> - <location line="-159"/> - <source>Connection refused (or timed out)</source> - <translation>В соединении отказано (или время ожидания истекло)</translation> - </message> - <message> <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+6"/> <source>Proxy requires authentication</source> <translation>Прокси-сервер требует авторизацию</translation> @@ -2780,17 +3941,22 @@ Do you want to delete it anyway?</source> <translation>Данные повреждены</translation> </message> <message> - <location line="+3"/> + <location line="+6"/> + <source>SSL handshake failed</source> + <translation>Квитирование SSL не удалось</translation> + </message> + <message> + <location line="-3"/> <source>Unknown protocol specified</source> <translation>Указан неизвестный протокол</translation> </message> <message> - <location line="+3"/> - <source>SSL handshake failed</source> - <translation>Квитирование SSL не удалось</translation> + <location filename="../src/network/access/qhttp.cpp" line="-159"/> + <source>Connection refused (or timed out)</source> + <translation>В соединении отказано (или время ожидания истекло)</translation> </message> <message> - <location filename="../src/network/access/qhttp.cpp" line="-2266"/> + <location line="-2266"/> <source>HTTPS connection requested but SSL support not compiled in</source> <translation>Запрошено соединение по протоколу HTTPS, но поддержка SSL не скомпилирована</translation> </message> @@ -2959,7 +4125,7 @@ Do you want to delete it anyway?</source> <context> <name>QIODevice</name> <message> - <location filename="../src/corelib/global/qglobal.cpp" line="+2094"/> + <location filename="../src/corelib/global/qglobal.cpp" line="+2120"/> <source>Permission denied</source> <translation>Доступ запрещён</translation> </message> @@ -2979,7 +4145,7 @@ Do you want to delete it anyway?</source> <translation>Нет свободного места на устройстве</translation> </message> <message> - <location filename="../src/corelib/io/qiodevice.cpp" line="+1565"/> + <location filename="../src/corelib/io/qiodevice.cpp" line="+1598"/> <source>Unknown error</source> <translation>Неизвестная ошибка</translation> </message> @@ -2987,7 +4153,7 @@ Do you want to delete it anyway?</source> <context> <name>QInputContext</name> <message> - <location filename="../src/gui/inputmethod/qinputcontextfactory.cpp" line="+256"/> + <location filename="../src/gui/inputmethod/qinputcontextfactory.cpp" line="+301"/> <source>XIM</source> <translation>Метод ввода X-сервера</translation> </message> @@ -3030,27 +4196,27 @@ Do you want to delete it anyway?</source> <message> <location filename="../src/corelib/plugin/qlibrary.cpp" line="+383"/> <source>Could not mmap '%1': %2</source> - <translation>Не удалось выполнить mmap '%1': %2</translation> + <translation>Не удалось выполнить mmap "%1": %2</translation> </message> <message> <location line="+22"/> <source>Plugin verification data mismatch in '%1'</source> - <translation>Проверочная информация для модуля '%1' не совпадает</translation> + <translation>Проверочная информация для модуля "%1" не совпадает</translation> </message> <message> <location line="+6"/> <source>Could not unmap '%1': %2</source> - <translation>Не удалось выполнить unmap '%1': %2</translation> + <translation>Не удалось выполнить unmap "%1": %2</translation> </message> <message> - <location line="+345"/> + <location line="+375"/> <source>The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5]</source> - <translation>Модуль '%1' использует несоместимую библиотеку Qt. (%2.%3.%4) [%5]</translation> + <translation>Модуль "%1" использует несоместимую библиотеку Qt. (%2.%3.%4) [%5]</translation> </message> <message> <location line="+20"/> <source>The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3"</source> - <translation>Модуль '%1' использует несоместимую библиотеку Qt. Ожидается ключ "%2", но получен ключ "%3"</translation> + <translation>Модуль "%1" использует несоместимую библиотеку Qt. Ожидается ключ "%2", но получен ключ "%3"</translation> </message> <message> <location line="+365"/> @@ -3058,7 +4224,8 @@ Do you want to delete it anyway?</source> <translation>Неизвестная ошибка</translation> </message> <message> - <location line="-402"/> + <location line="-540"/> + <location line="+138"/> <location filename="../src/corelib/plugin/qpluginloader.cpp" line="+343"/> <source>The shared library was not found.</source> <translation>Динамическая библиотека не найдена.</translation> @@ -3066,12 +4233,12 @@ Do you want to delete it anyway?</source> <message> <location line="+2"/> <source>The file '%1' is not a valid Qt plugin.</source> - <translation>Файл '%1' - не является корректным модулем Qt.</translation> + <translation>Файл "%1" - не является корректным модулем Qt.</translation> </message> <message> <location line="+43"/> <source>The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.)</source> - <translation>Модуль '%1' использует несоместимую библиотеку Qt. (Невозможно совместить релизные и отладочные библиотеки.)</translation> + <translation>Модуль "%1" использует несоместимую библиотеку Qt. (Невозможно совместить релизные и отладочные библиотеки.)</translation> </message> <message> <location filename="../src/corelib/plugin/qlibrary_unix.cpp" line="+236"/> @@ -3095,7 +4262,12 @@ Do you want to delete it anyway?</source> <context> <name>QLineEdit</name> <message> - <location filename="../src/gui/widgets/qlineedit.cpp" line="+2072"/> + <location filename="../src/gui/widgets/qlineedit.cpp" line="+2116"/> + <source>Select All</source> + <translation>Выделить всё</translation> + </message> + <message> + <location line="-40"/> <source>&Undo</source> <translation>&Отменить действие</translation> </message> @@ -3124,11 +4296,6 @@ Do you want to delete it anyway?</source> <source>Delete</source> <translation>Удалить</translation> </message> - <message> - <location line="+8"/> - <source>Select All</source> - <translation>Выделить всё</translation> - </message> </context> <context> <name>QLocalServer</name> @@ -3171,7 +4338,7 @@ Do you want to delete it anyway?</source> <message> <location line="+3"/> <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/> - <location filename="../src/network/socket/qlocalsocket_win.cpp" line="+80"/> + <location filename="../src/network/socket/qlocalsocket_win.cpp" line="+79"/> <location line="+59"/> <source>%1: Invalid name</source> <translation>%1: Некорректное имя</translation> @@ -3228,7 +4395,7 @@ Do you want to delete it anyway?</source> <context> <name>QMYSQLDriver</name> <message> - <location filename="../src/sql/drivers/mysql/qsql_mysql.cpp" line="+1270"/> + <location filename="../src/sql/drivers/mysql/qsql_mysql.cpp" line="+1287"/> <source>Unable to open database '</source> <translation>Невозможно открыть базу данных '</translation> </message> @@ -3380,12 +4547,7 @@ Do you want to delete it anyway?</source> <translation>&Закрыть</translation> </message> <message> - <location line="-787"/> - <source>- [%1]</source> - <translation>- [%1]</translation> - </message> - <message> - <location line="+58"/> + <location line="-729"/> <source>Maximize</source> <translation>Распахнуть</translation> </message> @@ -3414,6 +4576,11 @@ Do you want to delete it anyway?</source> <source>Menu</source> <translation>Меню</translation> </message> + <message> + <location line="-79"/> + <source>- [%1]</source> + <translation>- [%1]</translation> + </message> </context> <context> <name>QMenu</name> @@ -3440,7 +4607,7 @@ Do you want to delete it anyway?</source> <context> <name>QMenuBar</name> <message> - <location filename="../src/gui/widgets/qmenu_symbian.cpp" line="+436"/> + <location filename="../src/gui/widgets/qmenu_symbian.cpp" line="+456"/> <source>Actions</source> <translation>Действия</translation> </message> @@ -3448,12 +4615,7 @@ Do you want to delete it anyway?</source> <context> <name>QMessageBox</name> <message> - <location filename="../src/gui/dialogs/qmessagebox.cpp" line="-1116"/> - <source>Help</source> - <translation>Справка</translation> - </message> - <message> - <location line="-848"/> + <location filename="../src/gui/dialogs/qmessagebox.cpp" line="-1964"/> <location line="+847"/> <location filename="../src/gui/dialogs/qmessagebox.h" line="-52"/> <location line="+8"/> @@ -3461,30 +4623,35 @@ Do you want to delete it anyway?</source> <translation>Закрыть</translation> </message> <message> - <location line="+513"/> + <location line="+477"/> + <source><h3>About Qt</h3><p>This program uses Qt version %1.</p></source> + <translation><h3>О Qt</h3><p>Данная программа использует Qt версии %1.</p></translation> + </message> + <message> + <location line="+5"/> + <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> + <translation><p>Qt - это инструментарий для разработки кроссплатформенных приложений на C++.</p><p>Qt предоставляет совместимость на уровне исходных текстов между MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux и всеми популярными коммерческими вариантами Unix. Также Qt доступна для встраиваемых устройств в виде Qt для Embedded Linux и Qt для Windows CE.</p><p>Qt доступна под тремя различными лицензиями, разработанными для удовлетворения различных требований.</p><p>Qt под нашей коммерческой лицензией предназначена для развития проприетарного/коммерческого программного обеспечения, когда Вы не желаете предоставлять исходные тексты третьим сторонам, или в случае невозможности принятия условий лицензий GNU LGPL версии 2.1 или GNU GPL версии 3.0.</p><p>Qt под лицензией GNU LGPL версии 2.1 предназначена для разработки программного обеспечения с открытыми исходными текстами или коммерческого программного обеспечения при соблюдении условий лицензии GNU LGPL версии 2.1.</p><p>Qt под лицензией GNU General Public License версии 3.0 предназначена для разработки программных приложений в тех случаях, когда Вы хотели бы использовать такие приложения в сочетании с программным обеспечением на условиях лицензии GNU GPL с версии 3.0 или если Вы готовы соблюдать условия лицензии GNU GPL версии 3.0.</p><p>Обратитесь к <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> для обзора лицензий Qt.</p><p>Copyright (C) 2010 Корпорация Nokia и/или её дочерние подразделения.</p><p>Qt - продукт компании Nokia. Обратитесь к <a href="http://qt.nokia.com/">qt.nokia.com</a> для получения дополнительной информации.</p></translation> + </message> + <message> + <location line="+31"/> <source>About Qt</source> <translation>О Qt</translation> </message> <message> - <location line="-1614"/> + <location line="-512"/> + <source>Help</source> + <translation>Справка</translation> + </message> + <message> + <location line="-1129"/> <source>Show Details...</source> <translation>Показать подробности...</translation> </message> <message> - <location line="+1"/> + <location line="+0"/> <source>Hide Details...</source> <translation>Скрыть подробности...</translation> </message> - <message> - <location line="+1577"/> - <source><h3>About Qt</h3><p>This program uses Qt version %1.</p></source> - <translation><h3>О Qt</h3><p>Данная программа использует Qt версии %1.</p></translation> - </message> - <message> - <location line="+5"/> - <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> - <translation><p>Qt - это инструментарий для разработки кроссплатформенных приложений на C++.</p><p>Qt предоставляет совместимость на уровне исходных текстов между MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux и всеми популярными коммерческими вариантами Unix. Также Qt доступна для встраиваемых устройств в виде Qt для Embedded Linux и Qt для Windows CE.</p><p>Qt доступна под тремя различными лицензиями, разработанными для удовлетворения различных требований.</p><p>Qt под нашей коммерческой лицензией предназначена для развития проприетарного/коммерческого программного обеспечения, когда Вы не желаете предоставлять исходные тексты третьим сторонам, или в случае невозможности принятия условий лицензий GNU LGPL версии 2.1 или GNU GPL версии 3.0.</p><p>Qt под лицензией GNU LGPL версии 2.1 предназначена для разработки программного обеспечения с открытыми исходными текстами или коммерческого программного обеспечения при соблюдении условий лицензии GNU LGPL версии 2.1.</p><p>Qt под лицензией GNU General Public License версии 3.0 предназначена для разработки программных приложений в тех случаях, когда Вы хотели бы использовать такие приложения в сочетании с программным обеспечением на условиях лицензии GNU GPL с версии 3.0 или если Вы готовы соблюдать условия лицензии GNU GPL версии 3.0.</p><p>Обратитесь к <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> для обзора лицензий Qt.</p><p>Copyright (C) 2010 Корпорация Nokia и/или её дочерние подразделения.</p><p>Qt - продукт компании Nokia. Обратитесь к <a href="http://qt.nokia.com/">qt.nokia.com</a> для получения дополнительной информации.</p></translation> - </message> </context> <context> <name>QMultiInputContext</name> @@ -3499,19 +4666,18 @@ Do you want to delete it anyway?</source> <message> <location filename="../src/plugins/inputmethods/imsw-multi/qmultiinputcontextplugin.cpp" line="+95"/> <source>Multiple input method switcher</source> - <translation type="unfinished">Переключатель режима множественного ввода</translation> + <translation>Переключатель режима множественного ввода</translation> </message> <message> <location line="+7"/> <source>Multiple input method switcher that uses the context menu of the text widgets</source> - <translatorcomment>текстовых виджетов <-?-> текстовых редакторов</translatorcomment> - <translation type="unfinished">Переключатель режима множественного ввода, используемый в контекстном меню текстовых виджетов</translation> + <translation>Переключатель режима множественного ввода, используемый в контекстном меню текстовых редакторов</translation> </message> </context> <context> <name>QNativeSocketEngine</name> <message> - <location filename="../src/network/socket/qnativesocketengine.cpp" line="+206"/> + <location filename="../src/network/socket/qnativesocketengine.cpp" line="+209"/> <source>The remote host closed the connection</source> <translation>Удалённый узел закрыл соединение</translation> </message> @@ -3650,12 +4816,35 @@ Do you want to delete it anyway?</source> </message> </context> <context> + <name>QNetworkAccessDataBackend</name> + <message> + <location filename="../src/network/access/qnetworkaccessdatabackend.cpp" line="+76"/> + <source>Operation not supported on %1</source> + <translation>Операция не поддерживается для %1</translation> + </message> + <message> + <location line="+25"/> + <source>Invalid URI: %1</source> + <translation>Некорректный URI: %1</translation> + </message> +</context> +<context> <name>QNetworkAccessDebugPipeBackend</name> <message> <location filename="../src/network/access/qnetworkaccessdebugpipebackend.cpp" line="+195"/> <source>Write error writing to %1: %2</source> <translation>Ошибка записи в %1: %2</translation> </message> + <message> + <location line="+60"/> + <source>Socket error on %1: %2</source> + <translation>Ошика сокета для %1: %2</translation> + </message> + <message> + <location line="+15"/> + <source>Remote host closed the connection prematurely on %1</source> + <translation>Удалённый узел неожиданно прервал соединение для %1</translation> + </message> </context> <context> <name>QNetworkAccessFileBackend</name> @@ -3719,48 +4908,123 @@ Do you want to delete it anyway?</source> <context> <name>QNetworkAccessHttpBackend</name> <message> - <location filename="../src/network/access/qnetworkaccesshttpbackend.cpp" line="+599"/> + <location filename="../src/network/access/qnetworkaccesshttpbackend.cpp" line="+652"/> <source>No suitable proxy found</source> <translation>Подходящий прокси-сервер не найден</translation> </message> </context> <context> + <name>QNetworkAccessManager</name> + <message> + <location filename="../src/network/access/qnetworkreplyimpl.cpp" line="+942"/> + <source>Network access is disabled.</source> + <translation>Доступ в сеть отключён.</translation> + </message> +</context> +<context> <name>QNetworkReply</name> <message> - <location line="+101"/> + <location filename="../src/network/access/qnetworkaccesshttpbackend.cpp" line="+100"/> <source>Error downloading %1 - server replied: %2</source> <translation>Ошибка загрузки %1 - ответ сервера: %2</translation> </message> <message> - <location filename="../src/network/access/qnetworkreplyimpl.cpp" line="+80"/> + <location filename="../src/network/access/qnetworkreplyimpl.cpp" line="-860"/> <source>Protocol "%1" is unknown</source> <translation>Неизвестный протокол "%1"</translation> </message> + <message> + <location line="+192"/> + <source>Network session error.</source> + <translation>Ошибка сетевой сессии.</translation> + </message> + <message> + <location line="+352"/> + <source>Temporary network failure.</source> + <translation>Временная ошибка сети.</translation> + </message> </context> <context> <name>QNetworkReplyImpl</name> <message> - <location line="+525"/> + <location line="+120"/> <location line="+28"/> <source>Operation canceled</source> <translation>Операция отменена</translation> </message> </context> <context> - <name>QOCIDriver</name> + <name>QNetworkSession</name> <message> - <location filename="../src/sql/drivers/oci/qsql_oci.cpp" line="+2083"/> - <source>Unable to logon</source> - <translation>Невозможно авторизоваться</translation> + <location filename="../src/network/bearer/qnetworksession.cpp" line="+449"/> + <source>Invalid configuration.</source> + <translation>Некорректная конфигурация.</translation> + </message> +</context> +<context> + <name>QNetworkSessionPrivateImpl</name> + <message> + <location filename="../src/plugins/bearer/icd/qnetworksession_impl.cpp" line="+1005"/> + <source>Roaming error</source> + <translatorcomment>или перемещения?</translatorcomment> + <translation type="unfinished">Ошибка роуминга</translation> + </message> + <message> + <location line="+3"/> + <source>Session aborted by user or system</source> + <translation>Сессия прервана пользователем или системой</translation> </message> <message> - <location line="-144"/> + <location line="+4"/> + <source>Unidentified Error</source> + <translation>Неопределённая ошибка</translation> + </message> + <message> + <location filename="../src/plugins/bearer/qnetworksession_impl.cpp" line="+272"/> + <location filename="../src/plugins/bearer/symbian/qnetworksession_impl.cpp" line="+280"/> + <source>Unknown session error.</source> + <translation>Неизвестная ошибка сессии.</translation> + </message> + <message> + <location line="+2"/> + <location filename="../src/plugins/bearer/symbian/qnetworksession_impl.cpp" line="+2"/> + <source>The session was aborted by the user or system.</source> + <translation>Сессия была прервана пользователем или системой.</translation> + </message> + <message> + <location line="+2"/> + <location filename="../src/plugins/bearer/symbian/qnetworksession_impl.cpp" line="+2"/> + <source>The requested operation is not supported by the system.</source> + <translation>Требуемая операция не поддерживается системой.</translation> + </message> + <message> + <location line="+2"/> + <location filename="../src/plugins/bearer/symbian/qnetworksession_impl.cpp" line="+2"/> + <source>The specified configuration cannot be used.</source> + <translation>Невозможно использовать указанную конфигурацию.</translation> + </message> + <message> + <location line="+2"/> + <location filename="../src/plugins/bearer/symbian/qnetworksession_impl.cpp" line="+2"/> + <source>Roaming was aborted or is not possible.</source> + <translation type="unfinished">Роуминг прерван или невозможен.</translation> + </message> +</context> +<context> + <name>QOCIDriver</name> + <message> + <location filename="../src/sql/drivers/oci/qsql_oci.cpp" line="+1944"/> <source>Unable to initialize</source> <comment>QOCIDriver</comment> <translation>Невозможно инициализировать</translation> </message> <message> - <location line="+215"/> + <location line="+144"/> + <source>Unable to logon</source> + <translation>Невозможно авторизоваться</translation> + </message> + <message> + <location line="+71"/> <source>Unable to begin transaction</source> <translation>Невозможно начать транзакцию</translation> </message> @@ -3823,12 +5087,12 @@ Do you want to delete it anyway?</source> <context> <name>QODBCDriver</name> <message> - <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="+1806"/> + <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="+1888"/> <source>Unable to connect</source> <translation>Невозможно соединиться</translation> </message> <message> - <location line="+238"/> + <location line="+269"/> <source>Unable to disable autocommit</source> <translation>Невозможно отключить автозавершение транзакций</translation> </message> @@ -3848,7 +5112,7 @@ Do you want to delete it anyway?</source> <translation>Невозможно включить автозавершение транзакций</translation> </message> <message> - <location line="-281"/> + <location line="-312"/> <source>Unable to connect - Driver doesn't support all functionality required</source> <translation>Невозможно соединиться - Драйвер не поддерживает требуемый функционал</translation> </message> @@ -3856,19 +5120,19 @@ Do you want to delete it anyway?</source> <context> <name>QODBCResult</name> <message> - <location line="-937"/> + <location line="-941"/> <location line="+351"/> <source>QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration</source> - <translation>QODBCResult::reset: Невозможно установить 'SQL_CURSOR_STATIC' атрибутом выражение. Проверьте настройки драйвера ODBC</translation> + <translation>QODBCResult::reset: Невозможно установить "SQL_CURSOR_STATIC" атрибутом выражение. Проверьте настройки драйвера ODBC</translation> </message> <message> <location line="-334"/> - <location line="+628"/> + <location line="+627"/> <source>Unable to execute statement</source> <translation>Невозможно выполнить выражение</translation> </message> <message> - <location line="-547"/> + <location line="-546"/> <source>Unable to fetch next</source> <translation>Невозможно получить следующую строку</translation> </message> @@ -3878,19 +5142,19 @@ Do you want to delete it anyway?</source> <translation>Невозможно подготовить выражение</translation> </message> <message> - <location line="+268"/> + <location line="+267"/> <source>Unable to bind variable</source> <translation>Невозможно привязать значение</translation> </message> <message> <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+189"/> - <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="-467"/> - <location line="+576"/> + <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="-466"/> + <location line="+578"/> <source>Unable to fetch last</source> <translation>Невозможно получить последнюю строку</translation> </message> <message> - <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="-670"/> + <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="-672"/> <source>Unable to fetch</source> <translation>Невозможно получить данные</translation> </message> @@ -3908,41 +5172,27 @@ Do you want to delete it anyway?</source> <context> <name>QObject</name> <message> - <location filename="../src/network/kernel/qhostinfo_unix.cpp" line="-97"/> - <source>Invalid hostname</source> - <translation>Некорректное имя узла</translation> - </message> - <message> - <location filename="../src/network/access/qnetworkaccessdatabackend.cpp" line="+74"/> - <source>Operation not supported on %1</source> - <translation>Операция не поддерживается для %1</translation> - </message> - <message> - <location line="+57"/> - <source>Invalid URI: %1</source> - <translation>Некорректный URI: %1</translation> - </message> - <message> - <location filename="../src/network/access/qnetworkaccessdebugpipebackend.cpp" line="+60"/> - <source>Socket error on %1: %2</source> - <translation>Ошика сокета для %1: %2</translation> + <location filename="../src/declarative/util/qdeclarativexmllistmodel.cpp" line="-241"/> + <source>"%1" duplicates a previous role name and will be disabled.</source> + <translation>"%1" повторяет имя предыдущей роли и не будет использовано.</translation> </message> <message> - <location line="+15"/> - <source>Remote host closed the connection prematurely on %1</source> - <translation>Удалённый узел неожиданно прервал соединение для %1</translation> + <location line="+515"/> + <location line="+4"/> + <source>invalid query: "%1"</source> + <translation>Некорректный запрос: "%1"</translation> </message> <message> - <location filename="../src/network/kernel/qhostinfo.cpp" line="+168"/> - <location filename="../src/network/kernel/qhostinfo_unix.cpp" line="+0"/> - <source>No host name given</source> - <translation>Имя узла не задано</translation> + <location filename="../src/3rdparty/phonon/phonon/pulsesupport.cpp" line="+162"/> + <location line="+11"/> + <source>PulseAudio Sound Server</source> + <translation>Звуковой сервер PulseAudio</translation> </message> </context> <context> <name>QPPDOptionsModel</name> <message> - <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+1197"/> + <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+1238"/> <source>Name</source> <translation>Имя</translation> </message> @@ -4134,7 +5384,22 @@ Do you want to delete it anyway?</source> <translation>неизвестно</translation> </message> <message> - <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="+329"/> + <location filename="../src/gui/dialogs/qprintdialog_win.cpp" line="+272"/> + <source>OK</source> + <translation>Закрыть</translation> + </message> + <message> + <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="+379"/> + <source>Print all</source> + <translation>Все страницы</translation> + </message> + <message> + <location line="+2"/> + <source>Print range</source> + <translation>Диапазон страниц</translation> + </message> + <message> + <location line="-48"/> <source>A0 (841 x 1189 mm)</source> <translation>A0 (841 x 1189 мм)</translation> </message> @@ -4154,12 +5419,7 @@ Do you want to delete it anyway?</source> <translation>A3 (297 x 420 мм)</translation> </message> <message> - <location line="+1"/> - <source>A4 (210 x 297 mm, 8.26 x 11.7 inches)</source> - <translation>A4 (210 x 297 мм, 8.26 x 11.7 дюймов)</translation> - </message> - <message> - <location line="+1"/> + <location line="+2"/> <source>A5 (148 x 210 mm)</source> <translation>A5 (148 x 210 мм)</translation> </message> @@ -4209,12 +5469,7 @@ Do you want to delete it anyway?</source> <translation>B4 (250 x 353 мм)</translation> </message> <message> - <location line="+1"/> - <source>B5 (176 x 250 mm, 6.93 x 9.84 inches)</source> - <translation>B5 (176 x 250 мм, 6.93 x 9.84 дюймов)</translation> - </message> - <message> - <location line="+1"/> + <location line="+2"/> <source>B6 (125 x 176 mm)</source> <translation>B6 (125 x 176 мм)</translation> </message> @@ -4249,12 +5504,7 @@ Do you want to delete it anyway?</source> <translation>DLE (110 x 220 мм)</translation> </message> <message> - <location line="+1"/> - <source>Executive (7.5 x 10 inches, 191 x 254 mm)</source> - <translation>Executive (191 x 254 мм, 7.5 x 10 дюймов)</translation> - </message> - <message> - <location line="+1"/> + <location line="+2"/> <source>Folio (210 x 330 mm)</source> <translation>Folio (210 x 330 мм)</translation> </message> @@ -4264,54 +5514,64 @@ Do you want to delete it anyway?</source> <translation>Ledger (432 x 279 мм)</translation> </message> <message> - <location line="+1"/> - <source>Legal (8.5 x 14 inches, 216 x 356 mm)</source> - <translation>Legal (216 x 356 мм, 8.5 x 14 дюймов)</translation> + <location line="+3"/> + <source>Tabloid (279 x 432 mm)</source> + <translation>Tabloid (279 x 432 мм)</translation> </message> <message> <location line="+1"/> - <source>Letter (8.5 x 11 inches, 216 x 279 mm)</source> - <translation>Letter (216 x 279 мм, 8.5 x 11 дюймов)</translation> + <source>US Common #10 Envelope (105 x 241 mm)</source> + <translation>Конверт US #10 (105x241 мм)</translation> </message> <message> - <location line="+1"/> - <source>Tabloid (279 x 432 mm)</source> - <translation>Tabloid (279 x 432 мм)</translation> + <location line="+20"/> + <source>Print current page</source> + <translation>Текущая страница</translation> + </message> + <message> + <location line="-45"/> + <source>A4 (210 x 297 mm, 8.26 x 11.7 inches)</source> + <translation>A4 (210 x 297 мм, 8.26 x 11.7 дюймов)</translation> + </message> + <message> + <location line="+11"/> + <source>B5 (176 x 250 mm, 6.93 x 9.84 inches)</source> + <translation>B5 (176 x 250 мм, 6.93 x 9.84 дюймов)</translation> + </message> + <message> + <location line="+8"/> + <source>Executive (7.5 x 10 inches, 191 x 254 mm)</source> + <translation>Executive (191 x 254 мм, 7.5 x 10 дюймов)</translation> + </message> + <message> + <location line="+3"/> + <source>Legal (8.5 x 14 inches, 216 x 356 mm)</source> + <translation>Legal (216 x 356 мм, 8.5 x 14 дюймов)</translation> </message> <message> <location line="+1"/> - <source>US Common #10 Envelope (105 x 241 mm)</source> - <translation>Конверт US #10 (105x241 мм)</translation> + <source>Letter (8.5 x 11 inches, 216 x 279 mm)</source> + <translation>Letter (216 x 279 мм, 8.5 x 11 дюймов)</translation> </message> <message> - <location filename="../src/gui/dialogs/qprintdialog_win.cpp" line="+266"/> - <source>OK</source> - <translation>Закрыть</translation> + <location line="+20"/> + <source>Print selection</source> + <translation>Выделенный фрагмент</translation> </message> <message> - <location filename="../src/gui/dialogs/qabstractprintdialog.cpp" line="+112"/> + <location filename="../src/gui/dialogs/qabstractprintdialog.cpp" line="+113"/> <location line="+13"/> <location filename="../src/gui/dialogs/qprintdialog_win.cpp" line="-2"/> <source>Print</source> <translation>Печать</translation> </message> <message> - <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-359"/> + <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-392"/> <source>Print To File ...</source> <translation>Печать в файл ...</translation> </message> <message> - <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="+19"/> - <source>Print range</source> - <translation>Печатать диапазон</translation> - </message> - <message> - <location line="-2"/> - <source>Print all</source> - <translation>Печатать все</translation> - </message> - <message> - <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+82"/> + <location line="+82"/> <source>File %1 is not writable. Please choose a different file name.</source> <translation>%1 недоступен для записи. @@ -4325,7 +5585,7 @@ Do you want to overwrite it?</source> Хотите заменить его?</translation> </message> <message> - <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="-227"/> + <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="-232"/> <source>File exists</source> <translation>Файл существует</translation> </message> @@ -4335,11 +5595,6 @@ Do you want to overwrite it?</source> <translation><qt>Хотите заменить?</qt></translation> </message> <message> - <location line="+227"/> - <source>Print selection</source> - <translation>Выделенный фрагмент</translation> - </message> - <message> <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-8"/> <source>%1 is a directory. Please choose a different file name.</source> @@ -4347,6 +5602,11 @@ Please choose a different file name.</source> Выберите другое имя файла.</translation> </message> <message> + <location filename="../src/gui/dialogs/qprintdialog_win.cpp" line="+1"/> + <source>The 'From' value cannot be greater than the 'To' value.</source> + <translation>Значение "с" не может быть больше значения "по".</translation> + </message> + <message> <location filename="../src/gui/dialogs/qpagesetupdialog_unix.cpp" line="-232"/> <source>A0</source> <translation>A0</translation> @@ -4502,23 +5762,18 @@ Please choose a different file name.</source> <translation>Пользовательский</translation> </message> <message> - <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-523"/> + <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-530"/> <location line="+68"/> <source>&Options >></source> <translation>&Параметры >></translation> </message> <message> - <location line="-63"/> - <source>&Print</source> - <translation>&Печать</translation> - </message> - <message> - <location line="+67"/> + <location line="+4"/> <source>&Options <<</source> <translation>&Параметры <<</translation> </message> <message> - <location line="+253"/> + <location line="+260"/> <source>Print to File (PDF)</source> <translation>Печать в файл (PDF)</translation> </message> @@ -4538,26 +5793,20 @@ Please choose a different file name.</source> <translation>Запись %1 файла</translation> </message> <message> - <location filename="../src/gui/dialogs/qprintdialog_win.cpp" line="+1"/> - <source>The 'From' value cannot be greater than the 'To' value.</source> - <translation>Значение 'от' не может быть больше значения 'до'.</translation> + <location line="-376"/> + <source>&Print</source> + <translation>&Печать</translation> </message> </context> <context> <name>QPrintPreviewDialog</name> <message> - <location filename="../src/gui/dialogs/qabstractpagesetupdialog.cpp" line="+68"/> - <location line="+12"/> - <source>Page Setup</source> - <translation>Параметры страницы</translation> - </message> - <message> <location filename="../src/gui/dialogs/qprintpreviewdialog.cpp" line="+249"/> <source>%1%</source> <translation>%1%</translation> </message> <message> - <location line="+71"/> + <location line="+84"/> <source>Print Preview</source> <translation>Просмотр печати</translation> </message> @@ -4651,6 +5900,12 @@ Please choose a different file name.</source> <source>Export to PostScript</source> <translation>Экспорт в Postscript</translation> </message> + <message> + <location filename="../src/gui/dialogs/qabstractpagesetupdialog.cpp" line="+68"/> + <location line="+12"/> + <source>Page Setup</source> + <translation>Параметры страницы</translation> + </message> </context> <context> <name>QPrintPropertiesWidget</name> @@ -4695,12 +5950,12 @@ Please choose a different file name.</source> <message> <location/> <source>Pages from</source> - <translation>Страницы от</translation> + <translation>Страницы с</translation> </message> <message> <location/> <source>to</source> - <translation>до</translation> + <translation>по</translation> </message> <message> <location/> @@ -4767,6 +6022,11 @@ Please choose a different file name.</source> <source>Short side</source> <translation>По короткой стороне</translation> </message> + <message> + <location/> + <source>Current Page</source> + <translation>Текущая страница</translation> + </message> </context> <context> <name>QPrintWidget</name> @@ -4849,7 +6109,7 @@ Please choose a different file name.</source> <translation>Время на операцию с процессом истекло</translation> </message> <message> - <location filename="../src/corelib/io/qprocess.cpp" line="+856"/> + <location filename="../src/corelib/io/qprocess.cpp" line="+866"/> <location line="+52"/> <location filename="../src/corelib/io/qprocess_win.cpp" line="-211"/> <location line="+50"/> @@ -5000,7 +6260,7 @@ Please choose a different file name.</source> <context> <name>QSQLiteDriver</name> <message> - <location filename="../src/sql/drivers/sqlite/qsql_sqlite.cpp" line="+538"/> + <location filename="../src/sql/drivers/sqlite/qsql_sqlite.cpp" line="+539"/> <source>Error opening database</source> <translation>Ошибка открытия базы данных</translation> </message> @@ -5028,8 +6288,8 @@ Please choose a different file name.</source> <context> <name>QSQLiteResult</name> <message> - <location line="-395"/> - <location line="+62"/> + <location line="-396"/> + <location line="+63"/> <location line="+8"/> <source>Unable to fetch row</source> <translation>Невозможно получить строку</translation> @@ -5055,7 +6315,7 @@ Please choose a different file name.</source> <translation>Количество параметров не совпадает</translation> </message> <message> - <location line="-200"/> + <location line="-201"/> <source>No query</source> <translation>Отсутствует запрос</translation> </message> @@ -5070,7 +6330,7 @@ Please choose a different file name.</source> <message> <location line="+2"/> <source>Location</source> - <translation>Расположение</translation> + <translation>Размещение</translation> </message> <message> <location line="+2"/> @@ -5286,7 +6546,7 @@ Please choose a different file name.</source> <context> <name>QScriptDebuggerLocalsModel</name> <message> - <location filename="../src/scripttools/debugging/qscriptdebuggerlocalsmodel.cpp" line="+872"/> + <location filename="../src/scripttools/debugging/qscriptdebuggerlocalsmodel.cpp" line="+897"/> <source>Name</source> <translation>Название</translation> </message> @@ -5486,12 +6746,7 @@ Please choose a different file name.</source> <context> <name>QSharedMemory</name> <message> - <location filename="../src/corelib/kernel/qsharedmemory.cpp" line="+223"/> - <source>%1: unable to set key on lock</source> - <translation>%1: невозможно установить ключ на блокировку</translation> - </message> - <message> - <location line="+81"/> + <location filename="../src/corelib/kernel/qsharedmemory.cpp" line="+304"/> <source>%1: create size is less then 0</source> <translation>%1: размер меньше нуля</translation> </message> @@ -5545,30 +6800,30 @@ Please choose a different file name.</source> <translation>%1: пустой ключ</translation> </message> <message> - <location line="-31"/> - <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="-16"/> - <source>%1: doesn't exist</source> - <translation>%1: не существует</translation> - </message> - <message> - <location line="+39"/> - <source>%1: UNIX key file doesn't exist</source> - <translation>%1: специфический ключ UNIX не существует</translation> - </message> - <message> - <location line="+7"/> + <location line="+15"/> <source>%1: ftok failed</source> <translation>%1: ошибка ftok</translation> </message> <message> <location filename="../src/corelib/kernel/qsharedmemory_symbian.cpp" line="+56"/> <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+51"/> - <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+31"/> + <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+15"/> <source>%1: unable to make key</source> <translation>%1: невозможно создать ключ</translation> </message> <message> - <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+20"/> + <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="-97"/> + <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="-31"/> + <source>%1: doesn't exist</source> + <translation>%1: не существует</translation> + </message> + <message> + <location line="+39"/> + <source>%1: UNIX key file doesn't exist</source> + <translation>%1: специфический ключ UNIX не существует</translation> + </message> + <message> + <location line="+78"/> <source>%1: system-imposed size restrictions</source> <translation>%1: системой наложены ограничения на размер</translation> </message> @@ -5579,7 +6834,7 @@ Please choose a different file name.</source> </message> <message> <location filename="../src/corelib/kernel/qsharedmemory_symbian.cpp" line="-67"/> - <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="-27"/> + <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+4"/> <source>%1: invalid size</source> <translation>%1: некорректный размер</translation> </message> @@ -5594,12 +6849,18 @@ Please choose a different file name.</source> <source>%1: size query failed</source> <translation>%1: не удалось запросить размер</translation> </message> + <message> + <location filename="../src/corelib/kernel/qsharedmemory.cpp" line="-271"/> + <source>%1: unable to set key on lock</source> + <translation>%1: невозможно установить ключ блокировки</translation> + </message> </context> <context> <name>QShortcut</name> <message> - <location filename="../src/gui/kernel/qkeysequence.cpp" line="+393"/> + <location filename="../src/gui/kernel/qkeysequence.cpp" line="+396"/> <source>Space</source> + <extracomment>This and all following "incomprehensible" strings in QShortcut context are key names. Please use the localized names appearing on actual keyboards or whatever is commonly used.</extracomment> <translation type="unfinished">Пробел</translation> </message> <message> @@ -5775,12 +7036,12 @@ Please choose a different file name.</source> <message> <location line="+1"/> <source>Treble Up</source> - <translation type="unfinished">Высокие частоты выше</translation> + <translation type="unfinished">ВЧ выше</translation> </message> <message> <location line="+1"/> <source>Treble Down</source> - <translation type="unfinished">Высокие частоты ниже</translation> + <translation type="unfinished">ВЧ ниже</translation> </message> <message> <location line="+1"/> @@ -5920,32 +7181,32 @@ Please choose a different file name.</source> <message> <location line="+1"/> <source>Monitor Brightness Up</source> - <translation type="unfinished">Яркость монитора выше</translation> + <translation type="unfinished">Увеличить яркость монитора</translation> </message> <message> <location line="+1"/> <source>Monitor Brightness Down</source> - <translation type="unfinished">Яркость монитора ниже</translation> + <translation type="unfinished">Уменьшить яркость монитора</translation> </message> <message> <location line="+1"/> <source>Keyboard Light On/Off</source> - <translation type="unfinished">Вкл/выкл подсветку клавиатуры</translation> + <translation type="unfinished">Вкл./Откл. подсветку клавиатуры</translation> </message> <message> <location line="+1"/> <source>Keyboard Brightness Up</source> - <translation type="unfinished">Подсветка клавиатуры ярче</translation> + <translation type="unfinished">Увеличить яркость подсветки клавиатуры</translation> </message> <message> <location line="+1"/> <source>Keyboard Brightness Down</source> - <translation type="unfinished">Подсветка клавиатуры бледнее</translation> + <translation type="unfinished">Уменьшить яркость подсветки клавиатуры</translation> </message> <message> <location line="+1"/> <source>Power Off</source> - <translation type="unfinished">Выключение питания</translation> + <translation type="unfinished">Отключение питания</translation> </message> <message> <location line="+1"/> @@ -5955,12 +7216,12 @@ Please choose a different file name.</source> <message> <location line="+1"/> <source>Eject</source> - <translation type="unfinished">Извлечение</translation> + <translation type="unfinished">Извлечь</translation> </message> <message> <location line="+1"/> <source>Screensaver</source> - <translation type="unfinished">Хранитель экрана</translation> + <translation type="unfinished">Экранная заставка</translation> </message> <message> <location line="+1"/> @@ -5970,13 +7231,12 @@ Please choose a different file name.</source> <message> <location line="+1"/> <source>Sleep</source> - <translation type="unfinished">Засыпание</translation> + <translation type="unfinished">Спящий режим</translation> </message> <message> <location line="+1"/> <source>LightBulb</source> - <translatorcomment>лампочка?</translatorcomment> - <translation type="unfinished"></translation> + <translation type="unfinished">Лампочка</translation> </message> <message> <location line="+1"/> @@ -6016,7 +7276,7 @@ Please choose a different file name.</source> <message> <location line="+1"/> <source>Audio Rewind</source> - <translation type="unfinished">Перемотка</translation> + <translation type="unfinished">Перемотка аудио назад</translation> </message> <message> <location line="+1"/> @@ -6419,7 +7679,157 @@ Please choose a different file name.</source> <translation type="unfinished">Системный запрос</translation> </message> <message> - <location line="-18"/> + <location line="+20"/> + <source>Kanji</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Muhenkan</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Henkan</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Romaji</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Hiragana</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Katakana</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Hiragana Katakana</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Zenkaku</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Hankaku</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Zenkaku Hankaku</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Touroku</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Massyo</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Kana Lock</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Kana Shift</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Eisu Shift</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Eisu toggle</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Code input</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Multiple Candidate</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Previous Candidate</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Hangul</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Hangul Start</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Hangul End</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Hangul Hanja</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Hangul Jamo</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Hangul Romaja</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Hangul Jeonja</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Hangul Banja</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Hangul PreHanja</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Hangul PostHanja</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Hangul Special</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-70"/> <location line="+22"/> <source>Select</source> <translation type="unfinished">Выбрать</translation> @@ -6470,7 +7880,7 @@ Please choose a different file name.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+575"/> + <location line="+638"/> <location line="+135"/> <source>Ctrl</source> <translation type="unfinished">Ctrl</translation> @@ -6504,7 +7914,7 @@ Please choose a different file name.</source> <translation type="unfinished">F%1</translation> </message> <message> - <location line="-871"/> + <location line="-934"/> <source>Home Page</source> <translation type="unfinished">Домашняя страница</translation> </message> @@ -6638,7 +8048,7 @@ Please choose a different file name.</source> <translation>Отмена</translation> </message> <message> - <location filename="../src/gui/kernel/qsoftkeymanager_s60.cpp" line="+322"/> + <location filename="../src/gui/kernel/qsoftkeymanager_s60.cpp" line="+321"/> <source>Exit</source> <translation>Выход</translation> </message> @@ -6716,7 +8126,7 @@ Please choose a different file name.</source> <context> <name>QSslSocket</name> <message> - <location filename="../src/network/ssl/qsslsocket_openssl.cpp" line="+546"/> + <location filename="../src/network/ssl/qsslsocket_openssl.cpp" line="+550"/> <source>Unable to write data: %1</source> <translation>Невозможно записать данные: %1</translation> </message> @@ -6736,17 +8146,17 @@ Please choose a different file name.</source> <translation>Ошибка квитирования SSL: %1</translation> </message> <message> - <location line="-521"/> + <location line="-524"/> <source>Error creating SSL context (%1)</source> <translation>Ошибка создания контекста SSL: (%1)</translation> </message> <message> <location line="+25"/> <source>Invalid or empty cipher list (%1)</source> - <translation>Неправильный или пустой список шифров (%1)</translation> + <translation>Некорректный или пустой список шифров (%1)</translation> </message> <message> - <location line="+42"/> + <location line="+45"/> <source>Private key does not certify public key, %1</source> <translation>Закрытый ключ не соответствует открытому ключу, %1</translation> </message> @@ -6761,7 +8171,7 @@ Please choose a different file name.</source> <translation>Ошибка создания сессии SSL: %1</translation> </message> <message> - <location line="-61"/> + <location line="-64"/> <source>Cannot provide a certificate with no key, %1</source> <translation>Невозможно предоставить сертификат без ключа, %1</translation> </message> @@ -6771,7 +8181,7 @@ Please choose a different file name.</source> <translation>Ошибка загрузки локального сертификата, %1</translation> </message> <message> - <location line="+12"/> + <location line="+15"/> <source>Error loading private key, %1</source> <translation>Ошибка загрузки закрытого ключа, %1</translation> </message> @@ -6783,8 +8193,7 @@ Please choose a different file name.</source> <message> <location line="+3"/> <source>The issuer certificate could not be found</source> - <translatorcomment>издателя ?</translatorcomment> - <translation type="unfinished">Не удалось найти сертификат запрашивающей стороны</translation> + <translation>Не удалось найти сертификат издателя</translation> </message> <message> <location line="+3"/> @@ -6814,27 +8223,27 @@ Please choose a different file name.</source> <message> <location line="+3"/> <source>The certificate's notBefore field contains an invalid time</source> - <translation>Поле сертификата notBefore содержит некорректное время</translation> + <translation>Поле notBefore сертификата содержит некорректное время</translation> </message> <message> <location line="+3"/> <source>The certificate's notAfter field contains an invalid time</source> - <translation>Поле сертификата notAfter содержит некорректное время</translation> + <translation>Поле notAfter сертификата содержит некорректное время</translation> </message> <message> <location line="+3"/> <source>The certificate is self-signed, and untrusted</source> - <translation type="unfinished">Самоподписанный сертификат не является заверенным</translation> + <translation>Сертификат самоподписанный и не является заверенным</translation> </message> <message> <location line="+3"/> <source>The root certificate of the certificate chain is self-signed, and untrusted</source> - <translation type="unfinished">Корневой сертификат цепочки сертификатов самоподписанный и не является заверенным</translation> + <translation>Корневой сертификат цепочки сертификатов самоподписанный и не является заверенным</translation> </message> <message> <location line="+3"/> <source>The issuer certificate of a locally looked up certificate could not be found</source> - <translation type="unfinished"></translation> + <translation>Не удалось найти сертификат издателя локального сертификата</translation> </message> <message> <location line="+3"/> @@ -6844,47 +8253,47 @@ Please choose a different file name.</source> <message> <location line="+3"/> <source>One of the CA certificates is invalid</source> - <translation>Один из CA сертификатов некорректный</translation> + <translation>Один из сертификатов центра сертификации некорректен</translation> </message> <message> <location line="+3"/> <source>The basicConstraints path length parameter has been exceeded</source> - <translation type="unfinished">Путь параметра basicConstraints слишком длинный</translation> + <translation>Превышено значение параметра длины пути поля basicConstraints сертификата</translation> </message> <message> <location line="+3"/> <source>The supplied certificate is unsuitable for this purpose</source> - <translation type="unfinished">Представленный сертификат не предназначен для данного использования</translation> + <translation>Представленный сертификат непригоден для данной цели</translation> </message> <message> <location line="+3"/> <source>The root CA certificate is not trusted for this purpose</source> - <translation type="unfinished">Корневой CA сертификат не является заверенным для данного использования</translation> + <translation>Корневой сертификат центра сертификации не является заверенным для данной цели</translation> </message> <message> <location line="+3"/> <source>The root CA certificate is marked to reject the specified purpose</source> - <translation type="unfinished">Корневой CA сертификат отмечен как 'отказывать' для данного использования</translation> + <translation>Корневой сертификат центра сертификации отмечен на отклонение для данной цели</translation> </message> <message> <location line="+3"/> <source>The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate</source> - <translation type="unfinished"></translation> + <translation>Текущий сертификат издателя был отклонён, так как название темы не совпадает с названием издателя сертификата</translation> </message> <message> <location line="+4"/> <source>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</source> - <translation type="unfinished"></translation> + <translation>Текущий сертификат издателя был отклонён, так как название издателя и серийный номер не совпадают с идентификатором ключа сертификата</translation> </message> <message> <location line="+5"/> <source>The peer did not present any certificate</source> - <translation>Узел не предоставил сертификат</translation> + <translation>Сертификат не был предоставлен</translation> </message> <message> <location line="+3"/> <source>The host name did not match any of the valid hosts for this certificate</source> - <translation>Название узла не совпадает ни с одним из допустимых узлов данного сертификата</translation> + <translation>Название узла не совпадает с допустимыми названиями узлов сертификата</translation> </message> <message> <location line="+6"/> @@ -6897,17 +8306,17 @@ Please choose a different file name.</source> <message> <location filename="../src/corelib/statemachine/qstatemachine.cpp" line="+1028"/> <source>Missing initial state in compound state '%1'</source> - <translation type="unfinished"></translation> + <translation>Отсутствует исходное состояние в составном состоянии "%1"</translation> </message> <message> <location line="+7"/> <source>Missing default state in history state '%1'</source> - <translation type="unfinished"></translation> + <translation>Отсутствует состояние по умолчанию в историческом состоянии "%1"</translation> </message> <message> <location line="+7"/> <source>No common ancestor for targets and source of transition from state '%1'</source> - <translation type="unfinished"></translation> + <translation>Нет общего предка у источника и цели перехода из состояния "%1"</translation> </message> <message> <location line="+4"/> @@ -6918,7 +8327,12 @@ Please choose a different file name.</source> <context> <name>QSystemSemaphore</name> <message> - <location filename="../src/corelib/kernel/qsystemsemaphore_unix.cpp" line="-41"/> + <location filename="../src/corelib/kernel/qsystemsemaphore_unix.cpp" line="-46"/> + <source>%1: does not exist</source> + <translation>%1: не существует</translation> + </message> + <message> + <location line="+5"/> <location filename="../src/corelib/kernel/qsystemsemaphore_win.cpp" line="+66"/> <source>%1: out of resources</source> <translation>%1: недостаточно ресурсов</translation> @@ -6935,12 +8349,7 @@ Please choose a different file name.</source> <translation>%1: уже существует</translation> </message> <message> - <location line="+4"/> - <source>%1: does not exist</source> - <translation>%1: не существует</translation> - </message> - <message> - <location line="+9"/> + <location line="+13"/> <location filename="../src/corelib/kernel/qsystemsemaphore_win.cpp" line="+3"/> <source>%1: unknown error %2</source> <translation>%1: неизвестная ошибка %2</translation> @@ -6975,7 +8384,7 @@ Please choose a different file name.</source> <context> <name>QTcpServer</name> <message> - <location filename="../src/network/socket/qtcpserver.cpp" line="+282"/> + <location filename="../src/network/socket/qtcpserver.cpp" line="+292"/> <source>Operation on socket is not supported</source> <translation>Операция с сокетом не поддерживается</translation> </message> @@ -6983,7 +8392,7 @@ Please choose a different file name.</source> <context> <name>QTextControl</name> <message> - <location filename="../src/gui/text/qtextcontrol.cpp" line="+2027"/> + <location filename="../src/gui/text/qtextcontrol.cpp" line="+2046"/> <source>&Undo</source> <translation>&Отменить действие</translation> </message> @@ -7041,7 +8450,7 @@ Please choose a different file name.</source> <context> <name>QUdpSocket</name> <message> - <location filename="../src/network/socket/qudpsocket.cpp" line="+179"/> + <location filename="../src/network/socket/qudpsocket.cpp" line="+189"/> <source>This platform does not support IPv6</source> <translation>Данная платформа не поддерживает IPv6</translation> </message> @@ -7085,52 +8494,52 @@ Please choose a different file name.</source> <message> <location filename="../src/gui/text/qtextcontrol.cpp" line="+899"/> <source>LRM Left-to-right mark</source> - <translation type="unfinished">LRM Индикатор написания слева направо</translation> + <translation>LRM Признак написания слева направо</translation> </message> <message> <location line="+1"/> <source>RLM Right-to-left mark</source> - <translation type="unfinished">RLM Индикатор написания справа налево</translation> + <translation>RLM Признак написания справа налево</translation> </message> <message> <location line="+1"/> <source>ZWJ Zero width joiner</source> - <translation type="unfinished">ZWJ Объединяющий символ нулевой ширины</translation> + <translation>ZWJ Объединяющий символ нулевой ширины</translation> </message> <message> <location line="+1"/> <source>ZWNJ Zero width non-joiner</source> - <translation type="unfinished">ZWNJ Разделитель нулевой ширины</translation> + <translation>ZWNJ Необъединяющий символ нулевой ширины</translation> </message> <message> <location line="+1"/> <source>ZWSP Zero width space</source> - <translation type="unfinished">ZWSP Пробел нулевой ширины</translation> + <translation>ZWSP Пробел нулевой ширины</translation> </message> <message> <location line="+1"/> <source>LRE Start of left-to-right embedding</source> - <translation type="unfinished">LRE Индикатор написания слева направо внутри текста, написанного справа налево</translation> + <translation>LRE Начало встраивания написания слева направо</translation> </message> <message> <location line="+1"/> <source>RLE Start of right-to-left embedding</source> - <translation type="unfinished">RLE Индикатор написания справа налево внутри текста, написанного слева направо</translation> + <translation>LRE Начало встраивания написания справа налево</translation> </message> <message> <location line="+1"/> <source>LRO Start of left-to-right override</source> - <translation type="unfinished">LRO Перекрывающий индикатор написания слева направо</translation> + <translation>LRO Начало замены написания слева направо</translation> </message> <message> <location line="+1"/> <source>RLO Start of right-to-left override</source> - <translation type="unfinished">RLO Перекрывающий индикатор написания справа налево</translation> + <translation>RLO Начало замены написания справа налево</translation> </message> <message> <location line="+1"/> <source>PDF Pop directional formatting</source> - <translation type="unfinished">PDF Индикатор конца текста с другим направлением</translation> + <translation>PDF Признак окончания написания с другим направлением</translation> </message> <message> <location line="+6"/> @@ -7141,7 +8550,7 @@ Please choose a different file name.</source> <context> <name>QWebFrame</name> <message> - <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp" line="+712"/> + <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp" line="+753"/> <source>Request cancelled</source> <translation>Запрос отменён</translation> </message> @@ -7174,12 +8583,322 @@ Please choose a different file name.</source> <context> <name>QWebPage</name> <message> - <location filename="../src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp" line="+416"/> + <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp" line="+248"/> + <source>Web Inspector - %2</source> + <translation>Web-инспектор - %2</translation> + </message> + <message> + <location filename="../src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp" line="+347"/> + <source>Redirection limit reached</source> + <translation>Достигнут предел переадресации</translation> + </message> + <message> + <location line="+121"/> <source>Bad HTTP request</source> <translation>Некорректный HTTP-запрос</translation> </message> <message> - <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="+42"/> + <location filename="../src/3rdparty/webkit/WebCore/platform/qt/ScrollbarQt.cpp" line="+58"/> + <source>Scroll here</source> + <translation>Прокрутить сюда</translation> + </message> + <message> + <location line="+3"/> + <source>Left edge</source> + <translation>К левой границе</translation> + </message> + <message> + <location line="+0"/> + <source>Top</source> + <translation>Вверх</translation> + </message> + <message> + <location line="+1"/> + <source>Right edge</source> + <translation>К правой границе</translation> + </message> + <message> + <location line="+0"/> + <source>Bottom</source> + <translation>Вниз</translation> + </message> + <message> + <location line="+3"/> + <source>Page left</source> + <translation>На страницу влево</translation> + </message> + <message> + <location line="+0"/> + <source>Page up</source> + <translation>На страницу вверх</translation> + </message> + <message> + <location line="+1"/> + <source>Page right</source> + <translation>На страницу вправо</translation> + </message> + <message> + <location line="+0"/> + <source>Page down</source> + <translation>На страницу вниз</translation> + </message> + <message> + <location line="+3"/> + <source>Scroll left</source> + <translation>Прокрутить влево</translation> + </message> + <message> + <location line="+0"/> + <source>Scroll up</source> + <translation>Прокрутить вверх</translation> + </message> + <message> + <location line="+1"/> + <source>Scroll right</source> + <translation>Прокрутить вправо</translation> + </message> + <message> + <location line="+0"/> + <source>Scroll down</source> + <translation>Прокрутить вниз</translation> + </message> + <message> + <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="+1979"/> + <source>JavaScript Alert - %1</source> + <translation>JavaScript: Предупреждение - %1</translation> + </message> + <message> + <location line="+17"/> + <source>JavaScript Confirm - %1</source> + <translation>JavaScript: Подтверждение - %1</translation> + </message> + <message> + <location line="+20"/> + <source>JavaScript Prompt - %1</source> + <translation>JavaScript: Запрос - %1</translation> + </message> + <message> + <location line="+26"/> + <source>JavaScript Problem - %1</source> + <translation>JavaScript: Проблема - %1</translation> + </message> + <message> + <location line="+0"/> + <source>The script on this page appears to have a problem. Do you want to stop the script?</source> + <translation>Сбой выполнения сценария на данной странице. Желаете остановить выполение сценария?</translation> + </message> + <message> + <location line="+376"/> + <source>Move the cursor to the next character</source> + <translation>Переместить указатель к следующему символу</translation> + </message> + <message> + <location line="+3"/> + <source>Move the cursor to the previous character</source> + <translation>Переместить указатель к предыдущему символу</translation> + </message> + <message> + <location line="+3"/> + <source>Move the cursor to the next word</source> + <translation>Переместить указатель к следующему слову</translation> + </message> + <message> + <location line="+3"/> + <source>Move the cursor to the previous word</source> + <translation>Переместить указатель к предыдущему слову</translation> + </message> + <message> + <location line="+3"/> + <source>Move the cursor to the next line</source> + <translation>Переместить указатель на следующую строку</translation> + </message> + <message> + <location line="+3"/> + <source>Move the cursor to the previous line</source> + <translation>Переместить указатель на предыдущую строку</translation> + </message> + <message> + <location line="+3"/> + <source>Move the cursor to the start of the line</source> + <translation>Переместить указатель в начало строки</translation> + </message> + <message> + <location line="+3"/> + <source>Move the cursor to the end of the line</source> + <translation>Переместить указатель в конец строки</translation> + </message> + <message> + <location line="+3"/> + <source>Move the cursor to the start of the block</source> + <translation>Переместить указатель в начало блока</translation> + </message> + <message> + <location line="+3"/> + <source>Move the cursor to the end of the block</source> + <translation>Переместить указатель в конец блока</translation> + </message> + <message> + <location line="+3"/> + <source>Move the cursor to the start of the document</source> + <translation>Переместить указатель в начало документа</translation> + </message> + <message> + <location line="+3"/> + <source>Move the cursor to the end of the document</source> + <translation>Переместить указатель в конец документа</translation> + </message> + <message> + <location line="+3"/> + <source>Select all</source> + <translation>Выделить всё</translation> + </message> + <message> + <location line="+3"/> + <source>Select to the next character</source> + <translation>Выделить до следующего символа</translation> + </message> + <message> + <location line="+3"/> + <source>Select to the previous character</source> + <translation>Выделить до предыдущего символа</translation> + </message> + <message> + <location line="+3"/> + <source>Select to the next word</source> + <translation>Выделить до следующего слова</translation> + </message> + <message> + <location line="+3"/> + <source>Select to the previous word</source> + <translation>Выделить до предыдущего слова</translation> + </message> + <message> + <location line="+3"/> + <source>Select to the next line</source> + <translation>Выделить до следующей строки</translation> + </message> + <message> + <location line="+3"/> + <source>Select to the previous line</source> + <translation>Выделить до предыдущей строки</translation> + </message> + <message> + <location line="+3"/> + <source>Select to the start of the line</source> + <translation>Выделить до начала строки</translation> + </message> + <message> + <location line="+3"/> + <source>Select to the end of the line</source> + <translation>Выделить до конца строки</translation> + </message> + <message> + <location line="+3"/> + <source>Select to the start of the block</source> + <translation>Выделить до начала блока</translation> + </message> + <message> + <location line="+3"/> + <source>Select to the end of the block</source> + <translation>Выделить до конца блока</translation> + </message> + <message> + <location line="+3"/> + <source>Select to the start of the document</source> + <translation>Выделить до начала документа</translation> + </message> + <message> + <location line="+3"/> + <source>Select to the end of the document</source> + <translation>Выделить до конца документа</translation> + </message> + <message> + <location line="+3"/> + <source>Delete to the start of the word</source> + <translation>Удалить до начала слова</translation> + </message> + <message> + <location line="+3"/> + <source>Delete to the end of the word</source> + <translation>Удалить до конца слова</translation> + </message> + <message> + <location line="+33"/> + <source>Insert a new paragraph</source> + <translation>Вставить новый параграф</translation> + </message> + <message> + <location line="+3"/> + <source>Insert a new line</source> + <translation>Вставить новую строку</translation> + </message> + <message> + <location line="+4"/> + <source>Paste and Match Style</source> + <translation>Вставить, сохранив стиль</translation> + </message> + <message> + <location line="+3"/> + <source>Remove formatting</source> + <translation>Удалить форматирование</translation> + </message> + <message> + <location line="+4"/> + <source>Strikethrough</source> + <translation>Зачёркнутый</translation> + </message> + <message> + <location line="+4"/> + <source>Subscript</source> + <translation>Подстрочный</translation> + </message> + <message> + <location line="+4"/> + <source>Superscript</source> + <translation>Надстрочный</translation> + </message> + <message> + <location line="+4"/> + <source>Insert Bulleted List</source> + <translation>Вставить маркированный список</translation> + </message> + <message> + <location line="+4"/> + <source>Insert Numbered List</source> + <translation>Вставить нумерованный список</translation> + </message> + <message> + <location line="+4"/> + <source>Indent</source> + <translation>Увеличить отступ</translation> + </message> + <message> + <location line="+3"/> + <source>Outdent</source> + <translation>Уменьшить отступ</translation> + </message> + <message> + <location line="+3"/> + <source>Center</source> + <translation>По центру</translation> + </message> + <message> + <location line="+3"/> + <source>Justify</source> + <translation>По ширине</translation> + </message> + <message> + <location line="+3"/> + <source>Align Left</source> + <translation>По левому краю</translation> + </message> + <message> + <location line="+3"/> + <source>Align Right</source> + <translation>По правому краю</translation> + </message> + <message> + <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="+44"/> <source>Submit</source> <comment>default label for Submit buttons in forms on web pages</comment> <translation>Отправить</translation> @@ -7302,7 +9021,7 @@ Please choose a different file name.</source> <location line="+5"/> <source>No Guesses Found</source> <comment>No Guesses Found context menu item</comment> - <translation type="unfinished">Неверное слово</translation> + <translation type="unfinished">Совпадений не найдено</translation> </message> <message> <location line="+5"/> @@ -7439,7 +9158,49 @@ Please choose a different file name.</source> <translation>Справа налево</translation> </message> <message> - <location line="+105"/> + <location line="+5"/> + <source>Inspect</source> + <comment>Inspect Element context menu item</comment> + <translation>Проверить</translation> + </message> + <message> + <location line="+5"/> + <source>No recent searches</source> + <comment>Label for only item in menu that appears when clicking on the search field image, when no searches have been performed</comment> + <translation>История поиска пуста</translation> + </message> + <message> + <location line="+5"/> + <source>Recent searches</source> + <comment>label for first item in the menu that appears when clicking on the search field image, used as embedded menu title</comment> + <translation>История поиска</translation> + </message> + <message> + <location line="+5"/> + <source>Clear recent searches</source> + <comment>menu item in Recent Searches menu that empties menu's contents</comment> + <translation>Очистить историю поиска</translation> + </message> + <message> + <location line="+80"/> + <source>Missing Plug-in</source> + <comment>Label text to be used when a plug-in is missing</comment> + <translation>Модуль отсутствует</translation> + </message> + <message> + <location line="+10"/> + <source>Unknown</source> + <comment>Unknown filesize FTP directory listing item</comment> + <translation>Неизвестно</translation> + </message> + <message> + <location line="+5"/> + <source>%1 (%2x%3 pixels)</source> + <comment>Title string for images</comment> + <translation>%1 (%2x%3 px)</translation> + </message> + <message> + <location line="+5"/> <source>Loading...</source> <comment>Media controller status message when the media is loading</comment> <translation>Загрузка...</translation> @@ -7454,121 +9215,121 @@ Please choose a different file name.</source> <location line="+8"/> <source>Audio Element</source> <comment>Media controller element</comment> - <translation type="unfinished">Аудио-элемент</translation> + <translation>Аудио-элемент</translation> </message> <message> <location line="+2"/> <source>Video Element</source> <comment>Media controller element</comment> - <translation type="unfinished">Видео-элемент</translation> + <translation>Видео-элемент</translation> </message> <message> <location line="+2"/> <source>Mute Button</source> <comment>Media controller element</comment> - <translation type="unfinished">Кнопка "приглушить"</translation> + <translation>Кнопка "Отключить звук"</translation> </message> <message> <location line="+2"/> <source>Unmute Button</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation>Кнопка "Включить звук"</translation> </message> <message> <location line="+2"/> <source>Play Button</source> <comment>Media controller element</comment> - <translation type="unfinished">Кнопка "воспроизведение"</translation> + <translation>Кнопка "Воспроизведение"</translation> </message> <message> <location line="+2"/> <source>Pause Button</source> <comment>Media controller element</comment> - <translation type="unfinished">Кнопка "пауза"</translation> + <translation>Кнопка "Пауза"</translation> </message> <message> <location line="+2"/> <source>Slider</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation>Регулятор</translation> </message> <message> <location line="+2"/> <source>Slider Thumb</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation>Указатель регулятора</translation> </message> <message> <location line="+2"/> <source>Rewind Button</source> <comment>Media controller element</comment> - <translation type="unfinished">Кнопка "перемотать"</translation> + <translation>Кнопка "Перемотка назад"</translation> </message> <message> <location line="+2"/> <source>Return to Real-time Button</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Кнопка "Вернуть в реальное время"</translation> </message> <message> <location line="+2"/> <source>Elapsed Time</source> <comment>Media controller element</comment> - <translation type="unfinished">Прошло времени</translation> + <translation>Прошло времени</translation> </message> <message> <location line="+2"/> <source>Remaining Time</source> <comment>Media controller element</comment> - <translation type="unfinished">Осталось времени</translation> + <translation>Осталось времени</translation> </message> <message> <location line="+2"/> <source>Status Display</source> <comment>Media controller element</comment> - <translation type="unfinished">Отображение состояния</translation> + <translation>Отображение состояния</translation> </message> <message> <location line="+2"/> <source>Fullscreen Button</source> <comment>Media controller element</comment> - <translation type="unfinished">Кнопка "полноэкранный режим"</translation> + <translation>Кнопка "На весь экран"</translation> </message> <message> <location line="+2"/> <source>Seek Forward Button</source> <comment>Media controller element</comment> - <translation type="unfinished">Кнопка "перемотка вперёд"</translation> + <translation>Кнопка "Перемотка вперёд"</translation> </message> <message> <location line="+2"/> <source>Seek Back Button</source> <comment>Media controller element</comment> - <translation type="unfinished">Кнопка "перемотка назад"</translation> + <translation>Кнопка "Перемотка назад"</translation> </message> <message> <location line="+8"/> <source>Audio element playback controls and status display</source> <comment>Media controller element</comment> - <translation type="unfinished">Элементы управления воспроизведением звука и отображения состояния</translation> + <translation>Элементы управления воспроизведением звука и отображением состояния</translation> </message> <message> <location line="+2"/> <source>Video element playback controls and status display</source> <comment>Media controller element</comment> - <translation type="unfinished">Элементы управления воспроизведением видео и отображения состояния</translation> + <translation>Элементы управления воспроизведением видео и отображением состояния</translation> </message> <message> <location line="+2"/> <source>Mute audio tracks</source> <comment>Media controller element</comment> - <translation type="unfinished">Выключить звуковые дорожки</translation> + <translation>Отключить звуковые дорожки</translation> </message> <message> <location line="+2"/> <source>Unmute audio tracks</source> <comment>Media controller element</comment> - <translation type="unfinished">Включить звуковые дорожки</translation> + <translation>Включить звуковые дорожки</translation> </message> <message> <location line="+2"/> @@ -7586,67 +9347,67 @@ Please choose a different file name.</source> <location line="+2"/> <source>Movie time scrubber</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Перемотка</translation> </message> <message> <location line="+2"/> <source>Movie time scrubber thumb</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Позиция перемотки</translation> </message> <message> <location line="+2"/> <source>Rewind movie</source> <comment>Media controller element</comment> - <translation type="unfinished">Начать фильм сначала</translation> + <translation>Перемотка в начало</translation> </message> <message> <location line="+2"/> <source>Return streaming movie to real-time</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Возвращает потоковое видео к воспроизведению в реальном времени</translation> </message> <message> <location line="+2"/> <source>Current movie time</source> <comment>Media controller element</comment> - <translation type="unfinished">Текущее время фильма</translation> + <translation>Текущее время фильма</translation> </message> <message> <location line="+2"/> <source>Remaining movie time</source> <comment>Media controller element</comment> - <translation type="unfinished">Осталось времени фильма</translation> + <translation>Оставшееся время фильма</translation> </message> <message> <location line="+2"/> <source>Current movie status</source> <comment>Media controller element</comment> - <translation type="unfinished">Текущее состояние фильма</translation> + <translation>Текущее состояние фильма</translation> </message> <message> <location line="+2"/> <source>Play movie in full-screen mode</source> <comment>Media controller element</comment> - <translation type="unfinished">Воспроизводить фильм в полноэкранном режиме</translation> + <translation>Воспроизведение фильма в режиме отображения на весь экран</translation> </message> <message> <location line="+2"/> <source>Seek quickly back</source> <comment>Media controller element</comment> - <translation type="unfinished">Быстрая перемотка назад</translation> + <translation>Быстрая перемотка назад</translation> </message> <message> <location line="+2"/> <source>Seek quickly forward</source> <comment>Media controller element</comment> - <translation type="unfinished">Быстрая перемотка вперёд</translation> + <translation>Быстрая перемотка вперёд</translation> </message> <message> <location line="+9"/> <source>Indefinite time</source> <comment>Media time description</comment> - <translation type="unfinished">Время не определено</translation> + <translation>Время не определено</translation> </message> <message> <location line="+9"/> @@ -7672,112 +9433,6 @@ Please choose a different file name.</source> <comment>Media time description</comment> <translation>%1 секунд</translation> </message> - <message> - <location line="-210"/> - <source>Inspect</source> - <comment>Inspect Element context menu item</comment> - <translation>Проверить</translation> - </message> - <message> - <location line="+5"/> - <source>No recent searches</source> - <comment>Label for only item in menu that appears when clicking on the search field image, when no searches have been performed</comment> - <translation>История поиска пуста</translation> - </message> - <message> - <location line="+5"/> - <source>Recent searches</source> - <comment>label for first item in the menu that appears when clicking on the search field image, used as embedded menu title</comment> - <translation>История поиска</translation> - </message> - <message> - <location line="+5"/> - <source>Clear recent searches</source> - <comment>menu item in Recent Searches menu that empties menu's contents</comment> - <translation>Очистить историю поиска</translation> - </message> - <message> - <location line="+75"/> - <source>Unknown</source> - <comment>Unknown filesize FTP directory listing item</comment> - <translation>Неизвестно</translation> - </message> - <message> - <location line="+5"/> - <source>%1 (%2x%3 pixels)</source> - <comment>Title string for images</comment> - <translation>%1 (%2x%3 px)</translation> - </message> - <message> - <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp" line="+167"/> - <source>Web Inspector - %2</source> - <translation>Web-инспектор - %2</translation> - </message> - <message> - <location filename="../src/3rdparty/webkit/WebCore/platform/qt/ScrollbarQt.cpp" line="+58"/> - <source>Scroll here</source> - <translation>Прокрутить сюда</translation> - </message> - <message> - <location line="+3"/> - <source>Left edge</source> - <translation>К левой границе</translation> - </message> - <message> - <location line="+0"/> - <source>Top</source> - <translation>Вверх</translation> - </message> - <message> - <location line="+1"/> - <source>Right edge</source> - <translation>К правой границе</translation> - </message> - <message> - <location line="+0"/> - <source>Bottom</source> - <translation>Вниз</translation> - </message> - <message> - <location line="+3"/> - <source>Page left</source> - <translation>На страницу влево</translation> - </message> - <message> - <location line="+0"/> - <source>Page up</source> - <translation>На страницу вверх</translation> - </message> - <message> - <location line="+1"/> - <source>Page right</source> - <translation>На страницу вправо</translation> - </message> - <message> - <location line="+0"/> - <source>Page down</source> - <translation>На страницу вниз</translation> - </message> - <message> - <location line="+3"/> - <source>Scroll left</source> - <translation>Прокрутить влево</translation> - </message> - <message> - <location line="+0"/> - <source>Scroll up</source> - <translation>Прокрутить вверх</translation> - </message> - <message> - <location line="+1"/> - <source>Scroll right</source> - <translation>Прокрутить вправо</translation> - </message> - <message> - <location line="+0"/> - <source>Scroll down</source> - <translation>Прокрутить вниз</translation> - </message> <message numerus="yes"> <location filename="../src/3rdparty/webkit/WebCore/platform/qt/FileChooserQt.cpp" line="+45"/> <source>%n file(s)</source> @@ -7788,241 +9443,6 @@ Please choose a different file name.</source> <numerusform>%n файлов</numerusform> </translation> </message> - <message> - <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="+1833"/> - <source>JavaScript Alert - %1</source> - <translation>JavaScript: Предупреждение - %1</translation> - </message> - <message> - <location line="+16"/> - <source>JavaScript Confirm - %1</source> - <translation>JavaScript: Подтверждение - %1</translation> - </message> - <message> - <location line="+19"/> - <source>JavaScript Prompt - %1</source> - <translation>JavaScript: Запрос - %1</translation> - </message> - <message> - <location line="+25"/> - <source>JavaScript Problem - %1</source> - <translation>JavaScript: Проблема - %1</translation> - </message> - <message> - <location line="+0"/> - <source>The script on this page appears to have a problem. Do you want to stop the script?</source> - <translation>Сбой выполнения сценария на данной странице. Желаете остановить выполение сценария?</translation> - </message> - <message> - <location line="+381"/> - <source>Move the cursor to the next character</source> - <translation>Переместить указатель к следующему символу</translation> - </message> - <message> - <location line="+3"/> - <source>Move the cursor to the previous character</source> - <translation>Переместить указатель к предыдущему символу</translation> - </message> - <message> - <location line="+3"/> - <source>Move the cursor to the next word</source> - <translation>Переместить указатель к следующему слову</translation> - </message> - <message> - <location line="+3"/> - <source>Move the cursor to the previous word</source> - <translation>Переместить указатель к предыдущему слову</translation> - </message> - <message> - <location line="+3"/> - <source>Move the cursor to the next line</source> - <translation>Переместить указатель на следующую строку</translation> - </message> - <message> - <location line="+3"/> - <source>Move the cursor to the previous line</source> - <translation>Переместить указатель на предыдущую строку</translation> - </message> - <message> - <location line="+3"/> - <source>Move the cursor to the start of the line</source> - <translation>Переместить указатель в начало строки</translation> - </message> - <message> - <location line="+3"/> - <source>Move the cursor to the end of the line</source> - <translation>Переместить указатель в конец строки</translation> - </message> - <message> - <location line="+3"/> - <source>Move the cursor to the start of the block</source> - <translation>Переместить указатель в начало блока</translation> - </message> - <message> - <location line="+3"/> - <source>Move the cursor to the end of the block</source> - <translation>Переместить указатель в конец блока</translation> - </message> - <message> - <location line="+3"/> - <source>Move the cursor to the start of the document</source> - <translation>Переместить указатель в начало документа</translation> - </message> - <message> - <location line="+3"/> - <source>Move the cursor to the end of the document</source> - <translation>Переместить указатель в конец документа</translation> - </message> - <message> - <location line="+3"/> - <source>Select all</source> - <translation>Выделить всё</translation> - </message> - <message> - <location line="+3"/> - <source>Select to the next character</source> - <translation>Выделить до следующего символа</translation> - </message> - <message> - <location line="+3"/> - <source>Select to the previous character</source> - <translation>Выделить до предыдущего символа</translation> - </message> - <message> - <location line="+3"/> - <source>Select to the next word</source> - <translation>Выделить до следующего слова</translation> - </message> - <message> - <location line="+3"/> - <source>Select to the previous word</source> - <translation>Выделить до предыдущего слова</translation> - </message> - <message> - <location line="+3"/> - <source>Select to the next line</source> - <translation>Выделить до следующей строки</translation> - </message> - <message> - <location line="+3"/> - <source>Select to the previous line</source> - <translation>Выделить до предыдущей строки</translation> - </message> - <message> - <location line="+3"/> - <source>Select to the start of the line</source> - <translation>Выделить до начала строки</translation> - </message> - <message> - <location line="+3"/> - <source>Select to the end of the line</source> - <translation>Выделить до конца строки</translation> - </message> - <message> - <location line="+3"/> - <source>Select to the start of the block</source> - <translation>Выделить до начала блока</translation> - </message> - <message> - <location line="+3"/> - <source>Select to the end of the block</source> - <translation>Выделить до конца блока</translation> - </message> - <message> - <location line="+3"/> - <source>Select to the start of the document</source> - <translation>Выделить до начала документа</translation> - </message> - <message> - <location line="+3"/> - <source>Select to the end of the document</source> - <translation>Выделить до конца документа</translation> - </message> - <message> - <location line="+3"/> - <source>Delete to the start of the word</source> - <translation>Удалить до начала слова</translation> - </message> - <message> - <location line="+3"/> - <source>Delete to the end of the word</source> - <translation>Удалить до конца слова</translation> - </message> - <message> - <location line="+33"/> - <source>Insert a new paragraph</source> - <translation>Вставить новый параграф</translation> - </message> - <message> - <location line="+3"/> - <source>Insert a new line</source> - <translation>Вставить новую строку</translation> - </message> - <message> - <location line="+4"/> - <source>Paste and Match Style</source> - <translation>Вставить, сохранив стиль</translation> - </message> - <message> - <location line="+3"/> - <source>Remove formatting</source> - <translation>Удалить форматирование</translation> - </message> - <message> - <location line="+4"/> - <source>Strikethrough</source> - <translation>Зачёркнутый</translation> - </message> - <message> - <location line="+4"/> - <source>Subscript</source> - <translation>Подстрочный</translation> - </message> - <message> - <location line="+4"/> - <source>Superscript</source> - <translation>Надстрочный</translation> - </message> - <message> - <location line="+4"/> - <source>Insert Bulleted List</source> - <translation>Вставить маркированный список</translation> - </message> - <message> - <location line="+4"/> - <source>Insert Numbered List</source> - <translation>Вставить нумерованный список</translation> - </message> - <message> - <location line="+4"/> - <source>Indent</source> - <translation>Увеличить отступ</translation> - </message> - <message> - <location line="+3"/> - <source>Outdent</source> - <translation>Уменьшить отступ</translation> - </message> - <message> - <location line="+3"/> - <source>Center</source> - <translation>По центру</translation> - </message> - <message> - <location line="+3"/> - <source>Justify</source> - <translation>По ширине</translation> - </message> - <message> - <location line="+3"/> - <source>Align Left</source> - <translation>По левому краю</translation> - </message> - <message> - <location line="+3"/> - <source>Align Right</source> - <translation>По правому краю</translation> - </message> </context> <context> <name>QWhatsThisAction</name> @@ -8035,7 +9455,7 @@ Please choose a different file name.</source> <context> <name>QWidget</name> <message> - <location filename="../src/gui/kernel/qwidget.cpp" line="+5757"/> + <location filename="../src/gui/kernel/qwidget.cpp" line="+5802"/> <source>*</source> <translation>*</translation> </message> @@ -8043,27 +9463,12 @@ Please choose a different file name.</source> <context> <name>QWizard</name> <message> - <location filename="../src/gui/dialogs/qwizard.cpp" line="+649"/> - <source>Go Back</source> - <translation>Назад</translation> - </message> - <message> - <location line="+3"/> - <source>Continue</source> - <translation>Продолжить</translation> - </message> - <message> - <location line="+5"/> - <source>Commit</source> - <translation>Передать</translation> + <location filename="../src/gui/dialogs/qwizard.cpp" line="+701"/> + <source>Cancel</source> + <translation>Отмена</translation> </message> <message> <location line="+2"/> - <source>Done</source> - <translation>Готово</translation> - </message> - <message> - <location line="+4"/> <source>Help</source> <translation>Справка</translation> </message> @@ -8078,17 +9483,32 @@ Please choose a different file name.</source> <translation>&Завершить</translation> </message> <message> - <location line="+2"/> - <source>Cancel</source> - <translation>Отмена</translation> + <location line="+4"/> + <source>&Help</source> + <translation>&Справка</translation> + </message> + <message> + <location line="-14"/> + <source>Go Back</source> + <translation>Назад</translation> + </message> + <message> + <location line="+3"/> + <source>Continue</source> + <translation>Продолжить</translation> + </message> + <message> + <location line="+5"/> + <source>Commit</source> + <translation>Передать</translation> </message> <message> <location line="+2"/> - <source>&Help</source> - <translation>&Справка</translation> + <source>Done</source> + <translation>Готово</translation> </message> <message> - <location line="-8"/> + <location line="-4"/> <source>&Next</source> <translation>&Далее</translation> </message> @@ -8136,19 +9556,7 @@ Please choose a different file name.</source> <translation>Оставаться &сверху</translation> </message> <message> - <location line="+3"/> - <location line="+1059"/> - <source>Sh&ade</source> - <translation>Св&ернуть в заголовок</translation> - </message> - <message> - <location line="-278"/> - <location line="+60"/> - <source>%1 - [%2]</source> - <translation>%1 - [%2]</translation> - </message> - <message> - <location line="-1832"/> + <location line="-988"/> <source>Minimize</source> <translation>Свернуть</translation> </message> @@ -8163,7 +9571,19 @@ Please choose a different file name.</source> <translation>Закрыть</translation> </message> <message> - <location line="+2048"/> + <location line="+993"/> + <location line="+1059"/> + <source>Sh&ade</source> + <translation>Св&ернуть в заголовок</translation> + </message> + <message> + <location line="-278"/> + <location line="+60"/> + <source>%1 - [%2]</source> + <translation>%1 - [%2]</translation> + </message> + <message> + <location line="+214"/> <source>&Unshade</source> <translation>В&осстановить из заголовка</translation> </message> @@ -8226,17 +9646,7 @@ Please choose a different file name.</source> <translation>некорректное значение параметра standalone</translation> </message> <message> - <location line="+1"/> - <source>encoding declaration or standalone declaration expected while reading the XML declaration</source> - <translation>в объявлении XML ожидаются параметры encoding или standalone</translation> - </message> - <message> - <location line="+1"/> - <source>standalone declaration expected while reading the XML declaration</source> - <translation>в объявлении XML ожидается параметр standalone</translation> - </message> - <message> - <location line="+1"/> + <location line="+3"/> <source>error occurred while parsing document type definition</source> <translation>ошибка разбора объявления типа документа</translation> </message> @@ -8273,7 +9683,7 @@ Please choose a different file name.</source> <message> <location line="+1"/> <source>unparsed entity reference in wrong context</source> - <translation>неразобранная ссылка на объект в неверном контексте</translation> + <translation>неразобранная ссылка на объект в неправильном контексте</translation> </message> <message> <location line="+1"/> @@ -8285,6 +9695,16 @@ Please choose a different file name.</source> <source>error in the text declaration of an external entity</source> <translation>ошибка в объявлении внешнего объекта</translation> </message> + <message> + <location line="-11"/> + <source>encoding declaration or standalone declaration expected while reading the XML declaration</source> + <translation>в объявлении XML ожидаются параметры encoding или standalone</translation> + </message> + <message> + <location line="+1"/> + <source>standalone declaration expected while reading the XML declaration</source> + <translation>в объявлении XML ожидается параметр standalone</translation> + </message> </context> <context> <name>QXmlPatternistCLI</name> @@ -8335,12 +9755,12 @@ Please choose a different file name.</source> <message> <location line="+259"/> <source>Sequence ']]>' not allowed in content.</source> - <translation>Последовательность ']]>' недопустима в содержимом.</translation> + <translation>Последовательность "]]>" недопустима в содержимом.</translation> </message> <message> <location line="+309"/> <source>Namespace prefix '%1' not declared</source> - <translation>Префикс пространства имён '%1' не объявлен</translation> + <translation>Префикс пространства имён "%1" не объявлен</translation> </message> <message> <location line="+78"/> @@ -8350,12 +9770,12 @@ Please choose a different file name.</source> <message> <location line="+115"/> <source>Unexpected character '%1' in public id literal.</source> - <translation>Неожиданный символ '%1' в литерале открытого идентификатора.</translation> + <translation>Неожиданный символ "%1" в литерале открытого идентификатора.</translation> </message> <message> <location line="+28"/> <source>Invalid XML version string.</source> - <translation>Неверная строка версии XML.</translation> + <translation>Некорректная строка версии XML.</translation> </message> <message> <location line="+2"/> @@ -8365,7 +9785,7 @@ Please choose a different file name.</source> <message> <location line="+23"/> <source>%1 is an invalid encoding name.</source> - <translation>%1 - неверное название кодировки.</translation> + <translation>%1 - не является корректным названием кодировки.</translation> </message> <message> <location line="+7"/> @@ -8375,7 +9795,7 @@ Please choose a different file name.</source> <message> <location line="+16"/> <source>Standalone accepts only yes or no.</source> - <translation>Псевдоатрибут 'standalone' может принимать только значения 'yes' или 'no'.</translation> + <translation>Псевдоатрибут "standalone" может принимать только значения "yes" или "no".</translation> </message> <message> <location line="+2"/> @@ -8435,12 +9855,12 @@ Please choose a different file name.</source> <message> <location line="+34"/> <source>%1 is an invalid processing instruction name.</source> - <translation>%1 неверное название обрабатываемой инструкции.</translation> + <translation>%1 не является корректным названием обрабатываемой инструкции.</translation> </message> <message> <location line="+11"/> <source>Invalid processing instruction name.</source> - <translation>Неверное название обрабатываемой инструкции.</translation> + <translation>Некорректное название обрабатываемой инструкции.</translation> </message> <message> <location filename="../src/corelib/xml/qxmlstream.cpp" line="-536"/> @@ -8448,7 +9868,7 @@ Please choose a different file name.</source> <location filename="../src/corelib/xml/qxmlstream_p.h" line="+164"/> <location line="+53"/> <source>Illegal namespace declaration.</source> - <translation>Неверное объявление пространства имён.</translation> + <translation>Некорректное объявление пространства имён.</translation> </message> <message> <location filename="../src/corelib/xml/qxmlstream_p.h" line="+15"/> @@ -8463,45 +9883,284 @@ Please choose a different file name.</source> <message> <location line="+18"/> <source>Reference to unparsed entity '%1'.</source> - <translation>Ссылка на необработанный объект '%1'.</translation> + <translation>Ссылка на необработанный объект "%1".</translation> </message> <message> <location line="-13"/> <location line="+61"/> <location line="+40"/> <source>Entity '%1' not declared.</source> - <translation>Объект '%1' не объявлен.</translation> + <translation>Объект "%1" не объявлен.</translation> </message> <message> <location line="-26"/> <source>Reference to external entity '%1' in attribute value.</source> - <translation>Ссылка на внешний объект '%1' в значении атрибута.</translation> + <translation>Ссылка на внешний объект "%1" в значении атрибута.</translation> </message> <message> <location line="+40"/> <source>Invalid character reference.</source> - <translation>Неверная символьная ссылка.</translation> + <translation>Некорректная символьная ссылка.</translation> </message> <message> <location filename="../src/corelib/xml/qxmlstream.cpp" line="-75"/> <location filename="../src/corelib/xml/qxmlstream_p.h" line="-823"/> <source>Encountered incorrectly encoded content.</source> - <translation>Обнаружено неверно закодированное содержимое.</translation> + <translation>Обнаружено некорректно закодированное содержимое.</translation> </message> <message> <location line="+274"/> <source>The standalone pseudo attribute must appear after the encoding.</source> - <translation>Псевдоатрибут 'standalone' должен находиться после указания кодировки.</translation> + <translation>Псевдоатрибут "standalone" должен находиться после указания кодировки.</translation> </message> <message> <location filename="../src/corelib/xml/qxmlstream_p.h" line="+562"/> <source>%1 is an invalid PUBLIC identifier.</source> - <translation>%1 - неверный идентификатор PUBLIC.</translation> + <translation>%1 - некорректный идентификатор PUBLIC.</translation> </message> </context> <context> <name>QtXmlPatterns</name> <message> + <location filename="../src/xmlpatterns/data/qabstractduration.cpp" line="+99"/> + <location line="+15"/> + <source>At least one component must be present.</source> + <translation>Должна присутствовать как минимум одна компонента.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/data/qanyuri_p.h" line="+132"/> + <source>%1 is not a valid value of type %2.</source> + <translation>%1 не является правильным значением типа %2.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/data/qatomiccasters_p.h" line="+223"/> + <source>When casting to %1 from %2, the source value cannot be %3.</source> + <translation>При преобразовании %2 в %1 исходное значение не может быть %3.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/data/qboolean.cpp" line="+78"/> + <source>Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values.</source> + <translation>Булево значение не может быть вычислено для последовательностей, которые содержат два и более атомарных значения.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/expr/qprocessinginstructionconstructor.cpp" line="+84"/> + <source>The data of a processing instruction cannot contain the string %1</source> + <translation>Данные обрабатываемой инструкции не могут содержать строку "%1"</translation> + </message> + <message> + <location filename="../src/xmlpatterns/expr/qqnameconstructor_p.h" line="+168"/> + <location filename="../src/xmlpatterns/functions/qqnamefns.cpp" line="+69"/> + <source>%1 is an invalid %2</source> + <translation>%1 некоррекно для %2</translation> + </message> + <message> + <location filename="../src/xmlpatterns/functions/qassemblestringfns.cpp" line="+88"/> + <source>%1 is not a valid XML 1.0 character.</source> + <translation>Символ %1 недопустим для XML 1.0.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/functions/qerrorfn.cpp" line="+61"/> + <source>%1 was called.</source> + <translation>%1 было вызвано.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/functions/qpatternmatchingfns.cpp" line="+133"/> + <source>In the replacement string, %1 must be followed by at least one digit when not escaped.</source> + <translation>В замещаемой строке "%1" должно сопровождаться как минимум одной цифрой, если неэкранировано.</translation> + </message> + <message> + <location line="+26"/> + <source>In the replacement string, %1 can only be used to escape itself or %2, not %3</source> + <translation>В замещаемой строке символ "%1" может использоваться только для экранирования самого себя или "%2", но не "%3"</translation> + </message> + <message> + <location filename="../src/xmlpatterns/functions/qpatternplatform.cpp" line="+92"/> + <source>%1 matches newline characters</source> + <translation>%1 соответствует символам конца строки</translation> + </message> + <message> + <location line="+10"/> + <source>Matches are case insensitive</source> + <translation>Соответствия регистронезависимы</translation> + </message> + <message> + <location line="+104"/> + <source>%1 is an invalid regular expression pattern: %2</source> + <translation>%1 - некорректный шаблон регулярного выражения: %2</translation> + </message> + <message> + <location filename="../src/xmlpatterns/functions/qsequencefns.cpp" line="+346"/> + <source>It will not be possible to retrieve %1.</source> + <translation>Будет невозможно восстановить %1.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/functions/qsequencegeneratingfns.cpp" line="+266"/> + <source>The default collection is undefined</source> + <translation>Набор по умолчанию не определён</translation> + </message> + <message> + <location line="+13"/> + <source>%1 cannot be retrieved</source> + <translation>%1 не может быть восстановлен</translation> + </message> + <message> + <location filename="../src/xmlpatterns/janitors/qitemverifier.cpp" line="+67"/> + <source>The item %1 did not match the required type %2.</source> + <translation>Элемент %1 не соответствует необходимому типу %2.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+352"/> + <location line="+7323"/> + <source>%1 is an unknown schema type.</source> + <translation>%1 является схемой неизвестного типа.</translation> + </message> + <message> + <location line="-7254"/> + <source>A template with name %1 has already been declared.</source> + <translation>Шаблон с именем %1 уже был объявлен.</translation> + </message> + <message> + <location line="+213"/> + <source>Only one %1 declaration can occur in the query prolog.</source> + <translation>Только одно объявление %1 может присутствовать в прологе запроса.</translation> + </message> + <message> + <location line="+188"/> + <source>The initialization of variable %1 depends on itself</source> + <translation>Инициализация переменной %1 зависит от себя самой</translation> + </message> + <message> + <location filename="../src/xmlpatterns/parser/qparsercontext.cpp" line="+93"/> + <source>The variable %1 is unused</source> + <translation>Переменная %1 не используется</translation> + </message> + <message> + <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+2904"/> + <source>Version %1 is not supported. The supported XQuery version is 1.0.</source> + <translation>Версия %1 не поддерживается. Поддерживается XQuery версии 1.0.</translation> + </message> + <message> + <location line="+71"/> + <source>No function with signature %1 is available</source> + <translation>Функция с сигнатурой %1 отсутствует</translation> + </message> + <message> + <location line="+303"/> + <source>It is not possible to redeclare prefix %1.</source> + <translation>Невозможно переопределить префикс %1.</translation> + </message> + <message> + <location line="+18"/> + <source>Prefix %1 is already declared in the prolog.</source> + <translation>Префикс %1 уже объявлен в прологе.</translation> + </message> + <message> + <location line="+95"/> + <source>The name of an option must have a prefix. There is no default namespace for options.</source> + <translation>Название опции должно содержать префикс. Нет пространства имён по умолчанию для опций.</translation> + </message> + <message> + <location line="+171"/> + <source>The Schema Import feature is not supported, and therefore %1 declarations cannot occur.</source> + <translation>Возможность импорта схем не поддерживается, следовательно, объявлений %1 быть не должно.</translation> + </message> + <message> + <location line="+13"/> + <source>The target namespace of a %1 cannot be empty.</source> + <translation>Целевое пространство имён %1 не может быть пустым.</translation> + </message> + <message> + <location line="+8"/> + <source>The module import feature is not supported</source> + <translation>Возможность импорта модулей не поддерживается</translation> + </message> + <message> + <location line="+178"/> + <source>The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2</source> + <translation>Пространство имён пользовательской функции в модуле библиотеки должен соответствовать пространству имён модуля. Другими словами, он должен быть %1 вместо %2</translation> + </message> + <message> + <location line="+34"/> + <source>A function already exists with the signature %1.</source> + <translation>Функция с сигнатурой %1 уже существует.</translation> + </message> + <message> + <location line="+23"/> + <source>No external functions are supported. All supported functions can be used directly, without first declaring them as external</source> + <translation>Внешние функции не поддерживаются. Все поддерживаемые функции могут использоваться напрямую без первоначального объявления их в качестве внешних</translation> + </message> + <message> + <location line="+1709"/> + <source>The %1-axis is unsupported in XQuery</source> + <translation>Ось %1 не поддерживается в XQuery</translation> + </message> + <message> + <location line="+435"/> + <source>The namespace URI cannot be the empty string when binding to a prefix, %1.</source> + <translation>URI пространства имён не может быть пустой строкой при связывании с префиксом %1.</translation> + </message> + <message> + <location line="+7"/> + <source>%1 is an invalid namespace URI.</source> + <translation>%1 - некорректный URI пространства имён.</translation> + </message> + <message> + <location line="+6"/> + <source>It is not possible to bind to the prefix %1</source> + <translation>Невозможно связать с префиксом %1</translation> + </message> + <message> + <location line="+30"/> + <source>Two namespace declaration attributes have the same name: %1.</source> + <translation>Два атрибута объявления пространств имён имеют одинаковое имя: %1.</translation> + </message> + <message> + <location line="+89"/> + <source>The namespace URI must be a constant and cannot use enclosed expressions.</source> + <translation>URI пространства имён должен быть константой и не может содержать выражений.</translation> + </message> + <message> + <location line="+699"/> + <location line="+71"/> + <source>%1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported.</source> + <translation>%1 является объявлением атрибута вне области объявлений. Имейте в виду, возможность импорта схем не поддерживается.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/type/qcardinality.cpp" line="+55"/> + <source>empty</source> + <translation>пусто</translation> + </message> + <message> + <location line="+2"/> + <source>zero or one</source> + <translation>нуль или один</translation> + </message> + <message> + <location line="+2"/> + <source>exactly one</source> + <translation>ровно один</translation> + </message> + <message> + <location line="+2"/> + <source>one or more</source> + <translation>один или более</translation> + </message> + <message> + <location line="+2"/> + <source>zero or more</source> + <translation>нуль или более</translation> + </message> + <message> + <location filename="../src/xmlpatterns/type/qtypechecker.cpp" line="+156"/> + <source>The focus is undefined.</source> + <translation>Фокус не определён.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/utils/qoutputvalidator.cpp" line="+93"/> + <source>An attribute by name %1 has already been created.</source> + <translation>Атрибут с именем %1 уже существует.</translation> + </message> + <message> <location filename="../src/xmlpatterns/api/qiodevicedelegate.cpp" line="+84"/> <source>Network timeout.</source> <translation>Время ожидания сети истекло.</translation> @@ -8509,7 +10168,7 @@ Please choose a different file name.</source> <message> <location filename="../src/xmlpatterns/api/qxmlserializer.cpp" line="+320"/> <source>Element %1 can't be serialized because it appears outside the document element.</source> - <translation>Элемент %1 не может быть сериализован, так как присутствует вне документа.</translation> + <translation>Элемент %1 не может быть сериализован, так как расположен вне документа.</translation> </message> <message> <location filename="../src/xmlpatterns/data/qabstractdatetime.cpp" line="+80"/> @@ -8539,12 +10198,12 @@ Please choose a different file name.</source> <message> <location line="+49"/> <source>Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; </source> - <translation>Время 24:%1:%2.%3 неверно. 24 часа, но минуты, секунды и/или миллисекунды отличны от 0; </translation> + <translation>Время 24:%1:%2.%3 некорректно. 24 часа, но минуты, секунды и/или миллисекунды отличны от 0; </translation> </message> <message> <location line="+13"/> <source>Time %1:%2:%3.%4 is invalid.</source> - <translation>Время %1:%2:%3.%4 неверно.</translation> + <translation>Время %1:%2:%3.%4 некорректно.</translation> </message> <message> <location line="+115"/> @@ -8552,43 +10211,12 @@ Please choose a different file name.</source> <translation>Переполнение: невозможно представить дату.</translation> </message> <message> - <location filename="../src/xmlpatterns/data/qabstractduration.cpp" line="+99"/> - <location line="+15"/> - <source>At least one component must be present.</source> - <translation>Должна присутствовать как минимум одна компонента.</translation> - </message> - <message> - <location line="-7"/> + <location filename="../src/xmlpatterns/data/qabstractduration.cpp" line="-7"/> <source>At least one time component must appear after the %1-delimiter.</source> <translation>Как минимум одна компонента времени должна следовать за разделителем '%1'.</translation> </message> <message> - <location filename="../src/xmlpatterns/data/qanyuri_p.h" line="+132"/> - <source>%1 is not a valid value of type %2.</source> - <translation>%1 не является правильным значением типа %2.</translation> - </message> - <message> - <location filename="../src/xmlpatterns/data/qatomiccasters_p.h" line="+223"/> - <source>When casting to %1 from %2, the source value cannot be %3.</source> - <translation>При преобразовании %2 в %1 исходное значение не может быть %3.</translation> - </message> - <message> - <location filename="../src/xmlpatterns/data/qatomicmathematicians.cpp" line="+65"/> - <source>Integer division (%1) by zero (%2) is undefined.</source> - <translation>Целочисленное деление (%1) на нуль (%2) не определено.</translation> - </message> - <message> - <location line="+7"/> - <source>Division (%1) by zero (%2) is undefined.</source> - <translation>Деление (%1) на нуль (%2) не определено.</translation> - </message> - <message> - <location line="+7"/> - <source>Modulus division (%1) by zero (%2) is undefined.</source> - <translation>Деление по модулю (%1) на нуль (%2) не определено.</translation> - </message> - <message> - <location line="+122"/> + <location filename="../src/xmlpatterns/data/qatomicmathematicians.cpp" line="+201"/> <location line="+32"/> <source>Dividing a value of type %1 by %2 (not-a-number) is not allowed.</source> <translation>Деление числа типа %1 на %2 (не числовое выражение) недопустимо.</translation> @@ -8609,11 +10237,6 @@ Please choose a different file name.</source> <translation>Значение типа %1 не может быть булевым значением.</translation> </message> <message> - <location filename="../src/xmlpatterns/data/qboolean.cpp" line="+78"/> - <source>Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values.</source> - <translation>Булево значение не может быть вычислено для последовательностей, которые содержат два и более атомарных значения.</translation> - </message> - <message> <location filename="../src/xmlpatterns/data/qderivedinteger_p.h" line="+402"/> <source>Value %1 of type %2 exceeds maximum (%3).</source> <translation>Значение %1 типа %2 больше максимума (%3).</translation> @@ -8714,45 +10337,16 @@ Please choose a different file name.</source> <translation>Последняя часть пути должна содержать узлы или атомарные значения, но не может содержать и то, и другое одновременно.</translation> </message> <message> - <location filename="../src/xmlpatterns/expr/qprocessinginstructionconstructor.cpp" line="+84"/> - <source>The data of a processing instruction cannot contain the string %1</source> - <translation>Данные обрабатываемой инструкции не могут содержать строку '%1'</translation> - </message> - <message> <location filename="../src/xmlpatterns/expr/qqnameconstructor.cpp" line="+82"/> <source>No namespace binding exists for the prefix %1</source> <translation>Отсутствует привязка к пространству имён для префикса %1</translation> </message> <message> - <location filename="../src/xmlpatterns/expr/qqnameconstructor_p.h" line="+156"/> + <location filename="../src/xmlpatterns/expr/qqnameconstructor_p.h" line="-12"/> <source>No namespace binding exists for the prefix %1 in %2</source> <translation>Отсутствует привязка к пространству имён для префикса %1 в %2</translation> </message> <message> - <location line="+12"/> - <location filename="../src/xmlpatterns/functions/qqnamefns.cpp" line="+69"/> - <source>%1 is an invalid %2</source> - <translation>%1 некоррекно для %2</translation> - </message> - <message numerus="yes"> - <location filename="../src/xmlpatterns/functions/qabstractfunctionfactory.cpp" line="+77"/> - <source>%1 takes at most %n argument(s). %2 is therefore invalid.</source> - <translation> - <numerusform>%1 принимает не более %n аргумента. Следовательно, %2 неверно.</numerusform> - <numerusform>%1 принимает не более %n аргументов. Следовательно, %2 неверно.</numerusform> - <numerusform>%1 принимает не более %n аргументов. Следовательно, %2 неверно.</numerusform> - </translation> - </message> - <message numerus="yes"> - <location line="+11"/> - <source>%1 requires at least %n argument(s). %2 is therefore invalid.</source> - <translation> - <numerusform>%1 принимает не менее %n аргумента. Следовательно, %2 неверно.</numerusform> - <numerusform>%1 принимает не менее %n аргументов. Следовательно, %2 неверно.</numerusform> - <numerusform>%1 принимает не менее %n аргументов. Следовательно, %2 неверно.</numerusform> - </translation> - </message> - <message> <location filename="../src/xmlpatterns/functions/qaggregatefns.cpp" line="+120"/> <source>The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration.</source> <translation>Первый аргумент %1 не может быть типа %2. Он должен быть числового типа, типа xs:yearMonthDuration или типа xs:dayTimeDuration.</translation> @@ -8768,64 +10362,29 @@ Please choose a different file name.</source> <translation>Второй аргумент %1 не может быть типа %2. Он должен быть типа %3, %4 или %5.</translation> </message> <message> - <location filename="../src/xmlpatterns/functions/qassemblestringfns.cpp" line="+88"/> - <source>%1 is not a valid XML 1.0 character.</source> - <translation>Символ %1 недопустим для XML 1.0.</translation> - </message> - <message> <location filename="../src/xmlpatterns/functions/qdatetimefn.cpp" line="+86"/> <source>If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same.</source> <translation>Если оба значения имеют региональные смещения, смещения должны быть одинаковы. %1 и %2 не одинаковы.</translation> </message> <message> - <location filename="../src/xmlpatterns/functions/qerrorfn.cpp" line="+61"/> - <source>%1 was called.</source> - <translation>%1 было вызвано.</translation> - </message> - <message> - <location filename="../src/xmlpatterns/functions/qpatternmatchingfns.cpp" line="+94"/> + <location filename="../src/xmlpatterns/functions/qpatternmatchingfns.cpp" line="-65"/> <source>%1 must be followed by %2 or %3, not at the end of the replacement string.</source> - <translation>'%1' должно сопровождаться '%2' или '%3', но не в конце замещаемой строки.</translation> - </message> - <message> - <location line="+39"/> - <source>In the replacement string, %1 must be followed by at least one digit when not escaped.</source> - <translation>В замещаемой строке '%1' должно сопровождаться как минимум одной цифрой, если неэкранировано.</translation> - </message> - <message> - <location line="+26"/> - <source>In the replacement string, %1 can only be used to escape itself or %2, not %3</source> - <translation>В замещаемой строке символ '%1' может использоваться только для экранирования самого себя или '%2', но не '%3'</translation> + <translation>"%1" должно сопровождаться "%2" или "%3", но не в конце замещаемой строки.</translation> </message> <message> - <location filename="../src/xmlpatterns/functions/qpatternplatform.cpp" line="+92"/> - <source>%1 matches newline characters</source> - <translation>%1 соответствует символам конца строки</translation> - </message> - <message> - <location line="+4"/> + <location filename="../src/xmlpatterns/functions/qpatternplatform.cpp" line="-110"/> <source>%1 and %2 match the start and end of a line.</source> <translation>%1 и %2 соответствуют началу и концу строки.</translation> </message> <message> - <location line="+6"/> - <source>Matches are case insensitive</source> - <translation>Соответствия регистронезависимы</translation> - </message> - <message> - <location line="+4"/> + <location line="+10"/> <source>Whitespace characters are removed, except when they appear in character classes</source> - <translation type="unfinished">Символы пробелов удалены, за исключением тех, что были в классах символов</translation> - </message> - <message> - <location line="+100"/> - <source>%1 is an invalid regular expression pattern: %2</source> - <translation>%1 - неверный шаблон регулярного выражения: %2</translation> + <translation>Символы пробелов удалены (за исключением тех, что были в символах классов)</translation> </message> <message> - <location line="+30"/> + <location line="+130"/> <source>%1 is an invalid flag for regular expressions. Valid flags are:</source> - <translation>%1 - неверный флаг для регулярного выражения. Допустимые флаги:</translation> + <translation>%1 - некорректный флаг регулярного выражения. Допустимые флаги:</translation> </message> <message> <location filename="../src/xmlpatterns/functions/qqnamefns.cpp" line="+17"/> @@ -8833,26 +10392,6 @@ Please choose a different file name.</source> <translation>Префикс не должен быть указан, если первый параметр - пустая последовательность или пустая строка (вне пространства имён). Был указан префикс %1.</translation> </message> <message> - <location filename="../src/xmlpatterns/functions/qsequencefns.cpp" line="+346"/> - <source>It will not be possible to retrieve %1.</source> - <translation>Будет невозможно восстановить %1.</translation> - </message> - <message> - <location filename="../src/xmlpatterns/functions/qcontextnodechecker.cpp" line="+54"/> - <source>The root node of the second argument to function %1 must be a document node. %2 is not a document node.</source> - <translation>Корневой узел второго аргумента функции %1 должен быть документом. %2 не является документом.</translation> - </message> - <message> - <location filename="../src/xmlpatterns/functions/qsequencegeneratingfns.cpp" line="+266"/> - <source>The default collection is undefined</source> - <translation>Набор по умолчанию не определён</translation> - </message> - <message> - <location line="+13"/> - <source>%1 cannot be retrieved</source> - <translation>%1 не может быть восстановлен</translation> - </message> - <message> <location filename="../src/xmlpatterns/functions/qstringvaluefns.cpp" line="+252"/> <source>The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization).</source> <translation>Форма нормализации %1 не поддерживается. Поддерживаются только %2, %3, %4, %5 и пустая, т.е. пустая строка (без нормализации).</translation> @@ -8863,144 +10402,22 @@ Please choose a different file name.</source> <translation>Региональное смещение должно быть в переделах от %1 до %2 включительно. %3 выходит за допустимые пределы.</translation> </message> <message> - <location line="+12"/> - <source>%1 is not a whole number of minutes.</source> - <translation>%1 не является полным количеством минут.</translation> - </message> - <message> <location filename="../src/xmlpatterns/janitors/qcardinalityverifier.cpp" line="+58"/> <source>Required cardinality is %1; got cardinality %2.</source> <translation>Необходимо %1 элементов, получено %2.</translation> </message> <message> - <location filename="../src/xmlpatterns/janitors/qitemverifier.cpp" line="+67"/> - <source>The item %1 did not match the required type %2.</source> - <translation>Элемент %1 не соответствует необходимому типу %2.</translation> - </message> - <message> - <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+352"/> - <location line="+7323"/> - <source>%1 is an unknown schema type.</source> - <translation>%1 является схемой неизвестного типа.</translation> - </message> - <message> - <location line="-7254"/> - <source>A template with name %1 has already been declared.</source> - <translation>Шаблон с именем %1 уже был объявлен.</translation> - </message> - <message> - <location line="+213"/> - <source>Only one %1 declaration can occur in the query prolog.</source> - <translation>Только одно объявление %1 может присутствовать в прологе запроса.</translation> - </message> - <message> - <location line="+188"/> - <source>The initialization of variable %1 depends on itself</source> - <translation>Инициализация переменной %1 зависит от себя самой</translation> - </message> - <message> - <location filename="../src/xmlpatterns/parser/qparsercontext.cpp" line="+93"/> - <source>The variable %1 is unused</source> - <translation>Переменная %1 не используется</translation> - </message> - <message> - <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+2904"/> - <source>Version %1 is not supported. The supported XQuery version is 1.0.</source> - <translation>Версия %1 не поддерживается. Поддерживается XQuery версии 1.0.</translation> - </message> - <message> - <location line="+16"/> + <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="-3944"/> <source>The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2.</source> - <translation>Кодировка %1 неверна. Имя кодировки должно содержать только символы латиницы без пробелов и должно удовлетворять регулярному выражению %2.</translation> - </message> - <message> - <location line="+55"/> - <source>No function with signature %1 is available</source> - <translation>Функция с сигнатурой %1 отсутствует</translation> - </message> - <message> - <location line="+72"/> - <location line="+10"/> - <source>A default namespace declaration must occur before function, variable, and option declarations.</source> - <translation>Объявление пространство имён по умолчанию должно быть до объявления функций, переменных и опций.</translation> - </message> - <message> - <location line="+10"/> - <source>Namespace declarations must occur before function, variable, and option declarations.</source> - <translation>Объявление пространства имён должно быть до объявления функций, переменных и опций.</translation> - </message> - <message> - <location line="+11"/> - <source>Module imports must occur before function, variable, and option declarations.</source> - <translation>Импортируемые модули должны быть указаны до объявления функций, переменных и опций.</translation> - </message> - <message> - <location line="+200"/> - <source>It is not possible to redeclare prefix %1.</source> - <translation>Невозможно переопределить префикс %1.</translation> - </message> - <message> - <location line="+18"/> - <source>Prefix %1 is already declared in the prolog.</source> - <translation>Префикс %1 уже объявлен в прологе.</translation> - </message> - <message> - <location line="+95"/> - <source>The name of an option must have a prefix. There is no default namespace for options.</source> - <translation>Название опции должно содержать префикс. Нет пространства имён по умолчанию для опций.</translation> - </message> - <message> - <location line="+171"/> - <source>The Schema Import feature is not supported, and therefore %1 declarations cannot occur.</source> - <translation>Возможность импорта схем не поддерживается, следовательно, объявлений %1 быть не должно.</translation> - </message> - <message> - <location line="+13"/> - <source>The target namespace of a %1 cannot be empty.</source> - <translation>Целевое пространство имён %1 не может быть пустым.</translation> + <translation>Имя кодировки %1 некорректно. Имя кодировки должно содержать только символы латиницы без пробелов и должно удовлетворять регулярному выражению %2.</translation> </message> <message> - <location line="+8"/> - <source>The module import feature is not supported</source> - <translation>Возможность импорта модулей не поддерживается</translation> - </message> - <message> - <location line="-403"/> + <location line="+260"/> <source>The keyword %1 cannot occur with any other mode name.</source> <translation>Ключевое слово %1 не может встречаться с любым другим названием режима.</translation> </message> <message> - <location line="+551"/> - <source>A stylesheet function must have a prefixed name.</source> - <translation>Функция стилей должна иметь имя с префиксом.</translation> - </message> - <message> - <location line="+9"/> - <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this)</source> - <translation>Пространство имён для пользовательских функций не может быть пустым (попробуйте предопределённый префикс %1, который существует для подобных ситуаций)</translation> - </message> - <message> - <location line="+9"/> - <source>The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases.</source> - <translation>Пространтсво имён %1 зарезервировано, поэтому пользовательские функции не могут его использовать. Попробуйте предопределённый префикс %2, который существует для подобных ситуаций.</translation> - </message> - <message> - <location line="+12"/> - <source>The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2</source> - <translation>Пространство имён пользовательской функции в модуле библиотеки должен соответствовать пространству имён модуля. Другими словами, он должен быть %1 вместо %2</translation> - </message> - <message> - <location line="+34"/> - <source>A function already exists with the signature %1.</source> - <translation>Функция с сигнатурой %1 уже существует.</translation> - </message> - <message> - <location line="+23"/> - <source>No external functions are supported. All supported functions can be used directly, without first declaring them as external</source> - <translation>Внешние функции не поддерживаются. Все поддерживаемые функции могут использоваться напрямую без первоначального объявления их в качестве внешних</translation> - </message> - <message> - <location line="-3755"/> + <location line="-3117"/> <source>No variable with name %1 exists</source> <translation>Переменная с именем %1 отсутствует</translation> </message> @@ -9025,7 +10442,17 @@ Please choose a different file name.</source> <translation>Отсутствует значение для внешней переменной с именем %1.</translation> </message> <message> - <location line="+220"/> + <location line="+96"/> + <source>A stylesheet function must have a prefixed name.</source> + <translation>Функция стилей должна иметь имя с префиксом.</translation> + </message> + <message> + <location line="+18"/> + <source>The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases.</source> + <translation>Пространтсво имён %1 зарезервировано, поэтому пользовательские функции не могут его использовать. Попробуйте предопределённый префикс %2, который существует для подобных ситуаций.</translation> + </message> + <message> + <location line="+106"/> <source>An argument with name %1 has already been declared. Every argument name must be unique.</source> <translation>Аргумент с именем %1 уже объявлен. Имя каждого аргумента должно быть уникальным.</translation> </message> @@ -9062,12 +10489,12 @@ Please choose a different file name.</source> <message> <location line="+126"/> <source>%1 is an invalid template mode name.</source> - <translation>%1 является неверным шаблоном имени режима.</translation> + <translation>%1 не является корректным шаблоном имени режима.</translation> </message> <message> <location line="+44"/> <source>The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide.</source> - <translation type="unfinished">Имя переменной, связанной с выражением for, должно отличаться от позиционной переменной. Две переменные с именем %1 конфликтуют.</translation> + <translation>Имя переменной, связанной с выражением for, должно отличаться от позиционной переменной. Две переменные с именем %1 конфликтуют.</translation> </message> <message> <location line="+778"/> @@ -9085,29 +10512,14 @@ Please choose a different file name.</source> <translation>Имя каждого параметра шаблона должно быть уникальным, но %1 повторяется.</translation> </message> <message> - <location line="+129"/> - <source>The %1-axis is unsupported in XQuery</source> - <translation>Ось %1 не поддерживается в XQuery</translation> - </message> - <message> - <location line="+333"/> + <location line="+462"/> <source>No function with name %1 is available.</source> <translation>Функция с именем %1 отсутствует.</translation> </message> <message> - <location line="+250"/> - <source>An attribute with name %1 has already appeared on this element.</source> - <translation>Атрибут с именем %1 уже существует для данного элемента.</translation> - </message> - <message> - <location line="+614"/> - <source>%1 is not a valid name for a processing-instruction.</source> - <translation>%1 является неверным названием для инструкции обработки.</translation> - </message> - <message> - <location line="-7099"/> + <location line="-6235"/> <source>%1 is not a valid numeric literal.</source> - <translation>%1 является неверным числовым литералом.</translation> + <translation>%1 не является корректным числовым литералом.</translation> </message> <message> <location line="-152"/> @@ -9125,22 +10537,7 @@ Please choose a different file name.</source> <translation>Встречена конструкция, запрещённая для текущего языка (%1).</translation> </message> <message> - <location line="+6482"/> - <source>The namespace URI cannot be the empty string when binding to a prefix, %1.</source> - <translation>URI пространства имён не может быть пустой строкой при связывании с префиксом %1.</translation> - </message> - <message> - <location line="+7"/> - <source>%1 is an invalid namespace URI.</source> - <translation>%1 - неверный URI пространства имён.</translation> - </message> - <message> - <location line="+6"/> - <source>It is not possible to bind to the prefix %1</source> - <translation>Невозможно связать с префиксом %1</translation> - </message> - <message> - <location line="+7"/> + <location line="+6502"/> <source>Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared).</source> <translation>Пространство имён %1 может быть связано только с %2 (в данном случае уже предопределено).</translation> </message> @@ -9150,17 +10547,12 @@ Please choose a different file name.</source> <translation>Префикс %1 может быть связан только с %2 (в данном случае уже предопределено).</translation> </message> <message> - <location line="+15"/> - <source>Two namespace declaration attributes have the same name: %1.</source> - <translation>Два атрибута объявления пространств имён имеют одинаковое имя: %1.</translation> - </message> - <message> - <location line="+89"/> - <source>The namespace URI must be a constant and cannot use enclosed expressions.</source> - <translation>URI пространства имён должно быть константой и не может содержать выражений.</translation> + <location line="+120"/> + <source>An attribute with name %1 has already appeared on this element.</source> + <translation>Атрибут с именем %1 уже существует для данного элемента.</translation> </message> <message> - <location line="+77"/> + <location line="+61"/> <source>A direct element constructor is not well-formed. %1 is ended with %2.</source> <translation>Прямой конструктор элемента составлен некорректно. %1 заканчивается на %2.</translation> </message> @@ -9180,70 +10572,98 @@ Please choose a different file name.</source> <translation>%1 - не атомарный тип. Преобразование возможно только к атомарным типам.</translation> </message> <message> - <location line="+145"/> - <location line="+71"/> - <source>%1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported.</source> - <translation>%1 является объявлением атрибута вне области объявлений. Имейте в виду, возможность импорта схем не поддерживается.</translation> + <location line="+76"/> + <source>%1 is not a valid name for a processing-instruction.</source> + <translation>%1 не является корректным названием инструкции обработки.</translation> </message> <message> - <location line="+48"/> + <location line="+188"/> <source>The name of an extension expression must be in a namespace.</source> <translation>Название выражения расширения должно быть в пространстве имён.</translation> </message> <message> - <location filename="../src/xmlpatterns/type/qcardinality.cpp" line="+55"/> - <source>empty</source> - <translation>пусто</translation> + <location filename="../src/xmlpatterns/type/qtypechecker.cpp" line="-93"/> + <source>Required type is %1, but %2 was found.</source> + <translation>Требуется тип %1, но обнаружен %2.</translation> </message> <message> - <location line="+2"/> - <source>zero or one</source> - <translation>нуль или один</translation> + <location line="+44"/> + <source>Promoting %1 to %2 may cause loss of precision.</source> + <translation>Преобразование %1 к %2 может снизить точность.</translation> </message> <message> - <location line="+2"/> - <source>exactly one</source> - <translation>ровно один</translation> + <location filename="../src/xmlpatterns/utils/qoutputvalidator.cpp" line="-7"/> + <source>It's not possible to add attributes after any other kind of node.</source> + <translation>Невозможно добавлять атрибуты после любого другого вида узла.</translation> </message> <message> - <location line="+2"/> - <source>one or more</source> - <translation>один или более</translation> + <location filename="../src/xmlpatterns/utils/qxpathhelper_p.h" line="+120"/> + <source>Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported.</source> + <translation>Поддерживается только Unicode Codepoint Collation (%1). %2 не поддерживается.</translation> </message> <message> - <location line="+2"/> - <source>zero or more</source> - <translation>нуль или более</translation> + <location filename="../src/xmlpatterns/data/qatomicmathematicians.cpp" line="-180"/> + <source>Integer division (%1) by zero (%2) is undefined.</source> + <translation>Целочисленное деление (%1) на нуль (%2) не определено.</translation> </message> <message> - <location filename="../src/xmlpatterns/type/qtypechecker.cpp" line="+63"/> - <source>Required type is %1, but %2 was found.</source> - <translation>Требуется тип %1, но обнаружен %2.</translation> + <location line="+7"/> + <source>Division (%1) by zero (%2) is undefined.</source> + <translation>Деление (%1) на нуль (%2) не определено.</translation> </message> <message> - <location line="+44"/> - <source>Promoting %1 to %2 may cause loss of precision.</source> - <translation>Преобразование %1 к %2 может снизить точность.</translation> + <location line="+7"/> + <source>Modulus division (%1) by zero (%2) is undefined.</source> + <translation>Деление по модулю (%1) на нуль (%2) не определено.</translation> + </message> + <message numerus="yes"> + <location filename="../src/xmlpatterns/functions/qabstractfunctionfactory.cpp" line="+77"/> + <source>%1 takes at most %n argument(s). %2 is therefore invalid.</source> + <translation> + <numerusform>%1 принимает не более %n аргумента. Следовательно, %2 некорректно.</numerusform> + <numerusform>%1 принимает не более %n аргументов. Следовательно, %2 некорректно.</numerusform> + <numerusform>%1 принимает не более %n аргументов. Следовательно, %2 некорректно.</numerusform> + </translation> + </message> + <message numerus="yes"> + <location line="+11"/> + <source>%1 requires at least %n argument(s). %2 is therefore invalid.</source> + <translation> + <numerusform>%1 принимает не менее %n аргумента. Следовательно, %2 некорректно.</numerusform> + <numerusform>%1 принимает не менее %n аргументов. Следовательно, %2 некорректно.</numerusform> + <numerusform>%1 принимает не менее %n аргументов. Следовательно, %2 некорректно.</numerusform> + </translation> </message> <message> - <location line="+49"/> - <source>The focus is undefined.</source> - <translation>Фокус не определён.</translation> + <location filename="../src/xmlpatterns/functions/qcontextnodechecker.cpp" line="+54"/> + <source>The root node of the second argument to function %1 must be a document node. %2 is not a document node.</source> + <translation>Корневой узел второго аргумента функции %1 должен быть документом. %2 не является документом.</translation> </message> <message> - <location filename="../src/xmlpatterns/utils/qoutputvalidator.cpp" line="+86"/> - <source>It's not possible to add attributes after any other kind of node.</source> - <translation>Невозможно добавлять атрибуты после любого другого вида узла.</translation> + <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="-3172"/> + <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this)</source> + <translation>Пространство имён для пользовательских функций не может быть пустым (попробуйте предопределённый префикс %1, который существует для подобных ситуаций)</translation> </message> <message> - <location line="+7"/> - <source>An attribute by name %1 has already been created.</source> - <translation>Атрибут с именем %1 уже существует.</translation> + <location line="-693"/> + <location line="+10"/> + <source>A default namespace declaration must occur before function, variable, and option declarations.</source> + <translation>Объявление пространство имён по умолчанию должно быть до объявления функций, переменных и опций.</translation> </message> <message> - <location filename="../src/xmlpatterns/utils/qxpathhelper_p.h" line="+120"/> - <source>Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported.</source> - <translation>Поддерживается только Unicode Codepoint Collation (%1). %2 не поддерживается.</translation> + <location line="+10"/> + <source>Namespace declarations must occur before function, variable, and option declarations.</source> + <translation>Объявление пространства имён должно быть до объявления функций, переменных и опций.</translation> + </message> + <message> + <location line="+11"/> + <source>Module imports must occur before function, variable, and option declarations.</source> + <translation>Импортируемые модули должны быть указаны до объявления функций, переменных и опций.</translation> + </message> + <message> + <location filename="../src/xmlpatterns/functions/qtimezonefns.cpp" line="+12"/> + <source>%1 is not a whole number of minutes.</source> + <translation>%1 не является полным количеством минут.</translation> </message> <message> <location filename="../src/xmlpatterns/api/qxmlserializer.cpp" line="+60"/> @@ -9398,12 +10818,12 @@ Please choose a different file name.</source> <message> <location line="+270"/> <source>Element %1 cannot have children.</source> - <translation>У элемента %1 не может быть потомков.</translation> + <translation>Элемент %1 не может иметь потомков.</translation> </message> <message> <location line="+434"/> <source>Element %1 cannot have a sequence constructor.</source> - <translation>У элемента %1 не может быть конструктора последовательности.</translation> + <translation type="unfinished">Элемент %1 не может иметь конструктор последовательности.</translation> </message> <message> <location line="+86"/> @@ -9414,7 +10834,7 @@ Please choose a different file name.</source> <message> <location line="+15"/> <source>A parameter in a function cannot be declared to be a tunnel.</source> - <translation type="unfinished">Параметр в функции не может быть объявлен туннелем.</translation> + <translation type="unfinished">Параметр функции не может быть объявлен туннелем.</translation> </message> <message> <location line="+149"/> @@ -9942,13 +11362,13 @@ Please choose a different file name.</source> </message> <message> <location line="+28"/> - <location line="+408"/> + <location line="+415"/> <location line="+30"/> <source>Type %1 of %2 element cannot be resolved.</source> <translation type="unfinished"></translation> </message> <message> - <location line="-416"/> + <location line="-423"/> <source>Base type %1 of complex type cannot be resolved.</source> <translation type="unfinished"></translation> </message> @@ -9958,7 +11378,7 @@ Please choose a different file name.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+279"/> + <location line="+286"/> <source>Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type.</source> <translation type="unfinished"></translation> </message> @@ -10148,7 +11568,7 @@ Please choose a different file name.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+127"/> + <location line="+143"/> <source>Document is not a XML schema.</source> <translation type="unfinished"></translation> </message> @@ -10174,7 +11594,7 @@ Please choose a different file name.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+237"/> + <location line="+243"/> <source>%1 element is not allowed to have the same %2 attribute value as the target namespace %3.</source> <translation type="unfinished"></translation> </message> @@ -10184,7 +11604,7 @@ Please choose a different file name.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+833"/> + <location line="+851"/> <location line="+158"/> <source>%1 element is not allowed inside %2 element if %3 attribute is present.</source> <translation type="unfinished"></translation> @@ -10288,7 +11708,7 @@ Please choose a different file name.</source> <message> <location line="+19"/> <source>Text or entity references not allowed inside %1 element</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Текст или ссылка на объект недопустимы в качестве содержимого элемента %1</translation> </message> <message> <location line="+41"/> @@ -10325,17 +11745,17 @@ Please choose a different file name.</source> <message> <location line="+17"/> <source>Element %1 already defined.</source> - <translation type="unfinished"></translation> + <translation>Элемент %1 уже определён.</translation> </message> <message> <location line="+11"/> <source>Attribute %1 already defined.</source> - <translation type="unfinished"></translation> + <translation>Атрибут %1 уже определён.</translation> </message> <message> <location line="+15"/> <source>Type %1 already defined.</source> - <translation type="unfinished"></translation> + <translation>Тип %1 уже определён.</translation> </message> <message> <location line="+23"/> @@ -10345,7 +11765,7 @@ Please choose a different file name.</source> <message> <location line="+11"/> <source>Element group %1 already defined.</source> - <translation type="unfinished"></translation> + <translation>Группа элементов %1 уже определёна.</translation> </message> <message> <location line="+11"/> @@ -10367,7 +11787,7 @@ Please choose a different file name.</source> <location line="+7"/> <location line="+21"/> <source>%1 is not valid according to %2.</source> - <translation type="unfinished"></translation> + <translation>%1 некорректно в соответствии с %2.</translation> </message> <message> <location line="+167"/> @@ -10592,7 +12012,7 @@ Please choose a different file name.</source> <message> <location line="+27"/> <source>Invalid QName content: %1.</source> - <translation type="unfinished"></translation> + <translation>Некорректное содержимое QName: %1.</translation> </message> <message> <location line="+17"/> @@ -10662,32 +12082,32 @@ Please choose a different file name.</source> <message> <location line="+27"/> <source>Loaded schema file is invalid.</source> - <translation type="unfinished"></translation> + <translation>Загруженный файл схемы некорректен.</translation> </message> <message> <location line="+16"/> <source>%1 contains invalid data.</source> - <translation type="unfinished"></translation> + <translation>%1 содержит некорректные данные.</translation> </message> <message> <location line="+13"/> <source>xsi:schemaLocation namespace %1 has already appeared earlier in the instance document.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Пространство имён xsi:schemaLocation %1 уже встречалось ранее в данном документе.</translation> </message> <message> <location line="+22"/> <source>xsi:noNamespaceSchemaLocation cannot appear after the first no-namespace element or attribute.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">xsi:noNamespaceSchemaLocation не может встречаться после первого не-`namespace` элемента или атрибута.</translation> </message> <message> <location line="+18"/> <source>No schema defined for validation.</source> - <translation type="unfinished"></translation> + <translation>Схема для проверки не определена.</translation> </message> <message> <location line="+10"/> <source>No definition for element %1 available.</source> - <translation type="unfinished"></translation> + <translation>Отсутствует определение элемента %1.</translation> </message> <message> <location line="+18"/> @@ -10699,7 +12119,7 @@ Please choose a different file name.</source> <message> <location line="-176"/> <source>Element %1 is not defined in this scope.</source> - <translation type="unfinished"></translation> + <translation>Элемент %1 не определён в данном контексте.</translation> </message> <message> <location line="+43"/> @@ -10719,7 +12139,7 @@ Please choose a different file name.</source> <message> <location line="+7"/> <source>Element %1 is not nillable.</source> - <translation type="unfinished"></translation> + <translation>Элемент %1 необнуляемый.</translation> </message> <message> <location line="+8"/> @@ -10729,7 +12149,7 @@ Please choose a different file name.</source> <message> <location line="+8"/> <source>Element contains content although it is nillable.</source> - <translation type="unfinished"></translation> + <translation>Элемент необнуляемый, т.к. имеет содержимое.</translation> </message> <message> <location line="+6"/> @@ -10739,7 +12159,7 @@ Please choose a different file name.</source> <message> <location line="+230"/> <source>Element %1 cannot contain other elements, as it has a fixed content.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Элемент %1 не может содержать другие элементы, т.к. имеет статическое содержимое.</translation> </message> <message> <location line="-198"/> @@ -10850,7 +12270,7 @@ Please choose a different file name.</source> <message> <location line="+64"/> <source>More than one value found for field %1.</source> - <translation type="unfinished"></translation> + <translation>Для поля %1 найдено более одного значения.</translation> </message> <message> <location line="+20"/> @@ -10860,12 +12280,12 @@ Please choose a different file name.</source> <message> <location line="+73"/> <source>ID value '%1' is not unique.</source> - <translation type="unfinished"></translation> + <translation>Значение ID "%1" неуникально.</translation> </message> <message> <location line="+11"/> <source>'%1' attribute contains invalid QName content: %2.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Атрибут `%1` имеет некорректное содержимое QName: %2.</translation> </message> </context> </TS> diff --git a/translations/qtconfig_ru.ts b/translations/qtconfig_ru.ts index 7be0f04..2d435e6 100644 --- a/translations/qtconfig_ru.ts +++ b/translations/qtconfig_ru.ts @@ -4,7 +4,7 @@ <context> <name>MainWindow</name> <message> - <location filename="../tools/qtconfig/mainwindow.cpp" line="+202"/> + <location filename="../tools/qtconfig/mainwindow.cpp" line="+204"/> <source>Desktop Settings (Default)</source> <translation>Настройки рабочего стола (по умолчанию)</translation> </message> @@ -21,13 +21,13 @@ <message> <location line="+33"/> <location line="+1"/> - <location line="+38"/> + <location line="+40"/> <location line="+1"/> <source>Auto (default)</source> <translation>Автоматически (по умолчанию)</translation> </message> <message> - <location line="-38"/> + <location line="-40"/> <source>Choose audio output automatically.</source> <translation>Автоматический выбор звукового выхода.</translation> </message> @@ -43,7 +43,7 @@ <translation>Экспериментальная поддержка aRts в GStreamer.</translation> </message> <message> - <location line="+31"/> + <location line="+33"/> <source>Phonon GStreamer backend not available.</source> <translation>Модуль поддержки GStreamer недоступен.</translation> </message> @@ -71,8 +71,8 @@ </message> <message> <location line="+0"/> - <source>Use OpenGL if avaiable</source> - <translation>Использовать OpenGL, если доступен</translation> + <source>Use OpenGL if available</source> + <translation>Использовать OpenGL, если возможно</translation> </message> <message> <location line="+2"/> @@ -173,12 +173,12 @@ <message> <location/> <source>Select GUI &Style:</source> - <translation type="unfinished">&Стиль интерфейса:</translation> + <translation>&Стиль интерфейса:</translation> </message> <message> <location/> <source>Build Palette</source> - <translation type="unfinished">Палитра</translation> + <translation>Палитра</translation> </message> <message> <location/> @@ -363,17 +363,17 @@ <message> <location/> <source>C&omboBox Effect:</source> - <translation type="unfinished">Эффект C&omboBox:</translation> + <translation type="unfinished">Эффект &выпадающего списка:</translation> </message> <message> <location/> <source>&ToolTip Effect:</source> - <translation type="unfinished">Эффект &ToolTip:</translation> + <translation type="unfinished">Эффект &подсказки:</translation> </message> <message> <location/> <source>Tool&Box Effect:</source> - <translation type="unfinished">Эффект Tool&Box:</translation> + <translation type="unfinished">Эффект панели &инструментов:</translation> </message> <message> <location/> @@ -393,7 +393,7 @@ <message> <location/> <source>Global Strut</source> - <translation type="unfinished">Специальные возможности</translation> + <translation type="unfinished">Минимальные размеры</translation> </message> <message> <location/> @@ -577,7 +577,7 @@ p, li { white-space: pre-wrap; } <message> <location/> <source>Ctrl+S</source> - <translation type="unfinished"></translation> + <translation>Ctrl+S</translation> </message> <message> <location/> |