From 4ebe96275944643a06ac4119ef707e1436df5781 Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko Date: Wed, 2 Jun 2010 11:33:24 +0200 Subject: Reset gesture when in MayBeGesture state. When a gesture recognizer switches from MayBeGesture to Cancelled gesture we need to reset the state of the recognizer, but do not send any events to the user. Reviewed-by: Thomas Zander --- src/gui/kernel/qgesturemanager.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qgesturemanager.cpp b/src/gui/kernel/qgesturemanager.cpp index 43facef..7363d70 100644 --- a/src/gui/kernel/qgesturemanager.cpp +++ b/src/gui/kernel/qgesturemanager.cpp @@ -284,6 +284,9 @@ bool QGestureManager::filterEventThroughContexts(const QMultiMap activeToMaybeGestures = m_activeGestures & newMaybeGestures; + // check if a maybe gesture switched to canceled - reset it but don't send an event + QSet maybeToCanceledGestures = m_maybeGestures & notGestures; + // check if a running gesture switched back to not gesture state, // i.e. were canceled QSet canceledGestures = m_activeGestures & notGestures; @@ -343,7 +346,8 @@ bool QGestureManager::filterEventThroughContexts(const QMultiMap undeliveredGestures; @@ -364,7 +368,7 @@ bool QGestureManager::filterEventThroughContexts(const QMultiMap endedGestures = - finishedGestures + canceledGestures + undeliveredGestures; + finishedGestures + canceledGestures + undeliveredGestures + maybeToCanceledGestures; foreach (QGesture *gesture, endedGestures) { recycle(gesture); m_gestureTargets.remove(gesture); -- cgit v0.12 From dbd16b3b6d2e6b030dd52e90eb3a38dc1a73c180 Mon Sep 17 00:00:00 2001 From: Zeno Albisser Date: Thu, 3 Jun 2010 16:54:31 +0200 Subject: fix for using .lnk files when running app from UNC Since "" is an invalid target for a .lnk file, we can return false for doStat() in case of resolving the .lnk to "". Notice that .lnk files only allow absolute paths for the target. "" is returned by readLink in case the .lnk file does not exist. Reviewed-by: Joao Task-Number: QTBUG-10863 --- src/corelib/io/qfsfileengine_win.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/corelib/io/qfsfileengine_win.cpp b/src/corelib/io/qfsfileengine_win.cpp index ec49f1a..21930e1 100644 --- a/src/corelib/io/qfsfileengine_win.cpp +++ b/src/corelib/io/qfsfileengine_win.cpp @@ -1162,7 +1162,15 @@ bool QFSFileEnginePrivate::doStat() const if (filePath.isEmpty()) return could_stat; - QString fname = filePath.endsWith(QLatin1String(".lnk")) ? readLink(filePath) : filePath; + QString fname; + if(filePath.endsWith(QLatin1String(".lnk"))) { + fname = readLink(filePath); + if(fname.isEmpty()) + return could_stat; + } + else + fname = filePath; + fname = fixIfRelativeUncPath(fname); UINT oldmode = SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX); -- cgit v0.12 From cd8a6d6836f04f66d3e7083c97f7873240afa433 Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Fri, 4 Jun 2010 12:53:36 +0200 Subject: Avoid timer starvation during high posted event activity Similar to commit bc01bb10da23d0d2308cf02a16947be836bc9a21, we need to avoid starvation of the idle time source by forcing a single, normal priority pass after processing posted events. Reviewed-by: ogoffart Task-number: QT-3467 --- src/corelib/kernel/qeventdispatcher_glib.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/corelib/kernel/qeventdispatcher_glib.cpp b/src/corelib/kernel/qeventdispatcher_glib.cpp index fd36be4..9c1c827 100644 --- a/src/corelib/kernel/qeventdispatcher_glib.cpp +++ b/src/corelib/kernel/qeventdispatcher_glib.cpp @@ -246,6 +246,7 @@ struct GPostEventSource GSource source; QAtomicInt serialNumber; int lastSerialNumber; + QEventDispatcherGlibPrivate *d; }; static gboolean postEventSourcePrepare(GSource *s, gint *timeout) @@ -274,6 +275,7 @@ static gboolean postEventSourceDispatch(GSource *s, GSourceFunc, gpointer) GPostEventSource *source = reinterpret_cast(s); source->lastSerialNumber = source->serialNumber; QCoreApplication::sendPostedEvents(); + source->d->runTimersOnceWithNormalPriority(); return true; // i dunno, george... } @@ -313,6 +315,7 @@ QEventDispatcherGlibPrivate::QEventDispatcherGlibPrivate(GMainContext *context) postEventSource = reinterpret_cast(g_source_new(&postEventSourceFuncs, sizeof(GPostEventSource))); postEventSource->serialNumber = 1; + postEventSource->d = this; g_source_set_can_recurse(&postEventSource->source, true); g_source_attach(&postEventSource->source, mainContext); -- cgit v0.12 From 2b4d2fd1ada524f4780dd7633ca34bc72d823ff1 Mon Sep 17 00:00:00 2001 From: Robert Loehning Date: Fri, 4 Jun 2010 18:37:00 +0200 Subject: Fix in Addressbook tutorial Don't add if name or address is empty. Reviewed-by: Alessandro Portale --- examples/tutorials/addressbook/part3/addressbook.cpp | 1 + examples/tutorials/addressbook/part4/addressbook.cpp | 1 + examples/tutorials/addressbook/part5/addressbook.cpp | 1 + examples/tutorials/addressbook/part6/addressbook.cpp | 1 + examples/tutorials/addressbook/part7/addressbook.cpp | 1 + 5 files changed, 5 insertions(+) diff --git a/examples/tutorials/addressbook/part3/addressbook.cpp b/examples/tutorials/addressbook/part3/addressbook.cpp index adb87ef..28a570a 100644 --- a/examples/tutorials/addressbook/part3/addressbook.cpp +++ b/examples/tutorials/addressbook/part3/addressbook.cpp @@ -125,6 +125,7 @@ void AddressBook::submitContact() if (name == "" || address == "") { QMessageBox::information(this, tr("Empty Field"), tr("Please enter a name and address.")); + return; } if (!contacts.contains(name)) { diff --git a/examples/tutorials/addressbook/part4/addressbook.cpp b/examples/tutorials/addressbook/part4/addressbook.cpp index 1b7a6c4..55d551f 100644 --- a/examples/tutorials/addressbook/part4/addressbook.cpp +++ b/examples/tutorials/addressbook/part4/addressbook.cpp @@ -134,6 +134,7 @@ void AddressBook::submitContact() if (name == "" || address == "") { QMessageBox::information(this, tr("Empty Field"), tr("Please enter a name and address.")); + return; } //! [submitContact() function part1] if (currentMode == AddingMode) { diff --git a/examples/tutorials/addressbook/part5/addressbook.cpp b/examples/tutorials/addressbook/part5/addressbook.cpp index 80c18c3..1b3f451 100644 --- a/examples/tutorials/addressbook/part5/addressbook.cpp +++ b/examples/tutorials/addressbook/part5/addressbook.cpp @@ -141,6 +141,7 @@ void AddressBook::submitContact() if (name == "" || address == "") { QMessageBox::information(this, tr("Empty Field"), tr("Please enter a name and address.")); + return; } if (currentMode == AddingMode) { diff --git a/examples/tutorials/addressbook/part6/addressbook.cpp b/examples/tutorials/addressbook/part6/addressbook.cpp index fc41190..724971c 100644 --- a/examples/tutorials/addressbook/part6/addressbook.cpp +++ b/examples/tutorials/addressbook/part6/addressbook.cpp @@ -147,6 +147,7 @@ void AddressBook::submitContact() if (name == "" || address == "") { QMessageBox::information(this, tr("Empty Field"), tr("Please enter a name and address.")); + return; } if (currentMode == AddingMode) { diff --git a/examples/tutorials/addressbook/part7/addressbook.cpp b/examples/tutorials/addressbook/part7/addressbook.cpp index 3ab8702..bf00298 100644 --- a/examples/tutorials/addressbook/part7/addressbook.cpp +++ b/examples/tutorials/addressbook/part7/addressbook.cpp @@ -149,6 +149,7 @@ void AddressBook::submitContact() if (name == "" || address == "") { QMessageBox::information(this, tr("Empty Field"), tr("Please enter a name and address.")); + return; } if (currentMode == AddingMode) { -- cgit v0.12 From 09c6a81109d3978c1583c556202c01c1e774f11f Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 4 Jun 2010 20:47:46 +0200 Subject: Make qbswap() use glibc's fast bswap_*() functions if available. Reviewed-by: Thiago Macieira --- src/corelib/global/qendian.h | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/corelib/global/qendian.h b/src/corelib/global/qendian.h index 107854c..353e8b9 100644 --- a/src/corelib/global/qendian.h +++ b/src/corelib/global/qendian.h @@ -42,6 +42,16 @@ #ifndef QENDIAN_H #define QENDIAN_H +#ifdef Q_OS_LINUX +QT_BEGIN_INCLUDE_NAMESPACE +# include +QT_END_INCLUDE_NAMESPACE +#endif + +#ifdef __GLIBC__ +#include +#endif + #include QT_BEGIN_HEADER @@ -264,6 +274,21 @@ template <> inline qint16 qFromBigEndian(const uchar *src) * and it is therefore a bit more convenient and in most cases more efficient. */ template T qbswap(T source); + +#ifdef __GLIBC__ +template <> inline quint64 qbswap(quint64 source) +{ + return bswap_64(source); +} +template <> inline quint32 qbswap(quint32 source) +{ + return bswap_32(source); +} +template <> inline quint16 qbswap(quint16 source) +{ + return bswap_16(source); +} +#else template <> inline quint64 qbswap(quint64 source) { return 0 @@ -292,6 +317,7 @@ template <> inline quint16 qbswap(quint16 source) | ((source & 0x00ff) << 8) | ((source & 0xff00) >> 8) ); } +#endif // __GLIBC__ // signed specializations template <> inline qint64 qbswap(qint64 source) -- cgit v0.12 From 51fa7df978d71a366c95c732d6a8c2576690d63a Mon Sep 17 00:00:00 2001 From: David Faure Date: Sat, 5 Jun 2010 00:06:15 +0200 Subject: Add convenience constructor to QTextOption::Tab Merge-request: 1734 Reviewed-by: Simon Hausmann --- src/gui/text/qtextoption.cpp | 10 ++++++++-- src/gui/text/qtextoption.h | 2 ++ tests/auto/qtextformat/tst_qtextformat.cpp | 5 +---- tests/auto/qtextlayout/tst_qtextlayout.cpp | 9 ++------- tests/auto/qtextodfwriter/tst_qtextodfwriter.cpp | 9 ++------- 5 files changed, 15 insertions(+), 20 deletions(-) diff --git a/src/gui/text/qtextoption.cpp b/src/gui/text/qtextoption.cpp index c1e254c..a2b8022 100644 --- a/src/gui/text/qtextoption.cpp +++ b/src/gui/text/qtextoption.cpp @@ -145,7 +145,7 @@ QTextOption &QTextOption::operator=(const QTextOption &o) \sa tabArray(), setTabStop(), setTabs() */ -void QTextOption::setTabArray(QList tabStops) +void QTextOption::setTabArray(QList tabStops) // Qt5: const ref { if (!d) d = new QTextOptionPrivate; @@ -165,7 +165,7 @@ void QTextOption::setTabArray(QList tabStops) \sa tabStops() */ -void QTextOption::setTabs(QList tabStops) +void QTextOption::setTabs(QList tabStops) // Qt5: const ref { if (!d) d = new QTextOptionPrivate; @@ -391,6 +391,12 @@ QList QTextOption::tabs() const */ /*! + \fn Tab::Tab(qreal pos, TabType tabType, QChar delim = QChar()) + Creates a tab with the given position, tab type, and (for DelimiterTab) delimiter + \since 4.6 +*/ + +/*! \fn bool Tab::operator==(const Tab &other) const Returns true if tab \a other is equal to this tab; diff --git a/src/gui/text/qtextoption.h b/src/gui/text/qtextoption.h index 1381ed1..5af7834 100644 --- a/src/gui/text/qtextoption.h +++ b/src/gui/text/qtextoption.h @@ -68,6 +68,8 @@ public: struct Q_GUI_EXPORT Tab { inline Tab() : position(80), type(QTextOption::LeftTab) { } + inline Tab(qreal pos, TabType tabType, QChar delim = QChar()) + : position(pos), type(tabType), delimiter(delim) {} inline bool operator==(const Tab &other) const { return type == other.type diff --git a/tests/auto/qtextformat/tst_qtextformat.cpp b/tests/auto/qtextformat/tst_qtextformat.cpp index ee1f4b5..9b71481 100644 --- a/tests/auto/qtextformat/tst_qtextformat.cpp +++ b/tests/auto/qtextformat/tst_qtextformat.cpp @@ -308,10 +308,7 @@ void tst_QTextFormat::getSetTabs() format.setTabPositions(tabs); Comparator c2(tabs, format.tabPositions()); - QTextOption::Tab tab2; - tab2.position = 3456; - tab2.type = QTextOption::RightTab; - tab2.delimiter = QChar('x'); + QTextOption::Tab tab2(3456, QTextOption::RightTab, QChar('x')); tabs.append(tab2); format.setTabPositions(tabs); Comparator c3(tabs, format.tabPositions()); diff --git a/tests/auto/qtextlayout/tst_qtextlayout.cpp b/tests/auto/qtextlayout/tst_qtextlayout.cpp index 1a5f493..a631f3d 100644 --- a/tests/auto/qtextlayout/tst_qtextlayout.cpp +++ b/tests/auto/qtextlayout/tst_qtextlayout.cpp @@ -980,9 +980,7 @@ void tst_QTextLayout::testCenteredTab() // test if centering the tab works. We expect the center of 'Bar.' to be at the tab point. QTextOption option = layout.textOption(); QList tabs; - QTextOption::Tab tab; - tab.type = QTextOption::CenterTab; - tab.position = 150; + QTextOption::Tab tab(150, QTextOption::CenterTab); tabs.append(tab); option.setTabs(tabs); layout.setTextOption(option); @@ -1002,10 +1000,7 @@ void tst_QTextLayout::testDelimiterTab() // try the different delimiter characters to see if the alignment works there. QTextOption option = layout.textOption(); QList tabs; - QTextOption::Tab tab; - tab.type = QTextOption::DelimiterTab; - tab.delimiter = QChar('.'); - tab.position = 100; + QTextOption::Tab tab(100, QTextOption::DelimiterTab, QChar('.')); tabs.append(tab); option.setTabs(tabs); layout.setTextOption(option); diff --git a/tests/auto/qtextodfwriter/tst_qtextodfwriter.cpp b/tests/auto/qtextodfwriter/tst_qtextodfwriter.cpp index 64c42bb..a463d86 100644 --- a/tests/auto/qtextodfwriter/tst_qtextodfwriter.cpp +++ b/tests/auto/qtextodfwriter/tst_qtextodfwriter.cpp @@ -198,14 +198,9 @@ void tst_QTextOdfWriter::testWriteStyle2() { QTextBlockFormat bf; // = cursor.blockFormat(); QList tabs; - QTextOption::Tab tab1; - tab1.position = 40; - tab1.type = QTextOption::RightTab; + QTextOption::Tab tab1(40, QTextOption::RightTab); tabs << tab1; - QTextOption::Tab tab2; - tab2.position = 80; - tab2.type = QTextOption::DelimiterTab; - tab2.delimiter = 'o'; + QTextOption::Tab tab2(80, QTextOption::DelimiterTab, 'o'); tabs << tab2; bf.setTabPositions(tabs); -- cgit v0.12 From fad226e8a6354d89fad3dbee5ab6dd07e80534bc Mon Sep 17 00:00:00 2001 From: Lorn Potter Date: Mon, 7 Jun 2010 09:30:41 +1000 Subject: make corewlan more namespace friendly --- src/plugins/bearer/corewlan/qcorewlanengine.mm | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/plugins/bearer/corewlan/qcorewlanengine.mm b/src/plugins/bearer/corewlan/qcorewlanengine.mm index a9cb65b..6ba9504 100644 --- a/src/plugins/bearer/corewlan/qcorewlanengine.mm +++ b/src/plugins/bearer/corewlan/qcorewlanengine.mm @@ -70,9 +70,10 @@ #include #include -@interface QNSListener : NSObject + +@interface QT_MANGLE_NAMESPACE(QNSListener) : NSObject { - NSNotificationCenter *center; + NSNotificationCenter *notificationCenter; CWInterface *currentInterface; QCoreWlanEngine *engine; NSLock *locker; @@ -86,16 +87,16 @@ @end -@implementation QNSListener +@implementation QT_MANGLE_NAMESPACE(QNSListener) @synthesize engine; - (id) init { [locker lock]; QMacCocoaAutoReleasePool pool; - center = [NSNotificationCenter defaultCenter]; + notificationCenter = [NSNotificationCenter defaultCenter]; currentInterface = [CWInterface interfaceWithName:nil]; - [center addObserver:self selector:@selector(notificationHandler:) name:kCWPowerDidChangeNotification object:nil]; + [notificationCenter addObserver:self selector:@selector(notificationHandler:) name:kCWPowerDidChangeNotification object:nil]; [locker unlock]; return self; } @@ -116,7 +117,7 @@ -(void)remove { [locker lock]; - [center removeObserver:self]; + [notificationCenter removeObserver:self]; [locker unlock]; } @@ -126,7 +127,7 @@ } @end -QNSListener *listener = 0; +QT_MANGLE_NAMESPACE(QNSListener) *listener = 0; QT_BEGIN_NAMESPACE @@ -296,6 +297,9 @@ void QScanThread::getUserConfigurations() for(uint row=0; row < [wifiInterfaces count]; row++ ) { CWInterface *wifiInterface = [CWInterface interfaceWithName: [wifiInterfaces objectAtIndex:row]]; + if ( ![wifiInterface power] ) + continue; + NSString *nsInterfaceName = [wifiInterface name]; // add user configured system networks SCDynamicStoreRef dynRef = SCDynamicStoreCreate(kCFAllocatorSystemDefault, (CFStringRef)@"Qt corewlan", nil, nil); @@ -430,7 +434,7 @@ void QCoreWlanEngine::initialize() QMacCocoaAutoReleasePool pool; if([[CWInterface supportedInterfaces] count] > 0 && !listener) { - listener = [[QNSListener alloc] init]; + listener = [[QT_MANGLE_NAMESPACE(QNSListener) alloc] init]; listener.engine = this; hasWifi = true; } else { @@ -785,6 +789,11 @@ void QCoreWlanEngine::networksChanged() changed = true; } + if (ptr->bearer != cpPriv->bearer) { + ptr->bearer = cpPriv->bearer; + changed = true; + } + if (ptr->state != cpPriv->state) { ptr->state = cpPriv->state; changed = true; -- cgit v0.12 From eba8e2c10c5bc1b373fdf7640962029cb2e7908f Mon Sep 17 00:00:00 2001 From: Takumi ASAKI Date: Mon, 7 Jun 2010 11:13:11 +0900 Subject: * Add Japanese tutorial documents * Add Japanese hellotr example --- .gitignore | 1 + doc/doc.pri | 11 +- doc/src/ja_JP/development/designer-manual.qdoc | 175 ++++ doc/src/ja_JP/development/qmake-manual.qdoc | 212 ++++ doc/src/ja_JP/development/qtestlib.qdoc | 432 ++++++++ doc/src/ja_JP/examples/arrowpad.qdoc | 248 +++++ doc/src/ja_JP/examples/hellotr.qdoc | 200 ++++ doc/src/ja_JP/examples/trollprint.qdoc | 286 ++++++ doc/src/ja_JP/getting-started/tutorials.qdoc | 101 ++ doc/src/ja_JP/images/linguist-hellotr_en.png | Bin 0 -> 4424 bytes doc/src/ja_JP/images/linguist-hellotr_ja.png | Bin 0 -> 5624 bytes .../snippets/code/doc_src_examples_hellotr.qdoc | 72 ++ doc/src/ja_JP/tutorials/addressbook.qdoc | 1070 ++++++++++++++++++++ doc/src/ja_JP/tutorials/widgets-tutorial.qdoc | 257 +++++ examples/ja_JP/linguist/hellotr/hellotr.pro | 13 + examples/ja_JP/linguist/hellotr/main.cpp | 71 ++ tools/qdoc3/test/qt-api-only_ja_JP.qdocconf | 30 + tools/qdoc3/test/qt-build-docs.qdocconf | 1 + tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf | 110 ++ tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf | 1 + tools/qdoc3/test/qt-html-templates_ja_JP.qdocconf | 178 ++++ tools/qdoc3/test/qt.qdocconf | 1 + tools/qdoc3/test/qt_ja_JP.qdocconf | 125 +++ tools/qdoc3/test/qt_zh_CN.qdocconf | 1 + 24 files changed, 3595 insertions(+), 1 deletion(-) create mode 100644 doc/src/ja_JP/development/designer-manual.qdoc create mode 100644 doc/src/ja_JP/development/qmake-manual.qdoc create mode 100644 doc/src/ja_JP/development/qtestlib.qdoc create mode 100644 doc/src/ja_JP/examples/arrowpad.qdoc create mode 100644 doc/src/ja_JP/examples/hellotr.qdoc create mode 100644 doc/src/ja_JP/examples/trollprint.qdoc create mode 100644 doc/src/ja_JP/getting-started/tutorials.qdoc create mode 100644 doc/src/ja_JP/images/linguist-hellotr_en.png create mode 100644 doc/src/ja_JP/images/linguist-hellotr_ja.png create mode 100644 doc/src/ja_JP/snippets/code/doc_src_examples_hellotr.qdoc create mode 100644 doc/src/ja_JP/tutorials/addressbook.qdoc create mode 100644 doc/src/ja_JP/tutorials/widgets-tutorial.qdoc create mode 100644 examples/ja_JP/linguist/hellotr/hellotr.pro create mode 100644 examples/ja_JP/linguist/hellotr/main.cpp create mode 100644 tools/qdoc3/test/qt-api-only_ja_JP.qdocconf create mode 100644 tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf create mode 100644 tools/qdoc3/test/qt-html-templates_ja_JP.qdocconf create mode 100644 tools/qdoc3/test/qt_ja_JP.qdocconf diff --git a/.gitignore b/.gitignore index 4e3b130..f398365 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ examples/*/*/* !examples/*/*/README examples/*/*/*[.]app !examples/declarative/* +!examples/ja_JP/*/* demos/*/* !demos/spectrum/* demos/spectrum/bin diff --git a/doc/doc.pri b/doc/doc.pri index 3180a61..0a5cc9a 100644 --- a/doc/doc.pri +++ b/doc/doc.pri @@ -36,9 +36,15 @@ QT_ZH_CN_DOCUMENTATION = ($$QDOC qt-api-only_zh_CN.qdocconf) && \ $$GENERATOR doc-build/html-qt_zh_CN/qt.qhp -o doc/qch/qt_zh_CN.qch \ ) +QT_JA_JP_DOCUMENTATION = ($$QDOC qt-api-only_ja_JP.qdocconf) && \ + (cd $$QT_BUILD_TREE && \ + $$GENERATOR doc-build/html-qt_ja_JP/qt.qhp -o doc/qch/qt_ja_JP.qch \ + ) + win32-g++:isEmpty(QMAKE_SH) { QT_DOCUMENTATION = $$replace(QT_DOCUMENTATION, "/", "\\\\") QT_ZH_CN_DOCUMENTATION = $$replace(QT_ZH_CN_DOCUMENTATION, "/", "\\\\") + QT_JA_JP_DOCUMENTATION = $$replace(QT_JA_JP_DOCUMENTATION, "/", "\\\\") } # Build rules: @@ -52,6 +58,9 @@ docs.depends = sub-qdoc3 adp_docs qch_docs docs_zh_CN.depends = docs docs_zh_CN.commands = $$QT_ZH_CN_DOCUMENTATION +docs_ja_JP.depends = docs +docs_ja_JP.commands = $$QT_JA_JP_DOCUMENTATION + # Install rules htmldocs.files = $$QT_BUILD_TREE/doc/html htmldocs.path = $$[QT_INSTALL_DOCS] @@ -67,5 +76,5 @@ docimages.path = $$[QT_INSTALL_DOCS]/src sub-qdoc3.depends = sub-corelib sub-xml sub-qdoc3.commands += (cd tools/qdoc3 && $(MAKE)) -QMAKE_EXTRA_TARGETS += sub-qdoc3 adp_docs qch_docs docs docs_zh_CN +QMAKE_EXTRA_TARGETS += sub-qdoc3 adp_docs qch_docs docs docs_zh_CN docs_ja_JP INSTALLS += htmldocs qchdocs docimages diff --git a/doc/src/ja_JP/development/designer-manual.qdoc b/doc/src/ja_JP/development/designer-manual.qdoc new file mode 100644 index 0000000..585af16 --- /dev/null +++ b/doc/src/ja_JP/development/designer-manual.qdoc @@ -0,0 +1,175 @@ +/**************************************************************************** +** +** 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 documentation 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$ +** +****************************************************************************/ + +/*! + \page designer-quick-start.html + + \title Qt Designer クイックガイド + + \QD を使うための基本的な手順は、以下の\bold{四つ}です。 + + \list 1 + \o フォームとオブジェクトを選択する + \o フォームにオブジェクトを配置する + \o スロットにシグナルを接続する + \o フォームをプレビューする + \endlist + + \image rgbController-screenshot.png + + Red、Green、Blue(RGB)の値を操作するために必要なコントロールを含む + 小さなウィジェット(上記スクリーンショット参照)を設計する場合を想定します。 + このウィジェットは、画像処理プログラム内のどこからでも表示できるウィジェットです。 + + \table + \row + \i \inlineimage designer-choosing-form.png + \i \bold{フォームを選択する} + + \gui{新しいフォーム} ダイアログから \gui Widget を選択して開始します。 + \endtable + + + \table + \row + \i \inlineimage rgbController-arrangement.png + \i \bold{フォームにウィジェットを配置する} + + 3つのラベル(Label)、スピンボックス(Spin Box)、垂直方向のスライダ(Vertical Slider)をフォーム上へドラッグします。 + ラベルの既定の文字列を変更するには、文字列をダブルクリックします。 + 希望するレイアウトに合わせて配置します。 + \endtable + + 画像のようにこれらのウィジェットを配置するには、 + レイアウトにウィジェットを配置する必要があります。 + これを3つグループに対して行います。 + まず "RED" ラベルを選択します。 + 次に、\key Ctrl (Mac OS X では \key Command)キーを押したまま、対応するスピンボックスとスライダを選択します。 + \gui{フォーム} メニューで、\gui{格子状に並べる}を選択します。 + + \table + \row + \i \inlineimage rgbController-form-gridLayout.png + \i \inlineimage rgbController-selectForLayout.png + \endtable + + 他の2つのラベルに対しても、対応するスピンボックスとスライダごとにこの手順を繰り返します。 + + 次の手順は、これら3つのレイアウトを組み合わせて、1つの\bold{メインレイアウト}を作成することです。 + メインレイアウトとは、トップレベルウィジェット(この場合は QWidget)のレイアウトです。 + トップレベルウィジェットにレイアウトを配置することは重要です。 + そうでなければ、ウィンドウをサイズ変更したときにウィンドウ上のウィジェットのサイズが変更されません。 + レイアウトを設定するには、フォーム上の3つのレイアウト以外の任意の場所で\gui{右クリック}し、\gui{水平に並べる}を選択します。 + または、\gui{格子状に並べる}を選択することもできます。 + そのどちらでも同じ配置(以下を参照)で表示されます。 + + \image rgbController-final-layout.png + + \note メインレイアウトはフォームに表示できません。 + メインレイアウトがインストールされているかどうかを確認するには、 + フォームをサイズ変更してみます。 + インストールされている場合は、各ウィジェットのサイズが適宜変更されます。 + または、\QD の \gui{Object Inspector} で確認することもできます。 + トップレベルウィジェットにレイアウトが配置されていない場合、 + その横に崩れたレイアウトのアイコン \inlineimage rgbController-no-toplevel-layout.png + が表示されます。 + + スライダをクリックして特定の値までドラッグするときに、 + スピンボックスにスライダの位置を反映させます。 + この操作を行うには、スライダの \l{QAbstractSlider::}{valueChanged()} + シグナルをスピンボックスの \l{QSpinBox::}{setValue()} + スロットに接続する必要があります。 + また、逆方向、すなわちスピンボックスの \l{QSpinBox::}{valueChanged()} + シグナルをスライダの \l{QAbstractSlider::value()}{setValue()} スロットに接続する必要があります。 + + この操作を行うには、\key{F4} キーを押すか、\gui{編集|シグナル/スロットの編集} を選択し、 + \gui{シグナル/スロットの編集}モードに切り替える必要があります。 + + \table + \row + \i \inlineimage rgbController-signalsAndSlots.png + \i \bold{シグナルをスロットに接続する} + + スライダをクリックし、カーソルをスピンボックスまでドラッグします。 + 以下のような \gui{シグナルスロットを設定} ダイアログがポップアップ表示されます。 + 適切なシグナルとスロットを選択し、\gui OK をクリックします。 + \endtable + + \image rgbController-configure-connection1.png + + 手順を(逆の順序で)繰り返し、 + スピンボックスをクリックしてカーソルをスライダまでドラッグし、 + スピンボックスの \l{QSpinBox::}{valueChanged()} シグナルを、 + スライダの \l{QAbstractSlider::value()}{setValue()} スロットに接続します。 + + 以下のスクリーンショットは、適切なシグナルとスロットを選択するためのガイドとして利用できます。 + + \image rgbController-configure-connection2.png + + RGBコントローラーの "RED" コンポーネントのオブジェクトが正常に接続されたので、 + "GREEN" および "BLUE" コンポーネントにも同じ手順を繰り返します。 + + RGB値の範囲は 0 ~ 255 であるため、 + スピンボックスとスライダを特定の範囲に制限する必要があります。 + + \table + \row + \i \inlineimage rgbController-property-editing.png + \i \bold{ウィジェットのプロパティを設定する} + + 最初のスピンボックスをクリックします。 + \gui{プロパティエディタ}に \l{QSpinBox} のプロパティが表示されます。 + \l{QSpinBox::}{maximum} のプロパティに、"255" と入力します。 + 次に、最初の垂直方向のスライダをクリックすると、 + \l{QAbstractSlider} のプロパティが表示されます。 + \l{QAbstractSlider::}{maximum} のプロパティにも、"255" と入力します。 + 残りのスピンボックスとスライダに対しても、この処理を繰り返します。 + \endtable + + ここで、フォームをプレビューし、アプリケーションの外観を確認します。 + この操作を行うには、\key{Ctrl + R} を押すか、 + \gui{フォーム}メニューから\gui{プレビュー}を選択します。 + スライダをドラッグすると、 + スピンボックスにその値が反映されます(逆の場合も同じ)。 + またサイズを変更し、子ウィジェットの管理に使用するレイアウトが + どのようにウィンドウのさまざまなサイズに対応しているか確認します。 +*/ + diff --git a/doc/src/ja_JP/development/qmake-manual.qdoc b/doc/src/ja_JP/development/qmake-manual.qdoc new file mode 100644 index 0000000..8c9297f --- /dev/null +++ b/doc/src/ja_JP/development/qmake-manual.qdoc @@ -0,0 +1,212 @@ +/**************************************************************************** +** +** 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 documentation 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$ +** +****************************************************************************/ + +/*! + \page qmake-tutorial.html + \title qmake チュートリアル + + このチュートリアルでは \c qmake の使い方を説明します。 + このチュートリアルを読み終わったら \c qmake + のユーザガイドを読むことをお勧めします。 + + \section1 簡単な例 + + アプリケーションの基本的な実装は既に完了していて、 + 次のファイルが作成されていると仮定します。 + + \list + \o hello.cpp + \o hello.h + \o main.cpp + \endlist + + これらのファイルは Qt ディストリビューションの + \c{examples/qmake/tutorial} ディレクトリにあります。 + アプリケーションの設定について知っておくべきことは、 + それが Qt で書かれているということだけです。 + まず、テキストエディタで \c{examples/qmake/tutorial} に + \c hello.pro というファイルを作成します。 + 最初にすることは、開発プロジェクトに含まれるソースファイルとヘッダファイルを + \c qmake に教える行を追加することです。 + + ソースファイルをプロジェクトファイルに追加します。 + これには \l{qmake Variable Reference#SOURCES}{SOURCES} 変数を使います。 + 新しい行を作り、\c{SOURCES +=}、続いて hello.cpp を入力します。 + つまり、以下のようになります: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 108 + + これを以下のようになるまでプロジェクトの各ソースファイルに対して行います: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 109 + + make に似たシンタックスを使いたい場合は、 + 以下のように改行をエスケープしてすべてのファイルを 1 行に書きます: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 110 + + ソースファイルの一覧をプロジェクトファイルに追加しました。 + 次にヘッダファイルを追加します。 + ヘッダファイルはソースファイルと全く同じ方法で追加することができます。 + ただし変数は \l{qmake Variable Reference#HEADERS}{HEADERS} + を使います。 + + これを終えると、プロジェクトファイルは以下のようになるでしょう: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 111 + + ターゲットの名前は自動的に設定され、 + プロジェクトファイルと同じ名前になります。 + ただしプラットフォームに合わせたサフィックスがつけられます。 + 例えば、プロジェクトファイルが \c hello.pro である場合、 + ターゲットは Windows では \c hello.exe 、Unix では \c hello になります。 + プロジェクトファイルで別の名前を指定することもできます: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 112 + + 最後に \l{qmake Variable Reference#CONFIG}{CONFIG} 変数を設定します。 + このアプリケーションは Qt アプリケーションなので \c CONFIG に + \c qt を追加する必要があります。 + \c qmake は リンクの必要があるライブラリを追加し、 + \c moc と \c uic の実行コマンドが Makefile に含まれるようにします。 + + 最終的なプロジェクトファイルは以下のようになります: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 113 + + \c qmake を使って、このアプリケーションのための Makefile を生成します。 + プロジェクトのディレクトリでコマンドラインに次のように入力します: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 114 + + そして、使用するコンパイラによって \c make または \c nmake を入力します。 + + Visual Studio ユーザの場合、\c qmake は、以下のように + \c .dsp ファイルまたは \c .vcproj ファイルも作成できます: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 115 + + \section1 アプリケーションをデバッグできるようにする + + アプリケーションのリリースバージョンはデバッグシンボルなどのデバッグ情報を含みません。 + 開発中は、関連情報を含むアプリケーションのデバッグバージョンを作成するのが便利です。 + これは、プロジェクトファイルの \c CONFIG 変数に \c debug + を追加することで簡単に実現できます。 + + たとえば: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 116 + + 直前の例と同様に、Makefile を生成するには \c qmake を使います。 + アプリケーションをデバッグ環境で実行する際に役に立つ情報を得られるようになります。 + + \section1 プラットフォーム固有のソースファイルを追加する + + 数時間コーディングをしていると、 + アプリケーションにプラットフォーム固有な部分が出てきて + プラットフォーム固有のコードを別のファイルに分けたい場合があるかもしれません。 + ここでは 2 つのファイル \c hellowin.cpp と \c hellounix.cpp があるとして、 + これをプロジェクトファイルに追加します。 + これらのファイルをそのまま \c SOURCES 変数に追加することはできません。 + なぜなら、両方のファイルが Makefile に追加されてしまうからです。 + \c qmake が実行されたプラットフォームにしたがって処理されるスコープを使う必要があります。 + + Windows 用のファイルを追加するシンプルなスコープは以下のようになります: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 117 + + \c qmake が Windows 上で実行されると、ソースファイルのリストに + \c hellowin.cpp が追加されます。 + \c qmake が他のプラットフォームで実行された場合、この部分は無視されます。 + 次に Unix 用ファイルのスコープを作成します。 + + これを終えると、プロジェクトファイルは以下のようになります: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 118 + + これまでと同様に、Makefile を生成するには \c qmake を使います。 + + \section1 ファイルが存在しない場合に qmake を中止する + + 特定のファイルが存在しない場合に Makefile を作成したくない場合、 + exists() 関数を使ってファイルが存在するかどうかを確認することができます。 + また error() 関数を使って \c qmake の処理を中止させることができます。 + これらの関数はスコープとして動作します。 + 使い方はスコープの条件をこれらの関数で置き換えるだけです。 + \c main.cpp ファイルの確認は以下のようになります : + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 119 + + 記号 \c{!} はテストを否定します。 + つまり \c{exists( main.cpp )} はファイルが存在する場合に真になり、 + \c{!exists( main.cpp )} はファイルが存在しない場合に真になります。 + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 120 + + 前と同様に、\c qmake を実行して Makefile を生成します。 + 仮に \c main.cpp の名前を変更すると、上記のメッセージが表示され、 + \c qmake は処理を中止します。 + + \section1 複数の条件をチェックする + + Windows を使っていて、 + コマンドラインからこのアプリケーションを実行したときに + qDebug() の出力を見ることができるようにしたい場合、 + アプリケーションをコンソールの設定を追加してビルドする必要があります。 + Windows で Makefile をこの設定にするには、 + \c CONFIG に \c console を追加します。 + Windows で実行されていて、\e{かつ} \c CONFIG にすでに \c debug + がある場合にのみ \c CONFIG を追加したい場合があるかもしれません。 + このような場合、2 つのスコープをネストさせて使います。 + まず 1 つのスコープを作成し、その中にもう 1 つスコープを作成します。 + そして 2 つのスコープの中に設定を書きます。例えば: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 121 + + ネストされたスコープはコロンを使ってつなぐことができます。 + 最終的なプロジェクトファイルは以下のようになります: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 122 + + 以上です。\c qmake のチュートリアルが終了しました。 + それでは、あなたの開発プロジェクトのプロジェクトファイルを作成してみましょう。 +*/ + diff --git a/doc/src/ja_JP/development/qtestlib.qdoc b/doc/src/ja_JP/development/qtestlib.qdoc new file mode 100644 index 0000000..65c4c3f --- /dev/null +++ b/doc/src/ja_JP/development/qtestlib.qdoc @@ -0,0 +1,432 @@ +/**************************************************************************** +** +** 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 documentation 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$ +** +****************************************************************************/ + +/*! + \page qtestlib-tutorial.html + \brief QTestLib を使ったテストの導入ガイド + \contentspage QTestLib マニュアル + \nextpage {第1章: ユニットテストの作成}{第1章} + + \title QTestLib チュートリアル + + このチュートリアルでは QTestLib フレームワークの機能の初歩的な使い方を説明します。 + このチュートリアルは全5章で構成されています: + + \list 1 + \o \l {第1章: ユニットテストの作成}{ユニットテストの作成} + \o \l {第2章: データドリブンテスト}{データドリブンテスト} + \o \l {第3章: GUI イベントのシミュレート}{GUI イベントのシミュレート} + \o \l {第4章: GUI イベントの再現}{GUI イベントの再現} + \o \l {第5章: ベンチマークの作成}{ベンチマークの作成} + \endlist + +*/ + + +/*! + \example qtestlib/tutorial1 + + \contentspage {QTestLib チュートリアル}{目次} + \nextpage {第2章: データドリブンテスト}{第2章} + + \title 第1章: ユニットテストの作成 + + 第1章では、クラスのテストを行うシンプルなユニットテストを作成して実行する方法を説明します。 + + \section1 テストを作成する + + QString クラスの挙動をテストすると仮定しましょう。 + まず、テスト関数を含むクラスが必要です。 + このクラスは、 QObject を継承する必要があります: + + \snippet examples/qtestlib/tutorial1/testqstring.cpp 0 + + QTest ヘッダーを include してください。 + それから、テストフレームワークがテスト関数を検索して実行できるよう、 + テスト関数を private slot として宣言する必要があります。 + + 次に、テスト関数を実装します。実装は以下のようになります: + + \snippet doc/src/snippets/code/doc_src_qtestlib.qdoc 8 + + \l QVERIFY() マクロは、引数として渡される式を評価します。 + 式が真と評価されるとテスト関数の実行が継続されます。 + そうでなければ、エラーメッセージがテストログに追加されテスト関数の実行が停止します。 + + テストログに詳細情報を追加したい場合は、 + \l QCOMPARE() マクロを代わりに使用してください: + + \snippet examples/qtestlib/tutorial1/testqstring.cpp 1 + + 文字列が等しくない場合、両方の文字列の内容がテストログに追加され、 + 比較に失敗した理由を直ちに確認できます。 + + 最後に、テストケースを実行可能にするために以下の2行が必要となります: + + \snippet examples/qtestlib/tutorial1/testqstring.cpp 2 + + \l QTEST_MAIN() マクロは、すべてのテスト関数を実行するシンプルな + \c main() 関数に展開されます。 + テストクラスの宣言と実装が \c .cpp ファイルに存在する場合、 + Qt のメタオブジェクト機能を動作させるために、 + 生成された moc ファイルを include する必要があります。 + + \section1 テストを実行する + + 作成したテストを実行してみましょう。 + テストが \c testqstring.cpp + として空のディレクトリに保存されていると仮定して、 + qmake を使用してプロジェクトを作成し、makefile を生成します。 + + \snippet doc/src/snippets/code/doc_src_qtestlib.qdoc 9 + + \bold {注:} Windows をお使いの場合、 \c make を \c nmake または、 + 任意のビルドツールに置き換えてください。 + + 作成した実行ファイルを実行すると、次の出力が表示されます: + + \snippet doc/src/snippets/code/doc_src_qtestlib.qdoc 10 + + おめでとうございます! + QTestLib フレームワークを使用して、 + 最初のユニットテストの作成と実行に成功しました。 +*/ + +/*! + \example qtestlib/tutorial2 + + \previouspage {第1章: ユニットテストの作成}{第1章} + \contentspage {QTestLib チュートリアル}{目次} + \nextpage {第3章: GUI イベントのシミュレート}{第3章} + + \title 第2章: データドリブンテスト + + 本章ではテストを複数回、それぞれ異なるテストデータを使用して行う方法について、 + 例を示しながら説明します。 + + これまでは、テストデータをテスト関数にハードコードしていました。 + この場合、テストデータを追加した関数は以下のようになります: + + \snippet doc/src/snippets/code/doc_src_qtestlib.qdoc 11 + + 関数が繰り返しを行うコードによって分散するのを防ぐために、 + QTestLib はテストデータのテスト関数への追加をサポートします。 + そのために、別の private slot をテストクラスに追加する必要があります: + + \snippet examples/qtestlib/tutorial2/testqstring.cpp 0 + + \section1 データ関数を記述する + + テスト関数に関連するデータ関数では、テスト関数と同じ関数名を使用して、 + 末尾に \c{_data} を追加します。 + データ関数は以下のようになります: + + \snippet examples/qtestlib/tutorial2/testqstring.cpp 1 + + まず、 \l QTest::addColumn() 関数を使用して、 + テストテーブルの2つの要素(テスト文字列(\c{"string"})および、 + QString::toUpper() 関数をその文字列に適用するときに予期された結果(\c{"result"})) + を定義します。 + + 次に、 \l QTest::newRow() 関数を使用して、 + データをテーブルに追加します。 + それぞれのデータセットは、テストテーブルでは別々の行(Row)になります。 + + \l QTest::newRow() は、データセット名をその引数として受け付けます。 + テストに失敗した場合、テストログでこのデータセット名が使用され、 + 失敗したデータの一覧が表示されます。 + 続いて、最初に任意の文字列(\c{"string"})を、次に + QString::toUpper() 関数をその文字列(\c{"string"})に適用するときに予期された結果(\c{"result"})の順に、 + テーブル行にデータセットをストリーミングします。 + + テストデータとは、二次元テーブルを指します。 + ここでは、\c string および \c result と呼ばれる2つの列と3つの行が含まれます。 + さらに、インデックスと同様に、各行に名前を関連付けます: + + \table + \header + \o index + \o name + \o string + \o result + \row + \o 0 + \o all lower + \o "hello" + \o HELLO + \row + \o 1 + \o mixed + \o "Hello" + \o HELLO + \row + \o 2 + \o all upper + \o "HELLO" + \o HELLO + \endtable + + \section1 テスト関数を書き換える + + ここで、テスト関数の書き換えを行います: + + \snippet examples/qtestlib/tutorial2/testqstring.cpp 2 + + TestQString::toUpper() 関数は 3 回実行されます。 + すなわち、関連する TestQString::toUpper_data() + 関数で作成したテストテーブルの各エントリ毎に一度実行されます。 + + TestQString::toUpper() 関数では + まず、 \l QFETCH() マクロを使用して、データセットの2つの要素を取得します。 + \l QFETCH() は、要素のデータタイプと要素名の、 + 2 つの引数を取ります。 + 次に \l QCOMPARE() マクロを使用して、テストを実行します。 + + このアプローチにより、テストの修正を行うことなく + テストに新規データを非常に簡単に追加できます。 + + このテストの場合も、テストケースを実行可能にするには、 + 同様に以下の2行が必要です: + + \snippet examples/qtestlib/tutorial2/testqstring.cpp 3 + + これまでと同様に、 \l QTEST_MAIN() マクロは + すべてのテスト関数を実行するシンプルな + \c main() 関数に展開されます。 + テストクラスの宣言と実装が \c .cpp ファイルに存在する場合、 + Qt のメタオブジェクト機能を動作させるために、 + 生成された moc ファイルを include する必要があります。 + +*/ + +/*! + \example qtestlib/tutorial3 + + \previouspage {第2章: データドリブンテスト}{第2章} + \contentspage {QTestLib チュートリアル}{目次} + \nextpage {第4章: GUI イベントの再現}{第4章} + + \title 第3章: GUI イベントのシミュレート + + QTestLib にはグラフィカルユーザインターフェースをテストするための機能があります。 + QTestLib は、ネイティブなウィンドウシステムのイベントをシミュレートする代わりに、 + Qt の内部で使われるイベントを送信します。 + このため、テストが実行されるコンピュータには + 副次的な悪影響が発生しません。 + + 本章では、シンプルな GUI テストを作成する方法を確認します。 + + \section1 GUI テストを作成する + + 今回は、 QLineEdit クラスの挙動をテストすると仮定しましょう。 + これまでと同様に、テスト関数を含むクラスが必要です: + + \snippet examples/qtestlib/tutorial3/testgui.cpp 0 + + 唯一の違いは、 QTest だけでなく、 QtGui クラスの宣言を + include する必要があることです。 + + \snippet examples/qtestlib/tutorial3/testgui.cpp 1 + + テスト関数を実装する際は、最初に QLineEdit を作成します。 + 次に、 \l QTest::keyClicks() 関数を使用して、 + "hello world" をラインエディットに入力する操作をシミュレートします。 + + \note キーボードショートカットを正しくテストするには、 + ウィジェットの表示も必要になります。 + + QTest::keyClicks() は、 + ウィジェットのキーシーケンスの入力をシミュレートします。 + 必要に応じてキーボード修飾子の指定や、 + 各キー入力後の遅延(ミリ秒単位)を指定することができます。 + 同様に、 QTest::keyClick() 、 QTest::keyPress() 、 QTest::keyRelease() 、 + QTest::mouseClick() 、 QTest::mouseDClick() 、 QTest::mouseMove() 、 + QTest::mousePress() 及び QTest::mouseRelease() 関数を使用して、 + 関連付けられた GUI イベントをシミュレートできます。 + + 最後に、 \l QCOMPARE() マクロを使用して、 + ラインエディットの文字列が正しいかどうか確認します。 + + これまでと同様に、 + テストケースを実行可能にするには、 + 以下の2行が必要です: + + \snippet examples/qtestlib/tutorial3/testgui.cpp 2 + + QTEST_MAIN() マクロは + すべてのテスト関数を実行するシンプルな + \c main() 関数に展開されます。 + テストクラスの宣言と実装が \c .cpp ファイルに存在する場合、 + Qt のメタオブジェクト機能を動作させるために、 + 生成された moc ファイルを include する必要があります。 +*/ + +/*! + \example qtestlib/tutorial4 + + \previouspage {第3章: GUI イベントのシミュレート}{第3章} + \contentspage {QTestLib チュートリアル}{目次} + \nextpage {第5章: ベンチマークの作成}{第5章} + + \title 第4章: GUI イベントの再現 + + 本章では、GUI イベントをシミュレートしたり、 + あるウィジェットで一連の GUI イベントを再生したり保存したりする方法について説明します。 + + 一連のイベントを保存して再生するアプローチは、 + \l{第2章: データドリブンテスト}{第2章} + で説明したアプローチとよく似ています。 + 必要な変更は、テストクラスにデータ関数を追加することです: + + \snippet examples/qtestlib/tutorial4/testgui.cpp 0 + + \section1 データ関数を記述する + + これまでと同様にテスト関数に関連するデータ関数では、 + テスト関数と同じ名前を使用して末尾に \c{_data} を追加します。 + + \snippet examples/qtestlib/tutorial4/testgui.cpp 1 + + まず、 QTest::addColumn() 関数を使用して、 + テーブルの2つの要素(GUI イベントのリスト(\c{"events"})および、 + QWidget のイベントのリストを適用するときに予期された結果(\c{"expected"}))を定義します。 + 最初の要素の型は \l QTestEventList であることに注意してください。 + + QTestEventList では、後で使用するテストデータの保存を行うために + GUI イベントを読み込んだり、 QWidget ウィジェットで再生したりできます。 + + 現在のデータ関数で、 \l QTestEventList を2つ作成します。 + 最初のリストには 'a' キーを一度だけ入力します。 + QTestEventList::addKeyClick() 関数を使用して、 + リストにイベントを追加します。 + 次に、QTest::newRow() 関数を使用してデータセットに名前を付けて、 + テーブルにイベントリストおよび予期された結果をストリーミングします。 + + 2つ目のリストには、2つのキー入力('a' に続いてバックスペース(Qt::Key_Backspace))を設定します。 + QTestEventList::addKeyClick() を使用してリストにイベントを追加し、 + QTest::newRow() を使用して名前を関連付けたテーブルにイベントリストおよび予期された結果を挿入します。 + + \section1 テスト関数を書き換える + + ここで、テストの書き換えを行います: + + \snippet examples/qtestlib/tutorial4/testgui.cpp 2 + + TestGui::testGui() 関数は2回実行されます。 + 関連する TestGui::testGui_data() + 関数で作成したテストデータの各エントリ毎にそれぞれ実行されます。 + + まず、\l QFETCH() マクロを使用して、データセットの2つの要素を取得します。 + \l QFETCH() は、要素のデータ型と要素名の2つの引数を取ります。 + 次に QLineEdit を作成し、 QTestEventList::simulate() 関数を使用して + ウィジェットにイベントのリストを適用します。 + + 最後に、 QCOMPARE() マクロを使用してラインエディットの文字列が正しいかどうか確認します。 + + これまでと同様に、 + テストケースを実行可能にするには、 + 以下の2行が必要です: + + \snippet examples/qtestlib/tutorial4/testgui.cpp 3 + + \l QTEST_MAIN() マクロは + すべてのテスト関数を実行するシンプルな + \c main() 関数に展開されます。 + テストクラスの宣言と実装が \c .cpp ファイルに存在する場合、 + Qt のメタオブジェクト機能を動作させるために、 + 生成された moc ファイルを include する必要があります。 +*/ + +/*! + \example qtestlib/tutorial5 + + \previouspage {第4章: GUI イベントの再現}{第4章} + \contentspage {QTestLib チュートリアル}{目次} + + \title 第5章: ベンチマークの作成 + + 最終章となる本章では QTestLib を使ってベンチマークを作成する方法について説明します。 + + \section1 ベンチマークの作成 + ベンチマークを作成するには QBENCHMARK マクロを用いてテスト関数を拡張します。 + ベンチマークテスト関数には通常、テストの準備コードと測定するコードを含む + QBENCHMARK マクロが一つ含まれます。 + QString::localeAwareCompare() のベンチマークを行う関数は以下のようになります。 + + \snippet examples/qtestlib/tutorial5/benchmarking.cpp 0 + + 測定の準備は関数の最初に行われています。 + この時点では測定は始まっていません。 + QBENCHMARK マクロで囲まれたブロックの中身のみが計測されます。 + このブロックの内部は正確な測定を行うために、何度か繰り返し実行される場合があります。 + + \l {testlib-benchmarking-measurement}{ベンチマークの方法}(バックエンド)は何種類か用意されており、 + コマンドライン引数から選択することが出来ます。 + + \section1 データ関数 + + データ関数は複数のデータでベンチマークを行うテストを作成するのに有用です。 + たとえば、ロケール準拠と標準的な比較を行う場合は以下のようになります。 + + \snippet examples/qtestlib/tutorial5/benchmarking.cpp 1 + + テスト関数ではデータに従ってベンチマークする手法を決定します。 + + \snippet examples/qtestlib/tutorial5/benchmarking.cpp 2 + + "if (useLocaleCompare)" 文はそのオーバヘッドを測定対象外とするために + QBENCHMARK マクロのブロックの外部にあります。 + ベンチマークの実行時にはそれぞれどちらか一つの QBENCHMARK マクロが実行されます。 + + \section1 外部ツール + + テストデータの可視化を行うためのツールが Qt Labs Web サイトの + \l{qtestlib-tools} プロジェクトに含まれています。 + そこには実行したテストの結果からパフォーマンスを比較したり、 + パフォーマンスのWeb用グラフを作成するツールが含まれています。 + + それらのツールの詳細と簡単なグラフの例は + \l{qtestlib-tools Announcement} を参照してください。 + +*/ + + + diff --git a/doc/src/ja_JP/examples/arrowpad.qdoc b/doc/src/ja_JP/examples/arrowpad.qdoc new file mode 100644 index 0000000..2518264 --- /dev/null +++ b/doc/src/ja_JP/examples/arrowpad.qdoc @@ -0,0 +1,248 @@ +/**************************************************************************** +** +** 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 documentation 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$ +** +****************************************************************************/ + +/*! + \example linguist/arrowpad + \title サンプル: アローパッド + + この例では、\e {Qt Linguist} の主なコンセプトである"文脈"について、 + 少し詳しく取り上げて説明します。 + また、2つ以上の言語を使用する方法についても説明します。 + + \image linguist-arrowpad_en.png + + アプリケーションで使用可能な言語の数に制限はありませんが、 + ここではフランス語とオランダ語の2言語の翻訳を使用します。 + \c arrowpad.pro の関連する行は以下のとおりです。 + + \snippet examples/linguist/arrowpad/arrowpad.pro 0 + \codeline + \snippet examples/linguist/arrowpad/arrowpad.pro 1 + + \c lupdate を実行すると、2つの類似したメッセージファイル + \c arrowpad_fr.ts と \c arrowpad_nl.ts が作成されます。 + これらのファイルにはすべてのソーステキストとその文脈が含まれます。 + それらのテキストは \c tr() の呼び出しを通じて翻訳対象として + ソースコード内でマークされているものです。 + + Qt アプリケーションの翻訳の詳細については、 + \l{Qt Linguist manual}{Qt Linguist マニュアル} をご覧ください。 + + \section1 各行の簡単な解説 + + \c arrowpad.h では、 QWidget の派生クラスである \c ArrowPad + クラスを定義します。 + 上記のスクリーンショットで + 中央の 4 つのボタンを持つウィジェットが \c ArrowPad です。 + + \snippet examples/linguist/arrowpad/arrowpad.h 0 + \snippet examples/linguist/arrowpad/arrowpad.h 1 + \snippet examples/linguist/arrowpad/arrowpad.h 2 + + \c lupdate を実行するとソーステキストの抽出だけでなく、 + 文脈へのグループ化を行うことができます。 + ソーステキストが表示されるクラスの名前が文脈となります。 + 従って、この例では、"ArrowPad" が + \c ArrowPad クラスの文字列の文脈です。 + \c Q_OBJECT のマクロは、以下の内容で + \c ArrowPad に \c tr(x) を定義します: + + \snippet doc/src/snippets/code/doc_src_examples_arrowpad.qdoc 0 + + 各ソーステキストが表示されるクラスを把握しておくと、 + \e {Qt Linguist} で論理的に関連のある文字列をグループ化することが出来ます。 + 例えば、ダイアログ内のすべての文字列には + ダイアログのクラス名の文脈が含まれるため、同時に表示されます。 + 文字列が表示される文脈によって翻訳の内容が影響を受ける場合があるため、 + 翻訳者にとって有用な情報となります。 + 一部の翻訳では、キーボードショートカットを変更する必要があります。 + また、同じグループにまとめられた特定の文脈(クラス) + にすべてのソーステキストを含めることにより、 + 翻訳者はコンフリクトを起こすことなく、 + より簡単にショートカットを変更できます。 + + \c arrowpad.cpp で、\c ArrowPad クラスを実装します。 + + \snippet examples/linguist/arrowpad/arrowpad.cpp 0 + \snippet examples/linguist/arrowpad/arrowpad.cpp 1 + \snippet examples/linguist/arrowpad/arrowpad.cpp 2 + \snippet examples/linguist/arrowpad/arrowpad.cpp 3 + + ラベルはユーザ表示可能な文字列であるため、 + ボタンのラベルごとに \c ArrowPad::tr() を呼び出します。 + + \image linguist-arrowpad_en.png + + \snippet examples/linguist/arrowpad/mainwindow.h 0 + \snippet examples/linguist/arrowpad/mainwindow.h 1 + + 上記のスクリーンショットでは、ウィンドウ全体が \c MainWindow です。 + これは、\c mainwindow.h ヘッダーファイルで定義します。 + ここでも、\c MainWindow が \e {Qt Linguist} の文脈になるよう、 + \c Q_OBJECT を使用します。 + + \snippet examples/linguist/arrowpad/mainwindow.cpp 0 + + \c MainWindow と \c mainwindow.cpp を実装する際に、 + \c ArrowPad クラスのインスタンスを作成します。 + + \snippet examples/linguist/arrowpad/mainwindow.cpp 1 + + また、\c MainWindow::tr() を、 + アクションおよびショートカット用に、計 2 回呼び出します。 + + \c tr() を使用して、言語によって異なるキーをサポートします。 + 英語の場合、"Ctrl+Q" は Quit (終了) に適していますが、 + オランダ語の翻訳者は "Ctrl+A" (Afsluiten の場合) を、 + ドイツ語の翻訳者は "Strg+E" (Beenden の場合) を使うといいでしょう。 + \key Ctrl キーショートカットを \c tr() で使用する場合は + 引数を 2 つ使用して、 + ショートカットが実行する機能を2番目の引数に記述してください。 + + \c main.cpp で定義した標準的な \c main() 関数は、以下のようになります。 + + \snippet examples/linguist/arrowpad/main.cpp 2 + \snippet examples/linguist/arrowpad/main.cpp 3 + + 現在のロケールに基づいて、使用する翻訳を選択します。 + 例えば、QLocale::system() は、 + \c LANG 環境変数の設定によって影響を受ける場合があります。 + \c .qm メッセージファイル(および TS ファイル)の命名規則に + ロケールを使用すると、 + 簡単にロケールに基づいて翻訳ファイルを選択することが + できるようになります。 + + 選択したロケールに QM メッセージファイルが存在しない場合、 + 元のソーステキストが使用され、エラーは生成されません。 + + \section1 フランス語からオランダ語に翻訳する + + ここでは、サンプルアプリケーションをフランス語に翻訳することから始めます。 + \e {Qt Linguist} を起動し、\c arrowpad_fr.ts の作業を行います。 + 2つの文脈 ("ArrowPad" および "MainWindow") + にグループ化された7つのソーステキスト ("\&Up", "\&Left" 等) + が含まれているはずです。 + + 次に、以下の翻訳を入力します: + + \list + \o \c ArrowPad + \list + \o \&Up - \&Haut + \o \&Left - \&Gauche + \o \&Right - \&Droite + \o \&Down - \&Bas + \endlist + \o \c MainWindow + \list + \o E\&xit - \&Quitter + \o Ctrl+Q - Ctrl+Q + \o \&File - \&Fichier + \endlist + \endlist + + 翻訳の入力が終わったら、 \key{Ctrl+Return} (もしくは\gui {完了にして次へ} + ボタン)を押すと、 + 翻訳が完了とマークされ次のソーステキストに移動するため便利です。 + + ファイルを保存して、オランダ語の翻訳でも同じ手順を実行し、 + \c arrowpad_nl.ts の作業を行います: + + \list + \o \c ArrowPad + \list + \o \&Up - \&Omhoog + \o \&Left - \&Links + \o \&Right - \&Rechts + \o \&Down - Omlaa\&g + \endlist + \o \c MainWindow + \list + \o E\&xit - \&Afsluiten + \o Ctrl+Q - Ctrl+A + \o File - \&Bestand + \endlist + \endlist + + \c tt1_fr.ts と \c tt1_nl.ts の翻訳ソースファイルは + QM ファイルに変換する必要があります。 + 以前と同様の方法で \e {Qt Linguist} を使用して変換できますが、 + コマンドラインツール \c lrelease を使うと + \e {Qt Linguist} から個々の \gui {ファイル|リリース} を読み込まなくても、 + アプリケーションの\e{すべての} QM ァイルを作成できます。 + + 以下を入力します: + + \snippet doc/src/snippets/code/doc_src_examples_arrowpad.qdoc 1 + + これにより、\c arrowpad_fr.qm と \c arrowpad_nl.qm が作成されます。 + \c LANG 環境変数を \c fr に設定します。 + Unix では、以下の2つのコマンドのいずれかが機能します。 + + \snippet doc/src/snippets/code/doc_src_examples_arrowpad.qdoc 2 + + Windows では、\c autoexec.bat を修正するか、以下を実行します。 + + \snippet doc/src/snippets/code/doc_src_examples_arrowpad.qdoc 3 + + プログラムを実行すると、フランス語版が表示されます: + + \image linguist-arrowpad_fr.png + + \c LANG=nl を設定し、オランダ語でも同じ手順を実行します。 + これで、オランダ語版が表示されます: + + \image linguist-arrowpad_nl.png + + \section1 エクササイズ + + \e {Qt Linguist} で未完了の翻訳を行います。 + 例えば、各テキストのチェックマークをクリックして翻訳を未完了の状態にして保存します。 + その後、 \c lupdate 、\c lrelease 、サンプルの順に実行します。 + この変更がどのような影響を及ぼしましたか。 + + \c LANG=fr_CA (フランス語(カナダ))に設定し、 + サンプルプログラムを再実行します。 + \c LANG=fr の場合と同じ結果になる理由を説明してください。 + + オランダ語翻訳のショートカットのいずれかを変更し、 + \e \&Bestand と \e \&Boven の競合を解消します。 +*/ diff --git a/doc/src/ja_JP/examples/hellotr.qdoc b/doc/src/ja_JP/examples/hellotr.qdoc new file mode 100644 index 0000000..cc01b81 --- /dev/null +++ b/doc/src/ja_JP/examples/hellotr.qdoc @@ -0,0 +1,200 @@ +/**************************************************************************** +** +** 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 documentation 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$ +** +****************************************************************************/ + +/*! + \example linguist/hellotr + \title サンプル: こんにちは tr() + + これは、小さな Hello World プログラムを日本語に翻訳する例です。 + 以下のスクリーンショットは英語版です。 + + \image linguist-hellotr_en.png + + Qt アプリケーションの翻訳に関する詳細は、\l{Qt Linguist manual} + をご覧ください。 + + \section1 各行の簡単な解説 + + \snippet examples/ja_JP/linguist/hellotr/main.cpp 0 + + この行では、 QTranslator クラスの宣言を読み込みます。 + QTranslator クラスのオブジェクトは、 + ユーザに表示する文字列を翻訳します。 + + \snippet examples/ja_JP/linguist/hellotr/main.cpp 5 + + 親をもたない QTranslator オブジェクトを作成します。 + + \snippet examples/ja_JP/linguist/hellotr/main.cpp 6 + + プログラムで使用するソーステキストの日本語の翻訳を含む、 + \c hellotr_ja.qm ( \c .qm というファイル拡張子は省略します) + と呼ばれるファイルを読み込みます。 + ファイルが見つからなくてもエラーは発生しません。 + + \snippet examples/ja_JP/linguist/hellotr/main.cpp 7 + + \c hellotr_ja.qm の翻訳を、プログラムで使用する翻訳プールに追加します。 + + \snippet examples/ja_JP/linguist/hellotr/main.cpp 8 + + "Hello world!" を表示するプッシュボタンを作成します。 + 検索した \c hellotr_ja.qm に "Hello world!" の翻訳が含まれている場合、 + その翻訳が表示されます。 + 含まれていない場合、翻訳前のテキストがそのまま表示されます。 + + QObject を継承するすべてのクラスには、\c tr() 関数が含まれます。 + QObject クラスのメンバ関数内では、\c QPushButton::tr("Hello world!") + や \c QObject::tr("Hello world!") の代わりに、シンプルに + \c tr("Hello world!") を使います。 + + \section1 英語版のアプリケーションを実行する + + 翻訳ファイル \c hellotr_ja.qm の作成が終わっていないため、 + 以下のアプリケーションを起動したときに元の文字列が表示されます。 + + \image linguist-hellotr_en.png + + \section1 日本語のメッセージファイルを作成する + + 最初のステップは、プロジェクトのすべてのソースファイルを列挙する + \c hellotr.pro を作成することです。 + プロジェクトファイルは、qmake プロジェクトファイルまたは、通常の + makefile である可能性があります。 + 以下の記述を含むプロジェクトファイルを作成してください。 + + \snippet examples/ja_JP/linguist/hellotr/hellotr.pro 0 + \snippet examples/ja_JP/linguist/hellotr/hellotr.pro 1 + + \c TRANSLATIONS は、管理するメッセージファイルを指します。 + この例では、日本語の翻訳のみ管理します。 + + ファイル拡張子は、\c .qm ではなく、\c .ts であることにご注意ください。 + \c .ts は翻訳のソースファイルのフォーマットであり、 + アプリケーションの開発時に使用します。 + プログラマーまたはリリースマネージャーは \c lupdate プログラムを実行し、 + ソースコードから抽出したソーステキストを使用して + TS ファイルの生成と更新を行います。 + 翻訳者は、 \e {Qt Linguist} を使用して TS ファイルの読み取りと更新を行い、 + 翻訳の追加と編集を行います。 + + TS の形式は、ユーザが直接閲覧可能な XML 形式であるため、 + 直接Eメールで送信したり、簡単にバージョン管理の対象にすることが出来ます。 + このファイルを手動で編集する場合、XML の既定のエンコードは UTF-8 で、 + Latin1(ISO 8859-1)ではないことに気をつけてください。 + '\oslash'(ノルウェー語の o にスラッシュが付いたもの)などの + Latin1 文字を入力する1つの方法は、XML エンティティ "ø" + を使用することです。 + これはすべての Unicode 4.0 文字に対して有効です。 + + 翻訳が完了したら、\c lrelease プログラムを使用して、 + TS ファイルを QM ファイル(Qt Message ファイル)形式に変換します。 + QM 形式は、極めて高速な検索性能を実現するようにデザインされた + コンパクトなライブラリ形式です。 + \c lupdate と \c lrelease はどちらも、 + プロジェクト全体のソースファイルとヘッダーファイル + (プロジェクトファイルの HEADERS および SOURCES 行で指定されている) + を読み取り、\c tr() 関数呼び出しの際に表示される文字列を抽出します。 + + \c lupdate は、メッセージファイル(この場合は \c hellotr_ja.ts) + の作成と更新を行い、これらをソースコードと同期させるために使用します。 + \c lupdate にはデータの削除機能がないため、 + \c lupdate はいつでも安全に実行できます。 + 例えば、ソースが変更されるたびに TS ファイルが更新されるよう、 + makefile に記述できます。 + + それでは、以下のように \c lupdate を実行してみましょう: + + \snippet doc/src/ja_JP/snippets/code/doc_src_examples_hellotr.qdoc 0 + + (\c -verbose オプションは、操作を説明するメッセージを表示するよう + \c lupdate に指示します。) + 現在のディレクトリに、以下の内容で + \c hellotr_ja.ts ファイルが作成されていると思います: + + \snippet doc/src/ja_JP/snippets/code/doc_src_examples_hellotr.qdoc 1 + + ツール (\c lupdate、 \e {Qt Linguist}、\c lrelease) + を使用して読み取りと更新を行うため、 + ファイル形式を理解する必要はありません。 + + \section1 Qt Linguist を使用して日本語に翻訳する + + XML やテキストエディタを使用して、TS ファイルを翻訳することも出来ますが、 + ここでは \e {Qt Linguist} を使用して翻訳を行います。 + + \e {Qt Linguist} を起動するには、以下を入力します。 + + \snippet doc/src/ja_JP/snippets/code/doc_src_examples_hellotr.qdoc 2 + + 左上のペインに "QPushButton" が表示されるはずです。 + これをダブルクリックし、次に "Hello world!" をクリックして、 + \gui Translation ペイン (ウィンドウ右中央)に + "こんにちは、世界!" と入力します。 + 感嘆符(!)を忘れないように付けてください! + + \gui{完了} チェックボックスをオンにして、 + メニューバーから \gui{ファイル|保存} を選択します。 + TS ファイルから、以下の記述がなくなります。 + + \snippet doc/src/ja_JP/snippets/code/doc_src_examples_hellotr.qdoc 3 + + その代わりに以下が含まれます。 + + \snippet doc/src/ja_JP/snippets/code/doc_src_examples_hellotr.qdoc 4 + + \section1 日本語版のアプリケーションを実行する + + 日本語版のアプリケーションを実行する前に、 + TS ファイルから QM ファイルを生成する必要があります。 + QM ファイルは、\e {Qt Linguist}(単一の TS ファイルの場合)のメニューから、 + もしくは、コマンドラインプログラム \c lrelease を使用して生成できます。 + \c lrelease を使用する場合、 + プロジェクトファイルに列挙されている TS ファイルごとに + 1 つの QM ファイルを作成することが出来ます。 + \e {Qt Linguist} のメニューバーから \gui{ファイル|リリース} を選択し、 + ポップアップ表示される \gui{ファイルの保存} ダイアログで\gui{保存}を選択し、 + \c hellotr_ja.ts から \c hellotr_ja.qm を生成します。 + 今すぐ \c hellotr プログラムを再実行してみましょう。 + これで、ボタンに "こんにちは、世界!" と表示されます。 + + \image linguist-hellotr_ja.png +*/ diff --git a/doc/src/ja_JP/examples/trollprint.qdoc b/doc/src/ja_JP/examples/trollprint.qdoc new file mode 100644 index 0000000..1686774 --- /dev/null +++ b/doc/src/ja_JP/examples/trollprint.qdoc @@ -0,0 +1,286 @@ +/**************************************************************************** +** +** 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 documentation 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$ +** +****************************************************************************/ + +/*! + \example linguist/trollprint + \title サンプル: トロールプリント + + トロールプリント(Troll Print)は、 + ユーザがプリンタの設定をするためのサンプルアプリケーションです。 + これには、英語とポルトガル語の2つのバージョンが用意されています。 + + \image linguist-trollprint_10_en.png + + この例では、いくつかのポルトガル語の翻訳を含む翻訳ファイル + \c trollprint_pt.ts を用意しました。 + + 同じアプリケーションの2つのバージョン、 + Troll Print 1.0 と 1.1 をリリースすることを想定します。 + 1つのバージョンで作成した翻訳を次のリリースで再利用する方法を習得します。 + (このチュートリアルでは、いくつかのソースファイルの編集が必要です。 + 新しい一時ディレクトリにすべてのファイルをコピーして、 + ここで作業を行うのがベストでしょう。) + + Qtアプリケーションの翻訳の詳細については、 + \l{Qt Linguist manual}{Qt Linguist マニュアル} をご覧ください。 + + \section1 各行の簡単な解説 + + \c PrintPanel クラスを \c printpanel.h で宣言します。 + + \snippet examples/linguist/trollprint/printpanel.h 0 + + \c PrintPanel は QWidget の派生クラスです。 + \c tr() が正しく動作するには、\c Q_OBJECT マクロが必要です。 + + 実装ファイルは \c printpanel.cpp です。 + + \snippet examples/linguist/trollprint/printpanel.cpp 0 + + Troll Print 1.0 で一部のコードがコメントアウトされています。 + Troll Print 1.1 にバージョンアップする際に、 + コメントから戻してください。 + + \snippet examples/linguist/trollprint/printpanel.cpp 1 + \snippet examples/linguist/trollprint/printpanel.cpp 2 + + PrintPanel では、\c tr("Enabled") と \c tr("Disabled") + を2回ずつ使用することに注意してください。 + "Enabled" と "Disabled" はどちらも同じ文脈で表示されるため、 + \e {Qt Linguist} では、それぞれ1回目の使用に対してのみ表示され、 + 2回目以降の使用に対しては翻訳が流用されるため表示されません。 + これは便利な時間短縮ツールですが、ポルトガル語などの一部の言語では、 + 2回目の使用に対して異なる翻訳が必要になります。 + これから、\e {Qt Linguist}で、 + すべての \c tr() に対して異なる翻訳を表示できるように設定する方法を学習します。 + + \c MainWindow, \c mainwindow.h はシンプルなヘッダーファイルです。 + \c mainwindow.cpp の実装には、翻訳対象としてマークする必要のある + ユーザに表示するソーステキストがあります。 + + \snippet examples/linguist/trollprint/mainwindow.cpp 0 + + ウィンドウのタイトルは翻訳する必要があります。 + + \snippet examples/linguist/trollprint/mainwindow.cpp 1 + \snippet examples/linguist/trollprint/mainwindow.cpp 3 + + また、アクションとメニューも翻訳する必要があります。 + キーボードショートカット "Ctrl+Q" に対して使用している \c tr() + の第 2 引数は、このショートカットがどのような機能を有しているかを + 翻訳者に示す唯一の情報であることに注意してください。 + + \snippet examples/linguist/trollprint/main.cpp 0 + + \c main.cpp の \c main() 関数は、 + \l{linguist/arrowpad}{アローパッド} の例の場合と同じになります。 + 具体的には、現在のロケールに基づいて、翻訳ファイルを選択します。 + + \section1 英語とポルトガル語で Troll Print 1.0 を実行する + + 既存の \c trollprint_pt.ts ファイルの翻訳を使用します。 + + \c LANG 環境変数を \c pt に設定して、\c trollprint を実行します。 + QM ファイルがないため、スクリーンショットは英語版のままです。 + ここで、\c lrelease (例: \c {lrelease trollprint.pro})を実行し、 + サンプルを再実行します。 + これで、ポルトガル語版(Troll Imprimir 1.0)になりました: + + \image linguist-trollprint_10_pt_bad.png + + 翻訳は正しく表示されていますが、誤りがあります。 + 文法的に正しいポルトガル語では、 + "Enabled" が2回目に使用されるときの正しい翻訳は、 + "Ativado" ではなく "Ativadas" であり、 + "Disabled" が2回目に翻訳されるときも、 + 語尾を同様に変化させる必要があります。 + + \e {Qt Linguist} で \c trollprint_pt.ts を開くと、 + ソースコードには "Enabled" と "Disabled" が2回ずつ使われていますが、 + 翻訳ソースファイルでは1回ずつしか使われていません。 + これは、\e {Qt Linguist} では、 + ソーステキストが重複する場合は翻訳を流用することにより、 + 翻訳者の作業を最小限に抑えようとするためです。 + このように類似した翻訳に誤りがある場合、 + プログラマは繰り返し使用する際に翻訳の曖昧さを排除する必要があります。 + これは、2個の引数を取る\c tr() を使用することにより、 + 容易に実行できます。 + + 実際には、翻訳者の"文脈"は変更する必要のある文字列が表示されるクラスに対するクラス名であるため、 + どのファイルを変更すべきか簡単に特定できます。 + この場合、ファイルは \c printpanel.cpp であり、 + 変更すべき行は4行あります。 + ラジオボタンの最初のペアの \c tr() 呼び出しに、2つ目の引数 "two-sided"(両面) をに追加します: + + \snippet doc/src/snippets/code/doc_src_examples_trollprint.qdoc 0 + + そして、ラジオボタンの2番目のペアの \c tr() 呼び出しに、 + 2つ目の引数 "colors"(色) を追加します。 + + \snippet doc/src/snippets/code/doc_src_examples_trollprint.qdoc 1 + + ここで、\c lupdate を実行し、\e {Qt Linguist} で + \c trollprint_pt.ts を開きます。2 つの変更個所がわかるはずです。 + + まず、翻訳ソースファイルには、\e{3組}の "Enabled" と + "Disabled" のペアが含まれています。 + 最初のペアは、既に利用されていないテキストであることを意味する灰色になっています。 + これは、 \c tr() 内の文字列が第二引数を追加した新たな + \c tr() の文字列で置き換えられたからです。 + 2番目のペアには、"two-sided"(両面) というコメントが含まれており、 + 3番目のペアには、"colors"(色) というコメントが含まれています。 + これらのコメントは、\e {Qt Linguist} に + \gui {開発者のコメント} として表示されます。 + + 次に、翻訳者の作業を最小限に抑えるために、 + 新たに使用される "Enabled" と "Disabled" の文字列に対して、 + 訳語 "Ativado" と "Desativado" が自動的に使用されます。 + これらの訳語は、これらの原語が2回目に使用される場合の正しい翻訳ではありません。 + ここからが、チュートリアルの出発点です。 + + 2番目の "Ativado" を "Ativadas" に、 + 2番目の "Desativado" を "Desativadas" に変更し、保存して終了します。 + \c lrelease を実行して最新のバイナリ \c trollprint_pt.qm ファイルを作成し、 + Troll Print (または Troll Imprimir) を実行します。 + + \image linguist-trollprint_10_pt_good.png + + \e {Qt Linguist} では "comments" と呼ばれる + \c tr() 呼び出しの2つ目の引数は、 + 同じ文脈(クラス)で発生する類似したソーステキストを識別します。 + コメントは、たとえば Ctrl キーによるキーボードショートカットが + ショートカットによって実行される機能を伝達する唯一の手段である場合等に、 + 翻訳者に情報を提供するのに便利です。 + + 翻訳者に情報を提供する他の手段は、 + 翻訳の必要があるソーステキストを含むアプリケーションの + 特定の部分への移動方法に関する情報を提供することです。 + これにより、翻訳者は、翻訳が表示される文脈を確認し、 + 翻訳を検索してテストを行うことができます。 + これは、ソースコードで \c TRANSLATOR + コメントを使用して行います: + + \snippet doc/src/snippets/code/doc_src_examples_trollprint.qdoc 2 + + 一部のソースファイル、特にダイアログクラスのコメントに + ダイアログに到達するまでに必要な操作を記述します。 + また、\c mainwindow.cpp や \c printpanel.cpp など、 + 適切なサンプルファイルにこれらを追加することもできます。 + \c lupdate を実行して \e {Qt Linguist} を起動し、 + \c trollprint_pt.ts を読み込みます。 + ソーステキストの一覧を参照する際に、 + \gui{ソーステキスト}と\gui{開発者のコメント} + の領域に表示されるコメントを確認できます。 + + 特に大きなプログラムでは、翻訳者が自分の翻訳を探し、 + それが適切かどうかを確認することが困難な場合があります。 + コメントは役立つナビゲーション情報を提供するため、 + 翻訳に要する時間を節約できます: + + \snippet doc/src/snippets/code/doc_src_examples_trollprint.qdoc 3 + + \section1 Troll Print 1.1 + + これから、Troll Print のバージョン 1.1 のリリースの準備を行います。 + テキストエディターを起動して、次の手順に従って変更を行ってください: + + \list + \o \c printpanel.cpp の文字列 "\TROLL PRINT\" を引数に + QLabel を作成する2つの行のコメントを解除します。 + \o ソースの変更: \c printpanel.cpp で、"2-sided" を + "Two-sided" に置き換えます。 + \o \c mainwindow.cpp で、すべての "1.0" を "1.1" に置き換えます。 + \o \c mainwindow.cpp で、著作権表示の年号を 1999-2000 に更新します。 + \endlist + + (実際のアプリケーションでは、バージョン番号と著作権表示の年号は + const または #define をつかって定義するでしょう。) + + 終了したら、\c lupdate を実行し、\e {Qt Linguist} で + \c trollprint_pt.ts を開きます。以下の項目は、特別なコンテンツです: + + \list + \o \c MainWindow + \list + \o Troll Print 1.0 - 古いテキストとして灰色でマーク + \o About Troll Print 1.0 - 古いテキストとして灰色でマーク + \o Troll Print 1.0. Copyright 1999 Software, Inc. - + 古いテキストとして灰色でマーク + \o Troll Print 1.1 - 自動的に "Troll Imprimir 1.1" に翻訳(未完了) + \o About Troll Print 1.1 - 自動的に "Troll Imprimir 1.1" に翻訳(未完了) + \o Troll Print 1.1. Copyright 1999-2000 Software, + Inc. - 自動的に "Troll Imprimir 1.1. + Copyright 1999-2000 Software, Inc." に翻訳(未完了) + \endlist + \o \c PrintPanel + \list + \o 2-sided - 古いテキストとして灰色でマーク + \o \TROLL PRINT\ - 未翻訳のテキストとして"?"マーク + \o Two-sided - 未翻訳のテキストとして"?"マーク + \endlist + \endlist + + \c lupdate は、修正を容易に行い、数字の処理を効率的に行うために、 + 様々な処理を行っています。 + + \c MainWindow の翻訳の見直しを行います。 + "\TROLL PRINT\" を "\TROLL IMPRIMIR\" と翻訳します。 + "Two-sided" を翻訳する際には、\gui{フレーズと推測} の欄から + "2-lados" をダブルクリックして訳に選択した後に、 + "2" を "Dois" に変更します。 + + 保存して終了し、\c lrelease を実行します。 + ポルトガル語版の表示は以下のようになります: + + \image linguist-trollprint_11_pt.png + + \gui{Ajuda|Sobre} (\gui{Help|About}) を選択し、 + バージョン情報ボックスを確認します。 + + \gui{Ajuda|Sobre Qt} (\gui{Help|About Qt}) を選択した場合、 + 英語版のダイアログが表示されます。 + Qt の翻訳はまだ終わっていません。 + 詳細については、\l{Internationalization with Qt} を参照してください。 + + ここで、\c LANG=en を設定し、元の英語版を実行してみてください: + + \image linguist-trollprint_11_en.png +*/ diff --git a/doc/src/ja_JP/getting-started/tutorials.qdoc b/doc/src/ja_JP/getting-started/tutorials.qdoc new file mode 100644 index 0000000..701ba88 --- /dev/null +++ b/doc/src/ja_JP/getting-started/tutorials.qdoc @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** 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 documentation 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$ +** +****************************************************************************/ + +/*! + \page tutorials.html + \title チュートリアル + + \contentspage How to Learn Qt + \nextpage Qt Examples + + \brief Qt の学習を助けるチュートリアルやガイドの概要 + + \nextpage Qt Examples + + Qt で提供されているこれらのチュートリアルやガイドは + 新たに Qt の開発を始めるユーザの良い助けとなります。 + これらのドキュメントでは ウィジェットの基本的な使い方から始まり + ステップバイステップでアプリケーションの使い方を学ぶことが出来ます。 + + \table + \row + \o{2,1} \l{ウィジェットのチュートリアル}{\bold ウィジェット} + \o{2,1} \l{チュートリアル: アドレス帳}{\bold {アドレス帳}} + \row + \o \image widget-examples.png Widgets + \o + ウィジェットとレイアウトを使って GUI アプリケーションを作成する + 初心者向けのガイドです。 + + \o \image addressbook-tutorial.png AddressBook + \o + 完全な機能を持つアドレス帳アプリケーションを作成する 7 章で構成されたガイドです。 + + \row + \o{2,1} \l{Qt Designer クイックガイド}{\bold{Qt Designer}} + \o{2,1} \l{Qt Linguist Manual: Programmers#Tutorials}{\bold {Qt Linguist}} + \row + \o \image designer-examples.png QtDesigner + \o + \QD を使ってフォームを生成する基本的な手順を説明するクイックガイドです。 + + \o \image linguist-examples.png QtLinguist + \o + \l{サンプル: こんにちは tr()}{こんにちは tr()}、 + \l{サンプル: アローパッド}{アローパッド}、 + \l{サンプル: トロールプリント}{トロールプリント} + の三例を通じて翻訳の方法を説明します。 + + \row + \o{2,1} \l{QTestLib チュートリアル}{\bold QTestLib} + \o{2,1} \l{qmake チュートリアル}{\bold qmake} + \row + \o{2,1} + Qt のユニットテストフレームワークである QTestLib の機能の初歩的な使い方を説明するチュートリアルです。 + このチュートリアルは4章で構成されています。 + + \o{2,1} + \c qmake の使い方を説明するチュートリアルです。 + このチュートリアルを卒業した後は \l{qmake Manual}{qmake user guide}(英語) + を読むことをお勧めします。 + + \endtable +*/ diff --git a/doc/src/ja_JP/images/linguist-hellotr_en.png b/doc/src/ja_JP/images/linguist-hellotr_en.png new file mode 100644 index 0000000..05aa945 Binary files /dev/null and b/doc/src/ja_JP/images/linguist-hellotr_en.png differ diff --git a/doc/src/ja_JP/images/linguist-hellotr_ja.png b/doc/src/ja_JP/images/linguist-hellotr_ja.png new file mode 100644 index 0000000..d9beb01 Binary files /dev/null and b/doc/src/ja_JP/images/linguist-hellotr_ja.png differ diff --git a/doc/src/ja_JP/snippets/code/doc_src_examples_hellotr.qdoc b/doc/src/ja_JP/snippets/code/doc_src_examples_hellotr.qdoc new file mode 100644 index 0000000..e05cd12 --- /dev/null +++ b/doc/src/ja_JP/snippets/code/doc_src_examples_hellotr.qdoc @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** 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 documentation 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$ +** +****************************************************************************/ + +//! [0] +lupdate -verbose hellotr.pro +//! [0] + + +//! [1] + + + QPushButton + + Hello world! + + + + +//! [1] + + +//! [2] +linguist hellotr_ja.ts +//! [2] + + +//! [3] + +//! [3] + + +//! [4] +こんにちは、世界! +//! [4] diff --git a/doc/src/ja_JP/tutorials/addressbook.qdoc b/doc/src/ja_JP/tutorials/addressbook.qdoc new file mode 100644 index 0000000..9fb1059 --- /dev/null +++ b/doc/src/ja_JP/tutorials/addressbook.qdoc @@ -0,0 +1,1070 @@ +/**************************************************************************** +** +** 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 documentation 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$ +** +****************************************************************************/ + +/*! + \page tutorials-addressbook.html + + \title チュートリアル: アドレス帳 + \brief シンプルだが、完全な機能を持つアプリケーションの作成を通じた + GUI プログラミングへの導入。 + + このチュートリアルでは、Qt クロスプラットフォームフレームワークを使用した + GUI プログラミングの概要について説明しています。 + + \image addressbook-tutorial-screenshot.png + + \omit + It doesn't cover everything; the emphasis is on teaching the programming + philosophy of GUI programming, and Qt's features are introduced as needed. + Some commonly used features are never used in this tutorial. + \endomit + + このチュートリアルでは以下に示す Qt の基本的な機能を学ぶことが出来ます: + + \list + \o ウィジェットとレイアウトマネージャ + \o コンテナクラス + \o シグナル/スロット + \o 入力デバイスと出力デバイス + \endlist + + Qt を初めて利用する方は、最初に \l{How to Learn Qt} をご覧ください。 + + チュートリアルの目次: + + \list 1 + \o \l{tutorials/addressbook/part1}{ユーザインターフェースの設計} + \o \l{tutorials/addressbook/part2}{アドレスの追加} + \o \l{tutorials/addressbook/part3}{項目間のナビゲーション} + \o \l{tutorials/addressbook/part4}{アドレスの編集と削除} + \o \l{tutorials/addressbook/part5}{検索機能の追加} + \o \l{tutorials/addressbook/part6}{読み込みと保存} + \o \l{tutorials/addressbook/part7}{その他の機能} + \endlist + + このチュートリアルのソースコードは、Qt の + \c examples/tutorials/addressbook ディレクトリに置かれています。 + + この小さなアプリケーションは本格的な最新の GUI + アプリケーションのようには見えませんが、 + 複雑なアプリケーションで使用される多くの基本的な技術が採用されています。 + このチュートリアルが終わったら、 + メニューやツールバー、ステータスバーなどを表示する + 小さな GUI アプリケーションである + \l{mainwindows/application}{Application} + のサンプルをチェックすることをお勧めします。 + +*/ + +/*! + \page tutorials-addressbook-part1.html + + \example tutorials/addressbook/part1 + \title 第1章 - ユーザインターフェースのデザイン + + 本チュートリアルの第1章では + アドレス帳アプリケーションで使用する基本的なインターフェース + (GUI) の設計について説明します。 + + GUI プログラム作成の最初のステップは、 + ユーザインターフェースを設計することです。 + 本章の目標は、基本的なアドレス帳アプリケーションを実装するのに必要な + ラベルと入力フィールドを設定することです。 + 下図は、ここで作成しようとしているアドレス帳のスクリーンショットです。 + + \image addressbook-tutorial-part1-screenshot.png + + ユーザがアドレス帳に名前や住所を入力できるようにするには、 + 2つの QLabel のオブジェクトである \c nameLabel 及び \c addressLabel と、 + 入力フィールドとして QLineEdit オブジェクトの \c nameLine と + QTextEdit オブジェクトの \c addressText が必要です。 + 使用するウィジェットとその配置は下図に示してあります。 + + \image addressbook-tutorial-part1-labeled-screenshot.png + + 以下の3つのファイルを使用してこのアドレス帳を実装します: + + \list + \o \c{addressbook.h} - \c AddressBook クラスを宣言するファイル、 + \o \c{addressbook.cpp} - \c AddressBook クラスを実装するファイル、 + \o \c{main.cpp} - \c AddressBook クラスのインスタンスを持つ + \c main() 関数を含むファイル。 + \endlist + + \section1 Qt プログラミング - 派生クラスの作成 + + Qt プログラムを作成する際は、 + 通常 Qt オブジェクトの派生クラスを作成して機能を追加します。 + これは、カスタムウィジットや標準的なウィジェットの集合体を作成する場合の + 重要なコンセプトの1つです。 + ウィジェットの挙動の拡張や変更のために派生クラスを作成することには + 以下のような利点があります: + + \list + \o 仮想関数または純粋仮想関数の実装を行って要求される機能を実装できます。 + 必要によっては基底クラスの実装にフォールバックして利用できます。 + + \o これにより、アプリケーションのその他の部分が + ユーザインターフェースの個々のウィジェットを指定する必要がないよう、 + ユーザインターフェースの一部をクラス内にカプセル化できます。 + + \o 派生クラスは、同一のアプリケーションまたはライブラリに + 複数のカスタムウィジットを作成するために使用できます。 + また、派生クラスのコードは、他のプロジェクトで再利用可能です。 + + \endlist + + Qt ではアドレス帳ウィジェットを提供していないため、 + 標準的な Qt ウィジェットクラスを継承して機能を追加します。 + 本チュートリアルで作成する \c AddressBook クラスは、 + 基本的なアドレス帳ウィジェットが必要な場合に再利用できます。 + + \section1 AddressBook クラスの宣言 + + \l{tutorials/addressbook/part1/addressbook.h}{\c addressbook.h} + ファイルは、 \c AddressBook クラスを宣言するために使用します。 + + ここでは \c AddressBook を QWidget の派生クラスとし、 + コンストラクタを宣言することから始めます。 + また、 Q_OBJECT マクロを使用して、クラスで多言語化機能及び、 + Qt のシグナル/スロット機能が使われていることを示します。 + ただし、現段階ではこれらの機能の全てを使わない場合もあります。 + + \snippet tutorials/addressbook/part1/addressbook.h class definition + + クラスは、 前述した QLineEdit と QTextEdit のプライベートなインスタンス + \c nameLine と \c addressText の宣言を保有します。 + 後述の章で、 \c nameLine 及び \c addressText に保存したデータが、 + 多くのアドレス帳の機能で必要になることがわかるでしょう。 + + 我々が使用する QLabel オブジェクトは、 + 一旦作成すると後で参照する必要がないため、宣言する必要はありません。 + Qt でオブジェクトの所有権を追跡する方法については、次節で説明します。 + + Q_OBJECT マクロ自体は、Qt のより高度な機能を実装します。 + ここでは、 Q_OBJECT マクロを、 \l{QObject::}{tr()} 及び + \l{QObject::}{connect()} 関数を使用可能にする + ショートカットとみなしたほうが良いでしょう。 + + これで、 \c addressbook.h ファイルが完成しました。 + 次は対応する \c addressbook.cpp ファイルの実装を行います。 + + \section1 AddressBook クラスの実装 + + \c AddressBook のコンストラクタは、 \a{parent} パラメータとして + QWidget を受け取ります。 + 慣例により、このパラメータを基底クラスのコンストラクタに渡します。 + 親が複数の子を所有できるというこの所有概念は、 + Qt でウィジェットのグループ化を行う場合に有用です。 + 例えば、親を削除すると、親に属する子も全て削除されます。 + + \snippet tutorials/addressbook/part1/addressbook.cpp constructor and input fields + + このコンストラクタ内で、 \c nameLine と \c addressText のインスタンスを生成し、 + 2つのローカル QLabel オブジェクトの \c nameLabel と \c addressLabel + を宣言し、そのインスタンスを生成します。 + \l{QObject::tr()}{tr()} 関数は、 + 翻訳した文字列が存在する場合にそれを返します。 + そうでない場合は、引数の文字列自体を返します。 + この関数は文字列が他の言語に翻訳されるようにマークする役目を持ちます。 + 翻訳可能な文字列を使用するたびに、マークしてください。 + + Qt を使用してプログラミングを行う場合、 + レイアウトが機能する仕組みを理解していると便利です。 + Qt は主に、以下の3つのレイアウトクラスを提供します。 + ウィジェットの配置を処理するための QHBoxLayout 、 QVBoxLayout 及び + QGridLayout です。 + + \image addressbook-tutorial-part1-labeled-layout.png + + ここでは、 QGridLayout を使って、 + ラベルと入力フィールドを配置します。 + QGridLayout は、有効なスペースを格子状に分割し、 + 行/列番号により指定するセルに、ウィジェットを配置します。 + 上図は、レイアウトセルとウィジェットの位置を示しており、 + 以下のコードを使用して、この配置を指定します: + + \snippet tutorials/addressbook/part1/addressbook.cpp layout + + \c addressLabel は、追加引数として Qt::AlignTop を用いて配置されていることに注意してください。 + これは、セル(1,0) で縦方向の中央に配置されないようにするためです。 + Qt のレイアウトにおける基本概念については、 + \l{Layout Management} のドキュメントをご覧ください。 + + ウィジェットにレイアウトオブジェクトをインストールするには、 + ウィジェットの \l{QWidget::setLayout()}{setLayout()} + 関数を呼び出す必要があります。 + + \snippet tutorials/addressbook/part1/addressbook.cpp setting the layout + + 最後に、ウィジェットのタイトルを "Simple Address Book" とします。 + + \section1 アプリケーションを実行する + + 別のファイル \c main.cpp に、 \c main() 関数に実装します。 + この関数内で、QApplication である \c app のインスタンスを生成します。 + QApplication は、既定のフォントやカーソルなど + アプリケーションに共通な複数のリソース及び、 + イベントループの実行に関与しています。 + 従って、Qt を使用する全ての GUI アプリケーションでは、 + 必ず QApplication が存在します。 + + \snippet tutorials/addressbook/part1/main.cpp main function + + スタックに新しい \c AddressBook ウィジェットを生成し、 + \l{QWidget::show()}{show()} 関数を呼び出して表示します。 + ただし、ウィジェットはアプリケーションのイベントループが + 開始されるまで表示されません。 + アプリケーションの \l{QApplication::}{exec()} 関数を呼び出して、 + イベントループを開始します。 + この関数により返された結果は、 \c main() 関数の戻り値として使用されます。 + この時点で、スタックで \c AddressBook + をインスタンス化した理由が明らかになります。 + イベントループが終了すると \c main() 関数のスコープの外に移動します。 + それに伴って \c AddressBook 及び、 + これに属する全ての子ウィジェットが削除されるため、 + メモリリークを防ぐことができます。 +*/ + +/*! + \page tutorials-addressbook-part2.html + + \example tutorials/addressbook/part2 + \title 第2章 - アドレスの追加 + + 基本的なアドレス帳アプリケーションを作成するための次の手順は、 + ユーザからの操作を可能にすることです。 + + \image addressbook-tutorial-part2-add-contact.png + + 新しい連絡先を追加するために、 + ユーザがクリックするプッシュボタンを作成します。 + また、これらの連絡先を整理して保存するために、 + 何らかのデータ構造が必要になります。 + + \section1 AddressBook クラスの宣言 + + ラベルと入力フィールドの設定が完了しているため、 + 連絡先を追加する際に必要なプッシュボタンを追加します。 + \c addressbook.h ファイルに、 + 3つの QPushButton オブジェクトを宣言し、 + 対応する3つの public slot を作成します。 + + \snippet tutorials/addressbook/part2/addressbook.h slots + + スロットとは特定のシグナルに応答して呼び出される関数をいいます。 + このコンセプトについては、 \c AddressBook + クラスを実装する際にさらに詳細に取り上げます。 + なお、Qt のシグナル/スロットのコンセプトの概要については、 + \l{Signals and Slots} のドキュメントを参照してください。 + + 3つの QPushButton オブジェクト \c addButton 、 \c submitButton 、 + \c cancelButton は、前章の \c nameLine と \c addressText とともに、 + プライベート変数宣言に含まれています。 + + \snippet tutorials/addressbook/part2/addressbook.h pushbutton declaration + + アドレス帳の連絡先を横断して表示するには、 + 連絡先保持用のコンテナが必要です。 + QMap のオブジェクトである \c contacts をこの目的に使用します。 + \c contacts にはキーとして連絡先の名前 \e key + とそれに対応する値として連絡先の住所 \e value を格納します。 + + \snippet tutorials/addressbook/part2/addressbook.h remaining private variables + + QString の2つのプライベートオブジェクトとして \c oldName と \c oldAddress + も宣言します。 + これらのオブジェクトは、ユーザが \gui Add + をクリックする前に最後に表示した連絡先の名前と住所が含まれている必要があります。 + ユーザが \gui Cancel + をクリックすると、最後に表示した連絡先の詳細に戻って表示することが出来ます。 + + \section1 AddressBook クラスの実装 + + \c AddressBook のコンストラクタ内で、連絡先の詳細を編集することなく + 表示のみを行えるよう、 \c nameLine と \c addressText + を読み取り専用に設定します。 + + \dots + \snippet tutorials/addressbook/part2/addressbook.cpp setting readonly 1 + \dots + \snippet tutorials/addressbook/part2/addressbook.cpp setting readonly 2 + + 次に、プッシュボタン \c addButton 、 \c submitButton 、 \c cancelButton + のインスタンスを生成します。 + + \snippet tutorials/addressbook/part2/addressbook.cpp pushbutton declaration + + \c addButton を、 \l{QPushButton::show()} 関数を呼び出して表示します。 + \c submitButton と \c cancelButton は、 + \l{QPushButton::hide()}{hide()} を呼び出して非表示にします。 + これら2つのプッシュボタンはユーザが \gui Add + をクリックした場合にのみ表示され、後に説明する + \c addContact() によって処理されます。 + + \snippet tutorials/addressbook/part2/addressbook.cpp connecting signals and slots + + 各プッシュボタンの \l{QPushButton::clicked()}{clicked()} を、 + それぞれのスロットに接続します。 + 下図はこれを説明したものです。 + + \image addressbook-tutorial-part2-signals-and-slots.png + + 次に、 QVBoxLayout を使用して、 + アドレス帳ウィジェットの右側にプッシュボタンを + 上下一列に配置します。 + + \snippet tutorials/addressbook/part2/addressbook.cpp vertical layout + + \l{QBoxLayout::addStretch()}{addStretch()} 関数は、 + プッシュボタンを等間隔に並べるのではなく、 + ウィジェット上部に近づけて配置するために使用します。 + 下図は、\l{QBoxLayout::addStretch()}{addStretch()} を使用した場合と、 + 使用しない場合の違いを示しています。 + + \image addressbook-tutorial-part2-stretch-effects.png + + 次に、\l{QGridLayout::addLayout()}{addLayout()} を使用して、 + \c buttonLayout1 を \c mainLayout に追加します。 + \c buttonLayout1 は \c mainLayout の子となり、 + レイアウトが入れ子になりました。 + + \snippet tutorials/addressbook/part2/addressbook.cpp grid layout + + レイアウトの配置は以下のようになります: + + \image addressbook-tutorial-part2-labeled-layout.png + + \c addContact() では、最後に表示した連絡先の詳細を、 + \c oldName と \c oldAddress に保存します。 + 次に、これらの入力フィールドをクリアし、読み取り専用モードを解除します。 + \c nameLine にフォーカスをセットして、 \c submitButton と \c cancelButton を表示します。 + + \snippet tutorials/addressbook/part2/addressbook.cpp addContact + + \c submitContact() 関数は、以下の次の3つの要素から成ります: + + \list 1 + + \o \c nameLine 及び \c addressText から連絡先の詳細を抽出し、 + QString オブジェクトに保存します。 + また、ユーザが入力フィールドに何も入力せずに + \gui Submit をクリックしないよう確認します。 + どちらかのフィールドが空であれば、ユーザに名前と住所の入力を求める + QMessageBox が表示されます。 + + \snippet tutorials/addressbook/part2/addressbook.cpp submitContact part1 + + \o 続けて、連絡先が既に存在するかどうか確認します。 + 存在しない場合は \c contacts に連絡先を追加して QMessageBox を表示し、 + 連絡先が追加されたことをユーザに知らせます。 + + \snippet tutorials/addressbook/part2/addressbook.cpp submitContact part2 + + 連絡先が既に存在する場合、 QMessageBox を表示し、 + 連絡先が重複して追加されないように + 連絡先が存在することをユーザに知らせます。 + \c contacts オブジェクトは、名前と住所のキー値のペアで構成されているため、 + \e key が一意であることを確認します。 + + \o 上記の両方の事例に対処したら、 + 以下のコードを使ってプッシュボタンを通常の状態に戻します: + + \snippet tutorials/addressbook/part2/addressbook.cpp submitContact part3 + + \endlist + + 以下のスクリーンショットは、ユーザに情報メッセージを表示するために使用する + QMessageBox オブジェクトです。 + + \image addressbook-tutorial-part2-add-successful.png + + \c cancel() 関数は、最後に表示した連絡先の詳細を復元して + \c addButton を有効にし、 \c submitButton と \c cancelButton + を非表示にします。 + + \snippet tutorials/addressbook/part2/addressbook.cpp cancel + + 連絡先を追加する際の概念は、ユーザがいつでも自由に + \gui{送信} または \gui{キャンセル} をクリックできるようにすることです。 + 以下のフローチャートは、この概念を詳細に説明しています: + + \image addressbook-tutorial-part2-add-flowchart.png +*/ + +/*! + \page tutorials-addressbook-part3.html + + \example tutorials/addressbook/part3 + \title 第3章 - 項目間のナビゲーション + + アドレス帳アプリケーションは、半分完成しました。 + 次に表示する連絡先を変更するために、いくつかの関数を追加します。 + しかし、最初に、これらの連絡先を保存するために使用するデータ構造の種類を決める必要があります。 + + 第2章では、連絡先の名前 \e key 及び、連絡先の住所 \e value + の鍵と値のペアで QMap を使用しました。 + これは、この事例で使用するのに適した構造です。 + ただし、各項目間を移動して表示するには、多少の機能拡張が必要です。 + + QMap を、最初の要素と最後の要素を含むすべての要素が接続された + 循環リストに似たデータ構造に、機能拡張します。 + 下図はこのデータ構造を説明したものです。 + + \image addressbook-tutorial-part3-linkedlist.png + + \section1 AddressBook クラスの宣言 + + アドレス帳アプリケーションにナビゲーション機能を追加するには、 + \c AddressBook クラスに2つのスロットを追加する必要があります。 + next() 及び \c previous() を + \c addressbook.h ファイルに追加します。 + + \snippet tutorials/addressbook/part3/addressbook.h navigation functions + + また、新たに2つの QPushButton オブジェクトが必要になります。 + プライベート変数として + \c nextButton と \c previousButton を宣言します。 + + \snippet tutorials/addressbook/part3/addressbook.h navigation pushbuttons + + \section1 AddressBook クラスの実装 + + \c addressbook.cpp の \c AddressBook コンストラクタでは、 + \c nextButton と \c previousButton のインスタンスを生成し + 初期設定で無効にします。 + これは、アドレス帳に複数の連絡先が存在しない場合、 + ナビゲーションを有効にしないためです。 + + \snippet tutorials/addressbook/part3/addressbook.cpp navigation pushbuttons + + これらのプッシュボタンを、それぞれスロットに接続します: + + \snippet tutorials/addressbook/part3/addressbook.cpp connecting navigation signals + + 以下の画像は、ここで作成しようとしている + グラフィカルユーザインターフェースです。 + 最終アプリケーションが完成間近であることがわかるでしょう。 + + \image addressbook-tutorial-part3-screenshot.png + + \c next() と \c previous() では基本的な規約に従って、 + \c nextButton を右側に、 \c previousButton を左側に配置します。 + 直感的でわかりやすいレイアウトに仕上げるために、 + QHBoxLayout を使用してウィジェットを横に並べて配置します: + + \snippet tutorials/addressbook/part3/addressbook.cpp navigation layout + + 次に、 \c mainLayout に、QHBoxLayout のオブジェクトである + \c buttonLayout2 を追加します。 + + \snippet tutorials/addressbook/part3/addressbook.cpp adding navigation layout + + 下図は、 \c mainLayout のウィジェットの配置を示します。 + \image addressbook-tutorial-part3-labeled-layout.png + + \c addContact() 関数内部では、 + ユーザが連絡先を追加しているときに移動しないよう、 + これらのボタンを無効にする必要があります。 + + \snippet tutorials/addressbook/part3/addressbook.cpp disabling navigation + + また、 \c submitContact() 関数では、 \c contacts のサイズに応じて、 + ナビゲーションボタン \c nextButton 及び \c previousButton を有効にします。 + 前述のように、アドレス帳に複数の連絡先が存在しない場合は、 + ナビゲーションを有効にできません。 + 以下のコードは、その処理方法を示しています。 + + \snippet tutorials/addressbook/part3/addressbook.cpp enabling navigation + + \c cancel() 関数にも、これらの処理を含めます。 + + ここで、QMap のオブジェクト \c contacts を使って、 + 循環リストをエミュレートしましょう。 + \c next() 関数で、 \c contacts のイテレータを作成し、次に: + + \list + \o イテレータが \c contacts の末尾にない場合は、次の項目に移動します。 + + \o イテレータが \c contacts の末尾にある場合は、 + \c contacts の先頭に移動します。 + これによって、QMap が循環リストのように機能するという印象を与えます。 + \endlist + + \snippet tutorials/addressbook/part3/addressbook.cpp next() function + + \c contacts 内の正しいオブジェクトに移動したら、 + \c nameLine と \c addressText に内容を表示します。 + + 同様に、 \c previous() 関数で、 \c contacts のイテレータを作成し、次に: + \list + \o イテレータが \c contacts の末尾にある場合は、 + 表示をクリアして戻ります。 + + \o イテレータが \c contacts の先頭にある場合は、末尾に移動します。 + + \o イテレータを直前の項目に移動します。 + \endlist + + \snippet tutorials/addressbook/part3/addressbook.cpp previous() function + + もう一度、 \c contacts に現在のオブジェクトの内容を表示します。 +*/ + +/*! + \page tutorials-addressbook-part4.html + + \example tutorials/addressbook/part4 + \title 第4章 - アドレスの編集と削除 + + 本章では、アドレス帳アプリケーションに保存されている + 連絡先の内容を変更する方法について説明します。 + + \image addressbook-tutorial-screenshot.png + + ここでは、連絡先を整理して保存するだけでなく、 + ナビゲーションが可能なアドレス帳を作成します。 + 必要に応じて連絡先の詳細を変更できるよう、 + 編集・削除機能を追加すると便利です。 + ただし、列挙型書式の若干の改善が必要になります。 + 前章では、次の2つのモードを扱いました: + \c AddingMode 及び \c NavigationMode - + ただし、これらは列挙型として定義しませんでした。 + 代わりに、対応するボタンを手動で有効または無効にし、 + 複数行のコードを繰り返します。 + + 本章では、以下のような2つの異なる値を持つ \c Mode 列挙型を定義します: + + \list + \o \c{NavigationMode} + \o \c{AddingMode} + \o \c{EditingMode} + \endlist + + \section1 AddressBook クラスの宣言 + + \c addressbook.h ファイルをアップデートし、 \c Mode 列挙型を追加します: + + \snippet tutorials/addressbook/part4/addressbook.h Mode enum + + また、public slot として2つの新しいスロット + \c editContact() 及び \c removeContact() を追加します。 + + \snippet tutorials/addressbook/part4/addressbook.h edit and remove slots + + モードを切り替えるために、すべての QPushButton オブジェクトの + 有効化/無効化を制御する \c updateInterface() 関数を導入します。 + また、前述の編集と削除を行うスロット用に、2つの新しいボタン + \c editButton 及び \c removeButton を追加します。 + + \snippet tutorials/addressbook/part4/addressbook.h updateInterface() declaration + \dots + \snippet tutorials/addressbook/part4/addressbook.h buttons declaration + \dots + \snippet tutorials/addressbook/part4/addressbook.h mode declaration + + 最後に、現在のモードを保持する列挙型の \c currentMode を宣言します。 + + \section1 AddressBook クラスの実装 + + ここで、アドレス帳アプリケーションのモード変更機能を実装する必要があります。 + アドレス帳をはじめて起動するときは、 + メモリに連絡先が保存されていないため、 + コンストラクタでは、 \c editButton 及び \c removeButton + のインスタンスの生成と無効化を行います。 + + \snippet tutorials/addressbook/part4/addressbook.cpp edit and remove buttons + + また、ボタンをそれぞれのスロット \c editContact() 及び \c removeContact() + に接続し、 \c buttonLayout1 に追加します。 + + \snippet tutorials/addressbook/part4/addressbook.cpp connecting edit and remove + \dots + \snippet tutorials/addressbook/part4/addressbook.cpp adding edit and remove to the layout + + \c editContact() は、モードを \c EditingMode に切り替える前に、 + 連絡先の古い詳細情報を、 \c oldName と \c oldAddress に保存します。 + このモードでは、 \c submitButton と \c cancelButton + の両方が有効になるため、ユーザは連絡先の詳細を変更し、 + どちらか一方のボタンをクリックできます。 + + \snippet tutorials/addressbook/part4/addressbook.cpp editContact() function + + \c submitContact() 関数は、 \c{if-else} ステートメントにより、 + 2つの処理に分割しています。 + \c currentMode が \c AddingMode であるかどうかを確認します。 + その場合、連絡先追加の処理を行います。 + + \snippet tutorials/addressbook/part4/addressbook.cpp submitContact() function beginning + \dots + \snippet tutorials/addressbook/part4/addressbook.cpp submitContact() function part1 + + \c AddingMode でない場合、 \c currentMode が \c EditingMode + であるかどうか確認します。 + その場合、 \c oldName を \c name と比較します。 + 名前を変更した場合、 \c contacts から古い連絡先を削除し、 + 新たに更新した連絡先を挿入します。 + + \snippet tutorials/addressbook/part4/addressbook.cpp submitContact() function part2 + + 住所のみを変更した場合 (たとえば、 \c oldAddress は \c address と異なる)、 + 連絡先の住所を更新します。 + 最後に、 \c currentMode を \c NavigationMode に設定します。 + これは、無効にしたプッシュボタンをすべて再び有効にするための重要なステップです。 + + アドレス帳から連絡先の削除を行う + \c removeContact() 関数を実装します。 + この関数では、まず連絡先が \c contacts に存在するかどうか確認します。 + + \snippet tutorials/addressbook/part4/addressbook.cpp removeContact() function + + 存在する場合、ユーザに削除を確認するために、QMessageBox を表示します。 + ユーザが確認したら、 \c previous() を呼び出して、 + ユーザインターフェースで他の連絡先を表示できることを確認し、 + QMap の \l{QMap::remove()}{remove()} 関数を使用して連絡先を削除します。 + 念のため、QMessageBox を表示してユーザに知らせます。 + この関数で使用するメッセージボックスを以下に示します: + + \image addressbook-tutorial-part4-remove.png + + \section2 ユーザインターフェースを更新する + + 既に、 \c updateInterface() 関数が + 現在のモードに応じてプッシュボタンの有効化と無効化を行うための + 手段であることを説明しました。 + この関数は、渡される \c mode 引数に応じて現在のモードを更新します。 + なお、引数の値を確認する前に \c currentMode に代入しています。 + + このとき、それぞれのプッシュボタンは、 + 現在のモードに応じて有効または無効になります。 + \c AddingMode 及び \c EditingMode でのコードを以下に示します: + + \snippet tutorials/addressbook/part4/addressbook.cpp update interface() part 1 + + \c NavigationMode の場合、 QPushButton::setEnabled() + 関数のパラメータに条件を含めます。 + これは、アドレス帳に少なくとも1つ以上の連絡先が存在する場合に、 + \c editButton と \c removeButton が有効であることを確認するためのものです。 + \c nextButton と \c previousButton は、 + アドレス帳に少なくとも2つ以上の連絡先が存在する場合にのみ有効になります。 + + \snippet tutorials/addressbook/part4/addressbook.cpp update interface() part 2 + + モードの設定及び、同一関数内でのユーザインターフェースの更新を行うタスクを実行することにより、 + アプリケーションの内部状態により + ユーザインターフェースが「非同期」になる可能性を防ぎます。 +*/ + +/*! + \page tutorials-addressbook-part5.html + + \example tutorials/addressbook/part5 + \title 第5章 - 検索機能の追加 + + 本章では、アドレス帳アプリケーションの連絡先と住所を + 検索する方法について説明します。 + + \image addressbook-tutorial-part5-screenshot.png + + アドレス帳アプリケーションへ連絡先の追加を繰り返すと、 + \e Next 及び \e Previous ボタンによる連絡先のナビゲートが面倒になります。 + この場合、\e{検索(Find)}機能を使うと、 + 連絡先の検索をより効率的に行うことができます。 + 上記スクリーンショットは、\e Find ボタン及び、 + パネル上のボタンの位置を示します。 + + ユーザーが \e Find ボタンをクリックすると、 + 連絡先の名前の入力を求めるダイアログを表示します。 + Qt が提供する QDialog クラスを継承して \c FindDialog クラスを導入します。 + + \section1 FindDialog クラスの宣言 + + \image addressbook-tutorial-part5-finddialog.png + + QDialog を継承するには、最初に、QDialog のヘッダーを + \c finddialog.h ファイルで include する必要があります。 + また、これらのウィジェットをダイアログクラスで使用するため、 + 前方宣言を使用して QLineEdit と QPushButton を宣言します。 + + \c AddressBook クラスと同様に、 \c FindDialog クラスには Q_OBJECT + マクロが含まれ、ダイアログが別のウィンドウとして開かれる場合でも、 + コンストラクタは親 QWidget を取るように定義されます。 + + \snippet tutorials/addressbook/part5/finddialog.h FindDialog header + + \c FindDialog のインスタンスを保持するクラスにより使用される + パブリック関数 \c getFindText() を定義します。 + この関数を経由してユーザが入力した検索文字列を取得します。 + また、ユーザが \gui Find ボタンをクリックしたときに検索文字列を処理するために、 + public slot として \c findClicked() を定義します。 + + 最後に、\gui Find ボタンに対応するプライベート変数として \c findButton 、 + ユーザが検索文字列を入力するラインエディット \c lineEdit 及び、 + 後の作業で使用する検索文字列を保存するために使用する内部文字列として + \c findText の定義を行います。 + + \section1 FindDialog クラスの実装 + + \c FindDialog のコンストラクタ内で、プライベート変数の + \c lineEdit 、 \c findButton 及び \c findText を設定します。 + QHBoxLayout を用いてウィジェットを配置します。 + + \snippet tutorials/addressbook/part5/finddialog.cpp constructor + + シグナルをそれぞれのスロットに接続し、 + レイアウトとウィンドウのタイトルを設定します。 + \c findButton の \l{QPushButton::clicked()} シグナルは、 + \c findClicked() と \l{QDialog::accept()}{accept()} + に接続されていることがわかります。 + QDialog により提供される \l{QDialog::accept()}{accept()} スロットは + ダイアログを非表示にして、結果コードを \l{QDialog::}{Accepted} + に設定します。 + この関数を使用して、 \c AddressBook の \c findContact() 関数に、 + \c FindDialog オブジェクトが閉じていることを知らせます。 + この論理については、 \c findContact() 関数について取り上げる際に、 + さらに詳細に説明します。 + + \image addressbook-tutorial-part5-signals-and-slots.png + + \c findClicked() で、ユーザが連絡先の名前を入力せずに + \gui Find ボタンをクリックしたかどうか確認するために + \c lineEdit を検証します。 + 次に、 \c lineEdit から抽出した検索文字列を \c findText に設定します。 + その後、 \c lineEdit のコンテンツをクリアし、ダイアログを非表示にします。 + + \snippet tutorials/addressbook/part5/finddialog.cpp findClicked() function + + \c findText 変数用のパブリックな取得関数 + \c getFindText() を実装します。 + コンストラクタ及び \c findClicked() 関数でのみ + \c findText を直接設定するため、 + \c getFindText() に対応する設定関数は作成しません。 + \c getFindText() はパブリックであるため、インスタンスを生成し + \c FindDialog を使用するクラスは、 + ユーザが入力して確定した検索文字列にいつでもアクセスできます。 + + \snippet tutorials/addressbook/part5/finddialog.cpp getFindText() function + + \section1 AddressBook クラスの宣言 + + \c AddressBook クラス内部から \c FindDialog を使用できるよう、 + \c addressbook.h ファイルに \c finddialog.h を含めます。 + + \snippet tutorials/addressbook/part5/addressbook.h include finddialog's header + + これまでのところ、アドレス帳の全機能に、 + QPushButton とそのボタンに対応するスロットが含まれています。 + 同様に、\gui{検索(Find)}機能には、 + \c findButton 及び \c findContact() が含まれています。 + + \c findButton はプライベート変数として宣言され、 + \c findContact() 関数は public slot として宣言されます。 + + \snippet tutorials/addressbook/part5/addressbook.h findContact() declaration + \dots + \snippet tutorials/addressbook/part5/addressbook.h findButton declaration + + 最後に、 \c FindDialog のインスタンスを参照するためのプライベート変数 + \c dialog を宣言します。 + + \snippet tutorials/addressbook/part5/addressbook.h FindDialog declaration + + インスタンス化されたダイアログは複数回使用します。 + プライベート変数を使用すると、 + クラスの複数の場所から参照できるようになります。 + + \section1 AddressBook クラスの実装 + + \c AddressBook クラスのコンストラクタ内で、 + プライベートオブジェクトの \c findButton と \c findDialog + のインスタンスを生成します: + + \snippet tutorials/addressbook/part5/addressbook.cpp instantiating findButton + \dots + \snippet tutorials/addressbook/part5/addressbook.cpp instantiating FindDialog + + 次に、 \c findButton の \l{QPushButton::clicked()}{clicked()} シグナルを、 + \c findContact() に接続します。 + + \snippet tutorials/addressbook/part5/addressbook.cpp signals and slots for find + + 後は、 \c findContact() 関数のコードだけです: + + \snippet tutorials/addressbook/part5/addressbook.cpp findContact() function + + \c FindDialog インスタンスの \c dialog を表示することから始めます。 + これは、ユーザが検索用に連絡先の名前を入力するためのものです。 + ユーザがダイアログの \c findButton をクリックすると + ダイアログが非表示になり、結果コードが QDialog::Accepted に設定されます。 + これにより、 \c if ステートメントが常に真になります。 + + 続けて、検索文字列の抽出を行います。 + この場合、検索文字列は \c contactName で、 + \c FindDialog の \c getFindText() 関数を使用して取得します。 + アドレス帳に連絡先が存在する場合、直ちに表示します。 + 存在しない場合、検索が失敗したことを示す以下の QMessageBox が表示されます。 + + \image addressbook-tutorial-part5-notfound.png +*/ + +/*! + \page tutorials-addressbook-part6.html + + \example tutorials/addressbook/part6 + \title 第6章 - 読み込みと保存 + + 本章では、アドレス帳アプリケーションの読み込みと保存処理で使用する、 + Qt のファイル処理機能について説明します。 + + \image addressbook-tutorial-part6-screenshot.png + + 連絡先の参照及び検索機能は便利な機能ですが、 + 連絡先の保存と読み込みが可能になるまではアドレス帳は完成しません。 + + Qt は \l{Input/Output and Networking}{入出力} + 用のクラスを様々提供していますが、 + 今回は簡単に組み合わせて使用できる QFile と QDataStream の2つのクラスを選択しました。 + + QFile のオブジェクトは、 + 読み込みと書き込みが可能なディスク上のファイルを表します。 + QFile は、さまざまなデバイスを表すより一般的な QIODevice クラスの派生クラスです。 + + QDataStream オブジェクトは、バイナリデータを QIODevice に保存して、 + 後でもう一度取得できるようシリアライズするために使用します。 + パラメータとしてそれぞれのデバイスを使用すると、 + ストリームを開くのと同じくらい簡単に、 QIODevice + からの読み込みと書き込みを行うことができます。 + + \section1 AddressBook クラスの宣言 + + 2つの QPushButton オブジェクトの \c loadButton と \c saveButton + に加えて、2つの public slot の \c saveToFile() と \c loadFromFile() + を宣言します。 + + \snippet tutorials/addressbook/part6/addressbook.h save and load functions declaration + \dots + \snippet tutorials/addressbook/part6/addressbook.h save and load buttons declaration + + \section1 AddressBook クラスの実装 + + コンストラクタで、 \c loadButton と \c saveButton のインスタンスを生成します。 + 理想的には、プッシュボタンのラベルを、 + "Load contacts from a file"(「ファイルから連絡先を読み込む」)及び、 + "Save contacts to a file"(「連絡先をファイルに保存する」) + に設定するほうがよりユーザーフレンドリーです。 + ただし、他のプッシュボタンのサイズを考慮して、 + \gui{Load...}及び\gui{Save...}に設定します。 + Qt は、 \l{QWidget::setToolTip()}{setToolTip()} を使用して + ツールチップを簡単に設定する方法を提供していますので、 + 以下のコードでプッシュボタンにツールチップを設定します: + + \snippet tutorials/addressbook/part6/addressbook.cpp tooltip 1 + \dots + \snippet tutorials/addressbook/part6/addressbook.cpp tooltip 2 + + ここには記載していませんが、 + これまで実装した他の機能のように右側のレイアウトパネル + \c button1Layout にプッシュボタンを追加し、 + プッシュボタンの \l{QPushButton::clicked()}{clicked()} + シグナルをそれぞれのスロットに接続します。 + + 保存機能の場合、最初に QFileDialog::getSaveFileName() を使用して、 + \c fileName を取得します。 + これは、QFileDialog により提供される簡易関数で、 + モーダルなファイルダイアログをポップアップ表示させ、 + ユーザはファイル名を入力したり、既存の \c{.abk} ファイルを選択することが出来ます。 + \c{.abk} ファイルは、 + 連絡先を保存したときに作成されるアドレス帳の拡張子です。 + + \snippet tutorials/addressbook/part6/addressbook.cpp saveToFile() function part1 + + 以下のスクリーンショットのようなネイティブのファイルダイアログが表示されます: + + \image addressbook-tutorial-part6-save.png + + \c fileName が空ではない場合、 \c fileName を用いて + QFile のオブジェクト \c file を作成します。 + QFile は QIODevice の派生クラスであるため、 + QDataStream から使用できます。 + + 次に、ファイルを \l{QIODevice::}{WriteOnly} モードでオープンします。 + オープンに失敗した場合、 QMessageBox を表示してユーザに知らせます。 + + \snippet tutorials/addressbook/part6/addressbook.cpp saveToFile() function part2 + + オープンに成功した場合、 QDataStream のインスタンス \c out を生成して、 + 開いているファイルに書き込みます。 + QDataStream では、同じバージョンのストリームを使用して、 + 読み込みと書き込みを行う必要があります。 + \c file にシリアライズする前に、 + \l{QDataStream::Qt_4_5}{Qt 4.5で導入されたバージョン} + を今回使用するバージョンとして設定します。 + + \snippet tutorials/addressbook/part6/addressbook.cpp saveToFile() function part3 + + 読み込み機能の場合も QFileDialog::getOpenFileName() を使用して + \c fileName を取得します。 + この関数は QFileDialog::getSaveFileName() に対応するものであり、 + モーダルなファイルダイアログをポップアップ表示させ、 + ユーザはファイル名を入力したり、既存の \c{.abk} + ファイルを選択してアドレス帳に読み込ことができます。 + + \snippet tutorials/addressbook/part6/addressbook.cpp loadFromFile() function part1 + + たとえば、 Windows では、この関数は、以下のスクリーンショットのような + ネイティブのファイルダイアログをポップアップ表示させます。 + + \image addressbook-tutorial-part6-load.png + + \c fileName が空ではない場合、 QFile のオブジェクト + \c file を使用して、 \l{QIODevice::}{ReadOnly} モードでオープンします。 + \c saveToFile() の実装の場合と同様に、オープンに失敗した場合は + QMessageBox を表示して、ユーザに知らせます。 + + \snippet tutorials/addressbook/part6/addressbook.cpp loadFromFile() function part2 + + オープンに成功した場合、 + QDataStream のインスタンス \c in を生成して前記のようにバージョン設定を行い、 + シリアライズしたデータを \c contacts のデータ構造に読み込みます。 + \c contacts オブジェクトはデータが読み込まれる前に空にするので、 + ファイルの読み込みプロセスは簡素化されます。 + より高度な方法では、一時オブジェクトの QMap に読み込んで、 + 重複していない連絡先を \c contacts にコピーします。 + + \snippet tutorials/addressbook/part6/addressbook.cpp loadFromFile() function part3 + + ファイルから読み込んだ連絡先を表示するには、 + 最初に取得したデータを検証し、 + 読み込んだファイルにアドレス帳の連絡先が実際に含まれているか確認します。 + 含まれている場合、最初の連絡先を表示します。 + 含まれていない場合、QMessageBox を表示して、 + 問題があることをユーザに知らせます。 + 最後にインターフェースを更新し、適宜 + プッシュボタンの有効化と無効化を行います。 +*/ + +/*! + \page tutorials-addressbook-part7.html + + \example tutorials/addressbook/part7 + \title 第7章 - 追加機能 + + 本章では、アドレス帳アプリケーションを + 普段の生活で便利に使用するための追加機能について説明します。 + + \image addressbook-tutorial-part7-screenshot.png + + アドレス帳アプリケーションは、それ自体で便利ですが、 + 他のアプリケーションとデータの交換ができればなお便利です。 + vCard 形式は、この目的で使用可能な一般的なファイル形式です。 + 本章では、連絡先を vCard ファイル(\c{.vcf}) + にエクスポートできるよう、アドレス帳クライアントを拡張します。 + + \section1 AddressBook クラスの宣言 + + QPushButton のオブジェクト \c exportButton 及び、 + 対応する public slot の \c exportAsVCard() を + \c addressbook.h ファイルの \c AddressBook クラスに追加します。 + + \snippet tutorials/addressbook/part7/addressbook.h exportAsVCard() declaration + \dots + \snippet tutorials/addressbook/part7/addressbook.h exportButton declaration + + \section1 AddressBook クラスの実装 + + \c AddressBook のコンストラクタで、 \c exportButton の + \l{QPushButton::clicked()}{clicked()} シグナルを + \c exportAsVCard() に接続します。 + このボタンも、右側のボタンのパネルの処理を行うレイアウトである + \c buttonLayout1 に追加します。 + + \c exportAsVCard() 関数では、 + 連絡先の名前を \c name に抽出することから始めます。 + \c firstName 、 \c lastName 及び \c nameList を宣言します。 + 次に \c name を検索し、最初の空白のインデックスを取得します。 + 空白が存在する場合、連絡先の名前を \c firstName と + \c lastName に分割します。 + 次に、空白をアンダースコア ("_") に置き換えます。 + 空白が存在しない場合は、連絡先にファーストネーム(名) + しか保存されていない可能性があります。 + + \snippet tutorials/addressbook/part7/addressbook.cpp export function part1 + + \c saveToFile() 関数と同様に、ユーザがファイルの場所を選択できるよう + ファイルダイアログを開きます。 + 選択したファイル名を使用して、 + 書き込みを行うための QFile のインスタンスを生成します。 + + ファイルを \l{QIODevice::}{WriteOnly} モードでオープンします。 + オープンに失敗した場合、 QMessageBox を表示して、 + 問題があることをユーザに知らせて戻ります。 + オープンに成功した場合、 QTextStream のオブジェクト \c out へ + パラメータファイルを渡します。 + QDataStream のように、QTextStream クラスは、 + プレーンテキストファイルの読み込みと書き込みを行う機能を提供します。 + 結果として、生成された \c{.vcf} は + テキストエディターで開いて編集することができます。 + + \snippet tutorials/addressbook/part7/addressbook.cpp export function part2 + + まず \c{BEGIN:VCARD} タグ、次に \c{VERSION:2.1} タグの順に + vCard ファイルに書き込みます。 + 連絡先の名前は、 \c{N:} タグを使用して書き込みます。 + vCard の "File as" プロパティを設定する \c{FN:} タグを書き込む際は、 + 連絡先にラストネーム(姓)が含まれているかどうかを確認する必要があります。 + 含まれている場合、 \c nameList の情報を使用して入力します。 + 含まれていない場合、 \c firstName のみを書き込みます。 + + \snippet tutorials/addressbook/part7/addressbook.cpp export function part3 + + 続けて連絡先の住所の書き込みを行います。 + 住所のセミコロンには、"\\" をエスケープ文字として追加する必要があります。 + 改行はセミコロンに置き換えられ、コンマはスペースに置き換えられます。 + 次に、 \c{ADR;HOME:;} タグ、 \c address 、 + \c{END:VCARD} タグの順に書き込みます。 + + \snippet tutorials/addressbook/part7/addressbook.cpp export function part4 + + 最後に、vCard のエクスポートに成功したことをユーザに知らせるために、 + QMessageBox が表示されます。 + + \e{vCard は、\l{http://www.imc.org}{Internet Mail Consortium} の登録商標です。} +*/ diff --git a/doc/src/ja_JP/tutorials/widgets-tutorial.qdoc b/doc/src/ja_JP/tutorials/widgets-tutorial.qdoc new file mode 100644 index 0000000..6a6b1a2 --- /dev/null +++ b/doc/src/ja_JP/tutorials/widgets-tutorial.qdoc @@ -0,0 +1,257 @@ +/**************************************************************************** +** +** 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 documentation 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$ +** +****************************************************************************/ + +/*! + \page widgets-tutorial.html + \title ウィジェットのチュートリアル + \brief 本チュートリアルではウィジェットとレイアウトの基本的な使い方を説明し、それらが GUI アプリケーションの開発でどのように使われるかを説明します。 + + \section1 はじめに + + ウィジェットは Qt によるグラフィカルユーザインターフェース(GUI)アプリケーションの基本構成要素です。 + ボタン、ラベル、テキストエディターなどの各 GUI コンポーネントはウィジェットであり、 + 既存のウィンドウのユーザーインタフェース内に配置したり、独立したウィンドウとして表示することができます。 + それぞれのコンポーネントは QWidget の派生クラスとして実装されます。 + QWidget 自体は QObject の派生クラスです。 + + QWidget は抽象クラスではなく、 + 他のウィジェット用のコンテナとして使用されたり、 + カスタムウィジェットを作る場合の基底クラスとして使用されます。 + 他のウィジェットを配置するウィンドウとしてもよく使われます。 + + \l{QObject} と同様に QWidget は所有権を示すために親オブジェクトを指定して生成できるため、 + 親オブジェクトが使用されなくなった場合には破棄されます。 + ウィジェットではこの親子関係が他の意味も持ちます。 + 子ウィジェットは親ウィジェットが使用する領域内に表示されます。 + これは、ウィンドウを削除するとそのウィンドウに含まれる全てのウィジェットが自動的に破棄されることを意味します。 + + \section1 main 関数の記述 + + Qt の GUI サンプルの多くは標準的なアプリケーションの初期化コードを含む + \c{main.cpp} ファイルと、アプリケーションのロジックやカスタム + GUI コンポーネントを含むいくつかのソース/ヘッダファイルから構成されています。 + + \c{main.cpp} 内の典型的な \c main() 関数は以下のようになります: + + \snippet doc/src/snippets/widgets-tutorial/template.cpp main.cpp body + + 最初に、コマンドラインから渡される引数を渡して QApplication のオブジェクトを生成します。 + ウィジェットを生成して表示した後、 QApplication::exec() を呼び出して Qt のイベントループを開始します。 + この関数から戻ってくるまでアプリケーションの制御は Qt 側にて行われます。最後に、\c{main()} は QApplication::exec() から取得された値を返します。 + + \section1 簡単なウィジェットのサンプル + + 以下の簡単なウィジェットのサンプルでは \c main() 関数の中にコードを記述しています。 + + \list + \o \l {tutorials/widgets/toplevel}{ウィンドウの作成} + + \o \l {tutorials/widgets/childwidget}{子ウィジェット} + + \o \l {tutorials/widgets/windowlayout}{レイアウトの利用} + + \o \l {tutorials/widgets/nestedlayouts}{複雑なレイアウト} + \endlist + + \section1 複雑なウィジェットのサンプル + + \l{Widgets examples}{より高度なサンプル} の場合、ウィジェットやレイアウトのためのコードは他のファイルに記述されています。 + 例えば、メインウインドウ用の GUI は、 QMainWindow 派生クラスのコンストラクタで作成されるでしょう。 + + \section1 サンプルのビルド + + Qt のバイナリパッケージを取得してインストールするか、Qt を自分でコンパイルした場合には既にこのチュートリアルで説明されているサンプルはビルドされ、実行する準備ができています。 + これらを変更し再コンパイルをしたい場合は、次の手順に従う必要があります: + + \list 1 + \o コマンドラインで、再コンパイルしたいサンプルを含むディレクトリに移動します。 + \o \c qmake と入力し、\key{Return} キーを押します。 + うまくいかない場合は、現在のパス内にこの実行ファイルが存在することを確認するか、 + フルパスを指定して実行してください。 + \o Linux/Unix および Mac OS X の場合、\c make と入力し、\key{Return} キーを押します。 + Windows 上の Visual Studio の場合、\c nmake と入力し、\key{Return} キーを押します。 + \endlist + + 現在のディレクトリに実行ファイルが生成されます。 + Windows では、このファイルは \c debug または \c release + ディレクトリに配置されているかもしれません。 + このファイルを実行すると、作業中のサンプルコードの動作を確認できます。 +*/ + +/*! + \example tutorials/widgets/toplevel + \title ウィジェットのチュートリアル - ウィンドウの作成 + + 親を持たないウィジェットを作成した場合、そのウィジェットは表示時にウィンドウ(\e{トップレベルウィジェット})として扱われます。 + このウィジェットが必要なくなった場合にそれを破棄してくれる親ウィジェットがないため、トップレベルウィジェットの管理は開発者が行ってください。 + + 以下のサンプルでは QWidget を使用してウィンドウを作成し、サイズを指定して表示します: + + \raw HTML + + +
+ \endraw + \snippet tutorials/widgets/toplevel/main.cpp main program + \raw HTML + + \endraw + \inlineimage widgets-tutorial-toplevel.png + \raw HTML +
+ \endraw + + 実際の GUI を作成するには、ウィンドウ内にウィジェットを配置する必要があります。 + これは、ウィジェットのコンストラクタに QWidget のインスタンスを渡すことで実現します。 + 詳細は本チュートリアルの次の章で示します。 +*/ + +/*! + \example tutorials/widgets/childwidget + \title ウィジェットのチュートリアル - 子ウィジェット + + 前のサンプルで作成したウィンドウに子ウィジェットを追加するために、 + 親として \c window を子ウィジェットのコンストラクタに渡します。 + ここでは、ウィンドウにボタンを追加し特定の場所に配置します: + + \raw HTML + + +
+ \endraw + \snippet tutorials/widgets/childwidget/main.cpp main program + \raw HTML + + \endraw + \inlineimage widgets-tutorial-childwidget.png + \raw HTML +
+ \endraw + + このボタンはウィンドウの子になり、 + ウィンドウが破棄された場合にはボタンも破棄されるでしょう。 + ウィンドウを非表示化したり閉じた際には、自動的に破棄はされません。 + サンプルが終了する場合には破棄されるでしょう。 +*/ + +/*! + \example tutorials/widgets/windowlayout + \title ウィジェットのチュートリアル - レイアウトの利用 + + 一般的に子ウィジェットは、位置とサイズを明確に指定するのではなく、 + レイアウトオブジェクトを使用してウィンドウ内に配置します。 + ここでは、ラベルとラインエディットを生成し、横に並べて配置します。 + + \raw HTML + + +
+ \endraw + \snippet tutorials/widgets/windowlayout/main.cpp main program + \raw HTML + + \endraw + \inlineimage widgets-tutorial-windowlayout.png + \raw HTML +
+ \endraw + + 生成する \c layout オブジェクトは、 \l{QHBoxLayout::}{addWidget()} 関数を使って設定されたウィジェットの位置とサイズを管理します。 + また、\l{QWidget::}{setLayout()} を使用してレイアウトをウィンドウに設定します。 + レイアウトはそれ自体は目には見えない存在です。 + レイアウトの管理対象となっているウィジェット(や他のレイアウト)に対しての効果としてのみ、その存在を確認できます。 + + 上記サンプルにおいて、各ウィジェットの所有権はあまり明確ではありません。 + 親オブジェクトのない3つのウィジェットと1つのレイアウトを作成するため、 + 空のウィンドウと、ラベルとラインエディットをそれぞれ含む別々のウィンドウが表示されるように見えるかもしれません。 + しかし、レイアウトにラベルとラインエディットを管理するように指定すると、 + ウィンドウにそのレイアウトを設定した際に「親の再指定」が行われるため、 + ウィジェットおよびレイアウト自体がそのウィンドウの子になります。 +*/ + +/*! + \example tutorials/widgets/nestedlayouts + \title ウィジェットのチュートリアル - 複雑なレイアウト + + ウィジェットの中に他のウィジェットを含めることができるように、 + レイアウトは異なるレベルでのウィジェットのグループ化にも使用されます。 + ここではウィンドウ上部にラベルとラインエディットを隣り合わせに配置し、 + その下に検索結果が表示されるテーブルビューを表示します。 + + これは、レイアウトを2つ作成して行います。\c{queryLayout} は、QLabel と QLineEdit を左右に並べて表示する QHBoxLayout です。 + \c{mainLayout} は、\c{queryLayout} と QTableView を上下に並べて表示する QVBoxLayout です。 + + \raw HTML + + +
+ \endraw + \snippet tutorials/widgets/nestedlayouts/main.cpp first part + \snippet tutorials/widgets/nestedlayouts/main.cpp last part + \raw HTML + + \endraw + \inlineimage widgets-tutorial-nestedlayouts.png + \raw HTML +
+ \endraw + + \c{mainLayout} の \l{QBoxLayout::}{addLayout()} 関数にて追加された + \c{queryLayout} と \c{resultView} は追加された順番で上から並べられます。 + + ここでは QTableView ウィジェット \c resultView に表示されるデータを含むモデルの設定のコードは省略していますが、 + 後ほど示します。 + + QHBoxLayout や QVBoxLayout と共に Qt から提供される QGridLayout および QFormLayout を使用することにより、 + より複雑なユーザインターフェースの構築が可能になります。 + これらのレイアウトの効果は、\l{Qt Designer} を実行して確認できます。 + + \section1 モデルを設定する + + 上記のコードでは、レイアウトの有効利用に重点を置いていたため、 + テーブルのデータについては示していませんでした。 + 以下のコードで、モデルには行に対応する項目が含まれ、それぞれの行には2つの列のデータが設定されていることがわかるでしょう。 + + \snippet tutorials/widgets/nestedlayouts/main.cpp set up the model + + モデルとビューの有効利用については、\l{Item Views Examples} および + \l{Model/View Programming} の概要に含まれています。 +*/ diff --git a/examples/ja_JP/linguist/hellotr/hellotr.pro b/examples/ja_JP/linguist/hellotr/hellotr.pro new file mode 100644 index 0000000..3846bfb --- /dev/null +++ b/examples/ja_JP/linguist/hellotr/hellotr.pro @@ -0,0 +1,13 @@ +#! [0] +SOURCES = main.cpp +#! [0] #! [1] +TRANSLATIONS = hellotr_ja.ts +#! [1] + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/linguist/hellotr +sources.files = $$SOURCES *.pro +sources.path = $$[QT_INSTALL_EXAMPLES]/linguist/hellotr +INSTALLS += target sources + +symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) diff --git a/examples/ja_JP/linguist/hellotr/main.cpp b/examples/ja_JP/linguist/hellotr/main.cpp new file mode 100644 index 0000000..ad122e9 --- /dev/null +++ b/examples/ja_JP/linguist/hellotr/main.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** 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 examples 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$ +** +****************************************************************************/ + +#include +#include +//! [0] +#include +//! [0] + +//! [1] //! [2] +int main(int argc, char *argv[]) +//! [1] //! [3] //! [4] +{ + QApplication app(argc, argv); +//! [3] + +//! [5] + QTranslator translator; +//! [5] //! [6] + translator.load("hellotr_ja"); +//! [6] //! [7] + app.installTranslator(&translator); +//! [4] //! [7] + +//! [8] + QPushButton hello(QPushButton::tr("Hello world!")); +//! [8] + hello.resize(100, 30); + + hello.show(); + return app.exec(); +} +//! [2] diff --git a/tools/qdoc3/test/qt-api-only_ja_JP.qdocconf b/tools/qdoc3/test/qt-api-only_ja_JP.qdocconf new file mode 100644 index 0000000..aa3ab01 --- /dev/null +++ b/tools/qdoc3/test/qt-api-only_ja_JP.qdocconf @@ -0,0 +1,30 @@ +include(qt-build-docs_ja_JP.qdocconf) + +# Ensures that the generated index contains a URL that can be used by the +# tools documentation (assistant.qdocconf, designer.qdocconf, linguist.qdocconf, +# qmake.qdocconf). + +url = ./ + +# Ensures that the documentation for the tools is not included in the generated +# .qhp file. + +qhp.Qt.excluded += $QT_SOURCE_TREE/doc/src/development/assistant-manual.qdoc \ + $QT_SOURCE_TREE/doc/src/examples/simpletextviewer.qdoc \ + $QT_SOURCE_TREE/doc/src/development/designer-manual.qdoc \ + $QT_SOURCE_TREE/doc/src/examples/calculatorbuilder.qdoc \ + $QT_SOURCE_TREE/doc/src/examples/calculatorform.qdoc \ + $QT_SOURCE_TREE/doc/src/examples/customwidgetplugin.qdoc \ + $QT_SOURCE_TREE/doc/src/examples/taskmenuextension.qdoc \ + $QT_SOURCE_TREE/doc/src/examples/containerextension.qdoc \ + $QT_SOURCE_TREE/doc/src/examples/worldtimeclockbuilder.qdoc \ + $QT_SOURCE_TREE/doc/src/examples/worldtimeclockplugin.qdoc \ + $QT_SOURCE_TREE/doc/src/internationalization/linguist-manual.qdoc \ + $QT_SOURCE_TREE/doc/src/examples/hellotr.qdoc \ + $QT_SOURCE_TREE/doc/src/examples/arrowpad.qdoc \ + $QT_SOURCE_TREE/doc/src/examples/trollprint.qdoc \ + $QT_SOURCE_TREE/doc/src/development/qmake-manual.qdoc + +outputdir = $QT_BUILD_TREE/doc-build/html-qt_ja_JP +tagfile = $QT_BUILD_TREE/doc-build/html-qt_ja_JP/qt.tags +base = file:$QT_BUILD_TREE/doc-build/html-qt_ja_JP diff --git a/tools/qdoc3/test/qt-build-docs.qdocconf b/tools/qdoc3/test/qt-build-docs.qdocconf index 00704ea..216ac6a 100644 --- a/tools/qdoc3/test/qt-build-docs.qdocconf +++ b/tools/qdoc3/test/qt-build-docs.qdocconf @@ -115,6 +115,7 @@ excludedirs = $QT_SOURCE_TREE/src/3rdparty/clucene \ $QT_SOURCE_TREE/src/3rdparty/phonon/mmf \ $QT_SOURCE_TREE/src/3rdparty/phonon/waveout \ $QT_SOURCE_TREE/doc/src/snippets \ + $QT_SOURCE_TREE/doc/src/ja_JP \ $QT_SOURCE_TREE/doc/src/zh_CN sources.fileextensions = "*.cpp *.qdoc *.mm" diff --git a/tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf b/tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf new file mode 100644 index 0000000..e517b33 --- /dev/null +++ b/tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf @@ -0,0 +1,110 @@ +include(compat.qdocconf) +include(macros.qdocconf) +include(qt-cpp-ignore.qdocconf) +include(qt-html-templates_ja_JP.qdocconf) +include(qt-defines.qdocconf) + +project = Qt +description = Qt リファレンスドキュメント +url = http://qt.nokia.com/doc/ja_JP/4.7 + +sourceencoding = UTF-8 +outputencoding = UTF-8 +naturallanguage = ja + +indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index + +qhp.projects = Qt + +qhp.Qt.file = qt.qhp +qhp.Qt.namespace = com.trolltech.qt.470 +qhp.Qt.virtualFolder = qdoc +qhp.Qt.title = Qt +qhp.Qt.indexTitle = Qt +qhp.Qt.selectors = fake:example + +qhp.Qt.filterAttributes = qt 4.7.0 qtrefdoc ja_JP +qhp.Qt.customFilters.Qt.name = Qt 4.7.0 +qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.0 + +# Files not referenced in any qdoc file (last four are needed by qtdemo) +# See also extraimages.HTML +qhp.Qt.extraFiles = index.html \ + images/bg_l.png \ + images/bg_l_blank.png \ + images/bg_r.png \ + images/box_bg.png \ + images/breadcrumb.png \ + images/bullet_gt.png \ + images/bullet_dn.png \ + images/bullet_sq.png \ + images/bullet_up.png \ + images/feedbackground.png \ + images/horBar.png \ + images/page.png \ + images/page_bg.png \ + images/sprites-combined.png \ + images/arrow-down.png \ + images/spinner.gif \ + images/stylesheet-coffee-plastique.png \ + images/taskmenuextension-example.png \ + images/coloreditorfactoryimage.png \ + images/dynamiclayouts-example.png \ + scripts/functions.js \ + scripts/jquery.js \ + style/OfflineStyle.css \ + style/style_ie6.css \ + style/style_ie7.css \ + style/style_ie8.css \ + style/style.css + +language = Cpp + +sourcedirs = $QT_SOURCE_TREE/doc/src/ja_JP + +excludedirs = $QT_SOURCE_TREE/src/3rdparty/clucene \ + $QT_SOURCE_TREE/src/3rdparty/des \ + $QT_SOURCE_TREE/src/3rdparty/freetype \ + $QT_SOURCE_TREE/src/3rdparty/harfbuzz \ + $QT_SOURCE_TREE/src/3rdparty/kdebase \ + $QT_SOURCE_TREE/src/3rdparty/libjpeg \ + $QT_SOURCE_TREE/src/3rdparty/libmng \ + $QT_SOURCE_TREE/src/3rdparty/libpng \ + $QT_SOURCE_TREE/src/3rdparty/libtiff \ + $QT_SOURCE_TREE/src/3rdparty/md4 \ + $QT_SOURCE_TREE/src/3rdparty/md5 \ + $QT_SOURCE_TREE/src/3rdparty/patches \ + $QT_SOURCE_TREE/src/3rdparty/sha1 \ + $QT_SOURCE_TREE/src/3rdparty/sqlite \ + $QT_SOURCE_TREE/src/3rdparty/webkit/JavaScriptCore \ + $QT_SOURCE_TREE/src/3rdparty/webkit/WebCore \ + $QT_SOURCE_TREE/src/3rdparty/wintab \ + $QT_SOURCE_TREE/src/3rdparty/zlib \ + $QT_SOURCE_TREE/doc/src/snippets \ + $QT_SOURCE_TREE/doc/src/zh_CN \ + $QT_SOURCE_TREE/src/3rdparty/phonon/gstreamer \ + $QT_SOURCE_TREE/src/3rdparty/phonon/ds9 \ + $QT_SOURCE_TREE/src/3rdparty/phonon/qt7 \ + $QT_SOURCE_TREE/src/3rdparty/phonon/mmf \ + $QT_SOURCE_TREE/src/3rdparty/phonon/waveout + +sources.fileextensions = "*.cpp *.qdoc *.mm" +examples.fileextensions = "*.cpp *.h *.js *.xq *.svg *.xml *.ui *.qhp *.qhcp" +examples.imageextensions = "*.png" + +exampledirs = $QT_SOURCE_TREE/doc/src \ + $QT_SOURCE_TREE/examples/ja_JP \ + $QT_SOURCE_TREE/examples \ + $QT_SOURCE_TREE/examples/tutorials \ + $QT_SOURCE_TREE \ + $QT_SOURCE_TREE/qmake/examples \ + $QT_SOURCE_TREE/src/3rdparty/webkit/WebKit/qt/docs +imagedirs = $QT_SOURCE_TREE/doc/src/ja_JP/images \ + $QT_SOURCE_TREE/doc/src/images \ + $QT_SOURCE_TREE/examples \ + $QT_SOURCE_TREE/doc/src/template/images +outputdir = $QT_BUILD_TREE/doc/html_ja_JP +tagfile = $QT_BUILD_TREE/doc/html_ja_JP/qt.tags +base = file:$QT_BUILD_TREE/doc/html_ja_JP + +HTML.generatemacrefs = "true" diff --git a/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf b/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf index 712e23f..c324926 100644 --- a/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf +++ b/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf @@ -80,6 +80,7 @@ excludedirs = $QT_SOURCE_TREE/src/3rdparty/clucene \ $QT_SOURCE_TREE/src/3rdparty/wintab \ $QT_SOURCE_TREE/src/3rdparty/zlib \ $QT_SOURCE_TREE/doc/src/snippets \ + $QT_SOURCE_TREE/doc/src/ja_JP \ $QT_SOURCE_TREE/src/3rdparty/phonon/gstreamer \ $QT_SOURCE_TREE/src/3rdparty/phonon/ds9 \ $QT_SOURCE_TREE/src/3rdparty/phonon/qt7 \ diff --git a/tools/qdoc3/test/qt-html-templates_ja_JP.qdocconf b/tools/qdoc3/test/qt-html-templates_ja_JP.qdocconf new file mode 100644 index 0000000..027548e --- /dev/null +++ b/tools/qdoc3/test/qt-html-templates_ja_JP.qdocconf @@ -0,0 +1,178 @@ +HTML.stylesheets = style/style.css \ + style/OfflineStyle.css \ + style/style_ie7.css \ + style/style_ie8.css \ + style/style_ie6.css + +HTML.postheader = "
\n" \ + "
\n" \ + "
\n" \ + " Home
\n" \ + " Qt Reference Documentation\n" \ + "
\n" \ + "
\n" \ + " \n" \ + "
\n" \ + "
\n" \ + "
\n" \ + " \n" \ + "
\n" \ + "
\n" \ + " \n" \ + "
\n" \ + " \n" \ + "
\n" \ + "
\n" \ + "
\n" \ + "
\n" \ + " \n" \ + "
\n" \ + "
\n" \ + "
\n" \ + "
\n" \ + " Search index:
\n" \ + "
\n" \ + "
\n" \ + "
\n" \ + " \n" \ + "
\n" \ + "
\n" \ + "
\n" \ + "
\n" \ + "

\n" \ + " API Lookup

\n" \ + "
\n" \ + " \n" \ + "
\n" \ + "
\n" \ + "
\n" \ + "

\n" \ + " Qt Topics

\n" \ + "
\n" \ + " \n" \ + "
\n" \ + "
\n" \ + "
\n" \ + "

\n" \ + " Examples

\n" \ + "
\n" \ + " \n" \ + "
\n" \ + "
\n" \ + "
\n" \ + "
\n" \ + "
\n" \ + "
\n" \ + "
    \n" \ + "
  • Home
  • \n" \ + " \n" + +HTML.postpostheader = "
\n" \ + "
\n" \ + "
\n" \ + " \n" \ + "
\n" \ + "
\n" \ + "
\n" + +HTML.footer = " \n" \ + "
\n" \ + " [+] Documentation Feedback
\n" \ + "
\n" \ + "
\n" \ + "
\n" \ + " \n" \ + "
\n" \ + "
\n" \ + "
\n" \ + "

\n" \ + " © 2008-2010 Nokia Corporation and/or its\n" \ + " subsidiaries. Nokia, Qt and their respective logos are trademarks of Nokia Corporation \n" \ + " in Finland and/or other countries worldwide.

\n" \ + "

\n" \ + " All other trademarks are property of their respective owners. Privacy Policy

\n" \ + "
\n" \ + "
\n" \ + "
X
\n" \ + "
\n" \ + "

\n" \ + "

\n" \ + "
\n" \ + "
\n" \ + "
\n" \ + "
\n" \ + "\n" diff --git a/tools/qdoc3/test/qt.qdocconf b/tools/qdoc3/test/qt.qdocconf index edf6d92..d132771 100644 --- a/tools/qdoc3/test/qt.qdocconf +++ b/tools/qdoc3/test/qt.qdocconf @@ -130,6 +130,7 @@ excludedirs = $QTDIR/src/3rdparty/clucene \ $QTDIR/src/3rdparty/phonon/mmf \ $QTDIR/src/3rdparty/phonon/waveout \ $QTDIR/doc/src/snippets \ + $QTDIR/doc/src/ja_JP \ $QTDIR/doc/src/zh_CN sources.fileextensions = "*.cpp *.qdoc *.mm" diff --git a/tools/qdoc3/test/qt_ja_JP.qdocconf b/tools/qdoc3/test/qt_ja_JP.qdocconf new file mode 100644 index 0000000..d4141c7 --- /dev/null +++ b/tools/qdoc3/test/qt_ja_JP.qdocconf @@ -0,0 +1,125 @@ +include(compat.qdocconf) +include(macros.qdocconf) +include(qt-cpp-ignore.qdocconf) +include(qt-html-templates_ja_JP.qdocconf) +include(qt-defines.qdocconf) + +project = Qt +versionsym = +version = %VERSION% +description = Qt リファレンスドキュメント +url = http://qt.nokia.com/doc/ja_JP/4.7 + +sourceencoding = UTF-8 +outputencoding = UTF-8 +naturallanguage = ja + +indexes = $QTDIR/doc/html/qt.index + +qhp.projects = Qt + +qhp.Qt.file = qt.qhp +qhp.Qt.namespace = com.trolltech.qt.470 +qhp.Qt.virtualFolder = qdoc +qhp.Qt.title = Qt +qhp.Qt.indexTitle = Qt +qhp.Qt.selectors = fake:example + +qhp.Qt.filterAttributes = qt 4.7.0 qtrefdoc ja_JP +qhp.Qt.customFilters.Qt.name = Qt 4.7.0 +qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.0 + +# Files not referenced in any qdoc file (last four are needed by qtdemo) +# See also extraimages.HTML +qhp.Qt.extraFiles = index.html \ + images/bg_l.png \ + images/bg_l_blank.png \ + images/bg_ll_blank.png \ + images/bg_ul_blank.png \ + images/header_bg.png \ + images/bg_r.png \ + images/box_bg.png \ + images/breadcrumb.png \ + images/bullet_gt.png \ + images/bullet_dn.png \ + images/bullet_sq.png \ + images/bullet_up.png \ + images/arrow_down.png \ + images/feedbackground.png \ + images/horBar.png \ + images/page.png \ + images/page_bg.png \ + images/sprites-combined.png \ + images/spinner.gif \ + images/stylesheet-coffee-plastique.png \ + images/taskmenuextension-example.png \ + images/coloreditorfactoryimage.png \ + images/dynamiclayouts-example.png \ + scripts/functions.js \ + scripts/jquery.js \ + scripts/shBrushCpp.js \ + scripts/shCore.js \ + scripts/shLegacy.js \ + scripts/narrow.js \ + scripts/superfish.js \ + style/shCore.css \ + style/shThemeDefault.css \ + style/narrow.css \ + style/superfish.css \ + style/superfish_skin.css \ + style/OfflineStyle.css \ + style/style_ie6.css \ + style/style_ie7.css \ + style/style_ie8.css \ + style/style.css + +language = Cpp + +sourcedirs = $QTDIR/doc/src/ja_JP + +excludedirs = $QTDIR/src/3rdparty/clucene \ + $QTDIR/src/3rdparty/des \ + $QTDIR/src/3rdparty/freetype \ + $QTDIR/src/3rdparty/harfbuzz \ + $QTDIR/src/3rdparty/kdebase \ + $QTDIR/src/3rdparty/libjpeg \ + $QTDIR/src/3rdparty/libmng \ + $QTDIR/src/3rdparty/libpng \ + $QTDIR/src/3rdparty/libtiff \ + $QTDIR/src/3rdparty/md4 \ + $QTDIR/src/3rdparty/md5 \ + $QTDIR/src/3rdparty/patches \ + $QTDIR/src/3rdparty/sha1 \ + $QTDIR/src/3rdparty/sqlite \ + $QTDIR/src/3rdparty/webkit/JavaScriptCore \ + $QTDIR/src/3rdparty/webkit/WebCore \ + $QTDIR/src/3rdparty/wintab \ + $QTDIR/src/3rdparty/zlib \ + $QTDIR/doc/src/snippets \ + $QTDIR/doc/src/zh_CN \ + $QTDIR/src/3rdparty/phonon/gstreamer \ + $QTDIR/src/3rdparty/phonon/ds9 \ + $QTDIR/src/3rdparty/phonon/qt7 \ + $QTDIR/src/3rdparty/phonon/mmf \ + $QTDIR/src/3rdparty/phonon/waveout + +sources.fileextensions = "*.cpp *.qdoc *.mm" +examples.fileextensions = "*.cpp *.h *.js *.xq *.svg *.xml *.ui *.qhp *.qhcp" +examples.imageextensions = "*.png" + +exampledirs = $QTDIR/doc/src \ + $QTDIR/examples/ja_JP \ + $QTDIR/examples \ + $QTDIR/examples/tutorials \ + $QTDIR \ + $QTDIR/qmake/examples \ + $QTDIR/src/3rdparty/webkit/WebKit/qt/docs +imagedirs = $QTDIR/doc/src/ja_JP/images \ + $QTDIR/doc/src/images \ + $QTDIR/examples \ + $QTDIR/doc/src/template/images +outputdir = $QTDIR/doc/html_ja_JP +tagfile = $QTDIR/doc/html_ja_JP/qt.tags +base = file:$QTDIR/doc/html_ja_JP + +HTML.generatemacrefs = "true" diff --git a/tools/qdoc3/test/qt_zh_CN.qdocconf b/tools/qdoc3/test/qt_zh_CN.qdocconf index db02478..e894607 100644 --- a/tools/qdoc3/test/qt_zh_CN.qdocconf +++ b/tools/qdoc3/test/qt_zh_CN.qdocconf @@ -78,6 +78,7 @@ excludedirs = $QTDIR/src/3rdparty/clucene \ $QTDIR/src/3rdparty/wintab \ $QTDIR/src/3rdparty/zlib \ $QTDIR/doc/src/snippets \ + $QTDIR/doc/src/ja_JP \ $QTDIR/src/3rdparty/phonon/gstreamer \ $QTDIR/src/3rdparty/phonon/ds9 \ $QTDIR/src/3rdparty/phonon/qt7 \ -- cgit v0.12 From 5eec7f6611075df526f30796378315c9cd469cd8 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Sat, 29 May 2010 20:51:57 +0200 Subject: Update the linux-icc mkspec --- mkspecs/linux-icc/qmake.conf | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/mkspecs/linux-icc/qmake.conf b/mkspecs/linux-icc/qmake.conf index 3353180..5e46498 100644 --- a/mkspecs/linux-icc/qmake.conf +++ b/mkspecs/linux-icc/qmake.conf @@ -21,12 +21,12 @@ QMAKE_LEX = flex QMAKE_LEXFLAGS = QMAKE_YACC = yacc QMAKE_YACCFLAGS = -d -QMAKE_CFLAGS = -wd654,1572 +QMAKE_CFLAGS = QMAKE_CFLAGS_DEPS = -M -QMAKE_CFLAGS_WARN_ON = +QMAKE_CFLAGS_WARN_ON = -w1 -Wcheck -wd654,1572,411,873,1125 QMAKE_CFLAGS_WARN_OFF = -w -QMAKE_CFLAGS_RELEASE = -O2 -QMAKE_CFLAGS_DEBUG = -g +QMAKE_CFLAGS_RELEASE = -O2 -falign-functions=16 -ansi-alias -fstrict-aliasing +QMAKE_CFLAGS_DEBUG = -O0 -g QMAKE_CFLAGS_SHLIB = -fPIC QMAKE_CFLAGS_STATIC_LIB = $$QMAKE_CFLAGS_SHLIB QMAKE_CFLAGS_YACC = @@ -60,9 +60,10 @@ QMAKE_LFLAGS_RELEASE = QMAKE_LFLAGS_DEBUG = QMAKE_LFLAGS_SHLIB = -shared QMAKE_LFLAGS_PLUGIN = $$QMAKE_LFLAGS_SHLIB -QMAKE_LFLAGS_SONAME = -Qoption,ld,-soname, +QMAKE_LFLAGS_SONAME = -Wl,-soname, QMAKE_LFLAGS_THREAD = -QMAKE_LFLAGS_RPATH = -Qoption,ld,-rpath, +QMAKE_LFLAGS_NOUNDEF = -Wl,-z,defs +QMAKE_LFLAGS_RPATH = -Wl,-rpath, QMAKE_LIBS = QMAKE_LIBS_DYNLOAD = -ldl @@ -99,8 +100,8 @@ QMAKE_CXXFLAGS_USE_PRECOMPILE = -pch-use ${QMAKE_PCH_OUTPUT} -include ${QMAKE_PC QMAKE_CXXFLAGS_PRECOMPILE = -c -pch-create ${QMAKE_PCH_OUTPUT} -include ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_TEMP_OBJECT} ${QMAKE_PCH_TEMP_SOURCE} # -Bsymbolic-functions (ld) support -QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Qoption,ld,-Bsymbolic-functions -QMAKE_LFLAGS_DYNAMIC_LIST = -Qoption,ld,--dynamic-list, +QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions +QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list, # Symbol visibility control QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden -- cgit v0.12 From 8a4d4c1f0d3761cbf46cf0fee076647ec4a6ac5a Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Sun, 30 May 2010 10:46:42 +0200 Subject: Update the mkspec for linux-icc: don't use jump tables in shlibs ICC generates jump table code that isn't PIC (i.e., it does absolute indirect jumps), so this increases the number of relocations in shared libraries by a huge amount. In QtCore it increased by 250% (from 3500 to 12000). --- mkspecs/linux-icc/qmake.conf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mkspecs/linux-icc/qmake.conf b/mkspecs/linux-icc/qmake.conf index 5e46498..3b26f7d 100644 --- a/mkspecs/linux-icc/qmake.conf +++ b/mkspecs/linux-icc/qmake.conf @@ -27,7 +27,7 @@ QMAKE_CFLAGS_WARN_ON = -w1 -Wcheck -wd654,1572,411,873,1125 QMAKE_CFLAGS_WARN_OFF = -w QMAKE_CFLAGS_RELEASE = -O2 -falign-functions=16 -ansi-alias -fstrict-aliasing QMAKE_CFLAGS_DEBUG = -O0 -g -QMAKE_CFLAGS_SHLIB = -fPIC +QMAKE_CFLAGS_SHLIB = -fPIC -fno-jump-tables QMAKE_CFLAGS_STATIC_LIB = $$QMAKE_CFLAGS_SHLIB QMAKE_CFLAGS_YACC = QMAKE_CFLAGS_THREAD = -D_REENTRANT @@ -58,7 +58,7 @@ QMAKE_LINK_SHLIB = icpc QMAKE_LFLAGS = QMAKE_LFLAGS_RELEASE = QMAKE_LFLAGS_DEBUG = -QMAKE_LFLAGS_SHLIB = -shared +QMAKE_LFLAGS_SHLIB = -shared -shared-intel QMAKE_LFLAGS_PLUGIN = $$QMAKE_LFLAGS_SHLIB QMAKE_LFLAGS_SONAME = -Wl,-soname, QMAKE_LFLAGS_THREAD = @@ -77,7 +77,7 @@ QMAKE_LIBS_THREAD = -lpthread QMAKE_MOC = $$[QT_INSTALL_BINS]/moc QMAKE_UIC = $$[QT_INSTALL_BINS]/uic -QMAKE_AR = ar cqs +QMAKE_AR = xiar cqs QMAKE_OBJCOPY = objcopy QMAKE_RANLIB = -- cgit v0.12 From 91fa2c1beb79124db4a70a37e2224c1de9b9ded4 Mon Sep 17 00:00:00 2001 From: Jens Bache-Wiig Date: Mon, 7 Jun 2010 12:33:27 +0200 Subject: Disabled item view items use incorrect background color This was a problem when using alternate row colors. We use a separate palette for base/alternate when using disabled colors. However, we should only use this if the entire view is disabled. To keep compatibility with style sheets we have to preserve the disabled state per item, but we now use the widget pointer to decide which palette role to use. Task-number: QTBUG-11263 Reviewed-by: ogoffart --- src/gui/styles/qcommonstyle.cpp | 4 ++-- src/gui/styles/qgtkstyle.cpp | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/gui/styles/qcommonstyle.cpp b/src/gui/styles/qcommonstyle.cpp index 4978565..039a6da 100644 --- a/src/gui/styles/qcommonstyle.cpp +++ b/src/gui/styles/qcommonstyle.cpp @@ -762,7 +762,7 @@ void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, Q #ifndef QT_NO_ITEMVIEWS case PE_PanelItemViewRow: if (const QStyleOptionViewItemV4 *vopt = qstyleoption_cast(opt)) { - QPalette::ColorGroup cg = vopt->state & QStyle::State_Enabled + QPalette::ColorGroup cg = (widget ? widget->isEnabled() : (vopt->state & QStyle::State_Enabled)) ? QPalette::Normal : QPalette::Disabled; if (cg == QPalette::Normal && !(vopt->state & QStyle::State_Active)) cg = QPalette::Inactive; @@ -775,7 +775,7 @@ void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, Q break; case PE_PanelItemViewItem: if (const QStyleOptionViewItemV4 *vopt = qstyleoption_cast(opt)) { - QPalette::ColorGroup cg = vopt->state & QStyle::State_Enabled + QPalette::ColorGroup cg = (widget ? widget->isEnabled() : (vopt->state & QStyle::State_Enabled)) ? QPalette::Normal : QPalette::Disabled; if (cg == QPalette::Normal && !(vopt->state & QStyle::State_Active)) cg = QPalette::Inactive; diff --git a/src/gui/styles/qgtkstyle.cpp b/src/gui/styles/qgtkstyle.cpp index b59a033..c989bd3 100644 --- a/src/gui/styles/qgtkstyle.cpp +++ b/src/gui/styles/qgtkstyle.cpp @@ -855,9 +855,10 @@ void QGtkStyle::drawPrimitive(PrimitiveElement element, key = QLS("a"); GTK_WIDGET_SET_FLAGS(gtkTreeView, GTK_HAS_FOCUS); } + bool isEnabled = (widget ? widget->isEnabled() : (vopt->state & QStyle::State_Enabled)); gtkPainter.paintFlatBox(gtkTreeView, detail, option->rect, option->state & State_Selected ? GTK_STATE_SELECTED : - option->state & State_Enabled ? GTK_STATE_NORMAL : GTK_STATE_INSENSITIVE, + isEnabled ? GTK_STATE_NORMAL : GTK_STATE_INSENSITIVE, GTK_SHADOW_OUT, gtkTreeView->style, key); if (isActive ) GTK_WIDGET_UNSET_FLAGS(gtkTreeView, GTK_HAS_FOCUS); -- cgit v0.12 From e82d6264571604357b28ccb8d1b079c7eaf6ba71 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 7 Jun 2010 13:42:13 +0200 Subject: remove somewhat misleading warning about x11 pixmap leak the only situation where it would be actually true are broken drivers (or a broken x server as a whole). qt is not the right place to worry about that problem. Reviewed-by: jbache --- src/gui/image/qpixmap_x11.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/gui/image/qpixmap_x11.cpp b/src/gui/image/qpixmap_x11.cpp index 6bebefc..e8dc5ae 100644 --- a/src/gui/image/qpixmap_x11.cpp +++ b/src/gui/image/qpixmap_x11.cpp @@ -1250,10 +1250,8 @@ void QX11PixmapData::release() pengine = 0; if (!X11) { -#ifndef QT_NO_DEBUG - qWarning("~QX11PixmapData(): QPixmap objects must be destroyed before the QApplication" - " object, otherwise the native pixmap object will be leaked."); -#endif + // At this point, the X server will already have freed our resources, + // so there is nothing to do. return; } -- cgit v0.12 From 3cf159b75f8a5e66edd8f6b4defbee2f4435b6ef Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 7 Jun 2010 13:42:34 +0200 Subject: add docu about pixmaps being invalidated on qapp destruction Reviewed-by: jbache --- src/gui/image/qpixmap.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp index 20e4b50..fd2c139 100644 --- a/src/gui/image/qpixmap.cpp +++ b/src/gui/image/qpixmap.cpp @@ -1766,6 +1766,9 @@ QPixmap QPixmap::transformed(const QMatrix &matrix, Qt::TransformationMode mode) function returns the actual matrix used for transforming the pixmap. + \note When using the native X11 graphics system, the pixmap + becomes invalid when the QApplication instance is destroyed. + \sa QBitmap, QImage, QImageReader, QImageWriter */ -- cgit v0.12 From 5f9fdaa5c82fa4529ad4352da6855a19be83c079 Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Mon, 7 Jun 2010 15:18:50 +0200 Subject: XQuery test suite (and others): remove p4 dependency --- tests/auto/xmlpatternsxqts/tst_suitetest.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/auto/xmlpatternsxqts/tst_suitetest.cpp b/tests/auto/xmlpatternsxqts/tst_suitetest.cpp index ec63858..6e10e3f 100644 --- a/tests/auto/xmlpatternsxqts/tst_suitetest.cpp +++ b/tests/auto/xmlpatternsxqts/tst_suitetest.cpp @@ -141,8 +141,6 @@ void tst_SuiteTest::checkTestSuiteResult() const /* Passed to ResultThreader so it knows what kind of file it is handling. */ ResultThreader::Type type = ResultThreader::Baseline; - QProcess::execute(QLatin1String("p4 edit ") + m_existingBaseline); - for(QFileInfoList::const_iterator it(list.constBegin()); it != end; ++it) { QFileInfo i(*it); @@ -167,8 +165,6 @@ void tst_SuiteTest::checkTestSuiteResult() const const int exitCode = eventLoop.exec(); - QProcess::execute(QLatin1String("p4 revert -a ") + m_existingBaseline); - QCOMPARE(exitCode, 0); } -- cgit v0.12 From 154bf4c4f58b3b4d012cd2ff57cd4709a2226464 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Mon, 7 Jun 2010 16:45:51 +0200 Subject: Fix incorrect \since tag Changed the since added in 51fa7df978d71a366c95c732d6a8c2576690d63a from 4.6 to 4.7 Pointed out by Thorbjoern :) Reviewed-by: Trust me --- src/gui/text/qtextoption.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/text/qtextoption.cpp b/src/gui/text/qtextoption.cpp index a2b8022..527b603 100644 --- a/src/gui/text/qtextoption.cpp +++ b/src/gui/text/qtextoption.cpp @@ -393,7 +393,7 @@ QList QTextOption::tabs() const /*! \fn Tab::Tab(qreal pos, TabType tabType, QChar delim = QChar()) Creates a tab with the given position, tab type, and (for DelimiterTab) delimiter - \since 4.6 + \since 4.7 */ /*! -- cgit v0.12 From 83c6f16a17ff5ddee23e752e0eebc014bbc10f01 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 7 Jun 2010 15:47:48 +0200 Subject: qt_ja_JP.ts => qt_ja.ts the other _ja files have no country qualification either, and it makes no sense anyway. --- translations/qt_ja.ts | 8070 +++++++++++++++++++++++++++++++++++++++++ translations/qt_ja_JP.ts | 8070 ----------------------------------------- translations/translations.pri | 2 +- 3 files changed, 8071 insertions(+), 8071 deletions(-) create mode 100644 translations/qt_ja.ts delete mode 100644 translations/qt_ja_JP.ts diff --git a/translations/qt_ja.ts b/translations/qt_ja.ts new file mode 100644 index 0000000..e6f92b7 --- /dev/null +++ b/translations/qt_ja.ts @@ -0,0 +1,8070 @@ + + + + + MAC_APPLICATION_MENU + + + Services + サービス + + + + Hide %1 + %1を隠す + + + + Hide Others + ほかを隠す + + + + Show All + すべてを表示 + + + + Preferences... + 環境設定... + + + + Quit %1 + %1 を終了 + + + + About %1 + %1 について + + + + CloseButton + + + Close Tab + ToolTip + タブを閉じる + + + + PPDOptionsModel + + Name + 名前 + + + Value + + + + + Phonon:: + + + Notifications + 通知 + + + + Music + 音楽 + + + + Video + 動画 + + + + Communication + コミュニケーション + + + + Games + ゲーム + + + + Accessibility + アクセシビリティ + + + + Phonon::AudioOutput + + + <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> + <html>オーディオ再生デバイス<b>%1</b>が動作しません。<br/><b>%2</b>を使用します。</html> + + + + <html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html> + <html>より高いパフォーマンスを得られるオーディオデバイス <b>%1</b> が使用可能となったので、使用します。</html> + + + + Revert back to device '%1' + デバイス '%1' に戻す + + + + Phonon::Gstreamer::Backend + + + Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. + Some video features have been disabled. + 警告: gstreamer0.10-plugins-good がインストールされていません。幾つかの動画機能は使用できません。 + + + + Warning: You do not seem to have the base GStreamer plugins installed. + All audio and video support has been disabled + 警告: GStreamer plugin がインストールされていません。すべての音声、動画機能は使用できません + + + + Phonon::Gstreamer::MediaObject + + + Cannot start playback. + +Check your Gstreamer installation and make sure you +have libgstreamer-plugins-base installed. + 再生できません。 + +Gstreamer と libgstreamer-plugins-base が正しくインストールされているか確認してください。 + + + + A required codec is missing. You need to install the following codec(s) to play this content: %0 + 必要なコーデックがみつかりません。このコンテンツを再生するためには、以下のコーデックをインストールする必要があります: %0 + + + + + + + + + + + Could not open media source. + メディアソースを開くことができません。 + + + + Invalid source type. + 無効なソースの形式です。 + + + + Could not locate media source. + メディアソースがみつかりません。 + + + + Could not open audio device. The device is already in use. + オーディオデバイスを開くことができません。デバイスは既に他のプロセスにより使用されています。 + + + + Could not decode media source. + メディアソースを開くことができません。見つからないか、未知の形式です。 + + + + Phonon::VolumeSlider + + + + + + Volume: %1% + 音量: %1% + + + + + + Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1% + スライダを用いて音量を指定してください。左端が0%、右端が%1%になります + + + + Muted + ミュート + + + + Q3Accel + + + %1, %2 not defined + %1, %2 は定義されていません + + + + Ambiguous %1 not handled + 曖昧な %1 は扱えません + + + + Q3DataTable + + + True + + + + + False + + + + + Insert + 挿入 + + + + Update + アップデート + + + + Delete + 削除 + + + + Q3FileDialog + + + All Files (*.*) + すべてのファイル(*.*) + + + + Open + オープン + + + + Select a Directory + ディレクトリを選択 + + + + Copy or Move a File + ファイルをコピーまたは移動 + + + + Read: %1 + 読み込み: %1 + + + + + Write: %1 + 書き込み: %1 + + + + + Cancel + キャンセル + + + + + + + All Files (*) + すべてのファイル(*) + + + + Name + 名前 + + + + Size + サイズ + + + + Type + タイプ + + + + Date + 日付 + + + + Attributes + 属性 + + + + + &OK + OK(&O) + + + + Look &in: + 検索する場所(&I): + + + + + + File &name: + ファイル名(&N): + + + + File &type: + ファイルタイプ(&T): + + + + Back + 戻る + + + + One directory up + 1つ上のディレクトリへ移動 + + + + Create New Folder + 新しいフォルダの作成 + + + + List View + 一覧表示 + + + + Detail View + 詳細表示 + + + + Preview File Info + ファイル情報のプレビュー + + + + Preview File Contents + ファイルの内容のプレビュー + + + + Read-write + 読み込み/書き込み + + + + Read-only + 読み込み専用 + + + + Write-only + 書き込み専用 + + + + Inaccessible + アクセス不可 + + + + Symlink to File + ファイルへのシンボリックリンク + + + + Symlink to Directory + ディレクトリへのシンボリックリンク + + + + Symlink to Special + スペシャルファイルへのシンボリックリンク + + + + File + ファイル + + + + Dir + ディレクトリ + + + + Special + スペシャル + + + + + + Open + オープン + + + + + Save As + 名前を付けて保存 + + + + + + &Open + オープン(&O) + + + + + &Save + 保存(&S) + + + + &Rename + 名前の変更(&R) + + + + &Delete + 削除(&D) + + + + R&eload + リロード(&E) + + + + Sort by &Name + 名前順にソート(&N) + + + + Sort by &Size + サイズ順にソート(&S) + + + + Sort by &Date + 日付順にソート(&D) + + + + &Unsorted + ソート解除(&U) + + + + Sort + ソート + + + + Show &hidden files + 隠しファイルの表示(&H) + + + + the file + ファイル + + + + the directory + ディレクトリ + + + + the symlink + シンボリックリンク + + + + Delete %1 + %1 の削除 + + + + <qt>Are you sure you wish to delete %1 "%2"?</qt> + <qt>%1 "%2" を削除しますか?</qt> + + + + &Yes + はい(&Y) + + + + &No + いいえ(&N) + + + + New Folder 1 + 新しいフォルダ1 + + + + New Folder + 新しいフォルダ + + + + New Folder %1 + 新しいフォルダ %1 + + + + Find Directory + ディレクトリの検索 + + + + + Directories + ディレクトリ + + + + Directory: + ディレクトリ: + + + + + Error + エラー + + + + %1 +File not found. +Check path and filename. + %1 +ファイルが見つかりませんでした。 +パスおよびファイル名を確認してください。 + + + + Q3LocalFs + + + + Could not read directory +%1 + ディレクトリを読み込めませんでした +%1 + + + + Could not create directory +%1 + ディレクトリを作成できませんでした +%1 + + + + Could not remove file or directory +%1 + ファイルまたはディレクトリを削除できませんでした +%1 + + + + Could not rename +%1 +to +%2 + 名前を変更できませんでした +%1 +を +%2 +へ + + + + Could not open +%1 + 開けませんでした +%1 + + + + Could not write +%1 + 書き込めませんでした +%1 + + + + Q3MainWindow + + + Line up + 整列 + + + + Customize... + カスタマイズ... + + + + Q3NetworkProtocol + + + Operation stopped by the user + 操作がユーザによって停止されました + + + + Q3ProgressDialog + + + + Cancel + キャンセル + + + + Q3TabDialog + + + + OK + OK + + + + Apply + 適用 + + + + Help + ヘルプ + + + + Defaults + デフォルト + + + + Cancel + キャンセル + + + + Q3TextEdit + + + &Undo + 元に戻す(&U) + + + + &Redo + やり直す(&R) + + + + Cu&t + 切り取り(&T) + + + + &Copy + コピー(&C) + + + + &Paste + 貼り付け(&P) + + + + Clear + 消去 + + + + + Select All + すべてを選択 + + + + Q3TitleBar + + + System + システム + + + + Restore up + 元に戻す + + + + Minimize + 最小化 + + + + Restore down + 元に戻す + + + + Maximize + 最大化 + + + + Close + 閉じる + + + + Contains commands to manipulate the window + ウィンドウを操作するコマンドを含みます + + + + Puts a minimized back to normal + 最小化されたウィンドウを元のサイズに戻します + + + + Moves the window out of the way + ウィンドウを隠します + + + + Puts a maximized window back to normal + 最大化されたウィンドウを元のサイズに戻します + + + + Makes the window full screen + ウィンドウをフルスクリーンにします + + + + Closes the window + ウィンドウを閉じます + + + + Displays the name of the window and contains controls to manipulate it + ウィンドウの名前と、ウィンドウを操作するコントロールを表示します + + + + Q3ToolBar + + + More... + その他... + + + + Q3UrlOperator + + + + + The protocol `%1' is not supported + プロトコル '%1' はサポートされていません + + + + The protocol `%1' does not support listing directories + プロトコル '%1' はディレクトリのリスティングをサポートしていません + + + + The protocol `%1' does not support creating new directories + プロトコル '%1' は新しいディレクトリの作成をサポートしていません + + + + The protocol `%1' does not support removing files or directories + プロトコル '%1' はファイルまたはディレクトリの削除をサポートしていません + + + + The protocol `%1' does not support renaming files or directories + プロトコル '%1' はファイルまたはディレクトリの名前の変更をサポートしていません + + + + The protocol `%1' does not support getting files + プロトコル '%1' はファイルの取得をサポートしていません + + + + The protocol `%1' does not support putting files + プロトコル '%1' はファイルの送信をサポートしていません + + + + + The protocol `%1' does not support copying or moving files or directories + プロトコル '%1' はファイルまたはディレクトリのコピーまたは移動をサポートしていません + + + + + (unknown) + (不明) + + + + Q3Wizard + + + &Cancel + キャンセル(&C) + + + + < &Back + < 戻る(&B) + + + + &Next > + 次へ(&N) > + + + + &Finish + 完了(&F) + + + + &Help + ヘルプ(&H) + + + + QAbstractSocket + + + + + + Host not found + ホストが見つかりませんでした + + + + + + Connection refused + 接続が拒否されました + + + + Connection timed out + 接続がタイムアウトしました + + + + + + Operation on socket is not supported + 抽象ソケットクラスでのソケットのエラー + このソケットへのこの操作はサポートされていません + + + + Socket operation timed out + ソケット操作がタイムアウトしました + + + + Socket is not connected + ソケットが接続されていません + + + + Network unreachable + ネットワークへ到達できません + + + + QAbstractSpinBox + + + &Step up + 上(&S) + + + + Step &down + 下(&D) + + + + &Select All + すべてを選択(&S) + + + + QApplication + + + Activate + アクティブに + + + + Activates the program's main window + メインウィンドウをアクティブにする + + + + Executable '%1' requires Qt %2, found Qt %3. + 実行可能ファイル '%1' には Qt %2 が必要です。Qt %3 が見つかりました。 + + + + Incompatible Qt Library Error + 互換性のないQtライブラリエラー + + + + QT_LAYOUT_DIRECTION + 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. + LTR + + + + QAxSelect + + + Select ActiveX Control + ActiveX Control を選択 + + + + OK + OK + + + + &Cancel + キャンセル(&C) + + + + COM &Object: + COM オブジェクト(&O): + + + + QCheckBox + + + Uncheck + 選択解除 + + + + Check + 選択 + + + + Toggle + 反転 + + + + QColorDialog + + + Hu&e: + 色相(&E): + + + + &Sat: + 彩度(&S): + + + + &Val: + 明度(&V): + + + + &Red: + 赤(&R): + + + + &Green: + 緑(&G): + + + + Bl&ue: + 青(&U): + + + + A&lpha channel: + アルファチャネル(&L): + + + + Select Color + + + + + &Basic colors + 基本的なカラー(&B) + + + + &Custom colors + カスタムカラー(&C) + + + &Define Custom Colors >> + カスタムカラーの定義(&D) >> + + + OK + OK + + + Cancel + キャンセル + + + + &Add to Custom Colors + カスタムカラーに追加(&A) + + + Select color + カラーの選択 + + + + QComboBox + + + + Open + オープン + + + + False + + + + + True + + + + + Close + 閉じる + + + + QCoreApplication + + + %1: key is empty + QSystemSemaphore + %1: キーが空です + + + + %1: unable to make key + QSystemSemaphore + %1: キーを作成できません + + + + %1: ftok failed + QSystemSemaphore + %1: fork に失敗しました + + + + QDB2Driver + + + Unable to connect + 接続できません + + + + Unable to commit transaction + トランザクションをコミットできません + + + + Unable to rollback transaction + トランザクションをロールバックできません + + + + Unable to set autocommit + オートコミットを設定できません + + + + QDB2Result + + + + Unable to execute statement + ステートメントを実行できません + + + + Unable to prepare statement + プリペアステートメントを使えません + + + + Unable to bind variable + 変数をバインドできません + + + + Unable to fetch record %1 + レコード %1 をフェッチできません + + + + Unable to fetch next + 次のレコードをフェッチできません + + + + Unable to fetch first + 最初のレコードをフェッチできません + + + + QDateTimeEdit + + + AM + AM + + + + am + am + + + + PM + PM + + + + pm + pm + + + + QDial + + + QDial + ダイヤル + + + + SpeedoMeter + スピードメータ + + + + SliderHandle + スライダハンドル + + + + QDialog + + + What's This? + ヒント? + + + + Done + 終了 + + + + QDialogButtonBox + + + + + OK + OK + + + + Cancel + キャンセル + + + + Apply + 適用 + + + + Ignore + 無視 + + + + Retry + 再試行 + + + + Abort + 中止 + + + + Help + ヘルプ + + + + Save + 保存 + + + + &Save + 保存(&S) + + + + Open + オープン + + + + &Cancel + キャンセル(&C) + + + + Close + 閉じる + + + + &Close + 閉じる(&C) + + + + Reset + リセット + + + + Don't Save + 保存しない + + + + Close without Saving + 保存せずに閉じる + + + + Discard + 変更を破棄 + + + + &Yes + はい(&Y) + + + + Yes to &All + 全てにはい(&A) + + + + &No + いいえ(&N) + + + + N&o to All + 全てにいいえ(&O) + + + + Save All + すべて保存 + + + + Restore Defaults + デフォルトに戻す + + + + &OK + OK(&O) + + + + QDirModel + + + Name + 名前 + + + + Size + サイズ + + + + Date Modified + 更新日 + + + + Kind + Match OS X Finder + 種類 + + + + Type + All other platforms + タイプ + + + + QDockWidget + + + Close + 閉じる + + + + Dock + ドック + + + + Float + フロート + + + + QDoubleSpinBox + + + More + 増やす + + + + Less + 減らす + + + + QErrorMessage + + + Debug Message: + デバッグメッセージ: + + + + Warning: + 警告: + + + + Fatal Error: + 致命的なエラー: + + + + &Show this message again + 次回もこのメッセージを表示する(&S) + + + + &OK + OK(&O) + + + + QFile + + + + Destination file exists + 新しい名前のファイルは既に存在します + + + + Cannot remove source file + 元のファイルを削除できません + + + + Cannot open %1 for input + コピー元ファイル %1 を読めません + + + + Cannot open for output + コピー先のファイルをオープンできません + + + + Failure to write block + 書き込みに失敗しました + + + + Cannot create %1 for output + コピー先として %1 を作成できません + + + + QFileDialog + + + + All Files (*) + すべてのファイル(*) + + + + Directories + ディレクトリ + + + + + Directory: + ディレクトリ: + + + + + File &name: + ファイル名(&N): + + + + + + + &Open + オープン(&O) + + + + + &Save + 保存(&S) + + + + Open + オープン + + + Save + 保存 + + + +File not found. +Please verify the correct file name was given + +ファイルが見つかりません。 +正しいファイル名が入力されたかどうか確認してください + + + + %1 already exists. +Do you want to replace it? + %1 はすでに存在します。 +置き換えますか? + + + + %1 +File not found. +Please verify the correct file name was given. + %1 +ファイルが見つかりません。 +正しいファイル名が入力されたかどうか確認してください。 + + + + My Computer + マイ コンピュータ + + + + + %1 +Directory not found. +Please verify the correct directory name was given. + %1 +ディレクトリが見つかりません。 +正しいディレクトリ名が入力されたかどうか確認してください。 + + + Sort + ソート + + + + &Rename + 名前の変更(&R) + + + + &Delete + 削除(&D) + + + &Reload + リロード(&R) + + + Sort by &Name + 名前順にソート(&N) + + + Sort by &Size + サイズ順にソート(&S) + + + Sort by &Date + 日付順にソート(&D) + + + &Unsorted + ソート解除(&U) + + + + Show &hidden files + 隠しファイルの表示(&H) + + + + + Back + 戻る + + + + + Parent Directory + 親ディレクトリ + + + + + Create New Folder + 新しいフォルダの作成 + + + + + List View + 一覧表示 + + + + + Detail View + 詳細表示 + + + + + Look in: + 検索する場所: + + + + + Files of type: + ファイルの種類: + + + + Drive + ドライブ + + + + + File + ファイル + + + + File Folder + Match Windows Explorer + ファイルフォルダ + + + + Folder + All other platforms + フォルダ + + + + Alias + Mac OS X Finder + エイリアス + + + + Shortcut + All other platforms + ショートカット + + + + Unknown + 不明 + + + + All Files (*.*) + すべてのファイル(*.*) + + + + Save As + 名前を付けて保存 + + + Open + オープン + + + Select a Directory + ディレクトリを選択 + + + + '%1' is write protected. +Do you want to delete it anyway? + '%1' は書き込みが禁止されています。 +本当に削除しますか? + + + + Are sure you want to delete '%1'? + '%1' を本当に削除しますか? + + + + Could not delete directory. + ディレクトリを削除できませんでした。 + + + + Find Directory + ディレクトリの検索 + + + + Show + 表示 + + + + &New Folder + 新しいフォルダ(&N) + + + + + &Choose + 選択(&C) + + + + New Folder + 新しいフォルダ + + + + Recent Places + 履歴 + + + + + Forward + 進む + + + + Remove + 削除 + + + + QFileSystemModel + + + Name + 名前 + + + + Size + サイズ + + + + Date Modified + 更新日 + + + + Kind + Match OS X Finder + 種類 + + + + Type + All other platforms + タイプ + + + + + %1 TB + %1 TB + + + + + %1 GB + %1 GB + + + + + %1 MB + %1 MB + + + + + %1 KB + %1 KB + + + + + %1 bytes + %1 バイト + + + + Invalid filename + 無効なファイル名 + + + + <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. + <b>ファイル名 "%1" は使用できません。</b><p>名前を短くしたり、アクセント記号などを削除して再度試してください。 + + + + My Computer + マイ コンピュータ + + + + Computer + コンピュータ + + + + QFontDatabase + + + + Normal + ここはどう訳すべきか... + 明朝 + + + + + + Bold + ゴシック + + + + + Demi Bold + Demi Bold + + + + + + Black + 太字 + + + + Demi + Demi + + + + + Light + 細字 + + + + + Italic + イタリック + + + + + Oblique + 斜体 + + + + Any + すべて + + + + Latin + ラテン + + + + Greek + ギリシャ + + + + Cyrillic + キリル + + + + Armenian + アルメニア + + + + Hebrew + ヘブライ + + + + Arabic + アラビア + + + + Syriac + シリア + + + + Thaana + ターナ + + + + Devanagari + デーヴァナーガリー + + + + Bengali + ベンガル + + + + Gurmukhi + グルムキー + + + + Gujarati + グジャラート + + + + Oriya + オリヤー + + + + Tamil + タミル + + + + Telugu + テルグ + + + + Kannada + カンナダ + + + + Malayalam + マラヤーラム + + + + Sinhala + シンハラ + + + + Thai + タイ + + + + Lao + ラーオ + + + + Tibetan + チベット + + + + Myanmar + ビルマ + + + + Georgian + グルジア + + + + Khmer + クメール + + + + Simplified Chinese + 簡体中国 + + + + Traditional Chinese + 繁体中国 + + + + Japanese + 日本 + + + + Korean + ハングル + + + + Vietnamese + ベトナム + + + + Symbol + 記号 + + + + Ogham + オガム + + + + Runic + ルーン + + + + QFontDialog + + + &Font + フォント(&F) + + + + Font st&yle + フォントスタイル(&Y) + + + + &Size + サイズ(&S) + + + + Effects + 文字飾り + + + + Stri&keout + 取り消し線(&K) + + + + &Underline + 下線(&U) + + + + Sample + サンプル + + + + Wr&iting System + 言語(&I) + + + + + Select Font + フォントの選択 + + + + QFtp + + + + Not connected + 未接続です + + + + + Host %1 not found + ホスト %1 が見つかりませんでした + + + + + Connection refused to host %1 + ホスト %1 への接続が拒否されました + + + + Connection timed out to host %1 + ホスト %1 への接続がタイムアウトしました + + + + + + Connected to host %1 + ホスト %1 に接続しました + + + + + Connection refused for data connection + データ接続のための接続が拒否されました + + + + + + + Unknown error + 不明なエラー + + + + + Connecting to host failed: +%1 + ホストへの接続に失敗しました: +%1 + + + + + Login failed: +%1 + ログインに失敗しました: +%1 + + + + + Listing directory failed: +%1 + ディレクトリのリストに失敗しました: +%1 + + + + + Changing directory failed: +%1 + ディレクトリの変更に失敗しました: +%1 + + + + + Downloading file failed: +%1 + ファイルのダウンロードに失敗しました: +%1 + + + + + Uploading file failed: +%1 + ファイルのアップロードに失敗しました: +%1 + + + + + Removing file failed: +%1 + ファイルの削除に失敗しました: +%1 + + + + + Creating directory failed: +%1 + ディレクトリの作成に失敗しました: +%1 + + + + + Removing directory failed: +%1 + ディレクトリの削除に失敗しました: +%1 + + + + + + Connection closed + 接続が閉じられました + + + + Host %1 found + ホスト %1 が見つかりました + + + + Connection to %1 closed + %1 への接続が閉じられました + + + + Host found + ホストが見つかりました + + + + Connected to host + ホストに接続しました + + + + QHostInfo + + + Unknown error + 不明なエラー + + + + QHostInfoAgent + + + + + + + + + + Host not found + ホストが見つかりません + + + + + + + Unknown address type + 不明なアドレス型です + + + + + + Unknown error + 不明なエラー + + + + QHttp + + + HTTPS connection requested but SSL support not compiled in + HTTPSによる接続が要求されましたが、SSLのサポートがコンパイル時に組み込まれていないため、接続できません + + + + + + + Unknown error + 不明なエラー + + + + + Request aborted + 要求が中止されました + + + + + No server set to connect to + 接続が設定されているサーバがありません + + + + + Wrong content length + コンテンツの長さが正しくありません + + + + + Server closed connection unexpectedly + サーバの接続が予期せず閉じられました + + + + Unknown authentication method + 非対応の認証方法が要求されました + + + + Error writing response to device + デバイスへの書き込み時にエラーが発生しました + + + + + Connection refused + 接続が拒否されました + + + + + + Host %1 not found + ホスト %1 が見つかりませんでした + + + + + + + HTTP request failed + HTTP要求に失敗しました + + + + + Invalid HTTP response header + 無効なHTTP応答ヘッダです + + + + + + + Invalid HTTP chunked body + 無効なHTTPチャンクドボディです + + + + Host %1 found + ホスト %1 が見つかりました + + + + Connected to host %1 + ホスト %1 に接続しました + + + + Connection to %1 closed + %1 への接続が閉じられました + + + + Host found + ホストが見つかりました + + + + Connected to host + ホストに接続しました + + + + + Connection closed + 接続が閉じられました + + + + Proxy authentication required + プロキシーの認証が必要です + + + + Authentication required + 認証が必要です + + + + Connection refused (or timed out) + 接続が拒否されたか、タイムアウトしました + + + + Proxy requires authentication + プロキシーの認証が必要です + + + + Host requires authentication + ホストの認証が必要です + + + + Data corrupted + データが破損しています + + + + Unknown protocol specified + 未対応のプロトコルです + + + + SSL handshake failed + SSLのハンドシェークに失敗しました + + + + QHttpSocketEngine + + + Did not receive HTTP response from proxy + プロキシーからHTTPレスポンスを受信できませんでした + + + + Error parsing authentication request from proxy + プロキシーからの認証要求のパースに失敗しました + + + + Authentication required + 認証が必要です + + + + Proxy denied connection + プロキシーが接続を拒否しました + + + + Error communicating with HTTP proxy + HTTP プロキシーとの通信にて、エラーが発生しました + + + + Proxy server not found + プロキシーサーバが見つかりません + + + + Proxy connection refused + プロキシーが接続を拒否しました + + + + Proxy server connection timed out + プロキシーとの接続がタイムアウトしました + + + + Proxy connection closed prematurely + プロキシーの接続が通信の終了前に切断されました + + + + QIBaseDriver + + + Error opening database + データベースのオープンでエラーが発生しました + + + + Could not start transaction + トランザクションを開始できませんでした + + + + Unable to commit transaction + トランザクションをコミットできません + + + + Unable to rollback transaction + トランザクションをロールバックできません + + + + QIBaseResult + + + Unable to create BLOB + バイナリラージオブジェクトを作成できません + + + + Unable to write BLOB + バイナリラージオブジェクトを書き込めません + + + + Unable to open BLOB + バイナリラージオブジェクトをオープンできません + + + + Unable to read BLOB + バイナリラージオブジェクトを読み込めません + + + + + Could not find array + 配列が見つかりませんでした + + + + Could not get array data + 配列データを取得できませんでした + + + + Could not get query info + クエリー情報を取得できませんでした + + + + Could not start transaction + トランザクションを開始できませんでした + + + + Unable to commit transaction + トランザクションをコミットできません + + + + Could not allocate statement + ステートメントの領域を確保できませんでした + + + + Could not prepare statement + プリペアステートメントを使えませんでした + + + + + Could not describe input statement + INPUT ステートメントの情報を取得できませんでした + + + + Could not describe statement + ステートメントの情報を取得できませんでした + + + + Unable to close statement + ステートメントをクローズできません + + + + Unable to execute query + クエリーを実行できません + + + + Could not fetch next item + 次のレコードをフェッチできませんでした + + + + Could not get statement info + ステートメントの情報を取得できませんでした + + + + QIODevice + + + Permission denied + 許可されていません + + + + Too many open files + 開かれたファイルが多すぎます + + + + No such file or directory + そのようなファイルやディレクトリはありません + + + + No space left on device + デバイスの残り容量がありません + + + + Unknown error + 不明なエラー + + + + QInputContext + + + XIM + XIM + + + + XIM input method + XIM 入力メソッド + + + + Windows input method + Windows 入力メソッド + + + + Mac OS X input method + Mac OS X 入力メソッド + + + + QInputDialog + + + Enter a value: + 数値を入力: + + + + QLibrary + + + Could not mmap '%1': %2 + '%1' をメモリにマッピングできませんでした: %2 + + + + Plugin verification data mismatch in '%1' + '%1' でプラグイン検証データが一致しません + + + + Could not unmap '%1': %2 + '%1' のマッピングを解除できませんでした: %2 + + + + The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] + プラグイン '%1' は、互換性のない Qt ライブラリを使用しています。(%2.%3.%4) [%5] + + + + The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" + プラグイン '%1' は、互換性のない Qt ライブラリを使用しています。ビルドキー "%2" が必要ですが、"%3" しかありません + + + + Unknown error + 不明なエラー + + + QLibrary::load_sys: Cannot load %1 (%2) + QLibrary::load_sys: %1 をロードできません (%2) + + + QLibrary::unload_sys: Cannot unload %1 (%2) + QLibrary::unload_sys: %1 をアンロードできません (%2) + + + QLibrary::resolve_sys: Symbol "%1" undefined in %2 (%3) + QLibrary::resolve_sys: シンボル "%1" は %2 で定義されていません (%3) + + + + + The shared library was not found. + 共有ライブラリがみつかりません。 + + + + The file '%1' is not a valid Qt plugin. + ファイル '%1' は Qt プラグインではありません。 + + + + The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) + プラグイン '%1' はこの Qt と互換性のないライブラリを使用しています。 (デバック版とリリース版のライブラリを同時に使用することはできません) + + + + + Cannot load library %1: %2 + ライブラリ '%1' を読み込むことができません: %2 + + + + + Cannot unload library %1: %2 + ライブラリ %1 を解放することができません: %2 + + + + + Cannot resolve symbol "%1" in %2: %3 + '%2'に含まれる識別子 "%1" を解決できません: %3 + + + + QLineEdit + + + &Undo + 元に戻す(&U) + + + + &Redo + やり直す(&R) + + + + Cu&t + 切り取り(&T) + + + + &Copy + コピー(&C) + + + + &Paste + 貼り付け(&P) + + + + Delete + 削除 + + + + Select All + すべてを選択 + + + + QLocalServer + + + + %1: Name error + %1: 名前の解決に失敗 + + + + %1: Permission denied + %1: 許可されていません + + + + %1: Address in use + %1: アドレスは既に使用されています + + + + %1: Unknown error %2 + %1: 未知のエラー %2 + + + + QLocalSocket + + + + %1: Connection refused + %1: 接続が拒否されました + + + + + %1: Remote closed + %1: リモートにより接続が閉じられました + + + + + + + %1: Invalid name + %1: 無効な名前です + + + + + %1: Socket access error + %1: ソケットアクセスのエラーです + + + + + %1: Socket resource error + %1: ソケットリソースのエラーです + + + + + %1: Socket operation timed out + %1: ソケット操作がタイムアウトしました + + + + + %1: Datagram too large + %1: データグラムが大きすぎます + + + + + + %1: Connection error + %1: 接続のエラーが発生しました + + + + + %1: The socket operation is not supported + %1: そのソケット操作はサポートされていません + + + + %1: Unknown error + %1: 未知のエラーです + + + + + %1: Unknown error %2 + %1: 未知のエラー %2 + + + + QMYSQLDriver + + + Unable to open database ' + データベースをオープンできません ' + + + + Unable to connect + 接続できません + + + + Unable to begin transaction + トランザクションを開始できません + + + + Unable to commit transaction + トランザクションをコミットできません + + + + Unable to rollback transaction + トランザクションをロールバックできません + + + + QMYSQLResult + + + Unable to fetch data + データをフェッチできません + + + + Unable to execute query + クエリーを実行できません + + + + Unable to store result + 実行結果を記録できません + + + + + Unable to prepare statement + プリペアステートメントを使えません + + + + Unable to reset statement + ステートメントをリセットできません + + + + Unable to bind value + 値をバインドできません + + + + Unable to execute statement + ステートメントを実行できません + + + + + Unable to bind outvalues + 出力値をバインドできません + + + + Unable to store statement results + ステートメントの実行結果を記録できません + + + + Unable to execute next query + 次のクエリーを実行できません + + + + Unable to store next result + 次の結果を記録できません + + + + QMdiArea + + + (Untitled) + (タイトルなし) + + + + QMdiSubWindow + + + %1 - [%2] + %1 - [%2] + + + + Close + 閉じる + + + + Minimize + 最小化 + + + + Restore Down + 元に戻す + + + + &Restore + 元に戻す(&R) + + + + &Move + 移動(&M) + + + + &Size + サイズ(&S) + + + + Mi&nimize + 最小化(&N) + + + + Ma&ximize + 最大化(&X) + + + + Stay on &Top + 常に手前に表示(&T) + + + + &Close + 閉じる(&C) + + + + - [%1] + - [%1] + + + + Maximize + 最大化 + + + + Unshade + たぶん選択・非選択状態のウィンドウのことだと思うけど。fvwmなどのx11で使われている用語 + 非選択 + + + + Shade + 選択 + + + + Restore + 元に戻す + + + + Help + ヘルプ + + + + Menu + メニュー + + + + QMenu + + + + Close + 閉じる + + + + + Open + オープン + + + + + + Execute + 実行 + + + + QMenuBar + + About Qt + Qt について + + + + QMessageBox + + + Help + ヘルプ + + + + + + + OK + OK + + + <h3>About Qt</h3>%1<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 Qtopia Core.</p><p>Qt is a Trolltech product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p> + <h3>Qt について</h3>%1 +<p>QtはクロスプラットフォームのC++ アプリケーション開発ツールキットです。</p> +<p>Qt は MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, 商用のUnix派生版でソースコード互換を実現します。また、Qtopia Coreのように、内蔵デバイスでも利用可能です。</p> +<p>QtはTrolltechの商品です。詳細は<tt>http://qt.nokia.com/</tt>を参照してください。</p> + + + <p>This program uses Qt version %1.</p> + <p>このプログラムは Qt バージョン %1 を使用しています。</p> + + + <p>This program uses Qt Open Source Edition version %1.</p><p>Qt Open Source Edition is intended for the development of Open Source applications. You need a commercial Qt license for development of proprietary (closed source) applications.</p><p>Please see <a href="http://qt.nokia.com/company/model/">qt.nokia.com/company/model/</a> for an overview of Qt licensing.</p> + <p>このプログラムは Qt オープンソース版バージョン %1 を使用しています。</p> +<p>Qt オープンソース版はオープンソースのアプリケーションの開発用です。ソースコードを公開しない商用アプリケーションを開発するには商用版のライセンスが必要です。</p><p>Qtのライセンスについては<tt>http://qt.nokia.com/company/model.html</tt>を参照してください。</p> + + + + About Qt + Qt について + + + + Show Details... + 詳細を表示... + + + + Hide Details... + 詳細を隠す... + + + + <h3>About Qt</h3><p>This program uses Qt version %1.</p><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>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> + <h3>Qtについて</h3> +<p>このプログラムは Qt バージョン %1 を使用しています。</p> +<p>Qt は、クロスプラットホームのアプリケーション開発に使用される C++ のツールキットです。</p> +<p>Qt は、 MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, そして多数の Unix 系OS環境に対して、単一のソースからバイナリを生成します。 +また、 Linux および Windows CE を元とした組み込み環境にも対応しています。</p> +<p>Qt は様々なユーザの要望に応じるために、3つの異なるライセンスで提供されています。</p> +<p> +Qt 商用ライセンスは、プロプライエタリまたは商用ソフトウェアに適用できます。 +この場合は、他者とのソースコードの共有を拒否し、 GNU LGP バージョン 2.1 または GNU GPL バージョン 3.0 を許容できないソフトウェアにおいて Qt を使用できます。 +</p> +<p> +Qt GNU LGPL バージョン 2.1 ライセンスは、プロプライエタリまたはオープンソースソフトウェアに適用できます。 +この場合は、 GNU LGPL バージョン 2.1 に従う必要があります。 +</p> +<p> +Qt GNU General Public License バージョン 3.0 ライセンスは、GNU GPL バージョン 3.0 または GPL 3.0 と互換性のあるライセンスを採用しているソフトウェアに適用されます。 +この場合は、GNU GPL バージョン 3.0 に従う必要があります。 +</p> +<p> +ライセンスの詳細については、<a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> +を参照してください。</p> +<p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p> +<p>Qt は Nokia の製品です。詳細については<a href="http://qt.nokia.com/">qt.nokia.com</a> を参照してください。</p> +<p> +訳注: ライセンスはここにある翻訳は参考のためのものであり、オリジナルの(英語の)ものが正式なものとなります。 +</p> + + + + QMultiInputContext + + + Select IM + インプットメソッドを選択 + + + + QMultiInputContextPlugin + + + Multiple input method switcher + 複数のインプットメソッドを切り替え + + + + Multiple input method switcher that uses the context menu of the text widgets + テキストウィジェットのコンテキストメニューを使った複数のインプットメソッドの切り替えです + + + + QNativeSocketEngine + + + Unable to initialize non-blocking socket + 非ブロック型ソケットを初期化できません + + + + Unable to initialize broadcast socket + ブロードキャストソケットを初期化できません + + + + Attempt to use IPv6 socket on a platform with no IPv6 support + IPv6 がサポートされていないプラットフォームで IPv6 ソケットを使用しようとしています + + + + The remote host closed the connection + リモートホストは接続を閉じました + + + + Network operation timed out + ネットワーク操作がタイムアウトしました + + + + Out of resources + リソースが足りません + + + + Unsupported socket operation + サポートされていないソケット操作です + + + + Protocol type not supported + プロトコル型がサポートされていません + + + + Invalid socket descriptor + 無効なソケット記述子です + + + + Host unreachable + ホストへ到達できません + + + + Network unreachable + ネットワークへ到達できません + + + + Permission denied + 許可されていません + + + + Connection timed out + 接続がタイムアウトしました + + + + Connection refused + 接続を拒否されました + + + + The bound address is already in use + バインドアドレスは既に使われています + + + + The address is not available + そのアドレスは使用できません + + + + The address is protected + そのアドレスへのアクセス権がありません + + + + Datagram was too large to send + データグラムが大き過ぎて送信できませんでした + + + + Unable to send a message + メッセージを送信できません + + + + Unable to receive a message + メッセージを受信できません + + + + Unable to write + 書き込みができません + + + + Network error + ネットワークエラー + + + + Another socket is already listening on the same port + 別のソケットが同じポートで既に待ち受けています + + + + Operation on non-socket + 非ソケットに対する操作です + + + + Unknown error + 不明なエラー + + + + The proxy type is invalid for this operation + このプロキシーは、この操作に対応していません + + + + QNetworkAccessCacheBackend + + + Error opening %1 + オープンのエラー %1 + + + + QNetworkAccessDebugPipeBackend + + + Write error writing to %1: %2 + %1 への書き込み時にエラーが発生しました: %2 + + + + QNetworkAccessFileBackend + + + Request for opening non-local file %1 + 非ローカルファイル %1 をオープンするよう要求されましたが、ローカルファイルのみオープンできます + + + + Error opening %1: %2 + %1 をオープンする時にエラーが発生しました: %2 + + + + Write error writing to %1: %2 + %1 への書き込み時にエラーが発生しました: %2 + + + + Cannot open %1: Path is a directory + %1 をオープンできません。指定されたパスはディレクトリです + + + + Read error reading from %1: %2 + %1 を読み込み時にエラーが発生しました: %2 + + + + QNetworkAccessFtpBackend + + + No suitable proxy found + 適切なプロキシーがみつかりません + + + + Cannot open %1: is a directory + %1 をオープンできません。指定されたパスはディレクトリです + + + + Logging in to %1 failed: authentication required + %1 へのログインに失敗しました。認証が必要です + + + + Error while downloading %1: %2 + %1 をダウンロード中にエラーが発生しました: %2 + + + + Error while uploading %1: %2 + %1 をアップロード中にエラーが発生しました: %2 + + + + QNetworkAccessHttpBackend + + + No suitable proxy found + 適切なプロキシーがみつかりません + + + + QNetworkReply + + + Error downloading %1 - server replied: %2 + %1 をダウンロード中にエラーが発生しました。サーバの返答: %2 + + + + Protocol "%1" is unknown + プロトコル "%1" はサポートされていません + + + + QNetworkReplyImpl + + + + Operation canceled + 操作はキャンセルされました + + + + QOCIDriver + + + Unable to initialize + QOCIDriver + 初期化できません + + + + Unable to logon + ログオンできません + + + + Unable to begin transaction + トランザクションを開始できません + + + + Unable to commit transaction + トランザクションをコミットできません + + + + Unable to rollback transaction + トランザクションをロールバックできません + + + + QOCIResult + + + + + Unable to bind column for batch execute + バッチ処理用にフィールドをバインドできません + + + + Unable to execute batch statement + バッチステートメントを実行できません + + + + Unable to goto next + 次のレコードへ進めません + + + + Unable to alloc statement + ステートメントの領域を確保できません + + + + Unable to prepare statement + プリペアステートメントを使えません + + + + Unable to bind value + 値をバインドできません + + + Unable to execute select statement + SELECT ステートメントを実行できません + + + + Unable to execute statement + ステートメントを実行できません + + + + QODBCDriver + + + Unable to connect + 接続できません + + + + Unable to connect - Driver doesn't support all needed functionality + 接続できません - ドライバは全ての必要な機能をサポートしていません + + + + Unable to disable autocommit + オートコミットを無効にできません + + + + Unable to commit transaction + トランザクションをコミットできません + + + + Unable to rollback transaction + トランザクションをロールバックできません + + + + Unable to enable autocommit + オートコミットを有効にできません + + + + QODBCResult + + + + Unable to execute statement + ステートメントを実行できません + + + + Unable to fetch next + 次のレコードをフェッチできません + + + + Unable to prepare statement + プリペアステートメントを使えません + + + + Unable to bind variable + 変数をバインドできません + + + + + QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration + QODBCResult::reset: ステートメントの属性として 'SQL_CURSOR_STATUS' を設定できません。ODBC ドライバの構成をチェックしてください + + + + + + Unable to fetch last + リストを取得できません + + + + Unable to fetch + フェッチできません + + + + Unable to fetch first + 最初のレコードをフェッチできません + + + + Unable to fetch previous + 前のレコードをフェッチできません + + + + QObject + + False + False + + + True + True + + + + Home + ホーム + + + + Operation not supported on %1 + %1 ではこの操作はサポートされていません + + + + Invalid URI: %1 + 無効なURIです: %1 + + + + Socket error on %1: %2 + %1 のソケットにおいてエラーが発生しました: %2 + + + + Remote host closed the connection prematurely on %1 + リモートホスト %1 との接続が通信の終了前に切断されました + + + + + No host name given + ホストネームが与えられていません + + + + QPPDOptionsModel + + + Name + 名前 + + + + Value + + + + + QPSQLDriver + + + Unable to connect + 接続できません + + + + Could not begin transaction + トランザクションを開始できませんでした + + + + Could not commit transaction + トランザクションをコミットできませんでした + + + + Could not rollback transaction + トランザクションをロールバックできませんでした + + + + Unable to subscribe + subscribe できません + + + + Unable to unsubscribe + unsubscribe できません + + + + QPSQLResult + + + Unable to create query + クエリーを作成できません + + + + Unable to prepare statement + プリペアステートメントを使えません + + + + QPageSetupWidget + + + Centimeters (cm) + センチメートル (cm) + + + + Millimeters (mm) + ミリメートル (mm) + + + + Inches (in) + インチ (in) + + + + Points (pt) + ポイント (pt) + + + + Form + 書式設定 + + + + Paper + 用紙 + + + + Page size: + ページサイズ: + + + + Width: + 幅: + + + + Height: + 高さ: + + + + Paper source: + 給紙装置: + + + + Orientation + 印刷方向 + + + + Portrait + 縦 (ポートレート) + + + + Landscape + 横 (ランドスケープ) + + + + Reverse landscape + 横 反転 (リバースランドスケープ) + + + + Reverse portrait + 縦 反転 (リバースポートレート) + + + + Margins + 余白 + + + + top margin + 上端余白 + + + + left margin + 左端余白 + + + + right margin + 右端余白 + + + + bottom margin + 下端余白 + + + + QPatternist::QtXmlPatterns + + + An %1-attribute with value %2 has already been declared. + 属性 %1 の値 %2 は既に宣言されています。 + + + + An %1-attribute must have a valid %2 as value, which %3 isn't. + 属性 %1 の値は %2 の型でなければなりませんが、 %3 が指定されました。 + + + + %1 is an unsupported encoding. + %1 はサポートされていないエンコーディングです。 + + + + %1 contains octets which are disallowed in the requested encoding %2. + エンコーディング %2 では許可されていないオクテットが %1 に含まれています。 + + + + The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. + %2 で使用されているエンコード %3 では、コードポイント %1 は有効な XML 表現ではありません。 + + + + Network timeout. + ネットワーク接続がタイムアウトしました。 + + + + Element %1 can't be serialized because it appears outside the document element. + エレメント %1 はシリアライズできません。このドキュメントの範囲を越えるエレメントを含んでいます。 + + + + Attribute %1 can't be serialized because it appears at the top level. + 属性 %1 はシリアライズできません。トップレベルに現れているためです。 + + + + Year %1 is invalid because it begins with %2. + %1 年はむこうです。%2 で始まっています。 + + + + Day %1 is outside the range %2..%3. + %1 日は、有効な範囲 %2..%3 を逸脱しています。 + + + + Month %1 is outside the range %2..%3. + %1 月は、有効な範囲 %2..%3 を逸脱しています。 + + + + Overflow: Can't represent date %1. + オーバーフロー: 日付 %1 を再現できません。 + + + + Day %1 is invalid for month %2. + %2 月には、%1 日は存在しません。 + + + + Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; + 24:%1:%2.%3 は無効です。24時0分0秒のみ使用できます + + + + Time %1:%2:%3.%4 is invalid. + 時刻 %1時%2分%3.%4秒は無効です。 + + + + Overflow: Date can't be represented. + オーバーフロー: 日付を再現できません。 + + + + + At least one component must be present. + 年、月、日のうちいずれかを指定しなければなりません。 + + + + At least one time component must appear after the %1-delimiter. + %1 の後には、時刻を指定しなければなりません。 + + + + No operand in an integer division, %1, can be %2. + ゼロ除算? NaN? + 整数の除算のためのオペランドが不足しています。%1 は %2 でなければなりません。 + + + + The first operand in an integer division, %1, cannot be infinity (%2). + 整数の除算における最初のオペランド %1 を認識できません (%2)。 + + + + The second operand in a division, %1, cannot be zero (%2). + 整数の除算における二つ目のオペランド %1 はゼロであってはいけまん(%2)。 + + + + %1 is not a valid value of type %2. + %1 は、%2 の型に対して有効な値ではありません。 + + + + When casting to %1 from %2, the source value cannot be %3. + %2 から %1 への型変換に際しては、値 %3 は有効な値ではありません。 + + + + Integer division (%1) by zero (%2) is undefined. + 整数の除算において %1 をゼロ (%2) で割った結果は定義されていません。 + + + + Division (%1) by zero (%2) is undefined. + 除算において %1 をゼロ (%2) で割った結果は定義されていません。 + + + + Modulus division (%1) by zero (%2) is undefined. + 剰余を求めるに際し、%1 をゼロ (%2) で除した結果は定義されていません。 + + + + + Dividing a value of type %1 by %2 (not-a-number) is not allowed. + 型 %1 を非数 %2 (NaN) で除すことはできません。 + + + + Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. + 型 %1 を%2 または %3 (正または負のゼロ) で除することはできません。 + + + + Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. + 型 %1 を %2 または %3 (正または負のゼロ)で乗ずることはできません。 + + + + A value of type %1 cannot have an Effective Boolean Value. + 型 %1 は有効な論理型(bool)ではありません。 + + + + Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. + ?? + 論理型は、論理型以外の複数の値からなる計算によって求めることはできません。 + + + + Value %1 of type %2 exceeds maximum (%3). + 型 %2 の値 %1 は、上限 (%3) を越えています。 + + + + Value %1 of type %2 is below minimum (%3). + 型 %2 の値 %1 は、下限 (%3) を越えています。 + + + + A value of type %1 must contain an even number of digits. The value %2 does not. + 型 %1 の値は偶数個の十進数文字を必要とします。しかし、%2 はそうではありません。 + + + + %1 is not valid as a value of type %2. + 型 %2 に対して、値 %1 は有効ではありません。 + + + + Ambiguous rule match. + 曖昧なルールにマッチしました。 + + + + Operator %1 cannot be used on type %2. + 型 %2 に対して、オペレータ %1 は使用できません。 + + + + Operator %1 cannot be used on atomic values of type %2 and %3. + アトミックな型 %2 と %3 に対して、オペレータ %1 は使用できません。 + + + + The namespace URI in the name for a computed attribute cannot be %1. + computed attrib. ってなんてやくすのが適当かな。 + 結合された属性に対する名前空間のURIとして、%1 を使用することはできません。 + + + + The name for a computed attribute cannot have the namespace URI %1 with the local name %2. + 結合された属性の名前空間URI %1 は、ローカルな名前である %2 と併用できません。 + + + + Type error in cast, expected %1, received %2. + 型変換時のエラーです。望んでいた %1 ではなく、%2 になりました。 + + + + When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed. + %1 またはそれを継承している型への型変換においては、元の値の型は同じ型か、リテラルな文字列である必要があります。型 %2 は許可されていません。 + + + + No casting is possible with %1 as the target type. + 目標とする型に %1 を型変換することはできません。 + + + + It is not possible to cast from %1 to %2. + 型 %1 を型 %2 に型変換することはできません。 + + + + Casting to %1 is not possible because it is an abstract type, and can therefore never be instantiated. + 型 %1 への型変換はできません。抽象型であり、インスタンス化することができないからです。 + + + + It's not possible to cast the value %1 of type %2 to %3 + 型 %2 の値 %1 を、型 %3 に型変換することはできません + + + + Failure when casting from %1 to %2: %3 + %1 を %2 に型変換することができません: %3 + + + + A comment cannot contain %1 + コメントが %1 を含むことはできません + + + + A comment cannot end with a %1. + コメントは %1 で終了することはできません。 + + + + No comparisons can be done involving the type %1. + 型 %1 に対して比較を行うことはできません。 + + + + Operator %1 is not available between atomic values of type %2 and %3. + オペレータ %1 は、アトミックな型である %2 と %3 には適用できません。 + + + + In a namespace constructor, the value for a namespace cannot be an empty string. + 名前空間のスントラクトにおいて、空白の文字列を名前空間の値として使用することはできません。 + + + + The prefix must be a valid %1, which %2 is not. + プレフィックスは %1 でなければなりません。%2 は無効です。 + + + + The prefix %1 cannot be bound. + プレフィックス %1 はバウンドできません。 + + + + Only the prefix %1 can be bound to %2 and vice versa. + プレフィックス %1 は、%2 にのみバウンドできます。逆も同じです。 + + + + An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. + ドキュメントノードの子として属性ノードを指定することはできません。属性 %1 は誤った場所にあります。 + + + + Circularity detected + 循環を検出しました + + + + A library module cannot be evaluated directly. It must be imported from a main module. + ライブラリモジュールを直接評価することはできません。メインモジュールからインポートする必要があります。 + + + + No template by name %1 exists. + テンプレート名 %1 は存在しません。 + + + + A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. + 型 %1 は述部として使用できません。数値型か、論理型である必要があります。 + + + + A positional predicate must evaluate to a single numeric value. + positional? + 述部は評価されたとき、単一の数値になるようにしなければなりません。 + + + + The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid. + ターゲットとしている名前は、%1 であってはなりません。%2 は無効です。 + + + + %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. + %1 はターゲットとして無効です。%2 である必要があります。例えば "%3" のようにです。 + + + + The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. + バスの末端であるリーフは、単一のノードかアトミックな値である必要があります。複数の型の組み合わせであってはいけません。 + + + + The data of a processing instruction cannot contain the string %1 + 処理中のデータは、以下の文字列を含んでいてはなりません: %1 + + + + No namespace binding exists for the prefix %1 + プレフィックス %1 にバインドされたネームスペースがありません + + + + No namespace binding exists for the prefix %1 in %2 + %2 におけるプレフィックス %1 にバインディングされたネームスペースが存在しません + + + + + %1 is an invalid %2 + 型 %2 に対し、値 %1 は無効です + + + + The parameter %1 is passed, but no corresponding %2 exists. + パラメータ %1 を処理しました。しかし、対応する %2 が存在しません。 + + + + The parameter %1 is required, but no corresponding %2 is supplied. + パメータ %1 が必要です。しかし、対応する %2 がありません。 + + + + %1 takes at most %n argument(s). %2 is therefore invalid. + + %1 は、最大で %n 個の引数をとることができます。%2 は無効です。 + + + + + %1 requires at least %n argument(s). %2 is therefore invalid. + + %1 は、少くとも %n 個の引数を必要とします。%2 は無効です。 + + + + + The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. + %1 への最初の引数は、型 %2 であってはなりません。数値型、xs:yerMonthDuration、xs:dayTimeDurationである必要があります。 + + + + The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + %1 への最初の引数は、型 %2 であってはなりません。%3, %4, %5 のいずれかである必要があります。 + + + + The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + %1 への二つ目の引数は、型 %2 であってはなりません。%3, %4, %5 のいずれかである必要があります。 + + + + %1 is not a valid XML 1.0 character. + %1 は XML 1.0 において有効な文字ではありません。 + + + + The first argument to %1 cannot be of type %2. + %1 への最初の引数は、型 %2 であってはなりません。 + + + + The root node of the second argument to function %1 must be a document node. %2 is not a document node. + %1 への二つ目の引数のルートノードは、ドキュメントノードでなければなりません。しかし、%2 はドキュメントノードではありません。 + + + + If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. + ゾーンオフセットってなに? xmlにそんなのあったっけ? + もし二つの値がゾーンオフセットをもつ場合、両者は同じゾーンオフセットでなければなりません。%1 と %2 は同一ではありません。 + + + + %1 was called. + %1 が呼ばれました。 + + + + %1 must be followed by %2 or %3, not at the end of the replacement string. + %1 の後には、%2 か %3 が続かなければなりません。 + + + + In the replacement string, %1 must be followed by at least one digit when not escaped. + 置換操作において、%1 には少くとも一文字以上の数値が続く必要があります(エスケープされている場合を除く)。 + + + + In the replacement string, %1 can only be used to escape itself or %2, not %3 + 置換操作において、%1 はそれ自身または %2 をエスケープする為にのみ使用できます。%3 に対しては使用できません + + + + %1 matches newline characters + %1 は改行文字(列)にマッチしました + + + + %1 and %2 match the start and end of a line. + %1 と %2 は、行の先頭と末尾にマッチしました。 + + + + Matches are case insensitive + マッチは大文字小文字を区別しません + + + + Whitespace characters are removed, except when they appear in character classes + CDATA? + 空白文字は削除されました。ただし、キャラクタークラスに属するものは除きます + + + + %1 is an invalid regular expression pattern: %2 + %1 は有効な正規表現ではありません。: %2 + + + + %1 is an invalid flag for regular expressions. Valid flags are: + %1 は正規表現において無効なフラグです。使用可能なフラグは次の通りです: + + + + If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. + もし、最初の引数が空白からなる文字列か、長さが0 (名前空間をともなわない)である場合、プレフィックスを指定することはできません。しかし、プレフィックスとして %1 が指定されています。 + + + + It will not be possible to retrieve %1. + %1 を取得することはできないかもしれません。 + + + + The default collection is undefined + デフォルトのコレクションが定義されていません + + + + %1 cannot be retrieved + %1 を取得できません + + + + The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). + つまり、空白の文字です、はどうでもいいよね。 + 正規化された表現 %1 はサポートされていません。サポートされている表現は、%2, %3, %4, %5 のみです。 + + + + A zone offset must be in the range %1..%2 inclusive. %3 is out of range. + ゾーンオフセットは、%1 から %2 の範囲である必要があります(境界を含む)。%3 は範囲外です。 + + + + %1 is not a whole number of minutes. + %1 は、分を現す値ではありません。 + + + + The URI cannot have a fragment + この URI はフラグメントをもつことはできません + + + + Required cardinality is %1; got cardinality %2. + カーディナリティ %1 が必要です。%2 ではありません。 + + + + The item %1 did not match the required type %2. + アイテム %1 は、要求された型 %2 にマッチしません。 + + + + Attribute %1 cannot appear on the element %2. Only the standard attributes can appear. + エレメント %2 に属性 %1 を指定することはできません。標準の属性のみが許可されています。 + + + + Attribute %1 cannot appear on the element %2. Only %3 is allowed, and the standard attributes. + エレメント %2 に属性 %1 を指定することはできません。%3 と標準の属性のみが許可されています。 + + + + Attribute %1 cannot appear on the element %2. Allowed is %3, %4, and the standard attributes. + エレメント %2 に属性 %1 を指定することはできません。%3, %4 と標準の属性のみが許可されています。 + + + + Attribute %1 cannot appear on the element %2. Allowed is %3, and the standard attributes. + エレメント %2 に %1 は指定できません。%3 と標準の属性のみが指定できます。 + + + + XSL-T attributes on XSL-T elements must be in the null namespace, not in the XSL-T namespace which %1 is. + XSLT エレメントに対するXSLT属性は、名前空間がnullでなければなりません。%1 は使用できません。 + + + + The attribute %1 must appear on element %2. + 属性 %1 は、エレメント %2 にのみ記述できます。 + + + + The element with local name %1 does not exist in XSL-T. + ローカル名 %1 のエレメントは、XSLTに存在しません。 + + + + The variable %1 is unused + 値 %1 は使用されませんでした + + + + A construct was encountered which only is allowed in XQuery. + XQuery でのみ許可されている construct に遭遇しました。 + + + + + %1 is an unknown schema type. + %1 はサポートされていないスキーマのタイプです。 + + + + A template by name %1 has already been declared. + テンプレート名 '%1' は、既に宣言されています。 + + + + %1 is not a valid numeric literal. + %1 は数値リテラルとして無効です。 + + + + Only one %1 declaration can occur in the query prolog. + クェリーのプロローグでは、%1 は一回のみ宣言できます。 + + + + The initialization of variable %1 depends on itself + 再帰? + 値 %1 の初期化は、それ自身に依存しています + + + + No variable by name %1 exists + 変数 %1 は存在しません + + + + Version %1 is not supported. The supported XQuery version is 1.0. + バージョン %1 はサポートされていません。XQuery バージョン 1.0 のみサポートされています。 + + + + The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. + エンコーディング '%1' は無効です。ラテン文字 (空白を除く) からなるもので、正規表現 '%2' にマッチするもののみ使用できます。 + + + + No function with signature %1 is available + シグネチャ %1 をもつ関数がみつかりません + + + + + A default namespace declaration must occur before function, variable, and option declarations. + 標準の名前空間の宣言は、関数、変数、オプションの宣言の前にしなければなりません。 + + + + Namespace declarations must occur before function, variable, and option declarations. + 名前空間の宣言は、関数、変数、オプションの宣言の前にしなければなりません。 + + + + Module imports must occur before function, variable, and option declarations. + モジュールのインポートは、関数、変数、オプションの宣言の前にしなければなりません。 + + + + The keyword %1 cannot occur with any other mode name. + キーワード %1 は、他の名をともなって使用することはできません。 + + + + The value of attribute %1 must of type %2, which %3 isn't. + 属性 '%1' の値として '%3' が指定されましたが、型 '%2' でなければなりません。 + + + + It is not possible to redeclare prefix %1. + プレフィックス '%1' を再定義することはできません。 + + + + The prefix %1 can not be bound. By default, it is already bound to the namespace %2. + プレフィックス '%1' はバウンドできません。デフォルトでは、それは既に名前空間 '%2' にバウンドされています。 + + + + Prefix %1 is already declared in the prolog. + プロローグ部において、プレフィックス '%1' はすでに宣言されています。 + + + + The name of an option must have a prefix. There is no default namespace for options. + オプションの名前はプレフィックスをもたなければなりません。このオプションに対するデフォルトの名前空間は存在しません。 + + + + The Schema Import feature is not supported, and therefore %1 declarations cannot occur. + このスキーマのインポート機能は使用できません。また、'%1' 宣言も使用できません。 + + + + The target namespace of a %1 cannot be empty. + 名前空間 '%1' は、空であってはなりません。 + + + + The module import feature is not supported + モジュールインポートの機能はサポートされていません + + + + A variable by name %1 has already been declared. + 名前 '%1' の変数は、すでに宣言されています。 + + + + No value is available for the external variable by name %1. + 外部変数 '%1' の値がみつかりません。 + + + + A stylesheet function must have a prefixed name. + スタイルシート関数は、プレフィックス名を持たなければなりません。 + + + + The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) + ユーザ定義の関数の名前空間は、空であってはなりません。(すでに定義されているプレフィックス '%1' が使用できます) + + + + The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. + 名前空間 '%1' は予約済です。ユーザ定義の関数では使用することはできません。プレフィックス '%2' が使用できます。 + + + + 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 + ライブラリモジュールで使用されている名前空間は、モジュールの名前空間と同一でなければなりません。つまり、'%2' ではなく、'%1' でなければなりません + + + + A function already exists with the signature %1. + シグネチャー '%1' の関数はすでに存在しています。 + + + + No external functions are supported. All supported functions can be used directly, without first declaring them as external + 外部関数はサポートされていません。すべてのサポートされている関数は、外部宣言をすることなく、直接使用することができます + + + + An argument by name %1 has already been declared. Every argument name must be unique. + 引数名 '%1' は既に宣言されています。すべての引数名はユニークである必要があります。 + + + + When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. + パターン一致の内側で関数 '%1' を使用する場合、引数はリテラルな文字列を参照する値でなければなりません。 + + + + In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. + XSL-T パターンマッチングにおいて、関数 '%1' の最初の引数は、リテラルな文字列でなければなりません。 + + + + In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. + variable ref? + XSL-T パターンマッチングにおいて、関数 '%1' への最初の引数は、リテラルか変数でなければなりません。 + + + + In an XSL-T pattern, function %1 cannot have a third argument. + XSL-T パターンにおいて、関数 '%1' は三つの引数をもつことはできません。 + + + + In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. + XSL-T パターンマッチングにおいて、関数 '%1' と '%2' のみ使用できます。'%3' は使用できません。 + + + + In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. + XSL-T パターンにおいて、axis %1 は使用できません。%2 または %3 のみ使用できます。 + + + + %1 is an invalid template mode name. + %1 はテンプレートモジュール名として無効です。 + + + + The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. + for 構文において使用する変数は、場所に関する変数とは異なる必要があります。つまり、'%1' が重複して使用されています。 + + + + The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. + スキーマの検証機能はサポートされていません。よって、'%1' 構文は使用できません。 + + + + None of the pragma expressions are supported. Therefore, a fallback expression must be present + pragma 構文はサポートされていません。fallback 構文でなければなりません + + + + Each name of a template parameter must be unique; %1 is duplicated. + テンプレートパラメータ名はユニークである必要があります。'%1' は重複しています。 + + + + The %1-axis is unsupported in XQuery + XQuery において、%1 axis はサポートされていません + + + + No function by name %1 is available. + 関数名 '%1' はみつかりません。 + + + + The namespace URI cannot be the empty string when binding to a prefix, %1. + プレフィックス '%1' にバインディングする名前空間の URI は、空であってはなりません。 + + + + %1 is an invalid namespace URI. + %1 は名前空間 URI として無効です。 + + + + It is not possible to bind to the prefix %1 + プレフィックス %1 にバインドすることはできません + + + + Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). + ? + 名前空間 %1 は %2 にのみバウンドできます。 + + + + Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). + プリフィックス %1 は %2 にのみバウンドできます。 + + + + Two namespace declaration attributes have the same name: %1. + 二つの名前空間宣言の属性が、同じ名前 '%1' をもっています。 + + + + The namespace URI must be a constant and cannot use enclosed expressions. + 名前空間 URI は、constantでなければなりません。式を含むことはできません。 + + + + An attribute by name %1 has already appeared on this element. + 属性名 '%1' は、すでにこのエレメントで使用されています。 + + + + A direct element constructor is not well-formed. %1 is ended with %2. + 直積的な指定のエレメントがwell formedではありません。'%1' が、'%2' で終わっています。 + + + + The name %1 does not refer to any schema type. + 名前 '%1' は、なんのスキーマタイプも参照していません。 + + + + %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. + '%1' は complex 型です。complex 型への型変換はできません。しかし、アトミックな型である '%2' への変換はできます。 + + + + %1 is not an atomic type. Casting is only possible to atomic types. + '%1' はアトミックな型ではありません。型変換はアトミックな型に対してのみ可能です。 + + + + %1 is not a valid name for a processing-instruction. + 処理指定において、'%1' は無効です。 + + + + + %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. + '%1' は、スコープ属性宣言ではありません。スキーマインポート機能はサポートされていません。 + + + + The name of an extension expression must be in a namespace. + 拡張式 (extension expression) の名前は、名前空間の中になければなりません。 + + + + Element %1 is not allowed at this location. + この場所にエレメント '%1' をおくことは許されていません。 + + + + Text nodes are not allowed at this location. + この場所にテキストノードをおくことは許されていません。 + + + + Parse error: %1 + パースエラー: %1 + + + + The value of the XSL-T version attribute must be a value of type %1, which %2 isn't. + XSL-T バージョン属性の値は、'%1' 型でなければなりません。'%2' はそうではありません。 + + + + Running an XSL-T 1.0 stylesheet with a 2.0 processor. + XSL-T 1.0 のスタイルシートを 2.0 のプロセッサで使用します。 + + + + Unknown XSL-T attribute %1. + 未知の XSL-T 属性 %1 があります。 + + + + Attribute %1 and %2 are mutually exclusive. + 属性 '%1' と '%2' は排他的にのみ使用できます。 + + + + In a simplified stylesheet module, attribute %1 must be present. + simplified stylesheet モジュールにおいては、属性 '%1' を指定されなければなりません。 + + + + If element %1 has no attribute %2, it cannot have attribute %3 or %4. + エレメント '%1' が属性 '%2' を持たない場合は、属性 '%3' や '%4' を使用することはできません。 + + + + Element %1 must have at least one of the attributes %2 or %3. + エレメント '%1' は、属性 '%2' か '%3' のいずれかを持たなければなりません。 + + + + At least one mode must be specified in the %1-attribute on element %2. + エレメント '%2' において、'%1' 属性は少くとも一つのモードを指定しなければなりません。 + + + + Element %1 must come last. + エレメント %1 は最後になければなりません。 + + + + At least one %1-element must occur before %2. + %2 の前に、少くとも一つは %1 エレメントが存在しなければなりません。 + + + + Only one %1-element can appear. + %1 エレメントは一つのみ存在しなければなりません。 + + + + At least one %1-element must occur inside %2. + %2 の内側には、少くとも一つの '%1' エレメントが存在しなければなりません。 + + + + When attribute %1 is present on %2, a sequence constructor cannot be used. + %2 に属性 %1 がある場合、sequence constructor は使用できません。 + + + + Element %1 must have either a %2-attribute or a sequence constructor. + エレメント %1 には、%2 属性またはsequence constructorがなければなりません。 + + + + When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. + パラメータが要求されているときには、デフォルトの値は、%1 属性または sequence constructor によって指定されていてはなりません。 + + + + Element %1 cannot have children. + エレメント %1 は、子要素を持つことができません。 + + + + Element %1 cannot have a sequence constructor. + エレメント %1 は、sequence constructor を含むことができません。 + + + + + The attribute %1 cannot appear on %2, when it is a child of %3. + %2 が %3 の子要素であるときは、属性 %1 を使用してはなりません。 + + + + A parameter in a function cannot be declared to be a tunnel. + 関数へのパラメータは、トンネルであってはなりません。 + + + + This processor is not Schema-aware and therefore %1 cannot be used. + この処理系は、Schema-aware ではありません。よって、%1 は使用できません。 + + + + Top level stylesheet elements must be in a non-null namespace, which %1 isn't. + トップレベルのスタイルシートのエレメントは、non-nullな名前空間を持っていなければなりません。しかし、%1 はそうではありません。 + + + + The value for attribute %1 on element %2 must either be %3 or %4, not %5. + エレメント %2 の属性 %1 の値は、%3 または %4 でなければなりません。%5 は異なります。 + + + + Attribute %1 cannot have the value %2. + 属性 %1 に、値 %2 を指定することはできません。 + + + + The attribute %1 can only appear on the first %2 element. + 属性 %1 は、最初の %2 エレメントにのみ指定できます。 + + + + At least one %1 element must appear as child of %2. + %2 の子要素としては、少くとも一つは %1 エレメントがなければなりません。 + + + + empty + + + + + zero or one + ゼロまたは一つ + + + + exactly one + 厳密に一つ + + + + one or more + 一つまたは複数 + + + + zero or more + ゼロまたはそれ以上 + + + + Required type is %1, but %2 was found. + 要求されている型は %1 ですが、 %2 があります。 + + + + Promoting %1 to %2 may cause loss of precision. + %1 を %2 に変換する際に、精度のロスが生じます。 + + + + The focus is undefined. + フォーカスが定義されていません。 + + + + It's not possible to add attributes after any other kind of node. + 他の種類のノードの中では、属性を追加することはできません。 + + + + An attribute by name %1 has already been created. + 名前 '%1' の属性は、すでに生成されています。 + + + + Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. + UNICODE Codepoint Collection のみ使用できます(%1)。 %2 はサポートされていません。 + + + + QPluginLoader + + + Unknown error + 不明なエラー + + + + The plugin was not loaded. + そのプラグインはロードされていません。 + + + + QPrintDialog + + Page size: + ページサイズ: + + + Orientation: + 方向: + + + Paper source: + 給紙装置: + + + + OK + OK + + + Cancel + キャンセル + + + Portrait + + + + Landscape + + + + + locally connected + ローカルに接続しています + + + + + Aliases: %1 + エイリアス: %1 + + + + + unknown + 不明 + + + Print in color if available + 可能であればカラーで印刷 + + + Print to file + ファイルに出力: + + + Browse + 参照... + + + + Print all + すべて印刷 + + + Selection + 選択した部分を印刷 + + + + Print range + 印刷範囲 + + + Pages from + 先頭のページ: + + + to + 末尾のページ: + + + Print last page first + 末尾のページから印刷 + + + Number of copies: + 部数: + + + Paper format + 用紙の形式 + + + + A0 (841 x 1189 mm) + A0 (841 x 1189mm) + + + + A1 (594 x 841 mm) + A1 (594 x 841mm) + + + + A2 (420 x 594 mm) + A2 (420 x 594mm) + + + + A3 (297 x 420 mm) + A3 (297 x 420mm) + + + + A4 (210 x 297 mm, 8.26 x 11.7 inches) + A4 (210 x 297mm、8.26 x 11.7インチ) + + + + A5 (148 x 210 mm) + A5 (148 x 210mm) + + + + A6 (105 x 148 mm) + A6 (105 x 148mm) + + + + A7 (74 x 105 mm) + A7 (74 x 105mm) + + + + A8 (52 x 74 mm) + A8 (52 x 74mm) + + + + A9 (37 x 52 mm) + A9 (37 x 52mm) + + + + B0 (1000 x 1414 mm) + B0 (1000 x 1414mm) + + + + B1 (707 x 1000 mm) + B1 (707 x 1000mm) + + + + B2 (500 x 707 mm) + B2 (500 x 707mm) + + + + B3 (353 x 500 mm) + B3 (353 x 500mm) + + + + B4 (250 x 353 mm) + B4 (250 x 353mm) + + + + B5 (176 x 250 mm, 6.93 x 9.84 inches) + B5 (176 x 250mm、6.93 x 9.84インチ) + + + + B6 (125 x 176 mm) + B6 (125 x 176mm) + + + + B7 (88 x 125 mm) + B7 (88 x 125mm) + + + + B8 (62 x 88 mm) + B8 (62 x 88mm) + + + + B9 (44 x 62 mm) + B9 (44 x 62mm) + + + + B10 (31 x 44 mm) + B10 (31 x 44mm) + + + + C5E (163 x 229 mm) + C5E (163 x 229mm) + + + + DLE (110 x 220 mm) + DLE (110 x 220mm) + + + + Executive (7.5 x 10 inches, 191 x 254 mm) + Executive (7.5 x 10インチ、191 x 254mm) + + + + Folio (210 x 330 mm) + Folio (210 x 330mm) + + + + Ledger (432 x 279 mm) + Ledger (432 x 279mm) + + + + Legal (8.5 x 14 inches, 216 x 356 mm) + Legal (8.5 x 14インチ、216 x 356mm) + + + + Letter (8.5 x 11 inches, 216 x 279 mm) + Letter (8.5 x 11インチ、216 x 279mm) + + + + Tabloid (279 x 432 mm) + Tabloid (279 x 432mm) + + + + US Common #10 Envelope (105 x 241 mm) + US Common #10 Envelope (105 x 241mm) + + + Print dialog + プリントダイアログ + + + Size: + サイズ: + + + Printer + プリンタ + + + Properties + プロパティ + + + Printer info: + プリンタ情報: + + + Copies + 印刷部数 + + + Collate + 丁合い + + + Other + その他 + + + Double side printing + 両面印刷 + + + + + + Print + 印刷 + + + File + ファイル + + + + Print To File ... + ファイルへ出力... + + + + File %1 is not writable. +Please choose a different file name. + ファイル %1 は書き込み可能ではありません。 +別のファイル名を選んでください。 + + + + %1 already exists. +Do you want to overwrite it? + %1 はすでに存在します。 +上書きしますか? + + + + File exists + ファイルは既に存在しています + + + + <qt>Do you want to overwrite it?</qt> + <qt>ファイルを上書きしてもよろしいですか?</qt> + + + + Print selection + 選択された範囲を印刷 + + + + %1 is a directory. +Please choose a different file name. + %1 はディレクトリです。 +ファイル名を指定してください。 + + + + A0 + A0 + + + + A1 + A1 + + + + A2 + A2 + + + + A3 + A3 + + + + A4 + A4 + + + + A5 + A5 + + + + A6 + A6 + + + + A7 + A7 + + + + A8 + A8 + + + + A9 + A9 + + + + B0 + B0 + + + + B1 + B1 + + + + B2 + B2 + + + + B3 + B3 + + + + B4 + B4 + + + + B5 + B5 + + + + B6 + B6 + + + + B7 + B7 + + + + B8 + B8 + + + + B9 + B9 + + + + B10 + B10 + + + + C5E + C5E + + + + DLE + DLE + + + + Executive + Exclusive + + + + Folio + Folio + + + + Ledger + Ledger + + + + Legal + リーガルサイズ + + + + Letter + レターサイズ + + + + Tabloid + タブロイドサイズ + + + + US Common #10 Envelope + US標準#10封筒 + + + + Custom + カスタム + + + + + &Options >> + オプション(&O) >> + + + + &Print + 印刷(&P) + + + + &Options << + オプション(&O) << + + + + Print to File (PDF) + PDFファイルに出力 + + + + Print to File (Postscript) + Postscriptファイルに出力 + + + + Local file + ローカルファイル + + + + Write %1 file + ファイル %1 に書き込みました + + + + The 'From' value cannot be greater than the 'To' value. + QPrintPropertiesWidgetにFromとToがあってそれを指している + 印刷開始ページ番号は、印刷終了ページ番号より小さくなければなりません。 + + + + QPrintPreviewDialog + + + + Page Setup + ページの設定 + + + + %1% + %1% + + + + Print Preview + 印刷のプレビュー + + + + Next page + 次のページ + + + + Previous page + 前のページ + + + + First page + 最初のページ + + + + Last page + 最後のページ + + + + Fit width + 幅をあわせる + + + + Fit page + 高さをあわせる + + + + Zoom in + 拡大 + + + + Zoom out + 縮小 + + + + Portrait + + + + + Landscape + + + + + Show single page + 一枚のページを表示する + + + + Show facing pages + 見開きのページを表示する + + + + Show overview of all pages + すべてのページを表示する + + + + Print + 印刷 + + + + Page setup + ページの設定 + + + Close + 閉じる + + + + Export to PDF + PDFに出力 + + + + Export to PostScript + Postscriptに出力 + + + + QPrintPropertiesDialog + + PPD Properties + 印刷プロパティのダイアログのプロパティ + + + Save + 保存 + + + OK + OK + + + + QPrintPropertiesWidget + + + Form + 書式 + + + + Page + ページ + + + + Advanced + 高度な設定 + + + + QPrintSettingsOutput + + + Form + 書式 + + + + Copies + 印刷部数 + + + + Print range + 印刷範囲 + + + + Print all + すべて印刷 + + + + Pages from + 先頭のページ + + + + to + 末尾のページ + + + + Selection + 選択した部分を印刷 + + + + Output Settings + 出力設定 + + + + Copies: + 印刷部数: + + + + Collate + 丁合い + + + + Reverse + 逆順 + + + + Options + オプション + + + + Color Mode + + + + + Color + カラー + + + + Grayscale + グレースケール + + + + Duplex Printing + 両面印刷 + + + + None + なし + + + + Long side + 長辺綴じ + + + + Short side + 短辺綴じ + + + + QPrintWidget + + + Form + 書式 + + + + Printer + プリンタ + + + + &Name: + 名前(&N): + + + + P&roperties + プロパティ(&r) + + + + Location: + 設置場所: + + + + Preview + プレビュー + + + + Type: + タイプ: + + + + Output &file: + 出力ファイル名(&f): + + + + ... + ... + + + + QProcess + + + + Could not open input redirection for reading + 標準入力リダイレクトを読み込みのためにオープンすることができません + + + + + Could not open output redirection for writing + 標準出力リダイレクトを書き込みのためにオープンすることができません + + + + Resource error (fork failure): %1 + リソースエラー (fork に失敗しました): %1 + + + + + + + + + + + + Process operation timed out + プロセス処理がタイムアウトしました + + + + + + + Error reading from process + プロセスからの読み込みにおいてエラーが発生しました + + + + + + Error writing to process + プロセスへの書き込みにおいてエラーが発生しました + + + + Process crashed + プロセスがクラッシュしました + + + + No program defined + プログラム名が指定されていません + + + + Process failed to start + プロセスのスタートに失敗しました + + + + QProgressDialog + + + Cancel + キャンセル + + + + QPushButton + + + Open + オープン + + + + QRadioButton + + + Check + 選択 + + + + QRegExp + + + no error occurred + エラーは発生しませんでした + + + + disabled feature used + 無効な機能が使用されました + + + + bad char class syntax + 不正なcharクラス構文 + + + + bad lookahead syntax + 不正なlookahead構文 + + + + bad repetition syntax + 不正なrepetition構文 + + + + invalid octal value + 無効な8進値 + + + + missing left delim + 左の区切り文字がありません + + + + unexpected end + 予期しない末尾です + + + + met internal limit + 内部制限を満たしました + + + + QSQLite2Driver + + + Error to open database + データベースのオープンでエラーが発生しました + + + + Unable to begin transaction + トランザクションを開始できません + + + + Unable to commit transaction + トランザクションをコミットできません + + + + Unable to rollback Transaction + トランザクションをロールバックできません + + + + QSQLite2Result + + + Unable to fetch results + 実行結果をフェッチできません + + + + Unable to execute statement + ステートメントを実行できません + + + + QSQLiteDriver + + + Error opening database + データベースのオープンでエラーが発生しました + + + + Error closing database + データベースのクローズでエラーが発生しました + + + + Unable to begin transaction + トランザクションを開始できません + + + + Unable to commit transaction + トランザクションをコミットできません + + + Unable to roll back transaction + トランザクションをロールバックできません + + + + Unable to rollback transaction + トランザクションをロールバックできません + + + + QSQLiteResult + + + + + Unable to fetch row + レコードをフェッチできません + + + + Unable to execute statement + ステートメントを実行できません + + + + Unable to reset statement + ステートメントをリセットできません + + + + Unable to bind parameters + パラメータをバインドできません + + + + Parameter count mismatch + パラメータの数が合っていません + + + + No query + クェリーがありません + + + + QScrollBar + + + Scroll here + ここにスクロール + + + + Left edge + 左端 + + + + Top + 上端 + + + + Right edge + 右端 + + + + Bottom + 下端 + + + + Page left + 1ページ左へスクロール + + + + + Page up + 1ページ戻る + + + + Page right + 1ページ右へスクロール + + + + + Page down + 1ページ進む + + + + Scroll left + 左へスクロール + + + + Scroll up + 上へスクロール + + + + Scroll right + 右へスクロール + + + + Scroll down + 下へスクロール + + + + Line up + 1行上へ + + + + Position + 位置 + + + + Line down + 1行下へ + + + + QSharedMemory + + + %1: unable to set key on lock + 共有メモリ関連 + %1: ロックするためのキーを設定できません + + + + %1: create size is less then 0 + %1: 0より小さいサイズの共有メモリは作成できません + + + + + %1: unable to lock + %1: ロックできません + + + + %1: unable to unlock + %1: アンロックできません + + + + + %1: permission denied + %1: 許可されていません + + + + + %1: already exists + %1: 既に存在します + + + + + %1: doesn't exists + %1: 存在しません + + + + + %1: out of resources + %1: リソース不足です + + + + + %1: unknown error %2 + %1: 未知のエラー %2 + + + + %1: key is empty + %1: キーが空です + + + + %1: unix key file doesn't exists + ? + %1: UNIX key file が存在しません + + + + %1: ftok failed + %1: fork に失敗しました + + + + + %1: unable to make key + %1: キーを作成できません + + + + %1: system-imposed size restrictions + EINVAL + %1: 指定されたサイズはシステムにより拒否されました + + + + %1: not attached + %1: アタッチしていません + + + + %1: invalid size + %1: 無効なサイズです + + + + %1: key error + safekey.isEmpty()==true + %1: キーかありません + + + + %1: size query failed + %1: サイズのクェリーに失敗しました + + + + QShortcut + + + Space + Space + + + + Esc + Esc + + + + Tab + Tab + + + + Backtab + Backtab + + + + Backspace + Backspace + + + + Return + Return + + + + Enter + Enter + + + + Ins + Ins + + + + Del + Del + + + + Pause + Pause + + + + Print + Print + + + + SysReq + SysReq + + + + Home + Home + + + + End + End + + + + Left + + + + + Up + + + + + Right + + + + + Down + + + + + PgUp + PgUp + + + + PgDown + PgDown + + + + CapsLock + CapsLock + + + + NumLock + NumLock + + + + ScrollLock + ScrollLock + + + + Menu + メニュー + + + + Help + ヘルプ + + + + Back + 戻る + + + + Forward + 進む + + + + Stop + 停止 + + + + Refresh + 更新間隔 + + + + Volume Down + 音量を下げる + + + + Volume Mute + 消音 + + + + Volume Up + 音量を上げる + + + + Bass Boost + 低音ブースト + + + + Bass Up + 低音を上げる + + + + Bass Down + 低音を下げる + + + + Treble Up + 高音を上げる + + + + Treble Down + 高音を下げる + + + + Media Play + メディアの再生 + + + + Media Stop + メディアの停止 + + + + Media Previous + 前のメディア + + + + Media Next + 次のメディア + + + + Media Record + メディアの録音 + + + + Home Page + ホームページ + + + + Favorites + お気に入り + + + + Search + 検索 + + + + Standby + スタンバイ + + + + Open URL + URLを開く + + + + Launch Mail + メールの起動 + + + + Launch Media + メディアの起動 + + + + Launch (0) + (0)の起動 + + + + Launch (1) + (1)の起動 + + + + Launch (2) + (2)の起動 + + + + Launch (3) + (3)の起動 + + + + Launch (4) + (4)の起動 + + + + Launch (5) + (5)の起動 + + + + Launch (6) + (6)の起動 + + + + Launch (7) + (7)の起動 + + + + Launch (8) + (8)の起動 + + + + Launch (9) + (9)の起動 + + + + Launch (A) + (A)の起動 + + + + Launch (B) + (B)の起動 + + + + Launch (C) + (C)の起動 + + + + Launch (D) + (D)の起動 + + + + Launch (E) + (E)の起動 + + + + Launch (F) + (F)の起動 + + + + Print Screen + Print Screen + + + + Page Up + Page Up + + + + Page Down + Page Down + + + + Caps Lock + Caps Lock + + + + Num Lock + Num Lock + + + + Number Lock + Number Lock + + + + Scroll Lock + Scroll Lock + + + + Insert + Insert + + + + Delete + Delete + + + + Escape + Escape + + + + System Request + System Request + + + + Select + Select + + + + Yes + はい + + + + No + いいえ + + + + Context1 + Context1 + + + + Context2 + Context2 + + + + Context3 + Context3 + + + + Context4 + Context4 + + + + Call + Call + + + + Hangup + Hangup + + + + Flip + Flip + + + + + Ctrl + Ctrl + + + + + Shift + Shift + + + + + Alt + Alt + + + + + Meta + Meta + + + + + + + + + + + F%1 + F%1 + + + + QSlider + + + Page left + 1ページ左へスクロール + + + + Page up + 1ページ戻る + + + + Position + 位置 + + + + Page right + 1ページ右へスクロール + + + + Page down + 1ページ進む + + + + QSocks5SocketEngine + + + Connection to proxy refused + プロキシーへの接続が拒否されました + + + + Connection to proxy closed prematurely + プロキシーの接続が通信の終了前に切断されました + + + + Proxy host not found + プロキシーホストが見つかりません + + + + Connection to proxy timed out + プロキシーとの接続がタイムアウトしました + + + + Proxy authentication failed + プロキシーの認証に失敗しました + + + + Proxy authentication failed: %1 + プロキシーの認証に失敗しました: %1 + + + + SOCKS version 5 protocol error + SOCKS バージョン 5 プロトコルのエラーです + + + + General SOCKSv5 server failure + SOCKS バージョン 5 サーバのエラーです + + + + Connection not allowed by SOCKSv5 server + SOCKSv5 サーバより接続を拒否されました + + + + TTL expired + 実際はホップ数です + 有効期限(TTL)がきれました + + + + SOCKSv5 command not supported + この SOCKSv5 コマンドはサポートされていません + + + + Address type not supported + 指定されたアドレスタイプはサポートされていません + + + + Unknown SOCKSv5 proxy error code 0x%1 + 未知の SOCKSv5 プロキシーエラーです: 0x%1 + + + Socks5 timeout error connecting to socks server + Socks5 はソックスサーバ接続しようとしてタイムアウトになりました + + + + Network operation timed out + ネットワーク操作がタイムアウトしました + + + + QSpinBox + + + More + 増やす + + + + Less + 減らす + + + + QSql + + + Delete + 削除 + + + + Delete this record? + このレコードを削除しますか? + + + + + + Yes + はい + + + + + + No + いいえ + + + + Insert + 挿入 + + + + Update + アップデート + + + + Save edits? + 編集内容を保存しますか? + + + + Cancel + キャンセル + + + + Confirm + 確認 + + + + Cancel your edits? + 編集をキャンセルしますか? + + + + QSslSocket + + + Error creating SSL context (%1) + SSL content の作成に失敗しました (%1) + + + + Invalid or empty cipher list (%1) + 暗号方式リストが無効または空です (%1) + + + + Cannot provide a certificate with no key, %1 + 鍵が指定されていないため、証明書を扱えません。 %1 + + + + Error loading local certificate, %1 + ローカルの証明書をロードできません。 %1 + + + + Error loading private key, %1 + プライベートキーをロードできません。 %1 + + + + Private key does not certificate public key, %1 + プライベートキーが、パブリックキーの証明書となっていません %1 + + + + Error creating SSL session, %1 + SSL セッションを作成できません。 %1 + + + + Error creating SSL session: %1 + SSL セッションを作成できません: %1 + + + + Unable to write data: %1 + 書き込みできません: %1 + + + + Error while reading: %1 + 読み込み時にエラーが発生しました: %1 + + + + Error during SSL handshake: %1 + SSL ハンドシェーク時にエラーが発生しました: %1 + + + + QSystemSemaphore + + + + %1: out of resources + %1: リソース不足です + + + + + %1: permission denied + %1: 許可されていません + + + + %1: already exists + %1: 既に存在します + + + + %1: does not exist + %1: 存在しません + + + + + %1: unknown error %2 + %1: 未知のエラーです %2 + + + + QTDSDriver + + + Unable to open connection + 接続をオープンできません + + + + Unable to use database + データベースを使用できません + + + + QTabBar + + + Scroll Left + 左へスクロール + + + + Scroll Right + 右へスクロール + + + + QTcpServer + + Socket operation unsupported + ソケット操作はサポートされていません + + + + Operation on socket is not supported + このソケットへの操作はサポートされていません + + + + QTextControl + + + &Undo + 元に戻す(&U) + + + + &Redo + やり直す(&R) + + + + Cu&t + 切り取り(&T) + + + + &Copy + コピー(&C) + + + + Copy &Link Location + リンクの場所をコピー(&L) + + + + &Paste + 貼り付け(&P) + + + + Delete + 削除 + + + + Select All + すべてを選択 + + + + QToolButton + + + + Press + 押す + + + + + Open + オープン + + + + QUdpSocket + + + This platform does not support IPv6 + このプラットフォームは IPv6 をサポートしていません + + + + QUndoGroup + + + Undo + 元に戻す + + + + Redo + やり直す + + + + QUndoModel + + + <empty> + <空> + + + + QUndoStack + + + Undo + 元に戻す + + + + Redo + やり直す + + + + QUnicodeControlCharacterMenu + + + LRM Left-to-right mark + LRM (左横書き指定) + + + + RLM Right-to-left mark + RLM (右横書き指定) + + + + ZWJ Zero width joiner + ZWJ (幅のない接続文字) + + + + ZWNJ Zero width non-joiner + ZWNJ (幅のない非接続文字) + + + + ZWSP Zero width space + ZWSP (幅の無い空白) + + + + LRE Start of left-to-right embedding + LRE (左横書き開始指定) + + + + RLE Start of right-to-left embedding + RLE (右横書き開始指定) + + + + LRO Start of left-to-right override + LRO (左横書き上書き開始指定) + + + + RLO Start of right-to-left override + RLO (右横書き上書き開始指定) + + + + PDF Pop directional formatting + PDF (方向上書きの終了指定) + + + + Insert Unicode control character + Unicode制御文字を挿入 + + + + QWebFrame + + + Request cancelled + リクエストはキャンセルされました + + + + Request blocked + リクエストはブロックされました + + + + Cannot show URL + URL を表示できません + + + + Frame load interruped by policy change + ポリシーの変更により、フレームのロードが中断しました + + + + Cannot show mimetype + MIME Type を表示できません + + + + File does not exist + ファイルが存在しません + + + + QWebPage + + + Bad HTTP request + 誤った HTTP のリクエストです + + + + Submit + default label for Submit buttons in forms on web pages + 送信 + + + + Submit + Submit (input element) alt text for <input> elements with no alt, title, or value + 送信 + + + + Reset + default label for Reset buttons in forms on web pages + リセット + + + + This is a searchable index. Enter search keywords: + text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' + 検索が可能です。検索のためのキーワードを入力してください: + + + + Choose File + title for file button used in HTML forms + ファイルを選ぶ + + + + No file selected + text to display in file button used in HTML forms when no file is selected + ファイルが選択されていません + + + + Open in New Window + Open in New Window context menu item + 新しいウィンドウで開く + + + + Save Link... + Download Linked File context menu item + リンク先を保存... + + + + Copy Link + Copy Link context menu item + リンク先をコピー + + + + Open Image + Open Image in New Window context menu item + イメージを開く + + + + Save Image + Download Image context menu item + 画像を保存 + + + + Copy Image + Copy Link context menu item + 画像をコピー + + + + Open Frame + Open Frame in New Window context menu item + フレームを新しいウィンドウで開く + + + + Copy + Copy context menu item + コピー + + + + Go Back + Back context menu item + 戻る + + + + Go Forward + Forward context menu item + 進む + + + + Stop + Stop context menu item + 停止 + + + + Reload + Reload context menu item + リロード + + + + Cut + Cut context menu item + 切り取り + + + + Paste + Paste context menu item + 貼り付け + + + + No Guesses Found + No Guesses Found context menu item + 推測候補はありません + + + + Ignore + Ignore Spelling context menu item + 無視 + + + + Add To Dictionary + Learn Spelling context menu item + 辞書に追加 + + + + Search The Web + Search The Web context menu item + Web を検索 + + + + Look Up In Dictionary + Look Up in Dictionary context menu item + 辞書から探す + + + + Open Link + Open Link context menu item + リンクを開く + + + + Ignore + Ignore Grammar context menu item + 無視 + + + + Spelling + Spelling and Grammar context sub-menu item + スペル + + + + Show Spelling and Grammar + menu item title + スペルと文法を表示 + + + + Hide Spelling and Grammar + menu item title + スペルと文法を隠す + + + + Check Spelling + Check spelling context menu item + スペルをチェックする + + + + Check Spelling While Typing + Check spelling while typing context menu item + 入力中にスペルをチェックする + + + + Check Grammar With Spelling + Check grammar with spelling context menu item + スペルおよび文法をチェックする + + + + Fonts + Font context sub-menu item + フォント + + + + Bold + Bold context menu item + 太字 + + + + Italic + Italic context menu item + イタリック + + + + Underline + Underline context menu item + 下線 + + + + Outline + Outline context menu item + アウトライン + + + + Direction + Writing direction context sub-menu item + 方向 + + + + Text Direction + Text direction context sub-menu item + テキストの方向 + + + + Default + Default writing direction context menu item + デフォルト + + + + LTR + Left to Right context menu item + 左横書き + + + + RTL + Right to Left context menu item + 右横書き + + + + Inspect + Inspect Element context menu item + ? + 検査 + + + + No recent searches + Label for only item in menu that appears when clicking on the search field image, when no searches have been performed + 検索の履歴はありません + + + + Recent searches + label for first item in the menu that appears when clicking on the search field image, used as embedded menu title + 検索の履歴 + + + + Clear recent searches + menu item in Recent Searches menu that empties menu's contents + 検索の履歴をクリア + + + + Unknown + Unknown filesize FTP directory listing item + 不明 + + + + %1 (%2x%3 pixels) + Title string for images + %1 (%2x%3 ピクセル) + + + + Web Inspector - %2 + Web の検査 - %2 + + + + Scroll here + ここにスクロール + + + + Left edge + 左端 + + + + Top + 上端 + + + + Right edge + 右端 + + + + Bottom + 下端 + + + + Page left + 1ページ左へスクロール + + + + Page up + 1ページ戻る + + + + Page right + 1ページ右へスクロール + + + + Page down + 1ページ進む + + + + Scroll left + 左へスクロール + + + + Scroll up + 上へスクロール + + + + Scroll right + 右へスクロール + + + + Scroll down + 下へスクロール + + + + %n file(s) + number of chosen file + + %n 個のファイル + + + + + JavaScript Alert - %1 + JavaScript アラート - %1 + + + + JavaScript Confirm - %1 + JavaScript 確認 - %1 + + + + JavaScript Prompt - %1 + JavaScript 質問 - %1 + + + + Move the cursor to the next character + 次の文字へカーソルを移動 + + + + Move the cursor to the previous character + 前の文字にカーソルを移動 + + + + Move the cursor to the next word + 次の単語にカーソルを移動 + + + + Move the cursor to the previous word + 前の単語にカーソルを移動 + + + + Move the cursor to the next line + 次の行にカーソルを移動 + + + + Move the cursor to the previous line + 前の行にカーソルを移動 + + + + Move the cursor to the start of the line + 文なのか行なのか + 文頭にカーソルを移動 + + + + Move the cursor to the end of the line + 文末にカーソルを移動 + + + + Move the cursor to the start of the block + ブロックの先頭にカーソルを移動 + + + + Move the cursor to the end of the block + ブロックの末尾にカーソルを移動 + + + + Move the cursor to the start of the document + 文章の先頭にカーソルを移動 + + + + Move the cursor to the end of the document + 文章の末尾にカーソルを移動 + + + + Select all + すべてを選択 + + + + Select to the next character + 次の文字を選択 + + + + Select to the previous character + 前の文字を選択 + + + + Select to the next word + 次の単語を選択 + + + + Select to the previous word + 前の単語を選択 + + + + Select to the next line + 次の行を選択 + + + + Select to the previous line + 前の行を選択 + + + + Select to the start of the line + 文頭から選択 + + + + Select to the end of the line + 文末まで選択 + + + + Select to the start of the block + ブロックの先頭から選択 + + + + Select to the end of the block + ブロックの末尾まで選択 + + + + Select to the start of the document + ドキュメントの先頭から選択 + + + + Select to the end of the document + ドキュメントの末尾まで選択 + + + + Delete to the start of the word + 単語の先頭まで削除 + + + + Delete to the end of the word + 単語の末尾まで削除 + + + + Insert a new paragraph + 新しい段落を挿入 + + + + Insert a new line + 新しい行を挿入 + + + + QWhatsThisAction + + + What's This? + ヒント? + + + + QWidget + + + * + * + + + + QWizard + + + Go Back + 戻る + + + + Continue + 続き + + + + Commit + 適用 + + + + Done + 終了 + + + + Help + ヘルプ + + + + < &Back + < 戻る(&B) + + + + &Finish + 完了(&F) + + + + Cancel + キャンセル + + + + &Help + ヘルプ(&H) + + + + &Next + 次へ(&N) + + + + &Next > + 次へ(&N) > + + + + QWorkspace + + + &Restore + 元に戻す(&R) + + + + &Move + 移動(&M) + + + + &Size + サイズを変更(&S) + + + + Mi&nimize + 最小化(&N) + + + + Ma&ximize + 最大化(&X) + + + + &Close + 閉じる(&C) + + + + Stay on &Top + 常に手前に表示(&T) + + + + + Sh&ade + シェード(&A) + + + + + %1 - [%2] + %1 - [%2] + + + + Minimize + 最小化 + + + + Restore Down + 元に戻す + + + + Close + 閉じる + + + + &Unshade + シェードを解除(&U) + + + + QXml + + + no error occurred + エラーは発生しませんでした + + + + error triggered by consumer + 消費者によってエラーが誘発されました + + + + unexpected end of file + 予期せぬファイルの終りです + + + + more than one document type definition + ドキュメントタイプの定義が複数あります + + + + error occurred while parsing element + 要素の解析中にエラーが発生しました + + + + tag mismatch + タグが一致しません + + + + error occurred while parsing content + コンテンツの解析中にエラーが発生しました + + + + unexpected character + 予期しない文字です + + + + invalid name for processing instruction + 処理の指示に無効な名前です + + + + version expected while reading the XML declaration + XML宣言を読み込むにはバージョンが必要です + + + + wrong value for standalone declaration + スタンドアロン宣言として正しくない値です + + + + encoding declaration or standalone declaration expected while reading the XML declaration + XML宣言を読み込むにはエンコーディング宣言かスタンドアローン宣言が必要です + + + + standalone declaration expected while reading the XML declaration + XML宣言を読み込むにはスタンドアローン宣言が必要です + + + + error occurred while parsing document type definition + ドキュメントタイプの定義を解析中にエラーが発生しました + + + + letter is expected + 文字が必要です + + + + error occurred while parsing comment + コメントの解析中にエラーが発生しました + + + + error occurred while parsing reference + 参照の解析中にエラーが発生しました + + + + internal general entity reference not allowed in DTD + 内部一般エンティティ参照はDTDで許されていません + + + + external parsed general entity reference not allowed in attribute value + 解析された外部一般エンティティ参照は属性値で許されていません + + + + external parsed general entity reference not allowed in DTD + 解析された外部一般エンティティ参照はDTDで許されていません + + + + unparsed entity reference in wrong context + 不正な文脈で解析されないエンティティ参照です + + + + recursive entities + 再帰的エンティティ + + + + error in the text declaration of an external entity + 外部エンティティのテキスト宣言にエラーがあります + + + + QXmlStream + + + + Extra content at end of document. + ドキュメントの末尾に余計なものがついています。 + + + + Invalid entity value. + エンティティの値が無効です。 + + + + Invalid XML character. + 無効な XML 文字です。 + + + + Sequence ']]>' not allowed in content. + このコンテキストでは、']]>' は許可されていません。 + + + + + Encountered incorrectly encoded content. + 正しくないエンコードの文脈に遭遇しました。 + + + + Namespace prefix '%1' not declared + 名前空間のブリフィックス '%1' は宣言されていません + + + + Attribute redefined. + 属性が再度指定されています。 + + + + Unexpected character '%1' in public id literal. + DTD宣言の部分 + 公開 ID 指定に使用できない文字 '%1' が使用されています。 + + + + Invalid XML version string. + 無効な XML バージョン指定です。 + + + + Unsupported XML version. + この XML のバージョンはサポートされていません。 + + + + The standalone pseudo attribute must appear after the encoding. + &ddd; は、エンコーディングを指定していないと使えないということかな。utf8だとおもうけど。 + 仮想属性指定は、エンコーディング指定の後にのみ使用できます。 + + + + %1 is an invalid encoding name. + %1 は無効なエンコーディングの名前です。 + + + + Encoding %1 is unsupported + エンコーディング '%1' はサポートされていません + + + + Standalone accepts only yes or no. + standalone の指定は yes または no のみ指定できます。 + + + + Invalid attribute in XML declaration. + XML 宣言に無効な属性がついています。 + + + + Premature end of document. + ドキュメントが途中で終わっています。 + + + + Invalid document. + 無効なドキュメントです。 + + + + Expected + 予期していた表現は、 + + + + , but got ' + ですが、取得した表現は以下のものでした ' + + + + Unexpected ' + 予期していなかった表現 ' + + + + Expected character data. + 予期していた文字列。 + + + + Recursive entity detected. + 再帰しているエンティティを発見しました。 + + + + Start tag expected. + 開始タグをよきしていましたが、みつかりません。 + + + + NDATA in parameter entity declaration. + パラメータエンティティの宣言において NDATA があります。 + + + + XML declaration not at start of document. + XML 宣言がドキュメントの先頭にありません。 + + + + %1 is an invalid processing instruction name. + XMLにそんなのあったっけ? + %1 は無効な処理指定の名前です。 + + + + Invalid processing instruction name. + 無効な処理命令です。 + + + + %1 is an invalid PUBLIC identifier. + %1 は、公開 (PUBLIC) 識別子として無効です。 + + + + + + + Illegal namespace declaration. + 無効な名前空間の指定です。 + + + + Invalid XML name. + 無効な XML 名です。 + + + + Opening and ending tag mismatch. + 開始タグと、終了タグがマッチしません。 + + + + Reference to unparsed entity '%1'. + まだパースしていないエンティティ '%1' を参照しています。 + + + + + + Entity '%1' not declared. + エンティティ '%1' は宣言されていません。 + + + + Reference to external entity '%1' in attribute value. + 属性値として、外部エンティティ '%1' を再度指定しています。 + + + + Invalid character reference. + 無効な文字への参照です。 + + + diff --git a/translations/qt_ja_JP.ts b/translations/qt_ja_JP.ts deleted file mode 100644 index e6f92b7..0000000 --- a/translations/qt_ja_JP.ts +++ /dev/null @@ -1,8070 +0,0 @@ - - - - - MAC_APPLICATION_MENU - - - Services - サービス - - - - Hide %1 - %1を隠す - - - - Hide Others - ほかを隠す - - - - Show All - すべてを表示 - - - - Preferences... - 環境設定... - - - - Quit %1 - %1 を終了 - - - - About %1 - %1 について - - - - CloseButton - - - Close Tab - ToolTip - タブを閉じる - - - - PPDOptionsModel - - Name - 名前 - - - Value - - - - - Phonon:: - - - Notifications - 通知 - - - - Music - 音楽 - - - - Video - 動画 - - - - Communication - コミュニケーション - - - - Games - ゲーム - - - - Accessibility - アクセシビリティ - - - - Phonon::AudioOutput - - - <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> - <html>オーディオ再生デバイス<b>%1</b>が動作しません。<br/><b>%2</b>を使用します。</html> - - - - <html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html> - <html>より高いパフォーマンスを得られるオーディオデバイス <b>%1</b> が使用可能となったので、使用します。</html> - - - - Revert back to device '%1' - デバイス '%1' に戻す - - - - Phonon::Gstreamer::Backend - - - Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. - Some video features have been disabled. - 警告: gstreamer0.10-plugins-good がインストールされていません。幾つかの動画機能は使用できません。 - - - - Warning: You do not seem to have the base GStreamer plugins installed. - All audio and video support has been disabled - 警告: GStreamer plugin がインストールされていません。すべての音声、動画機能は使用できません - - - - Phonon::Gstreamer::MediaObject - - - Cannot start playback. - -Check your Gstreamer installation and make sure you -have libgstreamer-plugins-base installed. - 再生できません。 - -Gstreamer と libgstreamer-plugins-base が正しくインストールされているか確認してください。 - - - - A required codec is missing. You need to install the following codec(s) to play this content: %0 - 必要なコーデックがみつかりません。このコンテンツを再生するためには、以下のコーデックをインストールする必要があります: %0 - - - - - - - - - - - Could not open media source. - メディアソースを開くことができません。 - - - - Invalid source type. - 無効なソースの形式です。 - - - - Could not locate media source. - メディアソースがみつかりません。 - - - - Could not open audio device. The device is already in use. - オーディオデバイスを開くことができません。デバイスは既に他のプロセスにより使用されています。 - - - - Could not decode media source. - メディアソースを開くことができません。見つからないか、未知の形式です。 - - - - Phonon::VolumeSlider - - - - - - Volume: %1% - 音量: %1% - - - - - - Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1% - スライダを用いて音量を指定してください。左端が0%、右端が%1%になります - - - - Muted - ミュート - - - - Q3Accel - - - %1, %2 not defined - %1, %2 は定義されていません - - - - Ambiguous %1 not handled - 曖昧な %1 は扱えません - - - - Q3DataTable - - - True - - - - - False - - - - - Insert - 挿入 - - - - Update - アップデート - - - - Delete - 削除 - - - - Q3FileDialog - - - All Files (*.*) - すべてのファイル(*.*) - - - - Open - オープン - - - - Select a Directory - ディレクトリを選択 - - - - Copy or Move a File - ファイルをコピーまたは移動 - - - - Read: %1 - 読み込み: %1 - - - - - Write: %1 - 書き込み: %1 - - - - - Cancel - キャンセル - - - - - - - All Files (*) - すべてのファイル(*) - - - - Name - 名前 - - - - Size - サイズ - - - - Type - タイプ - - - - Date - 日付 - - - - Attributes - 属性 - - - - - &OK - OK(&O) - - - - Look &in: - 検索する場所(&I): - - - - - - File &name: - ファイル名(&N): - - - - File &type: - ファイルタイプ(&T): - - - - Back - 戻る - - - - One directory up - 1つ上のディレクトリへ移動 - - - - Create New Folder - 新しいフォルダの作成 - - - - List View - 一覧表示 - - - - Detail View - 詳細表示 - - - - Preview File Info - ファイル情報のプレビュー - - - - Preview File Contents - ファイルの内容のプレビュー - - - - Read-write - 読み込み/書き込み - - - - Read-only - 読み込み専用 - - - - Write-only - 書き込み専用 - - - - Inaccessible - アクセス不可 - - - - Symlink to File - ファイルへのシンボリックリンク - - - - Symlink to Directory - ディレクトリへのシンボリックリンク - - - - Symlink to Special - スペシャルファイルへのシンボリックリンク - - - - File - ファイル - - - - Dir - ディレクトリ - - - - Special - スペシャル - - - - - - Open - オープン - - - - - Save As - 名前を付けて保存 - - - - - - &Open - オープン(&O) - - - - - &Save - 保存(&S) - - - - &Rename - 名前の変更(&R) - - - - &Delete - 削除(&D) - - - - R&eload - リロード(&E) - - - - Sort by &Name - 名前順にソート(&N) - - - - Sort by &Size - サイズ順にソート(&S) - - - - Sort by &Date - 日付順にソート(&D) - - - - &Unsorted - ソート解除(&U) - - - - Sort - ソート - - - - Show &hidden files - 隠しファイルの表示(&H) - - - - the file - ファイル - - - - the directory - ディレクトリ - - - - the symlink - シンボリックリンク - - - - Delete %1 - %1 の削除 - - - - <qt>Are you sure you wish to delete %1 "%2"?</qt> - <qt>%1 "%2" を削除しますか?</qt> - - - - &Yes - はい(&Y) - - - - &No - いいえ(&N) - - - - New Folder 1 - 新しいフォルダ1 - - - - New Folder - 新しいフォルダ - - - - New Folder %1 - 新しいフォルダ %1 - - - - Find Directory - ディレクトリの検索 - - - - - Directories - ディレクトリ - - - - Directory: - ディレクトリ: - - - - - Error - エラー - - - - %1 -File not found. -Check path and filename. - %1 -ファイルが見つかりませんでした。 -パスおよびファイル名を確認してください。 - - - - Q3LocalFs - - - - Could not read directory -%1 - ディレクトリを読み込めませんでした -%1 - - - - Could not create directory -%1 - ディレクトリを作成できませんでした -%1 - - - - Could not remove file or directory -%1 - ファイルまたはディレクトリを削除できませんでした -%1 - - - - Could not rename -%1 -to -%2 - 名前を変更できませんでした -%1 -を -%2 -へ - - - - Could not open -%1 - 開けませんでした -%1 - - - - Could not write -%1 - 書き込めませんでした -%1 - - - - Q3MainWindow - - - Line up - 整列 - - - - Customize... - カスタマイズ... - - - - Q3NetworkProtocol - - - Operation stopped by the user - 操作がユーザによって停止されました - - - - Q3ProgressDialog - - - - Cancel - キャンセル - - - - Q3TabDialog - - - - OK - OK - - - - Apply - 適用 - - - - Help - ヘルプ - - - - Defaults - デフォルト - - - - Cancel - キャンセル - - - - Q3TextEdit - - - &Undo - 元に戻す(&U) - - - - &Redo - やり直す(&R) - - - - Cu&t - 切り取り(&T) - - - - &Copy - コピー(&C) - - - - &Paste - 貼り付け(&P) - - - - Clear - 消去 - - - - - Select All - すべてを選択 - - - - Q3TitleBar - - - System - システム - - - - Restore up - 元に戻す - - - - Minimize - 最小化 - - - - Restore down - 元に戻す - - - - Maximize - 最大化 - - - - Close - 閉じる - - - - Contains commands to manipulate the window - ウィンドウを操作するコマンドを含みます - - - - Puts a minimized back to normal - 最小化されたウィンドウを元のサイズに戻します - - - - Moves the window out of the way - ウィンドウを隠します - - - - Puts a maximized window back to normal - 最大化されたウィンドウを元のサイズに戻します - - - - Makes the window full screen - ウィンドウをフルスクリーンにします - - - - Closes the window - ウィンドウを閉じます - - - - Displays the name of the window and contains controls to manipulate it - ウィンドウの名前と、ウィンドウを操作するコントロールを表示します - - - - Q3ToolBar - - - More... - その他... - - - - Q3UrlOperator - - - - - The protocol `%1' is not supported - プロトコル '%1' はサポートされていません - - - - The protocol `%1' does not support listing directories - プロトコル '%1' はディレクトリのリスティングをサポートしていません - - - - The protocol `%1' does not support creating new directories - プロトコル '%1' は新しいディレクトリの作成をサポートしていません - - - - The protocol `%1' does not support removing files or directories - プロトコル '%1' はファイルまたはディレクトリの削除をサポートしていません - - - - The protocol `%1' does not support renaming files or directories - プロトコル '%1' はファイルまたはディレクトリの名前の変更をサポートしていません - - - - The protocol `%1' does not support getting files - プロトコル '%1' はファイルの取得をサポートしていません - - - - The protocol `%1' does not support putting files - プロトコル '%1' はファイルの送信をサポートしていません - - - - - The protocol `%1' does not support copying or moving files or directories - プロトコル '%1' はファイルまたはディレクトリのコピーまたは移動をサポートしていません - - - - - (unknown) - (不明) - - - - Q3Wizard - - - &Cancel - キャンセル(&C) - - - - < &Back - < 戻る(&B) - - - - &Next > - 次へ(&N) > - - - - &Finish - 完了(&F) - - - - &Help - ヘルプ(&H) - - - - QAbstractSocket - - - - - - Host not found - ホストが見つかりませんでした - - - - - - Connection refused - 接続が拒否されました - - - - Connection timed out - 接続がタイムアウトしました - - - - - - Operation on socket is not supported - 抽象ソケットクラスでのソケットのエラー - このソケットへのこの操作はサポートされていません - - - - Socket operation timed out - ソケット操作がタイムアウトしました - - - - Socket is not connected - ソケットが接続されていません - - - - Network unreachable - ネットワークへ到達できません - - - - QAbstractSpinBox - - - &Step up - 上(&S) - - - - Step &down - 下(&D) - - - - &Select All - すべてを選択(&S) - - - - QApplication - - - Activate - アクティブに - - - - Activates the program's main window - メインウィンドウをアクティブにする - - - - Executable '%1' requires Qt %2, found Qt %3. - 実行可能ファイル '%1' には Qt %2 が必要です。Qt %3 が見つかりました。 - - - - Incompatible Qt Library Error - 互換性のないQtライブラリエラー - - - - QT_LAYOUT_DIRECTION - 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. - LTR - - - - QAxSelect - - - Select ActiveX Control - ActiveX Control を選択 - - - - OK - OK - - - - &Cancel - キャンセル(&C) - - - - COM &Object: - COM オブジェクト(&O): - - - - QCheckBox - - - Uncheck - 選択解除 - - - - Check - 選択 - - - - Toggle - 反転 - - - - QColorDialog - - - Hu&e: - 色相(&E): - - - - &Sat: - 彩度(&S): - - - - &Val: - 明度(&V): - - - - &Red: - 赤(&R): - - - - &Green: - 緑(&G): - - - - Bl&ue: - 青(&U): - - - - A&lpha channel: - アルファチャネル(&L): - - - - Select Color - - - - - &Basic colors - 基本的なカラー(&B) - - - - &Custom colors - カスタムカラー(&C) - - - &Define Custom Colors >> - カスタムカラーの定義(&D) >> - - - OK - OK - - - Cancel - キャンセル - - - - &Add to Custom Colors - カスタムカラーに追加(&A) - - - Select color - カラーの選択 - - - - QComboBox - - - - Open - オープン - - - - False - - - - - True - - - - - Close - 閉じる - - - - QCoreApplication - - - %1: key is empty - QSystemSemaphore - %1: キーが空です - - - - %1: unable to make key - QSystemSemaphore - %1: キーを作成できません - - - - %1: ftok failed - QSystemSemaphore - %1: fork に失敗しました - - - - QDB2Driver - - - Unable to connect - 接続できません - - - - Unable to commit transaction - トランザクションをコミットできません - - - - Unable to rollback transaction - トランザクションをロールバックできません - - - - Unable to set autocommit - オートコミットを設定できません - - - - QDB2Result - - - - Unable to execute statement - ステートメントを実行できません - - - - Unable to prepare statement - プリペアステートメントを使えません - - - - Unable to bind variable - 変数をバインドできません - - - - Unable to fetch record %1 - レコード %1 をフェッチできません - - - - Unable to fetch next - 次のレコードをフェッチできません - - - - Unable to fetch first - 最初のレコードをフェッチできません - - - - QDateTimeEdit - - - AM - AM - - - - am - am - - - - PM - PM - - - - pm - pm - - - - QDial - - - QDial - ダイヤル - - - - SpeedoMeter - スピードメータ - - - - SliderHandle - スライダハンドル - - - - QDialog - - - What's This? - ヒント? - - - - Done - 終了 - - - - QDialogButtonBox - - - - - OK - OK - - - - Cancel - キャンセル - - - - Apply - 適用 - - - - Ignore - 無視 - - - - Retry - 再試行 - - - - Abort - 中止 - - - - Help - ヘルプ - - - - Save - 保存 - - - - &Save - 保存(&S) - - - - Open - オープン - - - - &Cancel - キャンセル(&C) - - - - Close - 閉じる - - - - &Close - 閉じる(&C) - - - - Reset - リセット - - - - Don't Save - 保存しない - - - - Close without Saving - 保存せずに閉じる - - - - Discard - 変更を破棄 - - - - &Yes - はい(&Y) - - - - Yes to &All - 全てにはい(&A) - - - - &No - いいえ(&N) - - - - N&o to All - 全てにいいえ(&O) - - - - Save All - すべて保存 - - - - Restore Defaults - デフォルトに戻す - - - - &OK - OK(&O) - - - - QDirModel - - - Name - 名前 - - - - Size - サイズ - - - - Date Modified - 更新日 - - - - Kind - Match OS X Finder - 種類 - - - - Type - All other platforms - タイプ - - - - QDockWidget - - - Close - 閉じる - - - - Dock - ドック - - - - Float - フロート - - - - QDoubleSpinBox - - - More - 増やす - - - - Less - 減らす - - - - QErrorMessage - - - Debug Message: - デバッグメッセージ: - - - - Warning: - 警告: - - - - Fatal Error: - 致命的なエラー: - - - - &Show this message again - 次回もこのメッセージを表示する(&S) - - - - &OK - OK(&O) - - - - QFile - - - - Destination file exists - 新しい名前のファイルは既に存在します - - - - Cannot remove source file - 元のファイルを削除できません - - - - Cannot open %1 for input - コピー元ファイル %1 を読めません - - - - Cannot open for output - コピー先のファイルをオープンできません - - - - Failure to write block - 書き込みに失敗しました - - - - Cannot create %1 for output - コピー先として %1 を作成できません - - - - QFileDialog - - - - All Files (*) - すべてのファイル(*) - - - - Directories - ディレクトリ - - - - - Directory: - ディレクトリ: - - - - - File &name: - ファイル名(&N): - - - - - - - &Open - オープン(&O) - - - - - &Save - 保存(&S) - - - - Open - オープン - - - Save - 保存 - - - -File not found. -Please verify the correct file name was given - -ファイルが見つかりません。 -正しいファイル名が入力されたかどうか確認してください - - - - %1 already exists. -Do you want to replace it? - %1 はすでに存在します。 -置き換えますか? - - - - %1 -File not found. -Please verify the correct file name was given. - %1 -ファイルが見つかりません。 -正しいファイル名が入力されたかどうか確認してください。 - - - - My Computer - マイ コンピュータ - - - - - %1 -Directory not found. -Please verify the correct directory name was given. - %1 -ディレクトリが見つかりません。 -正しいディレクトリ名が入力されたかどうか確認してください。 - - - Sort - ソート - - - - &Rename - 名前の変更(&R) - - - - &Delete - 削除(&D) - - - &Reload - リロード(&R) - - - Sort by &Name - 名前順にソート(&N) - - - Sort by &Size - サイズ順にソート(&S) - - - Sort by &Date - 日付順にソート(&D) - - - &Unsorted - ソート解除(&U) - - - - Show &hidden files - 隠しファイルの表示(&H) - - - - - Back - 戻る - - - - - Parent Directory - 親ディレクトリ - - - - - Create New Folder - 新しいフォルダの作成 - - - - - List View - 一覧表示 - - - - - Detail View - 詳細表示 - - - - - Look in: - 検索する場所: - - - - - Files of type: - ファイルの種類: - - - - Drive - ドライブ - - - - - File - ファイル - - - - File Folder - Match Windows Explorer - ファイルフォルダ - - - - Folder - All other platforms - フォルダ - - - - Alias - Mac OS X Finder - エイリアス - - - - Shortcut - All other platforms - ショートカット - - - - Unknown - 不明 - - - - All Files (*.*) - すべてのファイル(*.*) - - - - Save As - 名前を付けて保存 - - - Open - オープン - - - Select a Directory - ディレクトリを選択 - - - - '%1' is write protected. -Do you want to delete it anyway? - '%1' は書き込みが禁止されています。 -本当に削除しますか? - - - - Are sure you want to delete '%1'? - '%1' を本当に削除しますか? - - - - Could not delete directory. - ディレクトリを削除できませんでした。 - - - - Find Directory - ディレクトリの検索 - - - - Show - 表示 - - - - &New Folder - 新しいフォルダ(&N) - - - - - &Choose - 選択(&C) - - - - New Folder - 新しいフォルダ - - - - Recent Places - 履歴 - - - - - Forward - 進む - - - - Remove - 削除 - - - - QFileSystemModel - - - Name - 名前 - - - - Size - サイズ - - - - Date Modified - 更新日 - - - - Kind - Match OS X Finder - 種類 - - - - Type - All other platforms - タイプ - - - - - %1 TB - %1 TB - - - - - %1 GB - %1 GB - - - - - %1 MB - %1 MB - - - - - %1 KB - %1 KB - - - - - %1 bytes - %1 バイト - - - - Invalid filename - 無効なファイル名 - - - - <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. - <b>ファイル名 "%1" は使用できません。</b><p>名前を短くしたり、アクセント記号などを削除して再度試してください。 - - - - My Computer - マイ コンピュータ - - - - Computer - コンピュータ - - - - QFontDatabase - - - - Normal - ここはどう訳すべきか... - 明朝 - - - - - - Bold - ゴシック - - - - - Demi Bold - Demi Bold - - - - - - Black - 太字 - - - - Demi - Demi - - - - - Light - 細字 - - - - - Italic - イタリック - - - - - Oblique - 斜体 - - - - Any - すべて - - - - Latin - ラテン - - - - Greek - ギリシャ - - - - Cyrillic - キリル - - - - Armenian - アルメニア - - - - Hebrew - ヘブライ - - - - Arabic - アラビア - - - - Syriac - シリア - - - - Thaana - ターナ - - - - Devanagari - デーヴァナーガリー - - - - Bengali - ベンガル - - - - Gurmukhi - グルムキー - - - - Gujarati - グジャラート - - - - Oriya - オリヤー - - - - Tamil - タミル - - - - Telugu - テルグ - - - - Kannada - カンナダ - - - - Malayalam - マラヤーラム - - - - Sinhala - シンハラ - - - - Thai - タイ - - - - Lao - ラーオ - - - - Tibetan - チベット - - - - Myanmar - ビルマ - - - - Georgian - グルジア - - - - Khmer - クメール - - - - Simplified Chinese - 簡体中国 - - - - Traditional Chinese - 繁体中国 - - - - Japanese - 日本 - - - - Korean - ハングル - - - - Vietnamese - ベトナム - - - - Symbol - 記号 - - - - Ogham - オガム - - - - Runic - ルーン - - - - QFontDialog - - - &Font - フォント(&F) - - - - Font st&yle - フォントスタイル(&Y) - - - - &Size - サイズ(&S) - - - - Effects - 文字飾り - - - - Stri&keout - 取り消し線(&K) - - - - &Underline - 下線(&U) - - - - Sample - サンプル - - - - Wr&iting System - 言語(&I) - - - - - Select Font - フォントの選択 - - - - QFtp - - - - Not connected - 未接続です - - - - - Host %1 not found - ホスト %1 が見つかりませんでした - - - - - Connection refused to host %1 - ホスト %1 への接続が拒否されました - - - - Connection timed out to host %1 - ホスト %1 への接続がタイムアウトしました - - - - - - Connected to host %1 - ホスト %1 に接続しました - - - - - Connection refused for data connection - データ接続のための接続が拒否されました - - - - - - - Unknown error - 不明なエラー - - - - - Connecting to host failed: -%1 - ホストへの接続に失敗しました: -%1 - - - - - Login failed: -%1 - ログインに失敗しました: -%1 - - - - - Listing directory failed: -%1 - ディレクトリのリストに失敗しました: -%1 - - - - - Changing directory failed: -%1 - ディレクトリの変更に失敗しました: -%1 - - - - - Downloading file failed: -%1 - ファイルのダウンロードに失敗しました: -%1 - - - - - Uploading file failed: -%1 - ファイルのアップロードに失敗しました: -%1 - - - - - Removing file failed: -%1 - ファイルの削除に失敗しました: -%1 - - - - - Creating directory failed: -%1 - ディレクトリの作成に失敗しました: -%1 - - - - - Removing directory failed: -%1 - ディレクトリの削除に失敗しました: -%1 - - - - - - Connection closed - 接続が閉じられました - - - - Host %1 found - ホスト %1 が見つかりました - - - - Connection to %1 closed - %1 への接続が閉じられました - - - - Host found - ホストが見つかりました - - - - Connected to host - ホストに接続しました - - - - QHostInfo - - - Unknown error - 不明なエラー - - - - QHostInfoAgent - - - - - - - - - - Host not found - ホストが見つかりません - - - - - - - Unknown address type - 不明なアドレス型です - - - - - - Unknown error - 不明なエラー - - - - QHttp - - - HTTPS connection requested but SSL support not compiled in - HTTPSによる接続が要求されましたが、SSLのサポートがコンパイル時に組み込まれていないため、接続できません - - - - - - - Unknown error - 不明なエラー - - - - - Request aborted - 要求が中止されました - - - - - No server set to connect to - 接続が設定されているサーバがありません - - - - - Wrong content length - コンテンツの長さが正しくありません - - - - - Server closed connection unexpectedly - サーバの接続が予期せず閉じられました - - - - Unknown authentication method - 非対応の認証方法が要求されました - - - - Error writing response to device - デバイスへの書き込み時にエラーが発生しました - - - - - Connection refused - 接続が拒否されました - - - - - - Host %1 not found - ホスト %1 が見つかりませんでした - - - - - - - HTTP request failed - HTTP要求に失敗しました - - - - - Invalid HTTP response header - 無効なHTTP応答ヘッダです - - - - - - - Invalid HTTP chunked body - 無効なHTTPチャンクドボディです - - - - Host %1 found - ホスト %1 が見つかりました - - - - Connected to host %1 - ホスト %1 に接続しました - - - - Connection to %1 closed - %1 への接続が閉じられました - - - - Host found - ホストが見つかりました - - - - Connected to host - ホストに接続しました - - - - - Connection closed - 接続が閉じられました - - - - Proxy authentication required - プロキシーの認証が必要です - - - - Authentication required - 認証が必要です - - - - Connection refused (or timed out) - 接続が拒否されたか、タイムアウトしました - - - - Proxy requires authentication - プロキシーの認証が必要です - - - - Host requires authentication - ホストの認証が必要です - - - - Data corrupted - データが破損しています - - - - Unknown protocol specified - 未対応のプロトコルです - - - - SSL handshake failed - SSLのハンドシェークに失敗しました - - - - QHttpSocketEngine - - - Did not receive HTTP response from proxy - プロキシーからHTTPレスポンスを受信できませんでした - - - - Error parsing authentication request from proxy - プロキシーからの認証要求のパースに失敗しました - - - - Authentication required - 認証が必要です - - - - Proxy denied connection - プロキシーが接続を拒否しました - - - - Error communicating with HTTP proxy - HTTP プロキシーとの通信にて、エラーが発生しました - - - - Proxy server not found - プロキシーサーバが見つかりません - - - - Proxy connection refused - プロキシーが接続を拒否しました - - - - Proxy server connection timed out - プロキシーとの接続がタイムアウトしました - - - - Proxy connection closed prematurely - プロキシーの接続が通信の終了前に切断されました - - - - QIBaseDriver - - - Error opening database - データベースのオープンでエラーが発生しました - - - - Could not start transaction - トランザクションを開始できませんでした - - - - Unable to commit transaction - トランザクションをコミットできません - - - - Unable to rollback transaction - トランザクションをロールバックできません - - - - QIBaseResult - - - Unable to create BLOB - バイナリラージオブジェクトを作成できません - - - - Unable to write BLOB - バイナリラージオブジェクトを書き込めません - - - - Unable to open BLOB - バイナリラージオブジェクトをオープンできません - - - - Unable to read BLOB - バイナリラージオブジェクトを読み込めません - - - - - Could not find array - 配列が見つかりませんでした - - - - Could not get array data - 配列データを取得できませんでした - - - - Could not get query info - クエリー情報を取得できませんでした - - - - Could not start transaction - トランザクションを開始できませんでした - - - - Unable to commit transaction - トランザクションをコミットできません - - - - Could not allocate statement - ステートメントの領域を確保できませんでした - - - - Could not prepare statement - プリペアステートメントを使えませんでした - - - - - Could not describe input statement - INPUT ステートメントの情報を取得できませんでした - - - - Could not describe statement - ステートメントの情報を取得できませんでした - - - - Unable to close statement - ステートメントをクローズできません - - - - Unable to execute query - クエリーを実行できません - - - - Could not fetch next item - 次のレコードをフェッチできませんでした - - - - Could not get statement info - ステートメントの情報を取得できませんでした - - - - QIODevice - - - Permission denied - 許可されていません - - - - Too many open files - 開かれたファイルが多すぎます - - - - No such file or directory - そのようなファイルやディレクトリはありません - - - - No space left on device - デバイスの残り容量がありません - - - - Unknown error - 不明なエラー - - - - QInputContext - - - XIM - XIM - - - - XIM input method - XIM 入力メソッド - - - - Windows input method - Windows 入力メソッド - - - - Mac OS X input method - Mac OS X 入力メソッド - - - - QInputDialog - - - Enter a value: - 数値を入力: - - - - QLibrary - - - Could not mmap '%1': %2 - '%1' をメモリにマッピングできませんでした: %2 - - - - Plugin verification data mismatch in '%1' - '%1' でプラグイン検証データが一致しません - - - - Could not unmap '%1': %2 - '%1' のマッピングを解除できませんでした: %2 - - - - The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] - プラグイン '%1' は、互換性のない Qt ライブラリを使用しています。(%2.%3.%4) [%5] - - - - The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" - プラグイン '%1' は、互換性のない Qt ライブラリを使用しています。ビルドキー "%2" が必要ですが、"%3" しかありません - - - - Unknown error - 不明なエラー - - - QLibrary::load_sys: Cannot load %1 (%2) - QLibrary::load_sys: %1 をロードできません (%2) - - - QLibrary::unload_sys: Cannot unload %1 (%2) - QLibrary::unload_sys: %1 をアンロードできません (%2) - - - QLibrary::resolve_sys: Symbol "%1" undefined in %2 (%3) - QLibrary::resolve_sys: シンボル "%1" は %2 で定義されていません (%3) - - - - - The shared library was not found. - 共有ライブラリがみつかりません。 - - - - The file '%1' is not a valid Qt plugin. - ファイル '%1' は Qt プラグインではありません。 - - - - The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) - プラグイン '%1' はこの Qt と互換性のないライブラリを使用しています。 (デバック版とリリース版のライブラリを同時に使用することはできません) - - - - - Cannot load library %1: %2 - ライブラリ '%1' を読み込むことができません: %2 - - - - - Cannot unload library %1: %2 - ライブラリ %1 を解放することができません: %2 - - - - - Cannot resolve symbol "%1" in %2: %3 - '%2'に含まれる識別子 "%1" を解決できません: %3 - - - - QLineEdit - - - &Undo - 元に戻す(&U) - - - - &Redo - やり直す(&R) - - - - Cu&t - 切り取り(&T) - - - - &Copy - コピー(&C) - - - - &Paste - 貼り付け(&P) - - - - Delete - 削除 - - - - Select All - すべてを選択 - - - - QLocalServer - - - - %1: Name error - %1: 名前の解決に失敗 - - - - %1: Permission denied - %1: 許可されていません - - - - %1: Address in use - %1: アドレスは既に使用されています - - - - %1: Unknown error %2 - %1: 未知のエラー %2 - - - - QLocalSocket - - - - %1: Connection refused - %1: 接続が拒否されました - - - - - %1: Remote closed - %1: リモートにより接続が閉じられました - - - - - - - %1: Invalid name - %1: 無効な名前です - - - - - %1: Socket access error - %1: ソケットアクセスのエラーです - - - - - %1: Socket resource error - %1: ソケットリソースのエラーです - - - - - %1: Socket operation timed out - %1: ソケット操作がタイムアウトしました - - - - - %1: Datagram too large - %1: データグラムが大きすぎます - - - - - - %1: Connection error - %1: 接続のエラーが発生しました - - - - - %1: The socket operation is not supported - %1: そのソケット操作はサポートされていません - - - - %1: Unknown error - %1: 未知のエラーです - - - - - %1: Unknown error %2 - %1: 未知のエラー %2 - - - - QMYSQLDriver - - - Unable to open database ' - データベースをオープンできません ' - - - - Unable to connect - 接続できません - - - - Unable to begin transaction - トランザクションを開始できません - - - - Unable to commit transaction - トランザクションをコミットできません - - - - Unable to rollback transaction - トランザクションをロールバックできません - - - - QMYSQLResult - - - Unable to fetch data - データをフェッチできません - - - - Unable to execute query - クエリーを実行できません - - - - Unable to store result - 実行結果を記録できません - - - - - Unable to prepare statement - プリペアステートメントを使えません - - - - Unable to reset statement - ステートメントをリセットできません - - - - Unable to bind value - 値をバインドできません - - - - Unable to execute statement - ステートメントを実行できません - - - - - Unable to bind outvalues - 出力値をバインドできません - - - - Unable to store statement results - ステートメントの実行結果を記録できません - - - - Unable to execute next query - 次のクエリーを実行できません - - - - Unable to store next result - 次の結果を記録できません - - - - QMdiArea - - - (Untitled) - (タイトルなし) - - - - QMdiSubWindow - - - %1 - [%2] - %1 - [%2] - - - - Close - 閉じる - - - - Minimize - 最小化 - - - - Restore Down - 元に戻す - - - - &Restore - 元に戻す(&R) - - - - &Move - 移動(&M) - - - - &Size - サイズ(&S) - - - - Mi&nimize - 最小化(&N) - - - - Ma&ximize - 最大化(&X) - - - - Stay on &Top - 常に手前に表示(&T) - - - - &Close - 閉じる(&C) - - - - - [%1] - - [%1] - - - - Maximize - 最大化 - - - - Unshade - たぶん選択・非選択状態のウィンドウのことだと思うけど。fvwmなどのx11で使われている用語 - 非選択 - - - - Shade - 選択 - - - - Restore - 元に戻す - - - - Help - ヘルプ - - - - Menu - メニュー - - - - QMenu - - - - Close - 閉じる - - - - - Open - オープン - - - - - - Execute - 実行 - - - - QMenuBar - - About Qt - Qt について - - - - QMessageBox - - - Help - ヘルプ - - - - - - - OK - OK - - - <h3>About Qt</h3>%1<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 Qtopia Core.</p><p>Qt is a Trolltech product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p> - <h3>Qt について</h3>%1 -<p>QtはクロスプラットフォームのC++ アプリケーション開発ツールキットです。</p> -<p>Qt は MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, 商用のUnix派生版でソースコード互換を実現します。また、Qtopia Coreのように、内蔵デバイスでも利用可能です。</p> -<p>QtはTrolltechの商品です。詳細は<tt>http://qt.nokia.com/</tt>を参照してください。</p> - - - <p>This program uses Qt version %1.</p> - <p>このプログラムは Qt バージョン %1 を使用しています。</p> - - - <p>This program uses Qt Open Source Edition version %1.</p><p>Qt Open Source Edition is intended for the development of Open Source applications. You need a commercial Qt license for development of proprietary (closed source) applications.</p><p>Please see <a href="http://qt.nokia.com/company/model/">qt.nokia.com/company/model/</a> for an overview of Qt licensing.</p> - <p>このプログラムは Qt オープンソース版バージョン %1 を使用しています。</p> -<p>Qt オープンソース版はオープンソースのアプリケーションの開発用です。ソースコードを公開しない商用アプリケーションを開発するには商用版のライセンスが必要です。</p><p>Qtのライセンスについては<tt>http://qt.nokia.com/company/model.html</tt>を参照してください。</p> - - - - About Qt - Qt について - - - - Show Details... - 詳細を表示... - - - - Hide Details... - 詳細を隠す... - - - - <h3>About Qt</h3><p>This program uses Qt version %1.</p><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>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> - <h3>Qtについて</h3> -<p>このプログラムは Qt バージョン %1 を使用しています。</p> -<p>Qt は、クロスプラットホームのアプリケーション開発に使用される C++ のツールキットです。</p> -<p>Qt は、 MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, そして多数の Unix 系OS環境に対して、単一のソースからバイナリを生成します。 -また、 Linux および Windows CE を元とした組み込み環境にも対応しています。</p> -<p>Qt は様々なユーザの要望に応じるために、3つの異なるライセンスで提供されています。</p> -<p> -Qt 商用ライセンスは、プロプライエタリまたは商用ソフトウェアに適用できます。 -この場合は、他者とのソースコードの共有を拒否し、 GNU LGP バージョン 2.1 または GNU GPL バージョン 3.0 を許容できないソフトウェアにおいて Qt を使用できます。 -</p> -<p> -Qt GNU LGPL バージョン 2.1 ライセンスは、プロプライエタリまたはオープンソースソフトウェアに適用できます。 -この場合は、 GNU LGPL バージョン 2.1 に従う必要があります。 -</p> -<p> -Qt GNU General Public License バージョン 3.0 ライセンスは、GNU GPL バージョン 3.0 または GPL 3.0 と互換性のあるライセンスを採用しているソフトウェアに適用されます。 -この場合は、GNU GPL バージョン 3.0 に従う必要があります。 -</p> -<p> -ライセンスの詳細については、<a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> -を参照してください。</p> -<p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p> -<p>Qt は Nokia の製品です。詳細については<a href="http://qt.nokia.com/">qt.nokia.com</a> を参照してください。</p> -<p> -訳注: ライセンスはここにある翻訳は参考のためのものであり、オリジナルの(英語の)ものが正式なものとなります。 -</p> - - - - QMultiInputContext - - - Select IM - インプットメソッドを選択 - - - - QMultiInputContextPlugin - - - Multiple input method switcher - 複数のインプットメソッドを切り替え - - - - Multiple input method switcher that uses the context menu of the text widgets - テキストウィジェットのコンテキストメニューを使った複数のインプットメソッドの切り替えです - - - - QNativeSocketEngine - - - Unable to initialize non-blocking socket - 非ブロック型ソケットを初期化できません - - - - Unable to initialize broadcast socket - ブロードキャストソケットを初期化できません - - - - Attempt to use IPv6 socket on a platform with no IPv6 support - IPv6 がサポートされていないプラットフォームで IPv6 ソケットを使用しようとしています - - - - The remote host closed the connection - リモートホストは接続を閉じました - - - - Network operation timed out - ネットワーク操作がタイムアウトしました - - - - Out of resources - リソースが足りません - - - - Unsupported socket operation - サポートされていないソケット操作です - - - - Protocol type not supported - プロトコル型がサポートされていません - - - - Invalid socket descriptor - 無効なソケット記述子です - - - - Host unreachable - ホストへ到達できません - - - - Network unreachable - ネットワークへ到達できません - - - - Permission denied - 許可されていません - - - - Connection timed out - 接続がタイムアウトしました - - - - Connection refused - 接続を拒否されました - - - - The bound address is already in use - バインドアドレスは既に使われています - - - - The address is not available - そのアドレスは使用できません - - - - The address is protected - そのアドレスへのアクセス権がありません - - - - Datagram was too large to send - データグラムが大き過ぎて送信できませんでした - - - - Unable to send a message - メッセージを送信できません - - - - Unable to receive a message - メッセージを受信できません - - - - Unable to write - 書き込みができません - - - - Network error - ネットワークエラー - - - - Another socket is already listening on the same port - 別のソケットが同じポートで既に待ち受けています - - - - Operation on non-socket - 非ソケットに対する操作です - - - - Unknown error - 不明なエラー - - - - The proxy type is invalid for this operation - このプロキシーは、この操作に対応していません - - - - QNetworkAccessCacheBackend - - - Error opening %1 - オープンのエラー %1 - - - - QNetworkAccessDebugPipeBackend - - - Write error writing to %1: %2 - %1 への書き込み時にエラーが発生しました: %2 - - - - QNetworkAccessFileBackend - - - Request for opening non-local file %1 - 非ローカルファイル %1 をオープンするよう要求されましたが、ローカルファイルのみオープンできます - - - - Error opening %1: %2 - %1 をオープンする時にエラーが発生しました: %2 - - - - Write error writing to %1: %2 - %1 への書き込み時にエラーが発生しました: %2 - - - - Cannot open %1: Path is a directory - %1 をオープンできません。指定されたパスはディレクトリです - - - - Read error reading from %1: %2 - %1 を読み込み時にエラーが発生しました: %2 - - - - QNetworkAccessFtpBackend - - - No suitable proxy found - 適切なプロキシーがみつかりません - - - - Cannot open %1: is a directory - %1 をオープンできません。指定されたパスはディレクトリです - - - - Logging in to %1 failed: authentication required - %1 へのログインに失敗しました。認証が必要です - - - - Error while downloading %1: %2 - %1 をダウンロード中にエラーが発生しました: %2 - - - - Error while uploading %1: %2 - %1 をアップロード中にエラーが発生しました: %2 - - - - QNetworkAccessHttpBackend - - - No suitable proxy found - 適切なプロキシーがみつかりません - - - - QNetworkReply - - - Error downloading %1 - server replied: %2 - %1 をダウンロード中にエラーが発生しました。サーバの返答: %2 - - - - Protocol "%1" is unknown - プロトコル "%1" はサポートされていません - - - - QNetworkReplyImpl - - - - Operation canceled - 操作はキャンセルされました - - - - QOCIDriver - - - Unable to initialize - QOCIDriver - 初期化できません - - - - Unable to logon - ログオンできません - - - - Unable to begin transaction - トランザクションを開始できません - - - - Unable to commit transaction - トランザクションをコミットできません - - - - Unable to rollback transaction - トランザクションをロールバックできません - - - - QOCIResult - - - - - Unable to bind column for batch execute - バッチ処理用にフィールドをバインドできません - - - - Unable to execute batch statement - バッチステートメントを実行できません - - - - Unable to goto next - 次のレコードへ進めません - - - - Unable to alloc statement - ステートメントの領域を確保できません - - - - Unable to prepare statement - プリペアステートメントを使えません - - - - Unable to bind value - 値をバインドできません - - - Unable to execute select statement - SELECT ステートメントを実行できません - - - - Unable to execute statement - ステートメントを実行できません - - - - QODBCDriver - - - Unable to connect - 接続できません - - - - Unable to connect - Driver doesn't support all needed functionality - 接続できません - ドライバは全ての必要な機能をサポートしていません - - - - Unable to disable autocommit - オートコミットを無効にできません - - - - Unable to commit transaction - トランザクションをコミットできません - - - - Unable to rollback transaction - トランザクションをロールバックできません - - - - Unable to enable autocommit - オートコミットを有効にできません - - - - QODBCResult - - - - Unable to execute statement - ステートメントを実行できません - - - - Unable to fetch next - 次のレコードをフェッチできません - - - - Unable to prepare statement - プリペアステートメントを使えません - - - - Unable to bind variable - 変数をバインドできません - - - - - QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration - QODBCResult::reset: ステートメントの属性として 'SQL_CURSOR_STATUS' を設定できません。ODBC ドライバの構成をチェックしてください - - - - - - Unable to fetch last - リストを取得できません - - - - Unable to fetch - フェッチできません - - - - Unable to fetch first - 最初のレコードをフェッチできません - - - - Unable to fetch previous - 前のレコードをフェッチできません - - - - QObject - - False - False - - - True - True - - - - Home - ホーム - - - - Operation not supported on %1 - %1 ではこの操作はサポートされていません - - - - Invalid URI: %1 - 無効なURIです: %1 - - - - Socket error on %1: %2 - %1 のソケットにおいてエラーが発生しました: %2 - - - - Remote host closed the connection prematurely on %1 - リモートホスト %1 との接続が通信の終了前に切断されました - - - - - No host name given - ホストネームが与えられていません - - - - QPPDOptionsModel - - - Name - 名前 - - - - Value - - - - - QPSQLDriver - - - Unable to connect - 接続できません - - - - Could not begin transaction - トランザクションを開始できませんでした - - - - Could not commit transaction - トランザクションをコミットできませんでした - - - - Could not rollback transaction - トランザクションをロールバックできませんでした - - - - Unable to subscribe - subscribe できません - - - - Unable to unsubscribe - unsubscribe できません - - - - QPSQLResult - - - Unable to create query - クエリーを作成できません - - - - Unable to prepare statement - プリペアステートメントを使えません - - - - QPageSetupWidget - - - Centimeters (cm) - センチメートル (cm) - - - - Millimeters (mm) - ミリメートル (mm) - - - - Inches (in) - インチ (in) - - - - Points (pt) - ポイント (pt) - - - - Form - 書式設定 - - - - Paper - 用紙 - - - - Page size: - ページサイズ: - - - - Width: - 幅: - - - - Height: - 高さ: - - - - Paper source: - 給紙装置: - - - - Orientation - 印刷方向 - - - - Portrait - 縦 (ポートレート) - - - - Landscape - 横 (ランドスケープ) - - - - Reverse landscape - 横 反転 (リバースランドスケープ) - - - - Reverse portrait - 縦 反転 (リバースポートレート) - - - - Margins - 余白 - - - - top margin - 上端余白 - - - - left margin - 左端余白 - - - - right margin - 右端余白 - - - - bottom margin - 下端余白 - - - - QPatternist::QtXmlPatterns - - - An %1-attribute with value %2 has already been declared. - 属性 %1 の値 %2 は既に宣言されています。 - - - - An %1-attribute must have a valid %2 as value, which %3 isn't. - 属性 %1 の値は %2 の型でなければなりませんが、 %3 が指定されました。 - - - - %1 is an unsupported encoding. - %1 はサポートされていないエンコーディングです。 - - - - %1 contains octets which are disallowed in the requested encoding %2. - エンコーディング %2 では許可されていないオクテットが %1 に含まれています。 - - - - The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. - %2 で使用されているエンコード %3 では、コードポイント %1 は有効な XML 表現ではありません。 - - - - Network timeout. - ネットワーク接続がタイムアウトしました。 - - - - Element %1 can't be serialized because it appears outside the document element. - エレメント %1 はシリアライズできません。このドキュメントの範囲を越えるエレメントを含んでいます。 - - - - Attribute %1 can't be serialized because it appears at the top level. - 属性 %1 はシリアライズできません。トップレベルに現れているためです。 - - - - Year %1 is invalid because it begins with %2. - %1 年はむこうです。%2 で始まっています。 - - - - Day %1 is outside the range %2..%3. - %1 日は、有効な範囲 %2..%3 を逸脱しています。 - - - - Month %1 is outside the range %2..%3. - %1 月は、有効な範囲 %2..%3 を逸脱しています。 - - - - Overflow: Can't represent date %1. - オーバーフロー: 日付 %1 を再現できません。 - - - - Day %1 is invalid for month %2. - %2 月には、%1 日は存在しません。 - - - - Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; - 24:%1:%2.%3 は無効です。24時0分0秒のみ使用できます - - - - Time %1:%2:%3.%4 is invalid. - 時刻 %1時%2分%3.%4秒は無効です。 - - - - Overflow: Date can't be represented. - オーバーフロー: 日付を再現できません。 - - - - - At least one component must be present. - 年、月、日のうちいずれかを指定しなければなりません。 - - - - At least one time component must appear after the %1-delimiter. - %1 の後には、時刻を指定しなければなりません。 - - - - No operand in an integer division, %1, can be %2. - ゼロ除算? NaN? - 整数の除算のためのオペランドが不足しています。%1 は %2 でなければなりません。 - - - - The first operand in an integer division, %1, cannot be infinity (%2). - 整数の除算における最初のオペランド %1 を認識できません (%2)。 - - - - The second operand in a division, %1, cannot be zero (%2). - 整数の除算における二つ目のオペランド %1 はゼロであってはいけまん(%2)。 - - - - %1 is not a valid value of type %2. - %1 は、%2 の型に対して有効な値ではありません。 - - - - When casting to %1 from %2, the source value cannot be %3. - %2 から %1 への型変換に際しては、値 %3 は有効な値ではありません。 - - - - Integer division (%1) by zero (%2) is undefined. - 整数の除算において %1 をゼロ (%2) で割った結果は定義されていません。 - - - - Division (%1) by zero (%2) is undefined. - 除算において %1 をゼロ (%2) で割った結果は定義されていません。 - - - - Modulus division (%1) by zero (%2) is undefined. - 剰余を求めるに際し、%1 をゼロ (%2) で除した結果は定義されていません。 - - - - - Dividing a value of type %1 by %2 (not-a-number) is not allowed. - 型 %1 を非数 %2 (NaN) で除すことはできません。 - - - - Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. - 型 %1 を%2 または %3 (正または負のゼロ) で除することはできません。 - - - - Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. - 型 %1 を %2 または %3 (正または負のゼロ)で乗ずることはできません。 - - - - A value of type %1 cannot have an Effective Boolean Value. - 型 %1 は有効な論理型(bool)ではありません。 - - - - Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. - ?? - 論理型は、論理型以外の複数の値からなる計算によって求めることはできません。 - - - - Value %1 of type %2 exceeds maximum (%3). - 型 %2 の値 %1 は、上限 (%3) を越えています。 - - - - Value %1 of type %2 is below minimum (%3). - 型 %2 の値 %1 は、下限 (%3) を越えています。 - - - - A value of type %1 must contain an even number of digits. The value %2 does not. - 型 %1 の値は偶数個の十進数文字を必要とします。しかし、%2 はそうではありません。 - - - - %1 is not valid as a value of type %2. - 型 %2 に対して、値 %1 は有効ではありません。 - - - - Ambiguous rule match. - 曖昧なルールにマッチしました。 - - - - Operator %1 cannot be used on type %2. - 型 %2 に対して、オペレータ %1 は使用できません。 - - - - Operator %1 cannot be used on atomic values of type %2 and %3. - アトミックな型 %2 と %3 に対して、オペレータ %1 は使用できません。 - - - - The namespace URI in the name for a computed attribute cannot be %1. - computed attrib. ってなんてやくすのが適当かな。 - 結合された属性に対する名前空間のURIとして、%1 を使用することはできません。 - - - - The name for a computed attribute cannot have the namespace URI %1 with the local name %2. - 結合された属性の名前空間URI %1 は、ローカルな名前である %2 と併用できません。 - - - - Type error in cast, expected %1, received %2. - 型変換時のエラーです。望んでいた %1 ではなく、%2 になりました。 - - - - When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed. - %1 またはそれを継承している型への型変換においては、元の値の型は同じ型か、リテラルな文字列である必要があります。型 %2 は許可されていません。 - - - - No casting is possible with %1 as the target type. - 目標とする型に %1 を型変換することはできません。 - - - - It is not possible to cast from %1 to %2. - 型 %1 を型 %2 に型変換することはできません。 - - - - Casting to %1 is not possible because it is an abstract type, and can therefore never be instantiated. - 型 %1 への型変換はできません。抽象型であり、インスタンス化することができないからです。 - - - - It's not possible to cast the value %1 of type %2 to %3 - 型 %2 の値 %1 を、型 %3 に型変換することはできません - - - - Failure when casting from %1 to %2: %3 - %1 を %2 に型変換することができません: %3 - - - - A comment cannot contain %1 - コメントが %1 を含むことはできません - - - - A comment cannot end with a %1. - コメントは %1 で終了することはできません。 - - - - No comparisons can be done involving the type %1. - 型 %1 に対して比較を行うことはできません。 - - - - Operator %1 is not available between atomic values of type %2 and %3. - オペレータ %1 は、アトミックな型である %2 と %3 には適用できません。 - - - - In a namespace constructor, the value for a namespace cannot be an empty string. - 名前空間のスントラクトにおいて、空白の文字列を名前空間の値として使用することはできません。 - - - - The prefix must be a valid %1, which %2 is not. - プレフィックスは %1 でなければなりません。%2 は無効です。 - - - - The prefix %1 cannot be bound. - プレフィックス %1 はバウンドできません。 - - - - Only the prefix %1 can be bound to %2 and vice versa. - プレフィックス %1 は、%2 にのみバウンドできます。逆も同じです。 - - - - An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. - ドキュメントノードの子として属性ノードを指定することはできません。属性 %1 は誤った場所にあります。 - - - - Circularity detected - 循環を検出しました - - - - A library module cannot be evaluated directly. It must be imported from a main module. - ライブラリモジュールを直接評価することはできません。メインモジュールからインポートする必要があります。 - - - - No template by name %1 exists. - テンプレート名 %1 は存在しません。 - - - - A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. - 型 %1 は述部として使用できません。数値型か、論理型である必要があります。 - - - - A positional predicate must evaluate to a single numeric value. - positional? - 述部は評価されたとき、単一の数値になるようにしなければなりません。 - - - - The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid. - ターゲットとしている名前は、%1 であってはなりません。%2 は無効です。 - - - - %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. - %1 はターゲットとして無効です。%2 である必要があります。例えば "%3" のようにです。 - - - - The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. - バスの末端であるリーフは、単一のノードかアトミックな値である必要があります。複数の型の組み合わせであってはいけません。 - - - - The data of a processing instruction cannot contain the string %1 - 処理中のデータは、以下の文字列を含んでいてはなりません: %1 - - - - No namespace binding exists for the prefix %1 - プレフィックス %1 にバインドされたネームスペースがありません - - - - No namespace binding exists for the prefix %1 in %2 - %2 におけるプレフィックス %1 にバインディングされたネームスペースが存在しません - - - - - %1 is an invalid %2 - 型 %2 に対し、値 %1 は無効です - - - - The parameter %1 is passed, but no corresponding %2 exists. - パラメータ %1 を処理しました。しかし、対応する %2 が存在しません。 - - - - The parameter %1 is required, but no corresponding %2 is supplied. - パメータ %1 が必要です。しかし、対応する %2 がありません。 - - - - %1 takes at most %n argument(s). %2 is therefore invalid. - - %1 は、最大で %n 個の引数をとることができます。%2 は無効です。 - - - - - %1 requires at least %n argument(s). %2 is therefore invalid. - - %1 は、少くとも %n 個の引数を必要とします。%2 は無効です。 - - - - - The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. - %1 への最初の引数は、型 %2 であってはなりません。数値型、xs:yerMonthDuration、xs:dayTimeDurationである必要があります。 - - - - The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. - %1 への最初の引数は、型 %2 であってはなりません。%3, %4, %5 のいずれかである必要があります。 - - - - The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. - %1 への二つ目の引数は、型 %2 であってはなりません。%3, %4, %5 のいずれかである必要があります。 - - - - %1 is not a valid XML 1.0 character. - %1 は XML 1.0 において有効な文字ではありません。 - - - - The first argument to %1 cannot be of type %2. - %1 への最初の引数は、型 %2 であってはなりません。 - - - - The root node of the second argument to function %1 must be a document node. %2 is not a document node. - %1 への二つ目の引数のルートノードは、ドキュメントノードでなければなりません。しかし、%2 はドキュメントノードではありません。 - - - - If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. - ゾーンオフセットってなに? xmlにそんなのあったっけ? - もし二つの値がゾーンオフセットをもつ場合、両者は同じゾーンオフセットでなければなりません。%1 と %2 は同一ではありません。 - - - - %1 was called. - %1 が呼ばれました。 - - - - %1 must be followed by %2 or %3, not at the end of the replacement string. - %1 の後には、%2 か %3 が続かなければなりません。 - - - - In the replacement string, %1 must be followed by at least one digit when not escaped. - 置換操作において、%1 には少くとも一文字以上の数値が続く必要があります(エスケープされている場合を除く)。 - - - - In the replacement string, %1 can only be used to escape itself or %2, not %3 - 置換操作において、%1 はそれ自身または %2 をエスケープする為にのみ使用できます。%3 に対しては使用できません - - - - %1 matches newline characters - %1 は改行文字(列)にマッチしました - - - - %1 and %2 match the start and end of a line. - %1 と %2 は、行の先頭と末尾にマッチしました。 - - - - Matches are case insensitive - マッチは大文字小文字を区別しません - - - - Whitespace characters are removed, except when they appear in character classes - CDATA? - 空白文字は削除されました。ただし、キャラクタークラスに属するものは除きます - - - - %1 is an invalid regular expression pattern: %2 - %1 は有効な正規表現ではありません。: %2 - - - - %1 is an invalid flag for regular expressions. Valid flags are: - %1 は正規表現において無効なフラグです。使用可能なフラグは次の通りです: - - - - If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. - もし、最初の引数が空白からなる文字列か、長さが0 (名前空間をともなわない)である場合、プレフィックスを指定することはできません。しかし、プレフィックスとして %1 が指定されています。 - - - - It will not be possible to retrieve %1. - %1 を取得することはできないかもしれません。 - - - - The default collection is undefined - デフォルトのコレクションが定義されていません - - - - %1 cannot be retrieved - %1 を取得できません - - - - The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). - つまり、空白の文字です、はどうでもいいよね。 - 正規化された表現 %1 はサポートされていません。サポートされている表現は、%2, %3, %4, %5 のみです。 - - - - A zone offset must be in the range %1..%2 inclusive. %3 is out of range. - ゾーンオフセットは、%1 から %2 の範囲である必要があります(境界を含む)。%3 は範囲外です。 - - - - %1 is not a whole number of minutes. - %1 は、分を現す値ではありません。 - - - - The URI cannot have a fragment - この URI はフラグメントをもつことはできません - - - - Required cardinality is %1; got cardinality %2. - カーディナリティ %1 が必要です。%2 ではありません。 - - - - The item %1 did not match the required type %2. - アイテム %1 は、要求された型 %2 にマッチしません。 - - - - Attribute %1 cannot appear on the element %2. Only the standard attributes can appear. - エレメント %2 に属性 %1 を指定することはできません。標準の属性のみが許可されています。 - - - - Attribute %1 cannot appear on the element %2. Only %3 is allowed, and the standard attributes. - エレメント %2 に属性 %1 を指定することはできません。%3 と標準の属性のみが許可されています。 - - - - Attribute %1 cannot appear on the element %2. Allowed is %3, %4, and the standard attributes. - エレメント %2 に属性 %1 を指定することはできません。%3, %4 と標準の属性のみが許可されています。 - - - - Attribute %1 cannot appear on the element %2. Allowed is %3, and the standard attributes. - エレメント %2 に %1 は指定できません。%3 と標準の属性のみが指定できます。 - - - - XSL-T attributes on XSL-T elements must be in the null namespace, not in the XSL-T namespace which %1 is. - XSLT エレメントに対するXSLT属性は、名前空間がnullでなければなりません。%1 は使用できません。 - - - - The attribute %1 must appear on element %2. - 属性 %1 は、エレメント %2 にのみ記述できます。 - - - - The element with local name %1 does not exist in XSL-T. - ローカル名 %1 のエレメントは、XSLTに存在しません。 - - - - The variable %1 is unused - 値 %1 は使用されませんでした - - - - A construct was encountered which only is allowed in XQuery. - XQuery でのみ許可されている construct に遭遇しました。 - - - - - %1 is an unknown schema type. - %1 はサポートされていないスキーマのタイプです。 - - - - A template by name %1 has already been declared. - テンプレート名 '%1' は、既に宣言されています。 - - - - %1 is not a valid numeric literal. - %1 は数値リテラルとして無効です。 - - - - Only one %1 declaration can occur in the query prolog. - クェリーのプロローグでは、%1 は一回のみ宣言できます。 - - - - The initialization of variable %1 depends on itself - 再帰? - 値 %1 の初期化は、それ自身に依存しています - - - - No variable by name %1 exists - 変数 %1 は存在しません - - - - Version %1 is not supported. The supported XQuery version is 1.0. - バージョン %1 はサポートされていません。XQuery バージョン 1.0 のみサポートされています。 - - - - The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. - エンコーディング '%1' は無効です。ラテン文字 (空白を除く) からなるもので、正規表現 '%2' にマッチするもののみ使用できます。 - - - - No function with signature %1 is available - シグネチャ %1 をもつ関数がみつかりません - - - - - A default namespace declaration must occur before function, variable, and option declarations. - 標準の名前空間の宣言は、関数、変数、オプションの宣言の前にしなければなりません。 - - - - Namespace declarations must occur before function, variable, and option declarations. - 名前空間の宣言は、関数、変数、オプションの宣言の前にしなければなりません。 - - - - Module imports must occur before function, variable, and option declarations. - モジュールのインポートは、関数、変数、オプションの宣言の前にしなければなりません。 - - - - The keyword %1 cannot occur with any other mode name. - キーワード %1 は、他の名をともなって使用することはできません。 - - - - The value of attribute %1 must of type %2, which %3 isn't. - 属性 '%1' の値として '%3' が指定されましたが、型 '%2' でなければなりません。 - - - - It is not possible to redeclare prefix %1. - プレフィックス '%1' を再定義することはできません。 - - - - The prefix %1 can not be bound. By default, it is already bound to the namespace %2. - プレフィックス '%1' はバウンドできません。デフォルトでは、それは既に名前空間 '%2' にバウンドされています。 - - - - Prefix %1 is already declared in the prolog. - プロローグ部において、プレフィックス '%1' はすでに宣言されています。 - - - - The name of an option must have a prefix. There is no default namespace for options. - オプションの名前はプレフィックスをもたなければなりません。このオプションに対するデフォルトの名前空間は存在しません。 - - - - The Schema Import feature is not supported, and therefore %1 declarations cannot occur. - このスキーマのインポート機能は使用できません。また、'%1' 宣言も使用できません。 - - - - The target namespace of a %1 cannot be empty. - 名前空間 '%1' は、空であってはなりません。 - - - - The module import feature is not supported - モジュールインポートの機能はサポートされていません - - - - A variable by name %1 has already been declared. - 名前 '%1' の変数は、すでに宣言されています。 - - - - No value is available for the external variable by name %1. - 外部変数 '%1' の値がみつかりません。 - - - - A stylesheet function must have a prefixed name. - スタイルシート関数は、プレフィックス名を持たなければなりません。 - - - - The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) - ユーザ定義の関数の名前空間は、空であってはなりません。(すでに定義されているプレフィックス '%1' が使用できます) - - - - The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. - 名前空間 '%1' は予約済です。ユーザ定義の関数では使用することはできません。プレフィックス '%2' が使用できます。 - - - - 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 - ライブラリモジュールで使用されている名前空間は、モジュールの名前空間と同一でなければなりません。つまり、'%2' ではなく、'%1' でなければなりません - - - - A function already exists with the signature %1. - シグネチャー '%1' の関数はすでに存在しています。 - - - - No external functions are supported. All supported functions can be used directly, without first declaring them as external - 外部関数はサポートされていません。すべてのサポートされている関数は、外部宣言をすることなく、直接使用することができます - - - - An argument by name %1 has already been declared. Every argument name must be unique. - 引数名 '%1' は既に宣言されています。すべての引数名はユニークである必要があります。 - - - - When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. - パターン一致の内側で関数 '%1' を使用する場合、引数はリテラルな文字列を参照する値でなければなりません。 - - - - In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. - XSL-T パターンマッチングにおいて、関数 '%1' の最初の引数は、リテラルな文字列でなければなりません。 - - - - In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. - variable ref? - XSL-T パターンマッチングにおいて、関数 '%1' への最初の引数は、リテラルか変数でなければなりません。 - - - - In an XSL-T pattern, function %1 cannot have a third argument. - XSL-T パターンにおいて、関数 '%1' は三つの引数をもつことはできません。 - - - - In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. - XSL-T パターンマッチングにおいて、関数 '%1' と '%2' のみ使用できます。'%3' は使用できません。 - - - - In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. - XSL-T パターンにおいて、axis %1 は使用できません。%2 または %3 のみ使用できます。 - - - - %1 is an invalid template mode name. - %1 はテンプレートモジュール名として無効です。 - - - - The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. - for 構文において使用する変数は、場所に関する変数とは異なる必要があります。つまり、'%1' が重複して使用されています。 - - - - The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. - スキーマの検証機能はサポートされていません。よって、'%1' 構文は使用できません。 - - - - None of the pragma expressions are supported. Therefore, a fallback expression must be present - pragma 構文はサポートされていません。fallback 構文でなければなりません - - - - Each name of a template parameter must be unique; %1 is duplicated. - テンプレートパラメータ名はユニークである必要があります。'%1' は重複しています。 - - - - The %1-axis is unsupported in XQuery - XQuery において、%1 axis はサポートされていません - - - - No function by name %1 is available. - 関数名 '%1' はみつかりません。 - - - - The namespace URI cannot be the empty string when binding to a prefix, %1. - プレフィックス '%1' にバインディングする名前空間の URI は、空であってはなりません。 - - - - %1 is an invalid namespace URI. - %1 は名前空間 URI として無効です。 - - - - It is not possible to bind to the prefix %1 - プレフィックス %1 にバインドすることはできません - - - - Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). - ? - 名前空間 %1 は %2 にのみバウンドできます。 - - - - Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). - プリフィックス %1 は %2 にのみバウンドできます。 - - - - Two namespace declaration attributes have the same name: %1. - 二つの名前空間宣言の属性が、同じ名前 '%1' をもっています。 - - - - The namespace URI must be a constant and cannot use enclosed expressions. - 名前空間 URI は、constantでなければなりません。式を含むことはできません。 - - - - An attribute by name %1 has already appeared on this element. - 属性名 '%1' は、すでにこのエレメントで使用されています。 - - - - A direct element constructor is not well-formed. %1 is ended with %2. - 直積的な指定のエレメントがwell formedではありません。'%1' が、'%2' で終わっています。 - - - - The name %1 does not refer to any schema type. - 名前 '%1' は、なんのスキーマタイプも参照していません。 - - - - %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. - '%1' は complex 型です。complex 型への型変換はできません。しかし、アトミックな型である '%2' への変換はできます。 - - - - %1 is not an atomic type. Casting is only possible to atomic types. - '%1' はアトミックな型ではありません。型変換はアトミックな型に対してのみ可能です。 - - - - %1 is not a valid name for a processing-instruction. - 処理指定において、'%1' は無効です。 - - - - - %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. - '%1' は、スコープ属性宣言ではありません。スキーマインポート機能はサポートされていません。 - - - - The name of an extension expression must be in a namespace. - 拡張式 (extension expression) の名前は、名前空間の中になければなりません。 - - - - Element %1 is not allowed at this location. - この場所にエレメント '%1' をおくことは許されていません。 - - - - Text nodes are not allowed at this location. - この場所にテキストノードをおくことは許されていません。 - - - - Parse error: %1 - パースエラー: %1 - - - - The value of the XSL-T version attribute must be a value of type %1, which %2 isn't. - XSL-T バージョン属性の値は、'%1' 型でなければなりません。'%2' はそうではありません。 - - - - Running an XSL-T 1.0 stylesheet with a 2.0 processor. - XSL-T 1.0 のスタイルシートを 2.0 のプロセッサで使用します。 - - - - Unknown XSL-T attribute %1. - 未知の XSL-T 属性 %1 があります。 - - - - Attribute %1 and %2 are mutually exclusive. - 属性 '%1' と '%2' は排他的にのみ使用できます。 - - - - In a simplified stylesheet module, attribute %1 must be present. - simplified stylesheet モジュールにおいては、属性 '%1' を指定されなければなりません。 - - - - If element %1 has no attribute %2, it cannot have attribute %3 or %4. - エレメント '%1' が属性 '%2' を持たない場合は、属性 '%3' や '%4' を使用することはできません。 - - - - Element %1 must have at least one of the attributes %2 or %3. - エレメント '%1' は、属性 '%2' か '%3' のいずれかを持たなければなりません。 - - - - At least one mode must be specified in the %1-attribute on element %2. - エレメント '%2' において、'%1' 属性は少くとも一つのモードを指定しなければなりません。 - - - - Element %1 must come last. - エレメント %1 は最後になければなりません。 - - - - At least one %1-element must occur before %2. - %2 の前に、少くとも一つは %1 エレメントが存在しなければなりません。 - - - - Only one %1-element can appear. - %1 エレメントは一つのみ存在しなければなりません。 - - - - At least one %1-element must occur inside %2. - %2 の内側には、少くとも一つの '%1' エレメントが存在しなければなりません。 - - - - When attribute %1 is present on %2, a sequence constructor cannot be used. - %2 に属性 %1 がある場合、sequence constructor は使用できません。 - - - - Element %1 must have either a %2-attribute or a sequence constructor. - エレメント %1 には、%2 属性またはsequence constructorがなければなりません。 - - - - When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. - パラメータが要求されているときには、デフォルトの値は、%1 属性または sequence constructor によって指定されていてはなりません。 - - - - Element %1 cannot have children. - エレメント %1 は、子要素を持つことができません。 - - - - Element %1 cannot have a sequence constructor. - エレメント %1 は、sequence constructor を含むことができません。 - - - - - The attribute %1 cannot appear on %2, when it is a child of %3. - %2 が %3 の子要素であるときは、属性 %1 を使用してはなりません。 - - - - A parameter in a function cannot be declared to be a tunnel. - 関数へのパラメータは、トンネルであってはなりません。 - - - - This processor is not Schema-aware and therefore %1 cannot be used. - この処理系は、Schema-aware ではありません。よって、%1 は使用できません。 - - - - Top level stylesheet elements must be in a non-null namespace, which %1 isn't. - トップレベルのスタイルシートのエレメントは、non-nullな名前空間を持っていなければなりません。しかし、%1 はそうではありません。 - - - - The value for attribute %1 on element %2 must either be %3 or %4, not %5. - エレメント %2 の属性 %1 の値は、%3 または %4 でなければなりません。%5 は異なります。 - - - - Attribute %1 cannot have the value %2. - 属性 %1 に、値 %2 を指定することはできません。 - - - - The attribute %1 can only appear on the first %2 element. - 属性 %1 は、最初の %2 エレメントにのみ指定できます。 - - - - At least one %1 element must appear as child of %2. - %2 の子要素としては、少くとも一つは %1 エレメントがなければなりません。 - - - - empty - - - - - zero or one - ゼロまたは一つ - - - - exactly one - 厳密に一つ - - - - one or more - 一つまたは複数 - - - - zero or more - ゼロまたはそれ以上 - - - - Required type is %1, but %2 was found. - 要求されている型は %1 ですが、 %2 があります。 - - - - Promoting %1 to %2 may cause loss of precision. - %1 を %2 に変換する際に、精度のロスが生じます。 - - - - The focus is undefined. - フォーカスが定義されていません。 - - - - It's not possible to add attributes after any other kind of node. - 他の種類のノードの中では、属性を追加することはできません。 - - - - An attribute by name %1 has already been created. - 名前 '%1' の属性は、すでに生成されています。 - - - - Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. - UNICODE Codepoint Collection のみ使用できます(%1)。 %2 はサポートされていません。 - - - - QPluginLoader - - - Unknown error - 不明なエラー - - - - The plugin was not loaded. - そのプラグインはロードされていません。 - - - - QPrintDialog - - Page size: - ページサイズ: - - - Orientation: - 方向: - - - Paper source: - 給紙装置: - - - - OK - OK - - - Cancel - キャンセル - - - Portrait - - - - Landscape - - - - - locally connected - ローカルに接続しています - - - - - Aliases: %1 - エイリアス: %1 - - - - - unknown - 不明 - - - Print in color if available - 可能であればカラーで印刷 - - - Print to file - ファイルに出力: - - - Browse - 参照... - - - - Print all - すべて印刷 - - - Selection - 選択した部分を印刷 - - - - Print range - 印刷範囲 - - - Pages from - 先頭のページ: - - - to - 末尾のページ: - - - Print last page first - 末尾のページから印刷 - - - Number of copies: - 部数: - - - Paper format - 用紙の形式 - - - - A0 (841 x 1189 mm) - A0 (841 x 1189mm) - - - - A1 (594 x 841 mm) - A1 (594 x 841mm) - - - - A2 (420 x 594 mm) - A2 (420 x 594mm) - - - - A3 (297 x 420 mm) - A3 (297 x 420mm) - - - - A4 (210 x 297 mm, 8.26 x 11.7 inches) - A4 (210 x 297mm、8.26 x 11.7インチ) - - - - A5 (148 x 210 mm) - A5 (148 x 210mm) - - - - A6 (105 x 148 mm) - A6 (105 x 148mm) - - - - A7 (74 x 105 mm) - A7 (74 x 105mm) - - - - A8 (52 x 74 mm) - A8 (52 x 74mm) - - - - A9 (37 x 52 mm) - A9 (37 x 52mm) - - - - B0 (1000 x 1414 mm) - B0 (1000 x 1414mm) - - - - B1 (707 x 1000 mm) - B1 (707 x 1000mm) - - - - B2 (500 x 707 mm) - B2 (500 x 707mm) - - - - B3 (353 x 500 mm) - B3 (353 x 500mm) - - - - B4 (250 x 353 mm) - B4 (250 x 353mm) - - - - B5 (176 x 250 mm, 6.93 x 9.84 inches) - B5 (176 x 250mm、6.93 x 9.84インチ) - - - - B6 (125 x 176 mm) - B6 (125 x 176mm) - - - - B7 (88 x 125 mm) - B7 (88 x 125mm) - - - - B8 (62 x 88 mm) - B8 (62 x 88mm) - - - - B9 (44 x 62 mm) - B9 (44 x 62mm) - - - - B10 (31 x 44 mm) - B10 (31 x 44mm) - - - - C5E (163 x 229 mm) - C5E (163 x 229mm) - - - - DLE (110 x 220 mm) - DLE (110 x 220mm) - - - - Executive (7.5 x 10 inches, 191 x 254 mm) - Executive (7.5 x 10インチ、191 x 254mm) - - - - Folio (210 x 330 mm) - Folio (210 x 330mm) - - - - Ledger (432 x 279 mm) - Ledger (432 x 279mm) - - - - Legal (8.5 x 14 inches, 216 x 356 mm) - Legal (8.5 x 14インチ、216 x 356mm) - - - - Letter (8.5 x 11 inches, 216 x 279 mm) - Letter (8.5 x 11インチ、216 x 279mm) - - - - Tabloid (279 x 432 mm) - Tabloid (279 x 432mm) - - - - US Common #10 Envelope (105 x 241 mm) - US Common #10 Envelope (105 x 241mm) - - - Print dialog - プリントダイアログ - - - Size: - サイズ: - - - Printer - プリンタ - - - Properties - プロパティ - - - Printer info: - プリンタ情報: - - - Copies - 印刷部数 - - - Collate - 丁合い - - - Other - その他 - - - Double side printing - 両面印刷 - - - - - - Print - 印刷 - - - File - ファイル - - - - Print To File ... - ファイルへ出力... - - - - File %1 is not writable. -Please choose a different file name. - ファイル %1 は書き込み可能ではありません。 -別のファイル名を選んでください。 - - - - %1 already exists. -Do you want to overwrite it? - %1 はすでに存在します。 -上書きしますか? - - - - File exists - ファイルは既に存在しています - - - - <qt>Do you want to overwrite it?</qt> - <qt>ファイルを上書きしてもよろしいですか?</qt> - - - - Print selection - 選択された範囲を印刷 - - - - %1 is a directory. -Please choose a different file name. - %1 はディレクトリです。 -ファイル名を指定してください。 - - - - A0 - A0 - - - - A1 - A1 - - - - A2 - A2 - - - - A3 - A3 - - - - A4 - A4 - - - - A5 - A5 - - - - A6 - A6 - - - - A7 - A7 - - - - A8 - A8 - - - - A9 - A9 - - - - B0 - B0 - - - - B1 - B1 - - - - B2 - B2 - - - - B3 - B3 - - - - B4 - B4 - - - - B5 - B5 - - - - B6 - B6 - - - - B7 - B7 - - - - B8 - B8 - - - - B9 - B9 - - - - B10 - B10 - - - - C5E - C5E - - - - DLE - DLE - - - - Executive - Exclusive - - - - Folio - Folio - - - - Ledger - Ledger - - - - Legal - リーガルサイズ - - - - Letter - レターサイズ - - - - Tabloid - タブロイドサイズ - - - - US Common #10 Envelope - US標準#10封筒 - - - - Custom - カスタム - - - - - &Options >> - オプション(&O) >> - - - - &Print - 印刷(&P) - - - - &Options << - オプション(&O) << - - - - Print to File (PDF) - PDFファイルに出力 - - - - Print to File (Postscript) - Postscriptファイルに出力 - - - - Local file - ローカルファイル - - - - Write %1 file - ファイル %1 に書き込みました - - - - The 'From' value cannot be greater than the 'To' value. - QPrintPropertiesWidgetにFromとToがあってそれを指している - 印刷開始ページ番号は、印刷終了ページ番号より小さくなければなりません。 - - - - QPrintPreviewDialog - - - - Page Setup - ページの設定 - - - - %1% - %1% - - - - Print Preview - 印刷のプレビュー - - - - Next page - 次のページ - - - - Previous page - 前のページ - - - - First page - 最初のページ - - - - Last page - 最後のページ - - - - Fit width - 幅をあわせる - - - - Fit page - 高さをあわせる - - - - Zoom in - 拡大 - - - - Zoom out - 縮小 - - - - Portrait - - - - - Landscape - - - - - Show single page - 一枚のページを表示する - - - - Show facing pages - 見開きのページを表示する - - - - Show overview of all pages - すべてのページを表示する - - - - Print - 印刷 - - - - Page setup - ページの設定 - - - Close - 閉じる - - - - Export to PDF - PDFに出力 - - - - Export to PostScript - Postscriptに出力 - - - - QPrintPropertiesDialog - - PPD Properties - 印刷プロパティのダイアログのプロパティ - - - Save - 保存 - - - OK - OK - - - - QPrintPropertiesWidget - - - Form - 書式 - - - - Page - ページ - - - - Advanced - 高度な設定 - - - - QPrintSettingsOutput - - - Form - 書式 - - - - Copies - 印刷部数 - - - - Print range - 印刷範囲 - - - - Print all - すべて印刷 - - - - Pages from - 先頭のページ - - - - to - 末尾のページ - - - - Selection - 選択した部分を印刷 - - - - Output Settings - 出力設定 - - - - Copies: - 印刷部数: - - - - Collate - 丁合い - - - - Reverse - 逆順 - - - - Options - オプション - - - - Color Mode - - - - - Color - カラー - - - - Grayscale - グレースケール - - - - Duplex Printing - 両面印刷 - - - - None - なし - - - - Long side - 長辺綴じ - - - - Short side - 短辺綴じ - - - - QPrintWidget - - - Form - 書式 - - - - Printer - プリンタ - - - - &Name: - 名前(&N): - - - - P&roperties - プロパティ(&r) - - - - Location: - 設置場所: - - - - Preview - プレビュー - - - - Type: - タイプ: - - - - Output &file: - 出力ファイル名(&f): - - - - ... - ... - - - - QProcess - - - - Could not open input redirection for reading - 標準入力リダイレクトを読み込みのためにオープンすることができません - - - - - Could not open output redirection for writing - 標準出力リダイレクトを書き込みのためにオープンすることができません - - - - Resource error (fork failure): %1 - リソースエラー (fork に失敗しました): %1 - - - - - - - - - - - - Process operation timed out - プロセス処理がタイムアウトしました - - - - - - - Error reading from process - プロセスからの読み込みにおいてエラーが発生しました - - - - - - Error writing to process - プロセスへの書き込みにおいてエラーが発生しました - - - - Process crashed - プロセスがクラッシュしました - - - - No program defined - プログラム名が指定されていません - - - - Process failed to start - プロセスのスタートに失敗しました - - - - QProgressDialog - - - Cancel - キャンセル - - - - QPushButton - - - Open - オープン - - - - QRadioButton - - - Check - 選択 - - - - QRegExp - - - no error occurred - エラーは発生しませんでした - - - - disabled feature used - 無効な機能が使用されました - - - - bad char class syntax - 不正なcharクラス構文 - - - - bad lookahead syntax - 不正なlookahead構文 - - - - bad repetition syntax - 不正なrepetition構文 - - - - invalid octal value - 無効な8進値 - - - - missing left delim - 左の区切り文字がありません - - - - unexpected end - 予期しない末尾です - - - - met internal limit - 内部制限を満たしました - - - - QSQLite2Driver - - - Error to open database - データベースのオープンでエラーが発生しました - - - - Unable to begin transaction - トランザクションを開始できません - - - - Unable to commit transaction - トランザクションをコミットできません - - - - Unable to rollback Transaction - トランザクションをロールバックできません - - - - QSQLite2Result - - - Unable to fetch results - 実行結果をフェッチできません - - - - Unable to execute statement - ステートメントを実行できません - - - - QSQLiteDriver - - - Error opening database - データベースのオープンでエラーが発生しました - - - - Error closing database - データベースのクローズでエラーが発生しました - - - - Unable to begin transaction - トランザクションを開始できません - - - - Unable to commit transaction - トランザクションをコミットできません - - - Unable to roll back transaction - トランザクションをロールバックできません - - - - Unable to rollback transaction - トランザクションをロールバックできません - - - - QSQLiteResult - - - - - Unable to fetch row - レコードをフェッチできません - - - - Unable to execute statement - ステートメントを実行できません - - - - Unable to reset statement - ステートメントをリセットできません - - - - Unable to bind parameters - パラメータをバインドできません - - - - Parameter count mismatch - パラメータの数が合っていません - - - - No query - クェリーがありません - - - - QScrollBar - - - Scroll here - ここにスクロール - - - - Left edge - 左端 - - - - Top - 上端 - - - - Right edge - 右端 - - - - Bottom - 下端 - - - - Page left - 1ページ左へスクロール - - - - - Page up - 1ページ戻る - - - - Page right - 1ページ右へスクロール - - - - - Page down - 1ページ進む - - - - Scroll left - 左へスクロール - - - - Scroll up - 上へスクロール - - - - Scroll right - 右へスクロール - - - - Scroll down - 下へスクロール - - - - Line up - 1行上へ - - - - Position - 位置 - - - - Line down - 1行下へ - - - - QSharedMemory - - - %1: unable to set key on lock - 共有メモリ関連 - %1: ロックするためのキーを設定できません - - - - %1: create size is less then 0 - %1: 0より小さいサイズの共有メモリは作成できません - - - - - %1: unable to lock - %1: ロックできません - - - - %1: unable to unlock - %1: アンロックできません - - - - - %1: permission denied - %1: 許可されていません - - - - - %1: already exists - %1: 既に存在します - - - - - %1: doesn't exists - %1: 存在しません - - - - - %1: out of resources - %1: リソース不足です - - - - - %1: unknown error %2 - %1: 未知のエラー %2 - - - - %1: key is empty - %1: キーが空です - - - - %1: unix key file doesn't exists - ? - %1: UNIX key file が存在しません - - - - %1: ftok failed - %1: fork に失敗しました - - - - - %1: unable to make key - %1: キーを作成できません - - - - %1: system-imposed size restrictions - EINVAL - %1: 指定されたサイズはシステムにより拒否されました - - - - %1: not attached - %1: アタッチしていません - - - - %1: invalid size - %1: 無効なサイズです - - - - %1: key error - safekey.isEmpty()==true - %1: キーかありません - - - - %1: size query failed - %1: サイズのクェリーに失敗しました - - - - QShortcut - - - Space - Space - - - - Esc - Esc - - - - Tab - Tab - - - - Backtab - Backtab - - - - Backspace - Backspace - - - - Return - Return - - - - Enter - Enter - - - - Ins - Ins - - - - Del - Del - - - - Pause - Pause - - - - Print - Print - - - - SysReq - SysReq - - - - Home - Home - - - - End - End - - - - Left - - - - - Up - - - - - Right - - - - - Down - - - - - PgUp - PgUp - - - - PgDown - PgDown - - - - CapsLock - CapsLock - - - - NumLock - NumLock - - - - ScrollLock - ScrollLock - - - - Menu - メニュー - - - - Help - ヘルプ - - - - Back - 戻る - - - - Forward - 進む - - - - Stop - 停止 - - - - Refresh - 更新間隔 - - - - Volume Down - 音量を下げる - - - - Volume Mute - 消音 - - - - Volume Up - 音量を上げる - - - - Bass Boost - 低音ブースト - - - - Bass Up - 低音を上げる - - - - Bass Down - 低音を下げる - - - - Treble Up - 高音を上げる - - - - Treble Down - 高音を下げる - - - - Media Play - メディアの再生 - - - - Media Stop - メディアの停止 - - - - Media Previous - 前のメディア - - - - Media Next - 次のメディア - - - - Media Record - メディアの録音 - - - - Home Page - ホームページ - - - - Favorites - お気に入り - - - - Search - 検索 - - - - Standby - スタンバイ - - - - Open URL - URLを開く - - - - Launch Mail - メールの起動 - - - - Launch Media - メディアの起動 - - - - Launch (0) - (0)の起動 - - - - Launch (1) - (1)の起動 - - - - Launch (2) - (2)の起動 - - - - Launch (3) - (3)の起動 - - - - Launch (4) - (4)の起動 - - - - Launch (5) - (5)の起動 - - - - Launch (6) - (6)の起動 - - - - Launch (7) - (7)の起動 - - - - Launch (8) - (8)の起動 - - - - Launch (9) - (9)の起動 - - - - Launch (A) - (A)の起動 - - - - Launch (B) - (B)の起動 - - - - Launch (C) - (C)の起動 - - - - Launch (D) - (D)の起動 - - - - Launch (E) - (E)の起動 - - - - Launch (F) - (F)の起動 - - - - Print Screen - Print Screen - - - - Page Up - Page Up - - - - Page Down - Page Down - - - - Caps Lock - Caps Lock - - - - Num Lock - Num Lock - - - - Number Lock - Number Lock - - - - Scroll Lock - Scroll Lock - - - - Insert - Insert - - - - Delete - Delete - - - - Escape - Escape - - - - System Request - System Request - - - - Select - Select - - - - Yes - はい - - - - No - いいえ - - - - Context1 - Context1 - - - - Context2 - Context2 - - - - Context3 - Context3 - - - - Context4 - Context4 - - - - Call - Call - - - - Hangup - Hangup - - - - Flip - Flip - - - - - Ctrl - Ctrl - - - - - Shift - Shift - - - - - Alt - Alt - - - - - Meta - Meta - - - - + - + - - - - F%1 - F%1 - - - - QSlider - - - Page left - 1ページ左へスクロール - - - - Page up - 1ページ戻る - - - - Position - 位置 - - - - Page right - 1ページ右へスクロール - - - - Page down - 1ページ進む - - - - QSocks5SocketEngine - - - Connection to proxy refused - プロキシーへの接続が拒否されました - - - - Connection to proxy closed prematurely - プロキシーの接続が通信の終了前に切断されました - - - - Proxy host not found - プロキシーホストが見つかりません - - - - Connection to proxy timed out - プロキシーとの接続がタイムアウトしました - - - - Proxy authentication failed - プロキシーの認証に失敗しました - - - - Proxy authentication failed: %1 - プロキシーの認証に失敗しました: %1 - - - - SOCKS version 5 protocol error - SOCKS バージョン 5 プロトコルのエラーです - - - - General SOCKSv5 server failure - SOCKS バージョン 5 サーバのエラーです - - - - Connection not allowed by SOCKSv5 server - SOCKSv5 サーバより接続を拒否されました - - - - TTL expired - 実際はホップ数です - 有効期限(TTL)がきれました - - - - SOCKSv5 command not supported - この SOCKSv5 コマンドはサポートされていません - - - - Address type not supported - 指定されたアドレスタイプはサポートされていません - - - - Unknown SOCKSv5 proxy error code 0x%1 - 未知の SOCKSv5 プロキシーエラーです: 0x%1 - - - Socks5 timeout error connecting to socks server - Socks5 はソックスサーバ接続しようとしてタイムアウトになりました - - - - Network operation timed out - ネットワーク操作がタイムアウトしました - - - - QSpinBox - - - More - 増やす - - - - Less - 減らす - - - - QSql - - - Delete - 削除 - - - - Delete this record? - このレコードを削除しますか? - - - - - - Yes - はい - - - - - - No - いいえ - - - - Insert - 挿入 - - - - Update - アップデート - - - - Save edits? - 編集内容を保存しますか? - - - - Cancel - キャンセル - - - - Confirm - 確認 - - - - Cancel your edits? - 編集をキャンセルしますか? - - - - QSslSocket - - - Error creating SSL context (%1) - SSL content の作成に失敗しました (%1) - - - - Invalid or empty cipher list (%1) - 暗号方式リストが無効または空です (%1) - - - - Cannot provide a certificate with no key, %1 - 鍵が指定されていないため、証明書を扱えません。 %1 - - - - Error loading local certificate, %1 - ローカルの証明書をロードできません。 %1 - - - - Error loading private key, %1 - プライベートキーをロードできません。 %1 - - - - Private key does not certificate public key, %1 - プライベートキーが、パブリックキーの証明書となっていません %1 - - - - Error creating SSL session, %1 - SSL セッションを作成できません。 %1 - - - - Error creating SSL session: %1 - SSL セッションを作成できません: %1 - - - - Unable to write data: %1 - 書き込みできません: %1 - - - - Error while reading: %1 - 読み込み時にエラーが発生しました: %1 - - - - Error during SSL handshake: %1 - SSL ハンドシェーク時にエラーが発生しました: %1 - - - - QSystemSemaphore - - - - %1: out of resources - %1: リソース不足です - - - - - %1: permission denied - %1: 許可されていません - - - - %1: already exists - %1: 既に存在します - - - - %1: does not exist - %1: 存在しません - - - - - %1: unknown error %2 - %1: 未知のエラーです %2 - - - - QTDSDriver - - - Unable to open connection - 接続をオープンできません - - - - Unable to use database - データベースを使用できません - - - - QTabBar - - - Scroll Left - 左へスクロール - - - - Scroll Right - 右へスクロール - - - - QTcpServer - - Socket operation unsupported - ソケット操作はサポートされていません - - - - Operation on socket is not supported - このソケットへの操作はサポートされていません - - - - QTextControl - - - &Undo - 元に戻す(&U) - - - - &Redo - やり直す(&R) - - - - Cu&t - 切り取り(&T) - - - - &Copy - コピー(&C) - - - - Copy &Link Location - リンクの場所をコピー(&L) - - - - &Paste - 貼り付け(&P) - - - - Delete - 削除 - - - - Select All - すべてを選択 - - - - QToolButton - - - - Press - 押す - - - - - Open - オープン - - - - QUdpSocket - - - This platform does not support IPv6 - このプラットフォームは IPv6 をサポートしていません - - - - QUndoGroup - - - Undo - 元に戻す - - - - Redo - やり直す - - - - QUndoModel - - - <empty> - <空> - - - - QUndoStack - - - Undo - 元に戻す - - - - Redo - やり直す - - - - QUnicodeControlCharacterMenu - - - LRM Left-to-right mark - LRM (左横書き指定) - - - - RLM Right-to-left mark - RLM (右横書き指定) - - - - ZWJ Zero width joiner - ZWJ (幅のない接続文字) - - - - ZWNJ Zero width non-joiner - ZWNJ (幅のない非接続文字) - - - - ZWSP Zero width space - ZWSP (幅の無い空白) - - - - LRE Start of left-to-right embedding - LRE (左横書き開始指定) - - - - RLE Start of right-to-left embedding - RLE (右横書き開始指定) - - - - LRO Start of left-to-right override - LRO (左横書き上書き開始指定) - - - - RLO Start of right-to-left override - RLO (右横書き上書き開始指定) - - - - PDF Pop directional formatting - PDF (方向上書きの終了指定) - - - - Insert Unicode control character - Unicode制御文字を挿入 - - - - QWebFrame - - - Request cancelled - リクエストはキャンセルされました - - - - Request blocked - リクエストはブロックされました - - - - Cannot show URL - URL を表示できません - - - - Frame load interruped by policy change - ポリシーの変更により、フレームのロードが中断しました - - - - Cannot show mimetype - MIME Type を表示できません - - - - File does not exist - ファイルが存在しません - - - - QWebPage - - - Bad HTTP request - 誤った HTTP のリクエストです - - - - Submit - default label for Submit buttons in forms on web pages - 送信 - - - - Submit - Submit (input element) alt text for <input> elements with no alt, title, or value - 送信 - - - - Reset - default label for Reset buttons in forms on web pages - リセット - - - - This is a searchable index. Enter search keywords: - text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' - 検索が可能です。検索のためのキーワードを入力してください: - - - - Choose File - title for file button used in HTML forms - ファイルを選ぶ - - - - No file selected - text to display in file button used in HTML forms when no file is selected - ファイルが選択されていません - - - - Open in New Window - Open in New Window context menu item - 新しいウィンドウで開く - - - - Save Link... - Download Linked File context menu item - リンク先を保存... - - - - Copy Link - Copy Link context menu item - リンク先をコピー - - - - Open Image - Open Image in New Window context menu item - イメージを開く - - - - Save Image - Download Image context menu item - 画像を保存 - - - - Copy Image - Copy Link context menu item - 画像をコピー - - - - Open Frame - Open Frame in New Window context menu item - フレームを新しいウィンドウで開く - - - - Copy - Copy context menu item - コピー - - - - Go Back - Back context menu item - 戻る - - - - Go Forward - Forward context menu item - 進む - - - - Stop - Stop context menu item - 停止 - - - - Reload - Reload context menu item - リロード - - - - Cut - Cut context menu item - 切り取り - - - - Paste - Paste context menu item - 貼り付け - - - - No Guesses Found - No Guesses Found context menu item - 推測候補はありません - - - - Ignore - Ignore Spelling context menu item - 無視 - - - - Add To Dictionary - Learn Spelling context menu item - 辞書に追加 - - - - Search The Web - Search The Web context menu item - Web を検索 - - - - Look Up In Dictionary - Look Up in Dictionary context menu item - 辞書から探す - - - - Open Link - Open Link context menu item - リンクを開く - - - - Ignore - Ignore Grammar context menu item - 無視 - - - - Spelling - Spelling and Grammar context sub-menu item - スペル - - - - Show Spelling and Grammar - menu item title - スペルと文法を表示 - - - - Hide Spelling and Grammar - menu item title - スペルと文法を隠す - - - - Check Spelling - Check spelling context menu item - スペルをチェックする - - - - Check Spelling While Typing - Check spelling while typing context menu item - 入力中にスペルをチェックする - - - - Check Grammar With Spelling - Check grammar with spelling context menu item - スペルおよび文法をチェックする - - - - Fonts - Font context sub-menu item - フォント - - - - Bold - Bold context menu item - 太字 - - - - Italic - Italic context menu item - イタリック - - - - Underline - Underline context menu item - 下線 - - - - Outline - Outline context menu item - アウトライン - - - - Direction - Writing direction context sub-menu item - 方向 - - - - Text Direction - Text direction context sub-menu item - テキストの方向 - - - - Default - Default writing direction context menu item - デフォルト - - - - LTR - Left to Right context menu item - 左横書き - - - - RTL - Right to Left context menu item - 右横書き - - - - Inspect - Inspect Element context menu item - ? - 検査 - - - - No recent searches - Label for only item in menu that appears when clicking on the search field image, when no searches have been performed - 検索の履歴はありません - - - - Recent searches - label for first item in the menu that appears when clicking on the search field image, used as embedded menu title - 検索の履歴 - - - - Clear recent searches - menu item in Recent Searches menu that empties menu's contents - 検索の履歴をクリア - - - - Unknown - Unknown filesize FTP directory listing item - 不明 - - - - %1 (%2x%3 pixels) - Title string for images - %1 (%2x%3 ピクセル) - - - - Web Inspector - %2 - Web の検査 - %2 - - - - Scroll here - ここにスクロール - - - - Left edge - 左端 - - - - Top - 上端 - - - - Right edge - 右端 - - - - Bottom - 下端 - - - - Page left - 1ページ左へスクロール - - - - Page up - 1ページ戻る - - - - Page right - 1ページ右へスクロール - - - - Page down - 1ページ進む - - - - Scroll left - 左へスクロール - - - - Scroll up - 上へスクロール - - - - Scroll right - 右へスクロール - - - - Scroll down - 下へスクロール - - - - %n file(s) - number of chosen file - - %n 個のファイル - - - - - JavaScript Alert - %1 - JavaScript アラート - %1 - - - - JavaScript Confirm - %1 - JavaScript 確認 - %1 - - - - JavaScript Prompt - %1 - JavaScript 質問 - %1 - - - - Move the cursor to the next character - 次の文字へカーソルを移動 - - - - Move the cursor to the previous character - 前の文字にカーソルを移動 - - - - Move the cursor to the next word - 次の単語にカーソルを移動 - - - - Move the cursor to the previous word - 前の単語にカーソルを移動 - - - - Move the cursor to the next line - 次の行にカーソルを移動 - - - - Move the cursor to the previous line - 前の行にカーソルを移動 - - - - Move the cursor to the start of the line - 文なのか行なのか - 文頭にカーソルを移動 - - - - Move the cursor to the end of the line - 文末にカーソルを移動 - - - - Move the cursor to the start of the block - ブロックの先頭にカーソルを移動 - - - - Move the cursor to the end of the block - ブロックの末尾にカーソルを移動 - - - - Move the cursor to the start of the document - 文章の先頭にカーソルを移動 - - - - Move the cursor to the end of the document - 文章の末尾にカーソルを移動 - - - - Select all - すべてを選択 - - - - Select to the next character - 次の文字を選択 - - - - Select to the previous character - 前の文字を選択 - - - - Select to the next word - 次の単語を選択 - - - - Select to the previous word - 前の単語を選択 - - - - Select to the next line - 次の行を選択 - - - - Select to the previous line - 前の行を選択 - - - - Select to the start of the line - 文頭から選択 - - - - Select to the end of the line - 文末まで選択 - - - - Select to the start of the block - ブロックの先頭から選択 - - - - Select to the end of the block - ブロックの末尾まで選択 - - - - Select to the start of the document - ドキュメントの先頭から選択 - - - - Select to the end of the document - ドキュメントの末尾まで選択 - - - - Delete to the start of the word - 単語の先頭まで削除 - - - - Delete to the end of the word - 単語の末尾まで削除 - - - - Insert a new paragraph - 新しい段落を挿入 - - - - Insert a new line - 新しい行を挿入 - - - - QWhatsThisAction - - - What's This? - ヒント? - - - - QWidget - - - * - * - - - - QWizard - - - Go Back - 戻る - - - - Continue - 続き - - - - Commit - 適用 - - - - Done - 終了 - - - - Help - ヘルプ - - - - < &Back - < 戻る(&B) - - - - &Finish - 完了(&F) - - - - Cancel - キャンセル - - - - &Help - ヘルプ(&H) - - - - &Next - 次へ(&N) - - - - &Next > - 次へ(&N) > - - - - QWorkspace - - - &Restore - 元に戻す(&R) - - - - &Move - 移動(&M) - - - - &Size - サイズを変更(&S) - - - - Mi&nimize - 最小化(&N) - - - - Ma&ximize - 最大化(&X) - - - - &Close - 閉じる(&C) - - - - Stay on &Top - 常に手前に表示(&T) - - - - - Sh&ade - シェード(&A) - - - - - %1 - [%2] - %1 - [%2] - - - - Minimize - 最小化 - - - - Restore Down - 元に戻す - - - - Close - 閉じる - - - - &Unshade - シェードを解除(&U) - - - - QXml - - - no error occurred - エラーは発生しませんでした - - - - error triggered by consumer - 消費者によってエラーが誘発されました - - - - unexpected end of file - 予期せぬファイルの終りです - - - - more than one document type definition - ドキュメントタイプの定義が複数あります - - - - error occurred while parsing element - 要素の解析中にエラーが発生しました - - - - tag mismatch - タグが一致しません - - - - error occurred while parsing content - コンテンツの解析中にエラーが発生しました - - - - unexpected character - 予期しない文字です - - - - invalid name for processing instruction - 処理の指示に無効な名前です - - - - version expected while reading the XML declaration - XML宣言を読み込むにはバージョンが必要です - - - - wrong value for standalone declaration - スタンドアロン宣言として正しくない値です - - - - encoding declaration or standalone declaration expected while reading the XML declaration - XML宣言を読み込むにはエンコーディング宣言かスタンドアローン宣言が必要です - - - - standalone declaration expected while reading the XML declaration - XML宣言を読み込むにはスタンドアローン宣言が必要です - - - - error occurred while parsing document type definition - ドキュメントタイプの定義を解析中にエラーが発生しました - - - - letter is expected - 文字が必要です - - - - error occurred while parsing comment - コメントの解析中にエラーが発生しました - - - - error occurred while parsing reference - 参照の解析中にエラーが発生しました - - - - internal general entity reference not allowed in DTD - 内部一般エンティティ参照はDTDで許されていません - - - - external parsed general entity reference not allowed in attribute value - 解析された外部一般エンティティ参照は属性値で許されていません - - - - external parsed general entity reference not allowed in DTD - 解析された外部一般エンティティ参照はDTDで許されていません - - - - unparsed entity reference in wrong context - 不正な文脈で解析されないエンティティ参照です - - - - recursive entities - 再帰的エンティティ - - - - error in the text declaration of an external entity - 外部エンティティのテキスト宣言にエラーがあります - - - - QXmlStream - - - - Extra content at end of document. - ドキュメントの末尾に余計なものがついています。 - - - - Invalid entity value. - エンティティの値が無効です。 - - - - Invalid XML character. - 無効な XML 文字です。 - - - - Sequence ']]>' not allowed in content. - このコンテキストでは、']]>' は許可されていません。 - - - - - Encountered incorrectly encoded content. - 正しくないエンコードの文脈に遭遇しました。 - - - - Namespace prefix '%1' not declared - 名前空間のブリフィックス '%1' は宣言されていません - - - - Attribute redefined. - 属性が再度指定されています。 - - - - Unexpected character '%1' in public id literal. - DTD宣言の部分 - 公開 ID 指定に使用できない文字 '%1' が使用されています。 - - - - Invalid XML version string. - 無効な XML バージョン指定です。 - - - - Unsupported XML version. - この XML のバージョンはサポートされていません。 - - - - The standalone pseudo attribute must appear after the encoding. - &ddd; は、エンコーディングを指定していないと使えないということかな。utf8だとおもうけど。 - 仮想属性指定は、エンコーディング指定の後にのみ使用できます。 - - - - %1 is an invalid encoding name. - %1 は無効なエンコーディングの名前です。 - - - - Encoding %1 is unsupported - エンコーディング '%1' はサポートされていません - - - - Standalone accepts only yes or no. - standalone の指定は yes または no のみ指定できます。 - - - - Invalid attribute in XML declaration. - XML 宣言に無効な属性がついています。 - - - - Premature end of document. - ドキュメントが途中で終わっています。 - - - - Invalid document. - 無効なドキュメントです。 - - - - Expected - 予期していた表現は、 - - - - , but got ' - ですが、取得した表現は以下のものでした ' - - - - Unexpected ' - 予期していなかった表現 ' - - - - Expected character data. - 予期していた文字列。 - - - - Recursive entity detected. - 再帰しているエンティティを発見しました。 - - - - Start tag expected. - 開始タグをよきしていましたが、みつかりません。 - - - - NDATA in parameter entity declaration. - パラメータエンティティの宣言において NDATA があります。 - - - - XML declaration not at start of document. - XML 宣言がドキュメントの先頭にありません。 - - - - %1 is an invalid processing instruction name. - XMLにそんなのあったっけ? - %1 は無効な処理指定の名前です。 - - - - Invalid processing instruction name. - 無効な処理命令です。 - - - - %1 is an invalid PUBLIC identifier. - %1 は、公開 (PUBLIC) 識別子として無効です。 - - - - - - - Illegal namespace declaration. - 無効な名前空間の指定です。 - - - - Invalid XML name. - 無効な XML 名です。 - - - - Opening and ending tag mismatch. - 開始タグと、終了タグがマッチしません。 - - - - Reference to unparsed entity '%1'. - まだパースしていないエンティティ '%1' を参照しています。 - - - - - - Entity '%1' not declared. - エンティティ '%1' は宣言されていません。 - - - - Reference to external entity '%1' in attribute value. - 属性値として、外部エンティティ '%1' を再度指定しています。 - - - - Invalid character reference. - 無効な文字への参照です。 - - - diff --git a/translations/translations.pri b/translations/translations.pri index 2edc89a..37295ff 100644 --- a/translations/translations.pri +++ b/translations/translations.pri @@ -13,7 +13,7 @@ LUPDATE += -locations relative -no-ui-lines ###### Qt Libraries -QT_TS = ar cs da de es fr he hu ja_JP pl pt ru sk sl sv uk zh_CN zh_TW +QT_TS = ar cs da de es fr he hu ja pl pt ru sk sl sv uk zh_CN zh_TW ts-qt.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \ -I../include -I../include/Qt \ -- cgit v0.12 From bf966d125d5c5fa7719ae9f9110db8742d5a4c85 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 7 Jun 2010 17:19:31 +0200 Subject: add check-ts target to auto-asses translation completeness --- translations/check-ts.pl | 85 +++++++++++++++++++++++++++++++++++++++++++ translations/check-ts.xq | 3 ++ translations/translations.pri | 5 ++- 3 files changed, 92 insertions(+), 1 deletion(-) create mode 100755 translations/check-ts.pl create mode 100644 translations/check-ts.xq diff --git a/translations/check-ts.pl b/translations/check-ts.pl new file mode 100755 index 0000000..7b46bf5 --- /dev/null +++ b/translations/check-ts.pl @@ -0,0 +1,85 @@ +#! /usr/bin/perl -w + +use strict; + +# "qt" must come last to avoid prefix matching. +my @groups = ("assistant", "designer", "linguist", "qt_help", "qtconfig", "qvfb", "qt"); + +my %scores = (); +my %langs = (); + +my $files = join("\n", <*.ts>); +my $res = `xmlpatterns -param files=\"$files\" check-ts.xq`; +for my $i (split(/ /, $res)) { + $i =~ /^([^.]+).ts:(.*)$/; + my ($fn, $pc) = ($1, $2); + for my $g (@groups) { + if ($fn =~ /^${g}_(.*)$/) { + my $lang = $1; + $scores{$g}{$lang} = $pc; + $langs{$lang} = 1; + last; + } + } +} + +# now we move "qt" to the front, as it should be the first column. +pop @groups; +unshift @groups, "qt"; + +my $code = ""; + +print "L10n "; +for my $g (@groups) { + print " ".$g." "; +} +print "\n"; +for my $lang (sort(keys(%langs))) { + printf "%-5s ", $lang; + my $qt = 1; + my $rest = 1; + my $line = ""; + for my $g (@groups) { + my $pc = $scores{$g}{$lang}; + $pc = "0" if !defined($pc); + if (int($pc) < 98 or !$qt) { + if ($g eq "qt") { + $qt = 0; + } else { + $rest = 0; + } + } else { + $line .= " ".$g."_".$lang.".ts"; + } + printf " %-".(length($g)+1)."s", $pc; + } + if ($qt) { + $code .= " \\\n ".$line; + if (!$rest) { + print " (partial)"; + } + } else { + print " (excluded)"; + } + print "\n"; +} + +my $fn = "translations.pro"; +my $nfn = $fn."new"; +open IN, $fn or die; +open OUT, ">".$nfn or die; +while (1) { + $_ = ; + last if (/^TRANSLATIONS /); + print OUT $_; +} +while ($_ =~ /\\\n$/) { + $_ = ; +} +print OUT "TRANSLATIONS =".$code."\n"; +while () { + print OUT $_; +} +close OUT; +close IN; +rename $nfn, $fn; diff --git a/translations/check-ts.xq b/translations/check-ts.xq new file mode 100644 index 0000000..2d6404c --- /dev/null +++ b/translations/check-ts.xq @@ -0,0 +1,3 @@ +for $file in tokenize($files, codepoints-to-string(10)) + let $fresh := doc($file)/TS/context/message[not (translation/@type = 'obsolete')] + return concat($file, ":", count($fresh/translation[not (@type = 'unfinished')]) * 100 idiv count($fresh)) diff --git a/translations/translations.pri b/translations/translations.pri index 37295ff..9ab72fc 100644 --- a/translations/translations.pri +++ b/translations/translations.pri @@ -73,5 +73,8 @@ ts-qvfb.depends = sub-tools ts.depends = ts-qt ts-designer ts-linguist ts-assistant ts-qtconfig ts-qvfb +check-ts.commands = (cd $$PWD && perl check-ts.pl) +check-ts.depends = ts + QMAKE_EXTRA_TARGETS += ts-qt ts-designer ts-linguist ts-assistant ts-qtconfig ts-qvfb \ - ts + ts check-ts -- cgit v0.12 From d0a27b157c6a5d3cf4b75c6b1b71de399733f553 Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko Date: Fri, 4 Jun 2010 10:28:11 +0200 Subject: Fixed GestureOverride event delivery in GraphicsView. GestureOverride event was not respected when delivering to items in GraphicsView. Task-number: QTBUG-10745 Reviewed-by: Thomas Zander --- src/gui/graphicsview/qgraphicsscene.cpp | 9 ++++- tests/auto/gestures/tst_gestures.cpp | 66 +++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 1 deletion(-) diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp index 22c3f92..53a24a8 100644 --- a/src/gui/graphicsview/qgraphicsscene.cpp +++ b/src/gui/graphicsview/qgraphicsscene.cpp @@ -6088,8 +6088,15 @@ void QGraphicsScenePrivate::gestureEventHandler(QGestureEvent *event) if (ev.isAccepted() || ev.isAccepted(g)) { conflictedGestures.remove(g); // mark the item as a gesture target - if (item) + if (item) { gestureTargets.insert(g, item.data()); + QHash >::iterator it, e; + it = cachedItemGestures.begin(); + e = cachedItemGestures.end(); + for(; it != e; ++it) + it.value().remove(g); + cachedItemGestures[item.data()].insert(g); + } DEBUG() << "QGraphicsScenePrivate::gestureEventHandler:" << "override was accepted:" << g << item.data(); diff --git a/tests/auto/gestures/tst_gestures.cpp b/tests/auto/gestures/tst_gestures.cpp index 4a9f1d1..644a9b3 100644 --- a/tests/auto/gestures/tst_gestures.cpp +++ b/tests/auto/gestures/tst_gestures.cpp @@ -333,6 +333,7 @@ private slots: void gestureOverChild(); void multipleWidgetOnlyGestureInTree(); void conflictingGestures(); + void conflictingGesturesInGraphicsView(); void finishedWithoutStarted(); void unknownGesture(); void graphicsItemGesture(); @@ -2069,5 +2070,70 @@ void tst_Gestures::testQGestureRecognizerCleanup() delete w; } +void tst_Gestures::conflictingGesturesInGraphicsView() +{ + QGraphicsScene scene; + GraphicsView view(&scene); + view.setWindowFlags(Qt::X11BypassWindowManagerHint); + + GestureItem *item1 = new GestureItem("item1"); + item1->grabGesture(CustomGesture::GestureType); + item1->size = QRectF(0, 0, 100, 100); + item1->setZValue(2); + scene.addItem(item1); + + GestureItem *item2 = new GestureItem("item2"); + item2->grabGesture(CustomGesture::GestureType); + item2->size = QRectF(0, 0, 100, 100); + item2->setZValue(5); + scene.addItem(item2); + + view.show(); + QTest::qWaitForWindowShown(&view); + view.ensureVisible(scene.sceneRect()); + + static const int TotalGestureEventsCount = CustomGesture::SerialFinishedThreshold - CustomGesture::SerialStartedThreshold + 1; + + CustomEvent event; + + // nobody accepts override + item1->acceptGestureOverride = false; + item2->acceptGestureOverride = false; + event.hotSpot = mapToGlobal(item2->boundingRect().center(), item2, &view); + event.hasHotSpot = true; + sendCustomGesture(&event, item2, &scene); + QCOMPARE(item2->gestureOverrideEventsReceived, 1); + QCOMPARE(item2->gestureEventsReceived, TotalGestureEventsCount); + QCOMPARE(item1->gestureOverrideEventsReceived, 1); + QCOMPARE(item1->gestureEventsReceived, 0); + + item1->reset(); item2->reset(); + + // the original target accepts override + item1->acceptGestureOverride = false; + item2->acceptGestureOverride = true; + event.hotSpot = mapToGlobal(item2->boundingRect().center(), item2, &view); + event.hasHotSpot = true; + sendCustomGesture(&event, item2, &scene); + QCOMPARE(item2->gestureOverrideEventsReceived, 1); + QCOMPARE(item2->gestureEventsReceived, TotalGestureEventsCount); + QCOMPARE(item1->gestureOverrideEventsReceived, 0); + QCOMPARE(item1->gestureEventsReceived, 0); + + item1->reset(); item2->reset(); + + // the item behind accepts override + item1->acceptGestureOverride = true; + item2->acceptGestureOverride = false; + event.hotSpot = mapToGlobal(item2->boundingRect().center(), item2, &view); + event.hasHotSpot = true; + sendCustomGesture(&event, item2, &scene); + + QCOMPARE(item2->gestureOverrideEventsReceived, 1); + QCOMPARE(item2->gestureEventsReceived, 0); + QCOMPARE(item1->gestureOverrideEventsReceived, 1); + QCOMPARE(item1->gestureEventsReceived, TotalGestureEventsCount); +} + QTEST_MAIN(tst_Gestures) #include "tst_gestures.moc" -- cgit v0.12 From c28da4dd467c2763bed5c6b31471f078ac26cee6 Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko Date: Fri, 4 Jun 2010 11:13:19 +0200 Subject: Added setting a hotspot on standard gestures In order for gestures to work in graphicsview the hotspot should be set. The fix adds the hotspot to standard gestures that are shipped with Qt. Task-number: QTBUG-10967 Task-number: QT-3406 Reviewed-by: trustme --- src/gui/kernel/qstandardgestures.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gui/kernel/qstandardgestures.cpp b/src/gui/kernel/qstandardgestures.cpp index a575717..bfcfa86 100644 --- a/src/gui/kernel/qstandardgestures.cpp +++ b/src/gui/kernel/qstandardgestures.cpp @@ -110,6 +110,7 @@ QGestureRecognizer::Result QPanGestureRecognizer::recognize(QGesture *state, p1.pos().y() - p1.startPos().y() + p2.pos().y() - p2.startPos().y()) / 2; if (d->offset.x() > 10 || d->offset.y() > 10 || d->offset.x() < -10 || d->offset.y() < -10) { + q->setHotSpot(p1.startScreenPos()); result = QGestureRecognizer::TriggerGesture; } else { result = QGestureRecognizer::MayBeGesture; @@ -439,6 +440,7 @@ QGestureRecognizer::Result QTapGestureRecognizer::recognize(QGesture *state, switch (event->type()) { case QEvent::TouchBegin: { d->position = ev->touchPoints().at(0).pos(); + q->setHotSpot(ev->touchPoints().at(0).screenPos()); result = QGestureRecognizer::TriggerGesture; break; } @@ -521,6 +523,7 @@ QTapAndHoldGestureRecognizer::recognize(QGesture *state, QObject *object, if (d->timerId) q->killTimer(d->timerId); d->timerId = q->startTimer(TimerInterval); + q->setHotSpot(ev->touchPoints().at(0).startScreenPos()); result = QGestureRecognizer::TriggerGesture; break; case QEvent::TouchEnd: -- cgit v0.12 From 0c0f22ec0e36d7001c8195dcc6e390a37118e33e Mon Sep 17 00:00:00 2001 From: Michael Hasselmann Date: Mon, 7 Jun 2010 17:18:54 +0200 Subject: Fix QApplication/QWidget to really take ownership of input contexts * src/gui/kernel/[qapplication|qwidget].cpp, tests/auto/qapplication/tst_[qapplication|qwidget].cpp (setInputContext): The documentation for [QApplication|QWidget]::setInputContext claims that the [QApplication|QWidget] instance would take ownership. This commit fixes the setter to also reparent the input context. Furthermore, the crappy test for this setter was improved. Reviewed-by: Denis Dzyubenko --- src/gui/kernel/qapplication.cpp | 1 + src/gui/kernel/qwidget.cpp | 2 ++ tests/auto/qapplication/tst_qapplication.cpp | 19 +++++++++++++------ tests/auto/qwidget/tst_qwidget.cpp | 6 +++++- 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index a2c058a..8529615 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -5297,6 +5297,7 @@ void QApplication::setInputContext(QInputContext *inputContext) } delete QApplicationPrivate::inputContext; QApplicationPrivate::inputContext = inputContext; + QApplicationPrivate::inputContext->setParent(this); } /*! diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index b5879ae..91dfaab 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -332,6 +332,8 @@ void QWidget::setInputContext(QInputContext *context) if (d->ic) delete d->ic; d->ic = context; + if (d->ic) + d->ic->setParent(this); #endif } diff --git a/tests/auto/qapplication/tst_qapplication.cpp b/tests/auto/qapplication/tst_qapplication.cpp index 43fbba1..1a38070 100644 --- a/tests/auto/qapplication/tst_qapplication.cpp +++ b/tests/auto/qapplication/tst_qapplication.cpp @@ -189,15 +189,22 @@ void tst_QApplication::getSetCheck() { int argc = 0; QApplication obj1(argc, 0, QApplication::GuiServer); - // QInputContext * QApplication::inputContext() - // void QApplication::setInputContext(QInputContext *) MyInputContext *var1 = new MyInputContext; + + // QApplication takes ownership, so check for reparenting: obj1.setInputContext(var1); - QCOMPARE((QInputContext *)var1, obj1.inputContext()); + QCOMPARE(var1->parent(), static_cast(&obj1)); + + // Test for self-assignment: + obj1.setInputContext(obj1.inputContext()); + QVERIFY(obj1.inputContext()); + QCOMPARE(static_cast(var1), obj1.inputContext()); + + // Resetting the input context to 0 is not allowed: QTest::ignoreMessage(QtWarningMsg, "QApplication::setInputContext: called with 0 input context"); - obj1.setInputContext((QInputContext *)0); - QCOMPARE((QInputContext *)var1, obj1.inputContext()); - // delete var1; // No delete, since QApplication takes ownership + obj1.setInputContext(0); + + QCOMPARE(static_cast(var1), obj1.inputContext()); } class CloseEventTestWindow : public QWidget diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp index 5d47aed..83a9e3a 100644 --- a/tests/auto/qwidget/tst_qwidget.cpp +++ b/tests/auto/qwidget/tst_qwidget.cpp @@ -605,10 +605,14 @@ void tst_QWidget::getSetCheck() obj1.setAttribute(Qt::WA_InputMethodEnabled); obj1.setInputContext(var13); QCOMPARE(static_cast(var13), obj1.inputContext()); + // QWidget takes ownership, so check parent + QCOMPARE(var13->parent(), static_cast(&obj1)); + // Check self assignment + obj1.setInputContext(obj1.inputContext()); + QCOMPARE(static_cast(var13), obj1.inputContext()); obj1.setInputContext((QInputContext *)0); QCOMPARE(qApp->inputContext(), obj1.inputContext()); QVERIFY(qApp->inputContext() != var13); - //delete var13; // No delete, since QWidget takes ownership // bool QWidget::autoFillBackground() // void QWidget::setAutoFillBackground(bool) -- cgit v0.12 From dfbd44c8ec75d3b0156547ef3fb5811a4548a0a5 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 7 Jun 2010 18:49:48 +0200 Subject: Unbreak Linux build when qendian.h is included before qglobal.h --- mkspecs/common/g++.conf | 2 +- mkspecs/common/linux.conf | 4 +-- src/corelib/global/qendian.h | 1 + src/gui/image/qimage.cpp | 10 ++++++ src/plugins/imageformats/gif/qgifhandler.cpp | 49 ++++++++++++++-------------- 5 files changed, 38 insertions(+), 28 deletions(-) diff --git a/mkspecs/common/g++.conf b/mkspecs/common/g++.conf index d3db24a..b3d6296 100644 --- a/mkspecs/common/g++.conf +++ b/mkspecs/common/g++.conf @@ -7,7 +7,7 @@ QMAKE_CFLAGS += -pipe QMAKE_CFLAGS_DEPS += -M QMAKE_CFLAGS_WARN_ON += -Wall -W QMAKE_CFLAGS_WARN_OFF += -w -QMAKE_CFLAGS_RELEASE += -O2 +QMAKE_CFLAGS_RELEASE += -g -O2 QMAKE_CFLAGS_DEBUG += -g QMAKE_CFLAGS_SHLIB += -fPIC QMAKE_CFLAGS_STATIC_LIB += -fPIC diff --git a/mkspecs/common/linux.conf b/mkspecs/common/linux.conf index 4fbe2dc..320ae71 100644 --- a/mkspecs/common/linux.conf +++ b/mkspecs/common/linux.conf @@ -51,8 +51,8 @@ QMAKE_COPY_DIR = $(COPY) -r QMAKE_MOVE = mv -f QMAKE_DEL_FILE = rm -f QMAKE_DEL_DIR = rmdir -QMAKE_STRIP = strip -QMAKE_STRIPFLAGS_LIB += --strip-unneeded +#QMAKE_STRIP = strip +#QMAKE_STRIPFLAGS_LIB += --strip-unneeded QMAKE_CHK_DIR_EXISTS = test -d QMAKE_MKDIR = mkdir -p QMAKE_INSTALL_FILE = install -m 644 -p diff --git a/src/corelib/global/qendian.h b/src/corelib/global/qendian.h index 353e8b9..01550cf 100644 --- a/src/corelib/global/qendian.h +++ b/src/corelib/global/qendian.h @@ -43,6 +43,7 @@ #define QENDIAN_H #ifdef Q_OS_LINUX +# include QT_BEGIN_INCLUDE_NAMESPACE # include QT_END_INCLUDE_NAMESPACE diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp index 98f235e..6408432 100644 --- a/src/gui/image/qimage.cpp +++ b/src/gui/image/qimage.cpp @@ -245,6 +245,11 @@ QImageData * QImageData::create(const QSize &size, QImage::Format format, int nu return 0; } + if (d->nbytes == 15840000) + { + d->nbytes = 15840000; + } + d->ref.ref(); return d.take(); @@ -898,6 +903,11 @@ QImageData *QImageData::create(uchar *data, int width, int height, int bpl, QIm d->bytes_per_line = bpl; d->nbytes = d->bytes_per_line * height; + if (d->nbytes == 15840000) + { + d->nbytes = 15840000; + } + return d; } diff --git a/src/plugins/imageformats/gif/qgifhandler.cpp b/src/plugins/imageformats/gif/qgifhandler.cpp index 8abc2d1..fa89f0a 100644 --- a/src/plugins/imageformats/gif/qgifhandler.cpp +++ b/src/plugins/imageformats/gif/qgifhandler.cpp @@ -78,8 +78,8 @@ public: bool partialNewFrame; private: - void fillRect(QImage *image, int x, int y, int w, int h, QRgb col); - inline QRgb color(uchar index) const; + void fillRect(QImage *image, int x, int y, int w, int h, uchar col); + //inline uchar color(uchar index) const; // GIF specific stuff QRgb* globalcmap; @@ -197,13 +197,13 @@ void QGIFFormat::disposePrevious(QImage *image) case RestoreBackground: if (trans_index>=0) { // Easy: we use the transparent color - fillRect(image, l, t, r-l+1, b-t+1, Q_TRANSPARENT); + fillRect(image, l, t, r-l+1, b-t+1, trans_index); } else if (bgcol>=0) { // Easy: we use the bgcol given - fillRect(image, l, t, r-l+1, b-t+1, color(bgcol)); + fillRect(image, l, t, r-l+1, b-t+1, bgcol); } else { // Impossible: We don't know of a bgcol - use pixel 0 - QRgb *bits = (QRgb*)image->bits(); + const uchar *bits = image->constBits(); fillRect(image, l, t, r-l+1, b-t+1, bits[0]); } // ### Changed: QRect(l, t, r-l+1, b-t+1) @@ -211,9 +211,7 @@ void QGIFFormat::disposePrevious(QImage *image) case RestoreImage: { if (frame >= 0) { for (int ln=t; ln<=b; ln++) { - memcpy(image->scanLine(ln)+l, - backingstore.scanLine(ln-t), - (r-l+1)*sizeof(QRgb)); + memcpy(image->scanLine(ln)+l, backingstore.constScanLine(ln-t), (r-l+1)); } // ### Changed: QRect(l, t, r-l+1, b-t+1) } @@ -341,9 +339,8 @@ int QGIFFormat::decode(QImage *image, const uchar *buffer, int length, if (sheight <= 0) sheight = newtop + newheight; - QImage::Format format = trans_index >= 0 ? QImage::Format_ARGB32 : QImage::Format_RGB32; if (image->isNull()) { - (*image) = QImage(swidth, sheight, format); + (*image) = QImage(swidth, sheight, QImage::Format_Indexed8); bpl = image->bytesPerLine(); bits = image->bits(); memset(bits, 0, image->byteCount()); @@ -377,10 +374,10 @@ int QGIFFormat::decode(QImage *image, const uchar *buffer, int length, if (left || top || width= 0) { - fillRect(image, 0, 0, swidth, sheight, color(trans_index)); + fillRect(image, 0, 0, swidth, sheight, trans_index); // ### Changed: QRect(0, 0, swidth, sheight) } else if (bgcol>=0) { - fillRect(image, 0, 0, swidth, sheight, color(bgcol)); + fillRect(image, 0, 0, swidth, sheight, bgcol); // ### Changed: QRect(0, 0, swidth, sheight) } } @@ -399,7 +396,7 @@ int QGIFFormat::decode(QImage *image, const uchar *buffer, int length, // We just use the backing store as a byte array backingstore = QImage(qMax(backingstore.width(), w), qMax(backingstore.height(), h), - QImage::Format_RGB32); + QImage::Format_Indexed8); memset(bits, 0, image->byteCount()); } const int dest_bpl = backingstore.bytesPerLine(); @@ -479,7 +476,7 @@ int QGIFFormat::decode(QImage *image, const uchar *buffer, int length, if (needfirst) { firstcode=oldcode=code; if (!out_of_bounds && image->height() > y && firstcode!=trans_index) - ((QRgb*)FAST_SCAN_LINE(bits, bpl, y))[x] = color(firstcode); + FAST_SCAN_LINE(bits, bpl, y)[x] = firstcode; x++; if (x>=swidth) out_of_bounds = true; needfirst=false; @@ -909,11 +906,11 @@ void QGIFFormat::scan(QIODevice *device, QVector *imageSizes, int *loopCo return; } -void QGIFFormat::fillRect(QImage *image, int col, int row, int w, int h, QRgb color) +void QGIFFormat::fillRect(QImage *image, int col, int row, int w, int h, uchar color) { if (w>0) { for (int j=0; jscanLine(j+row); + uchar *line = (uchar*)image->scanLine(j+row); for (int i=0; i= sheight) out_of_bounds=true; //y=bottom; } -inline QRgb QGIFFormat::color(uchar index) const +#if 0 +inline uchar QGIFFormat::color(uchar index) const { if (index == trans_index || index > ncols) - return Q_TRANSPARENT; + return trans_index; - QRgb *map = lcmap ? localcmap : globalcmap; + uchar *map = lcmap ? localcmap : globalcmap; return map ? map[index] : 0; } +#endif //------------------------------------------------------------------------- //------------------------------------------------------------------------- -- cgit v0.12 From fee316304b48bb3437e122c34b2127d6ccc4f469 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 7 Jun 2010 19:08:46 +0200 Subject: Revert accidental commit of irrelevant stuff. Silly mondays.. This reverts commit dfbd44c8ec75d3b0156547ef3fb5811a4548a0a5. --- mkspecs/common/g++.conf | 2 +- mkspecs/common/linux.conf | 4 +-- src/corelib/global/qendian.h | 1 - src/gui/image/qimage.cpp | 10 ------ src/plugins/imageformats/gif/qgifhandler.cpp | 49 ++++++++++++++-------------- 5 files changed, 28 insertions(+), 38 deletions(-) diff --git a/mkspecs/common/g++.conf b/mkspecs/common/g++.conf index b3d6296..d3db24a 100644 --- a/mkspecs/common/g++.conf +++ b/mkspecs/common/g++.conf @@ -7,7 +7,7 @@ QMAKE_CFLAGS += -pipe QMAKE_CFLAGS_DEPS += -M QMAKE_CFLAGS_WARN_ON += -Wall -W QMAKE_CFLAGS_WARN_OFF += -w -QMAKE_CFLAGS_RELEASE += -g -O2 +QMAKE_CFLAGS_RELEASE += -O2 QMAKE_CFLAGS_DEBUG += -g QMAKE_CFLAGS_SHLIB += -fPIC QMAKE_CFLAGS_STATIC_LIB += -fPIC diff --git a/mkspecs/common/linux.conf b/mkspecs/common/linux.conf index 320ae71..4fbe2dc 100644 --- a/mkspecs/common/linux.conf +++ b/mkspecs/common/linux.conf @@ -51,8 +51,8 @@ QMAKE_COPY_DIR = $(COPY) -r QMAKE_MOVE = mv -f QMAKE_DEL_FILE = rm -f QMAKE_DEL_DIR = rmdir -#QMAKE_STRIP = strip -#QMAKE_STRIPFLAGS_LIB += --strip-unneeded +QMAKE_STRIP = strip +QMAKE_STRIPFLAGS_LIB += --strip-unneeded QMAKE_CHK_DIR_EXISTS = test -d QMAKE_MKDIR = mkdir -p QMAKE_INSTALL_FILE = install -m 644 -p diff --git a/src/corelib/global/qendian.h b/src/corelib/global/qendian.h index 01550cf..353e8b9 100644 --- a/src/corelib/global/qendian.h +++ b/src/corelib/global/qendian.h @@ -43,7 +43,6 @@ #define QENDIAN_H #ifdef Q_OS_LINUX -# include QT_BEGIN_INCLUDE_NAMESPACE # include QT_END_INCLUDE_NAMESPACE diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp index 6408432..98f235e 100644 --- a/src/gui/image/qimage.cpp +++ b/src/gui/image/qimage.cpp @@ -245,11 +245,6 @@ QImageData * QImageData::create(const QSize &size, QImage::Format format, int nu return 0; } - if (d->nbytes == 15840000) - { - d->nbytes = 15840000; - } - d->ref.ref(); return d.take(); @@ -903,11 +898,6 @@ QImageData *QImageData::create(uchar *data, int width, int height, int bpl, QIm d->bytes_per_line = bpl; d->nbytes = d->bytes_per_line * height; - if (d->nbytes == 15840000) - { - d->nbytes = 15840000; - } - return d; } diff --git a/src/plugins/imageformats/gif/qgifhandler.cpp b/src/plugins/imageformats/gif/qgifhandler.cpp index fa89f0a..8abc2d1 100644 --- a/src/plugins/imageformats/gif/qgifhandler.cpp +++ b/src/plugins/imageformats/gif/qgifhandler.cpp @@ -78,8 +78,8 @@ public: bool partialNewFrame; private: - void fillRect(QImage *image, int x, int y, int w, int h, uchar col); - //inline uchar color(uchar index) const; + void fillRect(QImage *image, int x, int y, int w, int h, QRgb col); + inline QRgb color(uchar index) const; // GIF specific stuff QRgb* globalcmap; @@ -197,13 +197,13 @@ void QGIFFormat::disposePrevious(QImage *image) case RestoreBackground: if (trans_index>=0) { // Easy: we use the transparent color - fillRect(image, l, t, r-l+1, b-t+1, trans_index); + fillRect(image, l, t, r-l+1, b-t+1, Q_TRANSPARENT); } else if (bgcol>=0) { // Easy: we use the bgcol given - fillRect(image, l, t, r-l+1, b-t+1, bgcol); + fillRect(image, l, t, r-l+1, b-t+1, color(bgcol)); } else { // Impossible: We don't know of a bgcol - use pixel 0 - const uchar *bits = image->constBits(); + QRgb *bits = (QRgb*)image->bits(); fillRect(image, l, t, r-l+1, b-t+1, bits[0]); } // ### Changed: QRect(l, t, r-l+1, b-t+1) @@ -211,7 +211,9 @@ void QGIFFormat::disposePrevious(QImage *image) case RestoreImage: { if (frame >= 0) { for (int ln=t; ln<=b; ln++) { - memcpy(image->scanLine(ln)+l, backingstore.constScanLine(ln-t), (r-l+1)); + memcpy(image->scanLine(ln)+l, + backingstore.scanLine(ln-t), + (r-l+1)*sizeof(QRgb)); } // ### Changed: QRect(l, t, r-l+1, b-t+1) } @@ -339,8 +341,9 @@ int QGIFFormat::decode(QImage *image, const uchar *buffer, int length, if (sheight <= 0) sheight = newtop + newheight; + QImage::Format format = trans_index >= 0 ? QImage::Format_ARGB32 : QImage::Format_RGB32; if (image->isNull()) { - (*image) = QImage(swidth, sheight, QImage::Format_Indexed8); + (*image) = QImage(swidth, sheight, format); bpl = image->bytesPerLine(); bits = image->bits(); memset(bits, 0, image->byteCount()); @@ -374,10 +377,10 @@ int QGIFFormat::decode(QImage *image, const uchar *buffer, int length, if (left || top || width= 0) { - fillRect(image, 0, 0, swidth, sheight, trans_index); + fillRect(image, 0, 0, swidth, sheight, color(trans_index)); // ### Changed: QRect(0, 0, swidth, sheight) } else if (bgcol>=0) { - fillRect(image, 0, 0, swidth, sheight, bgcol); + fillRect(image, 0, 0, swidth, sheight, color(bgcol)); // ### Changed: QRect(0, 0, swidth, sheight) } } @@ -396,7 +399,7 @@ int QGIFFormat::decode(QImage *image, const uchar *buffer, int length, // We just use the backing store as a byte array backingstore = QImage(qMax(backingstore.width(), w), qMax(backingstore.height(), h), - QImage::Format_Indexed8); + QImage::Format_RGB32); memset(bits, 0, image->byteCount()); } const int dest_bpl = backingstore.bytesPerLine(); @@ -476,7 +479,7 @@ int QGIFFormat::decode(QImage *image, const uchar *buffer, int length, if (needfirst) { firstcode=oldcode=code; if (!out_of_bounds && image->height() > y && firstcode!=trans_index) - FAST_SCAN_LINE(bits, bpl, y)[x] = firstcode; + ((QRgb*)FAST_SCAN_LINE(bits, bpl, y))[x] = color(firstcode); x++; if (x>=swidth) out_of_bounds = true; needfirst=false; @@ -906,11 +909,11 @@ void QGIFFormat::scan(QIODevice *device, QVector *imageSizes, int *loopCo return; } -void QGIFFormat::fillRect(QImage *image, int col, int row, int w, int h, uchar color) +void QGIFFormat::fillRect(QImage *image, int col, int row, int w, int h, QRgb color) { if (w>0) { for (int j=0; jscanLine(j+row); + QRgb *line = (QRgb*)image->scanLine(j+row); for (int i=0; i= sheight) out_of_bounds=true; //y=bottom; } -#if 0 -inline uchar QGIFFormat::color(uchar index) const +inline QRgb QGIFFormat::color(uchar index) const { if (index == trans_index || index > ncols) - return trans_index; + return Q_TRANSPARENT; - uchar *map = lcmap ? localcmap : globalcmap; + QRgb *map = lcmap ? localcmap : globalcmap; return map ? map[index] : 0; } -#endif //------------------------------------------------------------------------- //------------------------------------------------------------------------- -- cgit v0.12 From d70dcb5f120affb8a908d4fbcdf16eef4c51389c Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 7 Jun 2010 19:10:44 +0200 Subject: Unbreak Linux build when qendian.h is included before qglobal.h --- src/corelib/global/qendian.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/corelib/global/qendian.h b/src/corelib/global/qendian.h index 353e8b9..01550cf 100644 --- a/src/corelib/global/qendian.h +++ b/src/corelib/global/qendian.h @@ -43,6 +43,7 @@ #define QENDIAN_H #ifdef Q_OS_LINUX +# include QT_BEGIN_INCLUDE_NAMESPACE # include QT_END_INCLUDE_NAMESPACE -- cgit v0.12 From 004ed1e661614273111629e932f4c1826b3cd353 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Mon, 7 Jun 2010 19:58:09 +0200 Subject: Doc: Fixed whitespace in the Simplified Chinese doc configuration. Reviewed-by: Trust Me --- tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf | 52 +++++++++++++-------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf b/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf index c324926..909a2d4 100644 --- a/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf +++ b/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf @@ -30,32 +30,32 @@ qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.0 # Files not referenced in any qdoc file (last four are needed by qtdemo) # See also extraimages.HTML qhp.Qt.extraFiles = index.html \ - images/bg_l.png \ - images/bg_l_blank.png \ - images/bg_r.png \ - images/box_bg.png \ - images/breadcrumb.png \ - images/bullet_gt.png \ - images/bullet_dn.png \ - images/bullet_sq.png \ - images/bullet_up.png \ - images/feedbackground.png \ - images/horBar.png \ - images/page.png \ - images/page_bg.png \ - images/sprites-combined.png \ - images/arrow-down.png \ - images/spinner.gif \ - images/stylesheet-coffee-plastique.png \ - images/taskmenuextension-example.png \ - images/coloreditorfactoryimage.png \ - images/dynamiclayouts-example.png \ - scripts/functions.js \ - scripts/jquery.js \ - style/style_ie6.css \ - style/style_ie7.css \ - style/style_ie8.css \ - style/style.css + images/bg_l.png \ + images/bg_l_blank.png \ + images/bg_r.png \ + images/box_bg.png \ + images/breadcrumb.png \ + images/bullet_gt.png \ + images/bullet_dn.png \ + images/bullet_sq.png \ + images/bullet_up.png \ + images/feedbackground.png \ + images/horBar.png \ + images/page.png \ + images/page_bg.png \ + images/sprites-combined.png \ + images/arrow-down.png \ + images/spinner.gif \ + images/stylesheet-coffee-plastique.png \ + images/taskmenuextension-example.png \ + images/coloreditorfactoryimage.png \ + images/dynamiclayouts-example.png \ + scripts/functions.js \ + scripts/jquery.js \ + style/style_ie6.css \ + style/style_ie7.css \ + style/style_ie8.css \ + style/style.css language = Cpp -- cgit v0.12 From f2c30b0f13a4bacbb937d44c8e88ac1c202139cd Mon Sep 17 00:00:00 2001 From: David Boddie Date: Mon, 7 Jun 2010 20:45:09 +0200 Subject: Doc: Fixed whitespace in the other configuration file for zh_CN. Reviewed-by: Trust Me --- tools/qdoc3/test/qt_zh_CN.qdocconf | 44 +++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/tools/qdoc3/test/qt_zh_CN.qdocconf b/tools/qdoc3/test/qt_zh_CN.qdocconf index e894607..4983f9e 100644 --- a/tools/qdoc3/test/qt_zh_CN.qdocconf +++ b/tools/qdoc3/test/qt_zh_CN.qdocconf @@ -32,28 +32,28 @@ qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.0 # Files not referenced in any qdoc file (last four are needed by qtdemo) # See also extraimages.HTML qhp.Qt.extraFiles = index.html \ - images/bg_l.png \ - images/bg_l_blank.png \ - images/bg_r.png \ - images/box_bg.png \ - images/breadcrumb.png \ - images/bullet_gt.png \ - images/bullet_dn.png \ - images/bullet_sq.png \ - images/bullet_up.png \ - images/feedbackground.png \ - images/horBar.png \ - images/page.png \ - images/page_bg.png \ - images/sprites-combined.png \ - images/spinner.gif \ - images/stylesheet-coffee-plastique.png \ - images/taskmenuextension-example.png \ - images/coloreditorfactoryimage.png \ - images/dynamiclayouts-example.png \ - scripts/functions.js \ - scripts/jquery.js \ - style/style.css + images/bg_l.png \ + images/bg_l_blank.png \ + images/bg_r.png \ + images/box_bg.png \ + images/breadcrumb.png \ + images/bullet_gt.png \ + images/bullet_dn.png \ + images/bullet_sq.png \ + images/bullet_up.png \ + images/feedbackground.png \ + images/horBar.png \ + images/page.png \ + images/page_bg.png \ + images/sprites-combined.png \ + images/spinner.gif \ + images/stylesheet-coffee-plastique.png \ + images/taskmenuextension-example.png \ + images/coloreditorfactoryimage.png \ + images/dynamiclayouts-example.png \ + scripts/functions.js \ + scripts/jquery.js \ + style/style.css language = Cpp -- cgit v0.12 From 249cb1cd68f9bb5417823f534b1af1f8dafccbc5 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy Date: Wed, 2 Jun 2010 15:41:22 +1000 Subject: Split Symbian bearer plugin into three platform specfic plugins Symbian bearer plugin has more functionality when built for newer platforms, so split the plugin into three platform specific plugins, and deploy the correct one depending on what the device supports. Written by: Miikka Heikkinen --- src/plugins/bearer/symbian/3_1/3_1.pro | 4 +++ src/plugins/bearer/symbian/3_2/3_2.pro | 12 +++++++ src/plugins/bearer/symbian/symbian.pri | 30 ++++++++++++++++ src/plugins/bearer/symbian/symbian.pro | 42 ++-------------------- src/plugins/bearer/symbian/symbian_3/symbian_3.pro | 14 ++++++++ src/s60installs/qsymbianbearer.qtplugin | 1 + src/s60installs/s60installs.pro | 25 +++++++++---- 7 files changed, 81 insertions(+), 47 deletions(-) create mode 100644 src/plugins/bearer/symbian/3_1/3_1.pro create mode 100644 src/plugins/bearer/symbian/3_2/3_2.pro create mode 100644 src/plugins/bearer/symbian/symbian.pri create mode 100644 src/plugins/bearer/symbian/symbian_3/symbian_3.pro create mode 100644 src/s60installs/qsymbianbearer.qtplugin diff --git a/src/plugins/bearer/symbian/3_1/3_1.pro b/src/plugins/bearer/symbian/3_1/3_1.pro new file mode 100644 index 0000000..a60d18b --- /dev/null +++ b/src/plugins/bearer/symbian/3_1/3_1.pro @@ -0,0 +1,4 @@ +include(../symbian.pri) + +LIBS += -lapengine +TARGET = $${TARGET}_3_1 diff --git a/src/plugins/bearer/symbian/3_2/3_2.pro b/src/plugins/bearer/symbian/3_2/3_2.pro new file mode 100644 index 0000000..4e5b416 --- /dev/null +++ b/src/plugins/bearer/symbian/3_2/3_2.pro @@ -0,0 +1,12 @@ +include(../symbian.pri) + +exists($${EPOCROOT}epoc32/release/winscw/udeb/cmmanager.lib)| \ +exists($${EPOCROOT}epoc32/release/armv5/lib/cmmanager.lib) { + DEFINES += SNAP_FUNCTIONALITY_AVAILABLE + LIBS += -lcmmanager +} else { + # Fall back to 3_1 implementation on platforms that do not have cmmanager + LIBS += -lapengine +} + +TARGET = $${TARGET}_3_2 diff --git a/src/plugins/bearer/symbian/symbian.pri b/src/plugins/bearer/symbian/symbian.pri new file mode 100644 index 0000000..bfcd9ed --- /dev/null +++ b/src/plugins/bearer/symbian/symbian.pri @@ -0,0 +1,30 @@ +TARGET = qsymbianbearer +include(../../qpluginbase.pri) + +QT += network + +HEADERS += ../symbianengine.h \ + ../qnetworksession_impl.h + +SOURCES += ../symbianengine.cpp \ + ../qnetworksession_impl.cpp \ + ../main.cpp + +TARGET.UID3=0x20021319 + +INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE +symbian-abld:INCLUDEPATH += $$QT_BUILD_TREE/include/QtNetwork/private + +LIBS += -lcommdb \ + -lapsettingshandlerui \ + -lconnmon \ + -lcentralrepository \ + -lesock \ + -linsock \ + -lecom \ + -lefsrv \ + -lnetmeta + +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/bearer +target.path += $$[QT_INSTALL_PLUGINS]/bearer +INSTALLS += target diff --git a/src/plugins/bearer/symbian/symbian.pro b/src/plugins/bearer/symbian/symbian.pro index 4f1e51c..f320eb6 100644 --- a/src/plugins/bearer/symbian/symbian.pro +++ b/src/plugins/bearer/symbian/symbian.pro @@ -1,41 +1,3 @@ -TARGET = qsymbianbearer -include(../../qpluginbase.pri) +TEMPLATE = subdirs -QT += network - -HEADERS += symbianengine.h \ - qnetworksession_impl.h - -SOURCES += symbianengine.cpp \ - qnetworksession_impl.cpp \ - main.cpp - -symbian { - TARGET.UID3=0x20021319 - exists($${EPOCROOT}epoc32/release/winscw/udeb/cmmanager.lib)| \ - exists($${EPOCROOT}epoc32/release/armv5/lib/cmmanager.lib) { - message("Building with SNAP support") - DEFINES += SNAP_FUNCTIONALITY_AVAILABLE - LIBS += -lcmmanager - } else { - message("Building without SNAP support") - LIBS += -lapengine - } -} - -INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE -symbian-abld:INCLUDEPATH += $$QT_BUILD_TREE/include/QtNetwork/private - -LIBS += -lcommdb \ - -lapsettingshandlerui \ - -lconnmon \ - -lcentralrepository \ - -lesock \ - -linsock \ - -lecom \ - -lefsrv \ - -lnetmeta - -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/bearer -target.path += $$[QT_INSTALL_PLUGINS]/bearer -INSTALLS += target +SUBDIRS += 3_1 3_2 symbian_3 \ No newline at end of file diff --git a/src/plugins/bearer/symbian/symbian_3/symbian_3.pro b/src/plugins/bearer/symbian/symbian_3/symbian_3.pro new file mode 100644 index 0000000..455aa67 --- /dev/null +++ b/src/plugins/bearer/symbian/symbian_3/symbian_3.pro @@ -0,0 +1,14 @@ +include(../symbian.pri) + +exists($${EPOCROOT}epoc32/release/winscw/udeb/cmmanager.lib)| \ +exists($${EPOCROOT}epoc32/release/armv5/lib/cmmanager.lib) { + DEFINES += SNAP_FUNCTIONALITY_AVAILABLE + LIBS += -lcmmanager + + exists($$MW_LAYER_PUBLIC_EXPORT_PATH(extendedconnpref.h)) { + DEFINES += OCC_FUNCTIONALITY_AVAILABLE + } +} else { + # Fall back to 3_1 implementation on platforms that do not have cmmanager + LIBS += -lapengine +} diff --git a/src/s60installs/qsymbianbearer.qtplugin b/src/s60installs/qsymbianbearer.qtplugin new file mode 100644 index 0000000..5c45bdd --- /dev/null +++ b/src/s60installs/qsymbianbearer.qtplugin @@ -0,0 +1 @@ +This file is a Qt plugin stub file. The real Qt plugin is located in /sys/bin. Created:2010-06-02T14:02:21 diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro index d3d9eed..1e0e268 100644 --- a/src/s60installs/s60installs.pro +++ b/src/s60installs/s60installs.pro @@ -54,20 +54,35 @@ symbian: { symbian-abld|symbian-sbsv2 { pluginLocations = $${EPOCROOT}epoc32/release/$(PLATFORM)/$(TARGET) + bearerPluginLocation = $${EPOCROOT}epoc32/release/$(PLATFORM)/$(TARGET) + bearerStubZ = $${EPOCROOT}$${HW_ZDIR}$${QT_PLUGINS_BASE_DIR}/bearer/qsymbianbearer$${QT_LIBINFIX}.qtplugin + BLD_INF_RULES.prj_exports += \ + "qsymbianbearer.qtplugin $$bearerStubZ" \ + "qsymbianbearer.qtplugin $${EPOCROOT}/epoc32/winscw/c$${QT_PLUGINS_BASE_DIR}/bearer/qsymbianbearer$${QT_LIBINFIX}.qtplugin" } else { pluginLocations = $$QT_BUILD_TREE/plugins/s60 + bearerPluginLocation = $$QT_BUILD_TREE/plugins/bearer + bearerStubZ = $${PWD}/qsymbianbearer.qtplugin } qts60plugindeployment = \ - "IF package(0x1028315F)" \ + "IF package(0x20022E6D)" \ " \"$$pluginLocations/qts60plugin_5_0$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_5_0$${QT_LIBINFIX}.dll\"" \ + " \"$$bearerPluginLocation/qsymbianbearer$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \ + "ELSEIF package(0x1028315F)" \ + " \"$$pluginLocations/qts60plugin_5_0$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_5_0$${QT_LIBINFIX}.dll\"" \ + " \"$$bearerPluginLocation/qsymbianbearer_3_2$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \ "ELSEIF package(0x102752AE)" \ " \"$$pluginLocations/qts60plugin_3_2$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_3_2$${QT_LIBINFIX}.dll\"" \ + " \"$$bearerPluginLocation/qsymbianbearer_3_2$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \ "ELSEIF package(0x102032BE)" \ " \"$$pluginLocations/qts60plugin_3_1$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_3_1$${QT_LIBINFIX}.dll\"" \ + " \"$$bearerPluginLocation/qsymbianbearer_3_1$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \ "ELSE" \ " \"$$pluginLocations/qts60plugin_5_0$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_5_0$${QT_LIBINFIX}.dll\"" \ - "ENDIF" + " \"$$bearerPluginLocation/qsymbianbearer$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \ + "ENDIF" \ + " \"$$bearerStubZ\" - \"c:$$replace(QT_PLUGINS_BASE_DIR,/,\\)\\bearer\\qsymbianbearer$${QT_LIBINFIX}.qtplugin\" qtlibraries.pkg_postrules += qts60plugindeployment @@ -118,15 +133,11 @@ symbian: { qtbackup.sources = backup_registration.xml qtbackup.path = c:/private/10202D56/import/packages/$$replace(TARGET.UID3, 0x,) - bearer_plugins.path = c:$$QT_PLUGINS_BASE_DIR/bearer - bearer_plugins.sources += $$QT_BUILD_TREE/plugins/bearer/qsymbianbearer$${QT_LIBINFIX}.dll - DEPLOYMENT += qtlibraries \ qtbackup \ imageformats_plugins \ codecs_plugins \ - graphicssystems_plugins \ - bearer_plugins + graphicssystems_plugins contains(QT_CONFIG, svg): { qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtSvg$${QT_LIBINFIX}.dll -- cgit v0.12 From c252a57f59fb6291d0e9a6b772b208bd1763779f Mon Sep 17 00:00:00 2001 From: Anders Bakken Date: Tue, 8 Jun 2010 10:16:16 +0200 Subject: Fix configure test for DirectFB The availability of directfb-config does not depend on pkg-config Merge-request: 2409 Reviewed-by: Oswald Buddenhagen --- configure | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/configure b/configure index 916b2e5..9aff8cd 100755 --- a/configure +++ b/configure @@ -5834,14 +5834,12 @@ if [ "$PLATFORM_QWS" = "yes" ]; then fi if [ "${screen}" = "directfb" ] && [ "${CFG_CONFIGURE_EXIT_ON_ERROR}" = "yes" ]; then - if [ -n "$PKG_CONFIG" ]; then - if $PKG_CONFIG --exists directfb 2>/dev/null; then - QT_CFLAGS_DIRECTFB=`$PKG_CONFIG --cflags directfb 2>/dev/null` - QT_LIBS_DIRECTFB=`$PKG_CONFIG --libs directfb 2>/dev/null` - elif directfb-config --version >/dev/null 2>&1; then - QT_CFLAGS_DIRECTFB=`directfb-config --cflags 2>/dev/null` - QT_LIBS_DIRECTFB=`directfb-config --libs 2>/dev/null` - fi + if test -n "$PKG_CONFIG" && "$PKG_CONFIG" --exists directfb 2>/dev/null; then + QT_CFLAGS_DIRECTFB=`$PKG_CONFIG --cflags directfb 2>/dev/null` + QT_LIBS_DIRECTFB=`$PKG_CONFIG --libs directfb 2>/dev/null` + elif directfb-config --version >/dev/null 2>&1; then + QT_CFLAGS_DIRECTFB=`directfb-config --cflags 2>/dev/null` + QT_LIBS_DIRECTFB=`directfb-config --libs 2>/dev/null` fi # QMake variables set here override those in the mkspec. Therefore we only set the variables here if they are not zero. -- cgit v0.12 From 77046223395c290d18b69850ee4f05d1660b15df Mon Sep 17 00:00:00 2001 From: Anders Bakken Date: Tue, 8 Jun 2010 10:19:54 +0200 Subject: Fix a freetype link failure. qfontengine_ft.cpp uses the function FT_GlyphSlot_Embolden but ftsynth.c (where the function is implmented) isn't compiled in when QT_CONFIG contains freetype. Merge-request: 672 Reviewed-by: Oswald Buddenhagen --- src/gui/text/text.pri | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/text/text.pri b/src/gui/text/text.pri index 9ec3142..34311a9 100644 --- a/src/gui/text/text.pri +++ b/src/gui/text/text.pri @@ -138,7 +138,8 @@ contains(QT_CONFIG, freetype) { ../3rdparty/freetype/src/base/ftinit.c \ ../3rdparty/freetype/src/base/ftmm.c \ ../3rdparty/freetype/src/base/fttype1.c \ - ../3rdparty/freetype/src/base/ftbitmap.c\ + ../3rdparty/freetype/src/base/ftsynth.c \ + ../3rdparty/freetype/src/base/ftbitmap.c \ ../3rdparty/freetype/src/bdf/bdf.c \ ../3rdparty/freetype/src/cache/ftcache.c \ ../3rdparty/freetype/src/cff/cff.c \ -- cgit v0.12 From dcb9b85376718d768f538e19ae231f5e061b7b31 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 8 Jun 2010 10:31:41 +0200 Subject: I10n: Update German translations for 4.7.0 --- translations/qt_de.ts | 477 ++++++++++++++++++++++++++------------------------ 1 file changed, 253 insertions(+), 224 deletions(-) diff --git a/translations/qt_de.ts b/translations/qt_de.ts index 226b7da..7d32ead 100644 --- a/translations/qt_de.ts +++ b/translations/qt_de.ts @@ -4,7 +4,7 @@ CloseButton - + Close Tab Schließen @@ -12,7 +12,7 @@ FakeReply - + Fake error ! Fake error ! @@ -25,7 +25,7 @@ MAC_APPLICATION_MENU - + Services Dienste @@ -1275,7 +1275,7 @@ nach Diese Socket-Operation wird nicht unterstützt - + Socket operation timed out Das Zeitlimit für die Operation wurde überschritten @@ -1597,7 +1597,7 @@ nach QDeclarativeAbstractAnimation - + Cannot animate non-existent property "%1" Die Eigenschaft '%1" existiert nicht und kann daher nicht animiert werden @@ -1606,11 +1606,24 @@ nach Cannot animate read-only property "%1" Die Eigenschaft '%1" ist schreibgeschützt und kann daher nicht animiert werden + + + Animation is an abstract class + Die Klasse Animation ist abstrakt + + + + QDeclarativeAnchorAnimation + + + Cannot set a duration of < 0 + Es kann keine Zeitdauer <0 gesetzt werden + QDeclarativeAnchors - + Possible anchor loop detected on fill. Bei der Fülloperation wurde eine potentielle Endlosschleife der Anker festgestellt. @@ -1676,9 +1689,17 @@ nach + QDeclarativeAnimatedImage + + + Qt was built without support for QMovie + Diese Version der Qt-Bibliothek wurde ohne Unterstützung für die Klasse QMovie erstellt + + + QDeclarativeBehavior - + Cannot change the animation assigned to a Behavior. Die zu einem Behavior-Element gehörende Animation kann nicht geändert werden. @@ -1686,7 +1707,7 @@ nach QDeclarativeBinding - + Binding loop detected for property "%1" Bei der für die Eigenschaft "%1" angegebenen Bindung wurde eine Endlosschleife festgestellt @@ -1694,7 +1715,7 @@ nach QDeclarativeCompiledBindings - + Binding loop detected for property "%1" Bei der für die Eigenschaft "%1" angegebenen Bindung wurde eine Endlosschleife festgestellt @@ -1703,16 +1724,16 @@ nach QDeclarativeCompiler - - - + + + - + Invalid property assignment: "%1" is a read-only property Ungültige Zuweisung bei Eigenschaft: "%1" ist schreibgeschützt - + Invalid property assignment: unknown enumeration Ungültige Zuweisung bei Eigenschaft: Ungültiger Aufzählungswert @@ -1727,32 +1748,32 @@ nach Ungültige Zuweisung bei Eigenschaft: Es wird eine URL erwartet - + Invalid property assignment: unsigned int expected Ungültige Zuweisung bei Eigenschaft: Es wird eine vorzeichenloser Ganzzahlwert erwartet - + Invalid property assignment: int expected Ungültige Zuweisung bei Eigenschaft: Es wird ein Ganzzahlwert erwartet - + Invalid property assignment: float expected Ungültige Zuweisung bei Eigenschaft: Es wird eine Gleitkommazahl erwartet - + Invalid property assignment: double expected Ungültige Zuweisung bei Eigenschaft: Es wird eine Gleitkommazahl (double) erwartet - + Invalid property assignment: color expected Ungültige Zuweisung bei Eigenschaft: Es wird eine Farbspezifikation erwartet - + Invalid property assignment: date expected Ungültige Zuweisung bei Eigenschaft: Es wird eine Datumsangabe erwartet @@ -1767,7 +1788,7 @@ nach Ungültige Zuweisung bei Eigenschaft: Es wird eine Datumsangabe erwartet - + Invalid property assignment: point expected Ungültige Zuweisung bei Eigenschaft: Es wird eine Koordinatenangabe für einen Punkt erwartet @@ -1797,63 +1818,38 @@ nach Ungültige Zuweisung bei Eigenschaft: Der Typ "%1" ist nicht unterstützt - + Element is not creatable. Das Element kann nicht erzeugt werden. - + Component elements may not contain properties other than id Komponenten dürfen außer id keine weiteren Eigenschaften enthalten. - - Component elements may not contain script blocks - Komponenten dürfen keine Skripte enthalten - - Invalid component id specification Ungültige Komponentenspezifikation - + id is not unique ID-Wert nicht eindeutig - + Invalid component body specification Inhalt der Komponente ungültig - + Cannot create empty component specification Es kann keine leere Komponentenangabe erzeugt werden - - Invalid Script block. Specify either the source property or inline script - Ungültiges Skript. Es muss die Eigenschaft oder ein eingebettetes Skript angegeben werden - - - - Invalid Script source value - Ungültige Angabe für Skript - - - - Properties cannot be set on Script block - Für ein Skript können keine Eigenschaften angegeben werden - - - - Invalid Script block - Ungültiges Skript - - - + Empty signal assignment Leere Signalzuweisung @@ -1869,29 +1865,29 @@ nach - + Non-existent attached object Es existiert kein Bezugselement für die Eigenschaft - - + + Invalid attached object assignment Ungültige Zuweisung des Bezugselements - + Cannot assign to non-existent default property Es kann keine Zuweisung erfolgen, da keine Vorgabe-Eigenschaft existiert - + Cannot assign to non-existent property "%1" Es kann keine Zuweisung erfolgen, da keine Eigenschaft des Namens '%1" existiert - + Invalid use of namespace Ungültige Verwendung eines Namensraums @@ -1901,24 +1897,44 @@ nach Kein gültiger Name einer Eigenschaft des Typs 'attached' - + Invalid use of id property Ungültige Verwendung einer Eigenschaft des Typs 'Id' - + Incorrectly specified signal assignment - + + Component objects cannot declare new properties. + Komponentenobjekte können keine neuen Eigenschaften deklarieren. + + + + Component objects cannot declare new signals. + Komponentenobjekte können keine neuen Signale deklarieren. + + + + Component objects cannot declare new functions. + Komponentenobjekte können keine neuen Funktionen deklarieren. + + + + Cannot assign a value to a signal (expecting a script to be run) + Einem Signal können keine Werte zugewiesen werden (es wird ein Skript erwartet) + + + Property has already been assigned a value Der Eigenschaft wurde bereits ein Wert zugewiesen - + Invalid grouped property access Falsche Gruppierung bei Zugriff auf Eigenschaft @@ -1973,7 +1989,7 @@ nach Ungültige Zuweisung bei Eigenschaft: Es wird ein Skript erwartet - + Cannot assign object to property Zuweisung eines Objekts an eine Eigenschaft nicht zulässig @@ -2033,7 +2049,7 @@ nach Eine als 'FINAL' ausgewiesene Eigenschaft kann nicht überschrieben werden - + Invalid property type Ungültiger Typ der Eigenschaft @@ -2088,7 +2104,7 @@ nach QDeclarativeComponent - + Invalid empty URL Ungültige (leere) URL @@ -2096,23 +2112,23 @@ nach QDeclarativeCompositeTypeManager - - + + Resource %1 unavailable Auf die Ressource %1 konnte nicht zugegriffen werden - + Namespace %1 cannot be used as a type Der Namensraum %1 kann nicht als Typangabe verwendet werden - %1 is not a type - %1 ist keine Typangabe + %1 %2 + %1 %2 - + Type %1 unavailable Der Typ %1 ist nicht verfügbar @@ -2120,14 +2136,13 @@ nach QDeclarativeConnections - - - + + Cannot assign to non-existent property "%1" Es kann keine Zuweisung erfolgen, da keine Eigenschaft des Namens '%1" existiert - + Connections: nested objects not allowed Verbindungen: Verschachtelte Objekte sind nicht zulässig @@ -2175,13 +2190,29 @@ nach SQL: database version mismatch SQL: Die Version der Datenbank entspricht nicht der erwarteten Version + + + QDeclarativeFlipable + + + front is a write-once property + 'front' kann nur einmal zugewiesen werden + + + + back is a write-once property + 'back' kann nur einmal zugewiesen werden + + + + QDeclarativeImportDatabase - + module "%1" definition "%2" not readable Modul "%1" Definition "%2" kann nicht gelesen werden - + plugin cannot be loaded for module "%1": %2 Das Plugin des Moduls "%1" konnte nicht geladen werden: %2 @@ -2191,7 +2222,7 @@ nach Modul "%1" Plugin "%2" konnte nicht gefunden werden - + module "%1" version %2.%3 is not installed Modul "%1" Version %2.%3 ist nicht installiert @@ -2210,29 +2241,59 @@ nach import "%1" has no qmldir and no namespace - "qmldir" und Namensraum fehlt bei Import "%1" + "qmldir" und Namensraum fehlen bei dem Import "%1" - - - QDeclarativeFlipable - - front is a write-once property - 'front' kann nur einmal zugewiesen werden + + - %1 is not a namespace + - %1 ist kein gültiger Namensraum - - back is a write-once property - 'back' kann nur einmal zugewiesen werden + + - nested namespaces not allowed + - geschachtelte Namensräume sind nicht zulässig + + + + + local directory + Lokales Verzeichnis' + + + + is ambiguous. Found in %1 and in %2 + ist mehrdeutig. Es kommt in %1 und in %2 vor + + + + is ambiguous. Found in %1 in version %2.%3 and %4.%5 + ist mehrdeutig. Es kommt in %1 in den Version %2.%3 und %4.%5 vor + + + + is instantiated recursively + wird rekursiv instanziiert + + + + is not a type + ist kein Typ - QDeclarativeInfo + QDeclarativeKeyNavigationAttached - - - unknown location - Unbekannter Ort + + KeyNavigation is only available via attached properties + Tastennavigation ist nur über Eigenschaften des Typs 'attached' verfügbar + + + + QDeclarativeKeysAttached + + + Keys is only available via attached properties + Die Unterstützung für Tasten ist nur über Eigenschaften des Typs 'attached' verfügbar @@ -2263,12 +2324,7 @@ nach append: Der Wert ist kein Objekt - - get: index %1 out of range - get: Der Index %1 ist außerhalb des gültigen Bereichs - - - + set: value is not an object set: Der Wert ist kein Objekt @@ -2303,7 +2359,7 @@ nach QDeclarativeLoader - + Loader does not support loading non-visual elements. Das Laden nicht-visueller Elemente ist nicht unterstützt. @@ -2311,7 +2367,7 @@ nach QDeclarativeParentAnimation - + Unable to preserve appearance under complex transform Das Erscheinungsbild kann bei einer komplexen Transformation nicht beibehalten werden @@ -2330,7 +2386,7 @@ nach QDeclarativeParentChange - + Unable to preserve appearance under complex transform Das Erscheinungsbild kann bei einer komplexen Transformation nicht beibehalten werden @@ -2349,7 +2405,7 @@ nach QDeclarativeParser - + Illegal character Ungültiges Zeichen @@ -2364,17 +2420,19 @@ nach Ungültiges Escape-Sequenz - + + + Illegal unicode escape sequence Ungültige Unicode-Escape-Sequenz - + Unclosed comment at end of file Kommentar am Dateiende nicht abgeschlossen - + Illegal syntax for exponential number Ungültige Syntax des Exponenten @@ -2384,16 +2442,27 @@ nach Ein Bezeichner darf nicht mit einem numerischen Literal beginnen - + Unterminated regular expression literal Regulärer Ausdruck nicht abgeschlossen - + Invalid regular expression flag '%0' Ungültiger Modifikator '%0' bei regulärem Ausdruck + + + Unterminated regular expression backslash sequence + Regulärer Ausdruck nicht abgeschlossen + + + + Unterminated regular expression class + Klasse im regulären Ausdruck nicht abgeschlossen + + Syntax error @@ -2411,28 +2480,28 @@ nach Es wird das Element '%1' erwartet - - + + Property value set multiple times Mehrfache Zuweisung eines Wertes an eine Eigenschaft - + Expected type name Es wird ein Typname erwartet - - Invalid use of Script block - Ungültige Verwendung von Skript-Blöcken - - - + Invalid import qualifier ID Ungültige Id-Angabe bei Import + + Reserved name "Qt" cannot be used as an qualifier + Der reservierte Name "Qt" kann nicht als Bezeichner verwendet werden + + Script import qualifiers must be unique. Der für den Skript-Import angegebene Qualifizierer muss eindeutig sein. @@ -2448,7 +2517,7 @@ nach Der Import einer Bibliothek erfordert eine Versionsangabe - + Expected parameter type Es wird eine Typangabe für den Parameter erwartet @@ -2473,20 +2542,15 @@ nach 'read-only' wird an dieser Stelle noch nicht unterstützt - + JavaScript declaration outside Script element Eine JavaScript-Deklaration ist außerhalb eines Skriptelementes nicht zulässig - - - Variable declarations not allow in inline Script blocks - Variablendeklarationen sind in eingebetteten Script-Blöcken nicht zulässig - QDeclarativePauseAnimation - + Cannot set a duration of < 0 Es kann keine Zeitdauer <0 gesetzt werden @@ -2494,7 +2558,7 @@ nach QDeclarativePixmapCache - + Error decoding: %1: %2 Fehler beim Decodieren: %1: %2 @@ -2505,7 +2569,7 @@ nach - + Cannot open: %1 Fehlschlag beim Öffnen: %1 @@ -2518,7 +2582,7 @@ nach QDeclarativePropertyAnimation - + Cannot set a duration of < 0 Es kann keine Zeitdauer <0 gesetzt werden @@ -2526,12 +2590,12 @@ nach QDeclarativePropertyChanges - + PropertyChanges does not support creating state-specific objects. Die Erzeugung von Objekten, die einem Zustand zugeordnet sind, wird von PropertyChanges nicht unterstützt. - + Cannot assign to non-existent property "%1" Es kann keine Zuweisung erfolgen, da keine Eigenschaft des Namens '%1" existiert @@ -2544,13 +2608,13 @@ nach QDeclarativeTextInput - - + + Could not load cursor delegate Cursor-Delegate konnte nicht geladen werden - + Could not instantiate cursor delegate Cursor-Delegate konnte angelegt werden @@ -2563,7 +2627,7 @@ nach Es konnte kein Objekt des Typs %1 erzeugt werden - + Cannot assign value %1 to property %2 Der Wert '%1' kann nicht der Eigenschaft %2 zugewiesen werden @@ -2583,7 +2647,7 @@ nach Der Signal-Eigenschaft %1 kann kein Objekt zugewiesen werden - + Cannot assign object to list Zuweisung eines Objekts an eine Liste nicht zulässig @@ -2606,15 +2670,24 @@ nach QDeclarativeVisualDataModel - + Delegate component must be Item type. Delegate-Komponente muss vom Typ 'Item' sein + QDeclarativeXmlListModel + + + + Qt was built without support for xmlpatterns + Diese Version der Qt-Bibliothek wurde ohne Unterstützung für xmlpatterns erstellt + + + QDeclarativeXmlListModelRole - + An XmlRole query must not start with '/' Eine XmlRole-Abfrage darf nicht mit '/' beginnen @@ -2622,7 +2695,7 @@ nach QDeclarativeXmlRoleList - + An XmlListModel query must start with '/' or "//" Eine XmlListModel-Abfrage muss mit '/' oder "//" beginnen @@ -3690,7 +3763,7 @@ Möchten Sie die Datei trotzdem löschen? Unbekannter Fehler - + No host name given Es wurde kein Hostname angegeben @@ -3698,9 +3771,9 @@ Möchten Sie die Datei trotzdem löschen? QHostInfoAgent - + - + Host not found Rechner konnte nicht gefunden werden @@ -4051,7 +4124,7 @@ Möchten Sie die Datei trotzdem löschen? QIODevice - + Permission denied Zugriff verweigert @@ -4071,7 +4144,7 @@ Möchten Sie die Datei trotzdem löschen? Kein freier Speicherplatz auf dem Gerät vorhanden - + Unknown error Unbekannter Fehler @@ -4188,7 +4261,7 @@ Möchten Sie die Datei trotzdem löschen? QLineEdit - + Select All Alles auswählen @@ -4509,39 +4582,6 @@ Möchten Sie die Datei trotzdem löschen? - QMediaPlayer - - - The QMediaPlayer object does not have a valid service - Das QMediaPlayer-Objekt verfügt über keinen gültigen Dienst - - - - QMediaPlaylist - - - - Could not add items to read only playlist. - Es konnten keine Einträge zur Wiedergabeliste hinzugefügt werden, da sie schreibgeschützt ist. - - - - - Playlist format is not supported - Das Format der Wiedergabeliste ist nicht unterstützt - - - - The file could not be accessed. - Auf die Datei konnte nicht zugegriffen werden. - - - - Playlist format is not supported. - Das Format der Wiedergabeliste ist nicht unterstützt. - - - QMenu @@ -4566,7 +4606,7 @@ Möchten Sie die Datei trotzdem löschen? QMenuBar - + Actions Optionen @@ -4867,7 +4907,7 @@ Möchten Sie die Datei trotzdem löschen? QNetworkAccessHttpBackend - + No suitable proxy found Es konnte kein geeigneter Proxy-Server gefunden werden @@ -4875,7 +4915,7 @@ Möchten Sie die Datei trotzdem löschen? QNetworkAccessManager - + Network access is disabled. Der Zugriff auf das Netzwerk ist nicht gestattet. @@ -4883,12 +4923,12 @@ Möchten Sie die Datei trotzdem löschen? QNetworkReply - + Error downloading %1 - server replied: %2 Beim Herunterladen von %1 trat ein Fehler auf - Die Antwort des Servers ist: %2 - + Protocol "%1" is unknown Das Protokoll "%1" ist unbekannt @@ -4898,7 +4938,7 @@ Möchten Sie die Datei trotzdem löschen? Fehler bei Netzwerkverbindung. - + Temporary network failure. Das Netzwerk ist zur Zeit ausgefallen. @@ -4906,7 +4946,7 @@ Möchten Sie die Datei trotzdem löschen? QNetworkReplyImpl - + Operation canceled Operation abgebrochen @@ -4924,7 +4964,7 @@ Möchten Sie die Datei trotzdem löschen? QNetworkSessionPrivateImpl - + Unknown session error. Unbekannter Fehler bei Netzwerkverbindung. @@ -5130,11 +5170,17 @@ Möchten Sie die Datei trotzdem löschen? QObject - + "%1" duplicates a previous role name and will be disabled. "%1" ist bereits als Name einer Rolle vergeben und wird daher deaktiviert. + + + invalid query: "%1" + Ungültige Abfrage: "%1" + + PulseAudio Sound Server @@ -6212,7 +6258,7 @@ Bitte wählen Sie einen anderen Dateinamen. QSQLiteDriver - + Error opening database Die Datenbankverbindung konnte nicht geöffnet werden @@ -6240,8 +6286,8 @@ Bitte wählen Sie einen anderen Dateinamen. QSQLiteResult - - + + Unable to fetch row Der Datensatz konnte nicht abgeholt werden @@ -6267,7 +6313,7 @@ Bitte wählen Sie einen anderen Dateinamen. Die Anzahl der Parameter ist falsch - + No query Kein Abfrage @@ -6810,8 +6856,9 @@ Bitte wählen Sie einen anderen Dateinamen. QShortcut - + Space + 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. Leertaste @@ -7999,7 +8046,7 @@ Bitte wählen Sie einen anderen Dateinamen. Abbrechen - + Exit Beenden @@ -8343,7 +8390,7 @@ Bitte wählen Sie einen anderen Dateinamen. QTextControl - + &Undo &Rückgängig @@ -9056,7 +9103,7 @@ Bitte wählen Sie einen anderen Dateinamen. Unbekannt - + Web Inspector - %2 Web Inspector - %2 @@ -9067,7 +9114,12 @@ Bitte wählen Sie einen anderen Dateinamen. %1 (%2x%3 Pixel) - + + Redirection limit reached + Maximal Anzahl von Weiterleitungen wurde erreicht + + + Bad HTTP request Ungültige HTTP-Anforderung @@ -9152,7 +9204,7 @@ Bitte wählen Sie einen anderen Dateinamen. - + JavaScript Alert - %1 JavaScript-Hinweis - %1 @@ -9177,7 +9229,7 @@ Bitte wählen Sie einen anderen Dateinamen. Das Skript dieser Webseite ist fehlerhaft. Möchten Sie es anhalten? - + Move the cursor to the next character Positionsmarke auf folgendes Zeichen setzen @@ -9398,7 +9450,7 @@ Bitte wählen Sie einen anderen Dateinamen. QWidget - + * * @@ -11303,13 +11355,13 @@ Bitte wählen Sie einen anderen Dateinamen. - + Type %1 of %2 element cannot be resolved. Der Typ %1 des Elements %2 kann nicht aufgelöst werden. - + Base type %1 of complex type cannot be resolved. Der Basistyp %1 des komplexen Typs kann nicht aufgelöst werden. @@ -11319,7 +11371,7 @@ Bitte wählen Sie einen anderen Dateinamen. %1 kann keinen komplexen Basistyp haben, der '%2' spezifiziert. - + Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type. Das Inhaltsmodell des komplexen Typs %1enthält ein Element '%2'; es kann daher nicht durch Erweiterung von einem Typ abgeleitet werden, der nicht leer ist. @@ -12229,27 +12281,4 @@ Bitte wählen Sie einen anderen Dateinamen. Das Attribut '%1' enthält einen ungültigen qualifizierten Namen: %2. - - Widget - - - Widget - Widget - - - - about:blank - about:blank - - - - Image from Qt to HTML - Bild von Qt zu HTML - - - - Pixmap from Qt to HTML - Pixmap von Qt zu HTML - - -- cgit v0.12 From fb68f9975f801fb20ec4917dc7a980be2f162876 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Fri, 4 Jun 2010 13:46:00 +0200 Subject: syncqt: change tabs to spaces This file originally used tabwidth of 8. --- bin/syncqt | 752 ++++++++++++++++++++++++++++++------------------------------- 1 file changed, 376 insertions(+), 376 deletions(-) diff --git a/bin/syncqt b/bin/syncqt index 71f2eab..f993fd9 100755 --- a/bin/syncqt +++ b/bin/syncqt @@ -146,12 +146,12 @@ sub shouldMasterInclude { return 0 if(basename($iheader) =~ /qconfig/); if(open(F, "<$iheader")) { while() { - chomp; - return 0 if(/^\#pragma qt_no_master_include$/); - } - close(F); + chomp; + return 0 if(/^\#pragma qt_no_master_include$/); + } + close(F); } else { - return 0; + return 0; } return 1; } @@ -168,17 +168,17 @@ sub classNames { my @ret; my ($iheader) = @_; if(basename($iheader) eq "qglobal.h") { - push @ret, "QtGlobal"; + push @ret, "QtGlobal"; } elsif(basename($iheader) eq "qendian.h") { - push @ret, "QtEndian"; + push @ret, "QtEndian"; } elsif(basename($iheader) eq "qconfig.h") { push @ret, "QtConfig"; } elsif(basename($iheader) eq "qplugin.h") { - push @ret, "QtPlugin"; + push @ret, "QtPlugin"; } elsif(basename($iheader) eq "qalgorithms.h") { - push @ret, "QtAlgorithms"; + push @ret, "QtAlgorithms"; } elsif(basename($iheader) eq "qcontainerfwd.h") { - push @ret, "QtContainerFwd"; + push @ret, "QtContainerFwd"; } elsif(basename($iheader) eq "qdebug.h") { push @ret, "QtDebug"; } elsif(basename($iheader) eq "qevent.h") { @@ -186,7 +186,7 @@ sub classNames { } elsif(basename($iheader) eq "qnamespace.h") { push @ret, "Qt" } elsif(basename($iheader) eq "qssl.h") { - push @ret, "QSsl"; + push @ret, "QSsl"; } elsif(basename($iheader) eq "qtest.h") { push @ret, "QTest" } elsif(basename($iheader) eq "qtconcurrentmap.h") { @@ -204,7 +204,7 @@ sub classNames { while() { my $line = $_; chomp $line; - chop $line if ($line =~ /\r$/); + chop $line if ($line =~ /\r$/); if($line =~ /^\#/) { if($line =~ /\\$/) { while($line = ) { @@ -212,18 +212,18 @@ sub classNames { last unless($line =~ /\\$/); } } - return @ret if($line =~ m/^#pragma qt_sync_stop_processing/); + return @ret if($line =~ m/^#pragma qt_sync_stop_processing/); push(@ret, "$1") if($line =~ m/^#pragma qt_class\(([^)]*)\)[\r\n]*$/); - $line = 0; + $line = 0; } - if($line) { + if($line) { $line =~ s,//.*$,,; #remove c++ comments - $line .= ";" if($line =~ m/^Q_[A-Z_]*\(.*\)[\r\n]*$/); #qt macro - $line .= ";" if($line =~ m/^QT_(BEGIN|END)_HEADER[\r\n]*$/); #qt macro - $line .= ";" if($line =~ m/^QT_(BEGIN|END)_NAMESPACE[\r\n]*$/); #qt macro - $line .= ";" if($line =~ m/^QT_MODULE\(.*\)[\r\n]*$/); # QT_MODULE macro + $line .= ";" if($line =~ m/^Q_[A-Z_]*\(.*\)[\r\n]*$/); #qt macro + $line .= ";" if($line =~ m/^QT_(BEGIN|END)_HEADER[\r\n]*$/); #qt macro + $line .= ";" if($line =~ m/^QT_(BEGIN|END)_NAMESPACE[\r\n]*$/); #qt macro + $line .= ";" if($line =~ m/^QT_MODULE\(.*\)[\r\n]*$/); # QT_MODULE macro $parsable .= " " . $line; - } + } } close(F); } @@ -259,7 +259,7 @@ sub classNames { $i = $i2 if($end eq ";"); $last_definition = $i + 1; last BLOCK; - } + } } } } @@ -267,42 +267,42 @@ sub classNames { } elsif($character eq ";") { $definition = substr($parsable, $last_definition, $i - $last_definition + 1); $last_definition = $i + 1; - } elsif($character eq "}") { - # a naked } must be a namespace ending - # if it's not a namespace, it's eaten by the loop above - pop @namespaces; - $last_definition = $i + 1; - } + } elsif($character eq "}") { + # a naked } must be a namespace ending + # if it's not a namespace, it's eaten by the loop above + pop @namespaces; + $last_definition = $i + 1; + } - if (substr($parsable, $last_definition, $i - $last_definition + 1) =~ m/ namespace ([^ ]*) / - && substr($parsable, $i+1, 1) eq "{") { - push @namespaces, $1; + if (substr($parsable, $last_definition, $i - $last_definition + 1) =~ m/ namespace ([^ ]*) / + && substr($parsable, $i+1, 1) eq "{") { + push @namespaces, $1; - # Eat the opening { so that the condensing loop above doesn't see it - $i++; - $last_definition = $i + 1; - } + # Eat the opening { so that the condensing loop above doesn't see it + $i++; + $last_definition = $i + 1; + } if($definition) { - $definition =~ s=[\n\r]==g; + $definition =~ s=[\n\r]==g; my @symbols; if($definition =~ m/^ *typedef *.*\(\*([^\)]*)\)\(.*\);$/) { - push @symbols, $1; + push @symbols, $1; } elsif($definition =~ m/^ *typedef +(.*) +([^ ]*);$/) { - push @symbols, $2; + push @symbols, $2; } elsif($definition =~ m/^ *(template *<.*> *)?(class|struct) +([^ ]* +)?([^<\s]+) ?(<[^>]*> ?)?\s*((,|:)\s*(public|protected|private) *.*)? *\{\}$/) { - push @symbols, $4; + push @symbols, $4; } elsif($definition =~ m/^ *Q_DECLARE_.*ITERATOR\((.*)\);$/) { - push @symbols, "Q" . $1 . "Iterator"; - push @symbols, "QMutable" . $1 . "Iterator"; - } + push @symbols, "Q" . $1 . "Iterator"; + push @symbols, "QMutable" . $1 . "Iterator"; + } - foreach (@symbols) { - my $symbol = $_; - $symbol = (join("::", @namespaces) . "::" . $symbol) if (scalar @namespaces); - push @ret, $symbol - if ($symbol =~ /^Q[^:]*$/ # no-namespace, starting with Q - || $symbol =~ /^Phonon::/); # or in the Phonon namespace + foreach (@symbols) { + my $symbol = $_; + $symbol = (join("::", @namespaces) . "::" . $symbol) if (scalar @namespaces); + push @ret, $symbol + if ($symbol =~ /^Q[^:]*$/ # no-namespace, starting with Q + || $symbol =~ /^Phonon::/); # or in the Phonon namespace } } } @@ -453,37 +453,37 @@ sub copyFile $filecontents = ; close I; if ( open(I, "< " . $ifile) ) { - local $/; - binmode I; - $ifilecontents = ; - close I; - $copy = fileCompare($file, $ifile); - $knowdiff = 0, + local $/; + binmode I; + $ifilecontents = ; + close I; + $copy = fileCompare($file, $ifile); + $knowdiff = 0, } else { - $copy = -1; - $knowdiff = 1; + $copy = -1; + $knowdiff = 1; } if ( $knowdiff || ($filecontents ne $ifilecontents) ) { - if ( $copy > 0 ) { - my $file_dir = dirname($file); - mkpath $file_dir, !$quiet unless(-e "$file_dir"); - open(O, "> " . $file) || die "Could not open $file for writing (no write permission?)"; - local $/; - binmode O; - print O $ifilecontents; - close O; - return 1; - } elsif ( $copy < 0 ) { - my $ifile_dir = dirname($ifile); - mkpath $ifile_dir, !$quiet unless(-e "$ifile_dir"); - open(O, "> " . $ifile) || die "Could not open $ifile for writing (no write permission?)"; - local $/; - binmode O; - print O $filecontents; - close O; - return 1; - } + if ( $copy > 0 ) { + my $file_dir = dirname($file); + mkpath $file_dir, !$quiet unless(-e "$file_dir"); + open(O, "> " . $file) || die "Could not open $file for writing (no write permission?)"; + local $/; + binmode O; + print O $ifilecontents; + close O; + return 1; + } elsif ( $copy < 0 ) { + my $ifile_dir = dirname($ifile); + mkpath $ifile_dir, !$quiet unless(-e "$ifile_dir"); + open(O, "> " . $ifile) || die "Could not open $ifile for writing (no write permission?)"; + local $/; + binmode O; + print O $filecontents; + close O; + return 1; + } } return 0; } @@ -568,37 +568,37 @@ while ( @ARGV ) { #parse my $arg = shift @ARGV; if ("$arg" eq "-h" || "$arg" eq "-help" || "$arg" eq "?") { - $var = "show_help"; - $val = "yes"; + $var = "show_help"; + $val = "yes"; } elsif("$arg" eq "-copy") { - $var = "copy"; - $val = "yes"; + $var = "copy"; + $val = "yes"; } elsif("$arg" eq "-o" || "$arg" eq "-outdir") { - $var = "output"; - $val = shift @ARGV; + $var = "output"; + $val = shift @ARGV; } elsif("$arg" eq "-showonly" || "$arg" eq "-remove-stale" || "$arg" eq "-windows" || - "$arg" eq "-relative" || "$arg" eq "-check-includes") { - $var = substr($arg, 1); - $val = "yes"; + "$arg" eq "-relative" || "$arg" eq "-check-includes") { + $var = substr($arg, 1); + $val = "yes"; } elsif("$arg" =~ /^-no-(.*)$/) { - $var = $1; - $val = "no"; - #these are for commandline compat + $var = $1; + $val = "no"; + #these are for commandline compat } elsif("$arg" eq "-inc") { - $var = "output"; - $val = shift @ARGV; + $var = "output"; + $val = shift @ARGV; } elsif("$arg" eq "-module") { - $var = "module"; - $val = shift @ARGV; + $var = "module"; + $val = shift @ARGV; } elsif("$arg" eq "-separate-module") { - $var = "separate-module"; - $val = shift @ARGV; + $var = "separate-module"; + $val = shift @ARGV; } elsif("$arg" eq "-show") { - $var = "showonly"; - $val = "yes"; + $var = "showonly"; + $val = "yes"; } elsif("$arg" eq "-quiet") { - $var = "quiet"; - $val = "yes"; + $var = "quiet"; + $val = "yes"; } elsif("$arg" eq "-base-dir") { # skip, it's been dealt with at the top of the file shift @ARGV; @@ -607,54 +607,54 @@ while ( @ARGV ) { #do something if(!$var || "$var" eq "show_help") { - print "Unknown option: $arg\n\n" if(!$var); - showUsage(); + print "Unknown option: $arg\n\n" if(!$var); + showUsage(); } elsif ("$var" eq "copy") { - if("$val" eq "yes") { - $copy_headers++; - } elsif($showonly) { - $copy_headers--; - } + if("$val" eq "yes") { + $copy_headers++; + } elsif($showonly) { + $copy_headers--; + } } elsif ("$var" eq "showonly") { - if("$val" eq "yes") { - $showonly++; - } elsif($showonly) { - $showonly--; - } + if("$val" eq "yes") { + $showonly++; + } elsif($showonly) { + $showonly--; + } } elsif ("$var" eq "quiet") { - if("$val" eq "yes") { - $quiet++; - } elsif($quiet) { - $quiet--; - } + if("$val" eq "yes") { + $quiet++; + } elsif($quiet) { + $quiet--; + } } elsif ("$var" eq "check-includes") { - if("$val" eq "yes") { - $check_includes++; - } elsif($check_includes) { - $check_includes--; - } + if("$val" eq "yes") { + $check_includes++; + } elsif($check_includes) { + $check_includes--; + } } elsif ("$var" eq "remove-stale") { - if("$val" eq "yes") { - $remove_stale++; - } elsif($remove_stale) { - $remove_stale--; - } + if("$val" eq "yes") { + $remove_stale++; + } elsif($remove_stale) { + $remove_stale--; + } } elsif ("$var" eq "windows") { - if("$val" eq "yes") { - $force_win++; - } elsif($force_win) { - $force_win--; - } + if("$val" eq "yes") { + $force_win++; + } elsif($force_win) { + $force_win--; + } } elsif ("$var" eq "relative") { - if("$val" eq "yes") { - $force_relative++; - } elsif($force_relative) { - $force_relative--; - } + if("$val" eq "yes") { + $force_relative++; + } elsif($force_relative) { + $force_relative--; + } } elsif ("$var" eq "module") { - print "module :$val:\n" unless $quiet; - die "No such module: $val" unless(defined $modules{$val}); - push @modules_to_sync, $val; + print "module :$val:\n" unless $quiet; + die "No such module: $val" unless(defined $modules{$val}); + push @modules_to_sync, $val; } elsif ("$var" eq "separate-module") { my ($module, $prodir, $headerdir) = split(/:/, $val); $modules{$module} = $prodir; @@ -663,16 +663,16 @@ while ( @ARGV ) { $create_uic_class_map = 0; $create_private_headers = 0; } elsif ("$var" eq "output") { - my $outdir = $val; - if(checkRelative($outdir)) { - $out_basedir = getcwd(); - chomp $out_basedir; - $out_basedir .= "/" . $outdir; - } else { - $out_basedir = $outdir; - } - # \ -> / - $out_basedir =~ s=\\=/=g; + my $outdir = $val; + if(checkRelative($outdir)) { + $out_basedir = getcwd(); + chomp $out_basedir; + $out_basedir .= "/" . $outdir; + } else { + $out_basedir = $outdir; + } + # \ -> / + $out_basedir =~ s=\\=/=g; } } @modules_to_sync = keys(%modules) if($#modules_to_sync == -1); @@ -708,77 +708,77 @@ foreach (@modules_to_sync) { #get dependencies if(-e "$dir/" . basename($dir) . ".pro") { - if(open(F, "<$dir/" . basename($dir) . ".pro")) { - while() { - my $line = $_; - chomp $line; - if($line =~ /^ *QT *\+?= *([^\r\n]*)/) { - foreach(split(/ /, "$1")) { - $master_contents .= "#include \n" if("$_" eq "core"); - $master_contents .= "#include \n" if("$_" eq "gui"); - $master_contents .= "#include \n" if("$_" eq "network"); - $master_contents .= "#include \n" if("$_" eq "svg"); - $master_contents .= "#include \n" if("$_" eq "declarative"); - $master_contents .= "#include \n" if("$_" eq "script"); - $master_contents .= "#include \n" if("$_" eq "scripttools"); - $master_contents .= "#include \n" if("$_" eq "qt3support"); - $master_contents .= "#include \n" if("$_" eq "sql"); - $master_contents .= "#include \n" if("$_" eq "xml"); - $master_contents .= "#include \n" if("$_" eq "xmlpatterns"); - $master_contents .= "#include \n" if("$_" eq "opengl"); - $master_contents .= "#include \n" if("$_" eq "openvg"); - } - } - } - close(F); - } + if(open(F, "<$dir/" . basename($dir) . ".pro")) { + while() { + my $line = $_; + chomp $line; + if($line =~ /^ *QT *\+?= *([^\r\n]*)/) { + foreach(split(/ /, "$1")) { + $master_contents .= "#include \n" if("$_" eq "core"); + $master_contents .= "#include \n" if("$_" eq "gui"); + $master_contents .= "#include \n" if("$_" eq "network"); + $master_contents .= "#include \n" if("$_" eq "svg"); + $master_contents .= "#include \n" if("$_" eq "declarative"); + $master_contents .= "#include \n" if("$_" eq "script"); + $master_contents .= "#include \n" if("$_" eq "scripttools"); + $master_contents .= "#include \n" if("$_" eq "qt3support"); + $master_contents .= "#include \n" if("$_" eq "sql"); + $master_contents .= "#include \n" if("$_" eq "xml"); + $master_contents .= "#include \n" if("$_" eq "xmlpatterns"); + $master_contents .= "#include \n" if("$_" eq "opengl"); + $master_contents .= "#include \n" if("$_" eq "openvg"); + } + } + } + close(F); + } } #remove the old files if($remove_stale) { - my @subdirs = ("$out_basedir/include/$lib"); - foreach (@subdirs) { - my $subdir = "$_"; - if (opendir DIR, "$subdir") { - while(my $t = readdir(DIR)) { - my $file = "$subdir/$t"; - if(-d "$file") { - push @subdirs, "$file" unless($t eq "." || $t eq ".."); - } else { - my @files = ("$file"); - #push @files, "$out_basedir/include/Qt/$t" if(-e "$out_basedir/include/Qt/$t"); - foreach (@files) { - my $file = $_; - my $remove_file = 0; - if(open(F, "<$file")) { - while() { - my $line = $_; - chomp $line; - if($line =~ /^\#include \"([^\"]*)\"$/) { - my $include = $1; - $include = $subdir . "/" . $include unless(substr($include, 0, 1) eq "/"); - $remove_file = 1 unless(-e "$include"); - } else { - $remove_file = 0; - last; - } - } - close(F); - unlink "$file" if($remove_file); - } - } - } - } - closedir DIR; + my @subdirs = ("$out_basedir/include/$lib"); + foreach (@subdirs) { + my $subdir = "$_"; + if (opendir DIR, "$subdir") { + while(my $t = readdir(DIR)) { + my $file = "$subdir/$t"; + if(-d "$file") { + push @subdirs, "$file" unless($t eq "." || $t eq ".."); + } else { + my @files = ("$file"); + #push @files, "$out_basedir/include/Qt/$t" if(-e "$out_basedir/include/Qt/$t"); + foreach (@files) { + my $file = $_; + my $remove_file = 0; + if(open(F, "<$file")) { + while() { + my $line = $_; + chomp $line; + if($line =~ /^\#include \"([^\"]*)\"$/) { + my $include = $1; + $include = $subdir . "/" . $include unless(substr($include, 0, 1) eq "/"); + $remove_file = 1 unless(-e "$include"); + } else { + $remove_file = 0; + last; + } + } + close(F); + unlink "$file" if($remove_file); + } + } + } + } + closedir DIR; } - } + } } #create the new ones foreach (split(/;/, $dir)) { - my $current_dir = "$_"; - my $headers_dir = $current_dir; + my $current_dir = "$_"; + my $headers_dir = $current_dir; $headers_dir .= "/$pathtoheaders" if ($pathtoheaders); #calc subdirs my @subdirs = ($headers_dir); @@ -787,7 +787,7 @@ foreach (@modules_to_sync) { opendir DIR, "$subdir" or next; while(my $t = readdir(DIR)) { push @subdirs, "$subdir/$t" if(-d "$subdir/$t" && !($t eq ".") && - !($t eq "..") && !($t eq ".obj") && + !($t eq "..") && !($t eq ".obj") && !($t eq ".moc") && !($t eq ".rcc") && !($t eq ".uic") && !($t eq "build")); } @@ -805,85 +805,85 @@ foreach (@modules_to_sync) { $header = 0 if("$header" eq "$_"); } if($header) { - my $header_copies = 0; - #figure out if it is a public header - my $public_header = $header; - if($public_header =~ /_p.h$/ || $public_header =~ /_pch.h$/) { - $public_header = 0; - } else { - foreach (@ignore_for_master_contents) { - $public_header = 0 if("$header" eq "$_"); - } - } + my $header_copies = 0; + #figure out if it is a public header + my $public_header = $header; + if($public_header =~ /_p.h$/ || $public_header =~ /_pch.h$/) { + $public_header = 0; + } else { + foreach (@ignore_for_master_contents) { + $public_header = 0 if("$header" eq "$_"); + } + } my $iheader = $subdir . "/" . $header; - my @classes = $public_header ? classNames($iheader) : (); + my @classes = $public_header ? classNames($iheader) : (); if($showonly) { print "$header [$lib]\n"; - foreach(@classes) { - print "SYMBOL: $_\n"; - } + foreach(@classes) { + print "SYMBOL: $_\n"; + } } else { - #find out all the places it goes.. - my @headers; - if ($public_header) { - @headers = ( "$out_basedir/include/$lib/$header" ); - push @headers, "$out_basedir/include/Qt/$header" - if ("$lib" ne "phonon" && "$subdir" =~ /^$basedir\/src/); + #find out all the places it goes.. + my @headers; + if ($public_header) { + @headers = ( "$out_basedir/include/$lib/$header" ); + push @headers, "$out_basedir/include/Qt/$header" + if ("$lib" ne "phonon" && "$subdir" =~ /^$basedir\/src/); - foreach(@classes) { - my $header_base = basename($header); - my $class = $_; - # Strip namespaces: - $class =~ s/^.*:://; -# if ($class =~ m/::/) { -# class =~ s,::,/,g; -# } - $class_lib_map_contents .= "QT_CLASS_LIB($_, $lib, $header_base)\n"; - $header_copies++ if(syncHeader("$out_basedir/include/$lib/$class", "$out_basedir/include/$lib/$header", 0)); + foreach(@classes) { + my $header_base = basename($header); + my $class = $_; + # Strip namespaces: + $class =~ s/^.*:://; +# if ($class =~ m/::/) { +# class =~ s,::,/,g; +# } + $class_lib_map_contents .= "QT_CLASS_LIB($_, $lib, $header_base)\n"; + $header_copies++ if(syncHeader("$out_basedir/include/$lib/$class", "$out_basedir/include/$lib/$header", 0)); - # KDE-Compat headers for Phonon - if ($lib eq "phonon") { - $header_copies++ if (syncHeader("$out_basedir/include/phonon_compat/Phonon/$class", "$out_basedir/include/$lib/$header", 0)); - } - } - } elsif ($create_private_headers) { - @headers = ( "$out_basedir/include/$lib/private/$header" ); - push @headers, "$out_basedir/include/Qt/private/$header" + # KDE-Compat headers for Phonon + if ($lib eq "phonon") { + $header_copies++ if (syncHeader("$out_basedir/include/phonon_compat/Phonon/$class", "$out_basedir/include/$lib/$header", 0)); + } + } + } elsif ($create_private_headers) { + @headers = ( "$out_basedir/include/$lib/private/$header" ); + push @headers, "$out_basedir/include/Qt/private/$header" if ("$lib" ne "phonon"); - } - foreach(@headers) { #sync them - $header_copies++ if(syncHeader($_, $iheader, $copy_headers)); - } + } + foreach(@headers) { #sync them + $header_copies++ if(syncHeader($_, $iheader, $copy_headers)); + } - if($public_header) { - #put it into the master file - $master_contents .= "#include \"$public_header\"\n" if(shouldMasterInclude($iheader)); + if($public_header) { + #put it into the master file + $master_contents .= "#include \"$public_header\"\n" if(shouldMasterInclude($iheader)); - #deal with the install directives - if($public_header) { - my $pri_install_iheader = fixPaths($iheader, $current_dir); - foreach(@classes) { - my $class = $_; - # Strip namespaces: - $class =~ s/^.*:://; -# if ($class =~ m/::/) { -# $class =~ s,::,/,g; -# } - my $class_header = fixPaths("$out_basedir/include/$lib/$class", - $current_dir) . " "; - $pri_install_classes .= $class_header - unless($pri_install_classes =~ $class_header); - } - $pri_install_files.= "$pri_install_iheader ";; - } - } - else { - my $pri_install_iheader = fixPaths($iheader, $current_dir); - $pri_install_pfiles.= "$pri_install_iheader ";; - } + #deal with the install directives + if($public_header) { + my $pri_install_iheader = fixPaths($iheader, $current_dir); + foreach(@classes) { + my $class = $_; + # Strip namespaces: + $class =~ s/^.*:://; +# if ($class =~ m/::/) { +# $class =~ s,::,/,g; +# } + my $class_header = fixPaths("$out_basedir/include/$lib/$class", + $current_dir) . " "; + $pri_install_classes .= $class_header + unless($pri_install_classes =~ $class_header); + } + $pri_install_files.= "$pri_install_iheader ";; + } + } + else { + my $pri_install_iheader = fixPaths($iheader, $current_dir); + $pri_install_pfiles.= "$pri_install_iheader ";; + } } - print "header created for $iheader ($header_copies)\n" if($header_copies > 0 && !$quiet); + print "header created for $iheader ($header_copies)\n" if($header_copies > 0 && !$quiet); } } } @@ -894,8 +894,8 @@ foreach (@modules_to_sync) { unless($showonly) { my @master_includes; - push @master_includes, "$out_basedir/include/$lib/$lib"; - push @master_includes, "$out_basedir/include/phonon_compat/Phonon/Phonon" if ($lib eq "phonon"); + push @master_includes, "$out_basedir/include/$lib/$lib"; + push @master_includes, "$out_basedir/include/phonon_compat/Phonon/Phonon" if ($lib eq "phonon"); foreach my $master_include (@master_includes) { #generate the "master" include file my @tmp = split(/;/,$modules{$lib}); @@ -920,10 +920,10 @@ foreach (@modules_to_sync) { } #handle the headers.pri for each module - my $headers_pri_contents = ""; - $headers_pri_contents .= "SYNCQT.HEADER_FILES = $pri_install_files\n"; - $headers_pri_contents .= "SYNCQT.HEADER_CLASSES = $pri_install_classes\n"; - $headers_pri_contents .= "SYNCQT.PRIVATE_HEADER_FILES = $pri_install_pfiles\n"; + my $headers_pri_contents = ""; + $headers_pri_contents .= "SYNCQT.HEADER_FILES = $pri_install_files\n"; + $headers_pri_contents .= "SYNCQT.HEADER_CLASSES = $pri_install_classes\n"; + $headers_pri_contents .= "SYNCQT.PRIVATE_HEADER_FILES = $pri_install_pfiles\n"; my $headers_pri_file = "$out_basedir/include/$lib/headers.pri"; if(-e "$headers_pri_file") { open HEADERS_PRI_FILE, "<$headers_pri_file"; @@ -947,125 +947,125 @@ foreach (@modules_to_sync) { unless($showonly || !$create_uic_class_map) { my $class_lib_map = "$out_basedir/src/tools/uic/qclass_lib_map.h"; if(-e "$class_lib_map") { - open CLASS_LIB_MAP, "<$class_lib_map"; - local $/; - binmode CLASS_LIB_MAP; - my $old_class_lib_map_contents = ; - close CLASS_LIB_MAP; - $old_class_lib_map_contents =~ s/\r//g; # remove \r's , so comparison is ok on all platforms - $class_lib_map = 0 if($old_class_lib_map_contents eq $class_lib_map_contents); + open CLASS_LIB_MAP, "<$class_lib_map"; + local $/; + binmode CLASS_LIB_MAP; + my $old_class_lib_map_contents = ; + close CLASS_LIB_MAP; + $old_class_lib_map_contents =~ s/\r//g; # remove \r's , so comparison is ok on all platforms + $class_lib_map = 0 if($old_class_lib_map_contents eq $class_lib_map_contents); } if($class_lib_map) { - my $class_lib_map_dir = dirname($class_lib_map); - mkpath $class_lib_map_dir, !$quiet; - open CLASS_LIB_MAP, ">$class_lib_map"; - print CLASS_LIB_MAP "$class_lib_map_contents"; - close CLASS_LIB_MAP; + my $class_lib_map_dir = dirname($class_lib_map); + mkpath $class_lib_map_dir, !$quiet; + open CLASS_LIB_MAP, ">$class_lib_map"; + print CLASS_LIB_MAP "$class_lib_map_contents"; + close CLASS_LIB_MAP; } } if($check_includes) { for (keys(%modules)) { - #iteration info - my $lib = $_; - my $dir = "$modules{$lib}"; - foreach (split(/;/, $dir)) { - my $current_dir = "$_"; - #calc subdirs - my @subdirs = ($current_dir); - foreach (@subdirs) { - my $subdir = "$_"; - opendir DIR, "$subdir"; - while(my $t = readdir(DIR)) { + #iteration info + my $lib = $_; + my $dir = "$modules{$lib}"; + foreach (split(/;/, $dir)) { + my $current_dir = "$_"; + #calc subdirs + my @subdirs = ($current_dir); + foreach (@subdirs) { + my $subdir = "$_"; + opendir DIR, "$subdir"; + while(my $t = readdir(DIR)) { push @subdirs, "$subdir/$t" if(-d "$subdir/$t" && !($t eq ".") && !($t eq "..") && !($t eq ".obj") && !($t eq ".moc") && !($t eq ".rcc") && !($t eq ".uic") && !($t eq "build")); - } - closedir DIR; - } + } + closedir DIR; + } - foreach (@subdirs) { - my $subdir = "$_"; + foreach (@subdirs) { + my $subdir = "$_"; my $header_skip_qt_module_test = 0; foreach(@ignore_for_qt_module_check) { foreach (split(/;/, $_)) { $header_skip_qt_module_test = 1 if ("$subdir" =~ /^$_/); } } - my @headers = findFiles("$subdir", "^[-a-z0-9_]*\\.h\$" , 0); - foreach (@headers) { - my $header = "$_"; + my @headers = findFiles("$subdir", "^[-a-z0-9_]*\\.h\$" , 0); + foreach (@headers) { + my $header = "$_"; my $header_skip_qt_begin_header_test = 0; my $header_skip_qt_begin_namespace_test = 0; - $header = 0 if("$header" =~ /^ui_.*.h/); - foreach (@ignore_headers) { - $header = 0 if("$header" eq "$_"); - } - if($header) { - my $public_header = $header; - if($public_header =~ /_p.h$/ || $public_header =~ /_pch.h$/) { - $public_header = 0; - } else { - foreach (@ignore_for_master_contents) { - $public_header = 0 if("$header" eq "$_"); - } - if($public_header) { - foreach (@ignore_for_include_check) { - $public_header = 0 if("$header" eq "$_"); - } + $header = 0 if("$header" =~ /^ui_.*.h/); + foreach (@ignore_headers) { + $header = 0 if("$header" eq "$_"); + } + if($header) { + my $public_header = $header; + if($public_header =~ /_p.h$/ || $public_header =~ /_pch.h$/) { + $public_header = 0; + } else { + foreach (@ignore_for_master_contents) { + $public_header = 0 if("$header" eq "$_"); + } + if($public_header) { + foreach (@ignore_for_include_check) { + $public_header = 0 if("$header" eq "$_"); + } foreach(@ignore_for_qt_begin_header_check) { $header_skip_qt_begin_header_test = 1 if ("$header" eq "$_"); } foreach(@ignore_for_qt_begin_namespace_check) { $header_skip_qt_begin_namespace_test = 1 if ("$header" eq "$_"); } - } - } + } + } - my $iheader = $subdir . "/" . $header; - if($public_header) { - if(open(F, "<$iheader")) { + my $iheader = $subdir . "/" . $header; + if($public_header) { + if(open(F, "<$iheader")) { my $qt_module_found = 0; - my $qt_begin_header_found = 0; - my $qt_end_header_found = 0; - my $qt_begin_namespace_found = 0; - my $qt_end_namespace_found = 0; - my $line; - while($line = ) { - chomp $line; - my $output_line = 1; + my $qt_begin_header_found = 0; + my $qt_end_header_found = 0; + my $qt_begin_namespace_found = 0; + my $qt_end_namespace_found = 0; + my $line; + while($line = ) { + chomp $line; + my $output_line = 1; if($line =~ /^ *\# *pragma (qt_no_included_check|qt_sync_stop_processing)/) { - last; - } elsif($line =~ /^ *\# *include/) { - my $include = $line; - if($line =~ /<.*>/) { - $include =~ s,.*<(.*)>.*,$1,; - } elsif($line =~ /".*"/) { - $include =~ s,.*"(.*)".*,$1,; - } else { - $include = 0; - } - if($include) { - for (keys(%modules)) { - my $trylib = $_; - if(-e "$out_basedir/include/$trylib/$include") { - print "WARNING: $iheader includes $include when it should include $trylib/$include\n"; - } - } - } - } elsif ($header_skip_qt_begin_header_test == 0 and $line =~ /^QT_BEGIN_HEADER\s*$/) { - $qt_begin_header_found = 1; - } elsif ($header_skip_qt_begin_header_test == 0 and $line =~ /^QT_END_HEADER\s*$/) { - $qt_end_header_found = 1; - } elsif ($header_skip_qt_begin_namespace_test == 0 and $line =~ /^QT_BEGIN_NAMESPACE\s*$/) { - $qt_begin_namespace_found = 1; - } elsif ($header_skip_qt_begin_namespace_test == 0 and $line =~ /^QT_END_NAMESPACE\s*$/) { - $qt_end_namespace_found = 1; + last; + } elsif($line =~ /^ *\# *include/) { + my $include = $line; + if($line =~ /<.*>/) { + $include =~ s,.*<(.*)>.*,$1,; + } elsif($line =~ /".*"/) { + $include =~ s,.*"(.*)".*,$1,; + } else { + $include = 0; + } + if($include) { + for (keys(%modules)) { + my $trylib = $_; + if(-e "$out_basedir/include/$trylib/$include") { + print "WARNING: $iheader includes $include when it should include $trylib/$include\n"; + } + } + } + } elsif ($header_skip_qt_begin_header_test == 0 and $line =~ /^QT_BEGIN_HEADER\s*$/) { + $qt_begin_header_found = 1; + } elsif ($header_skip_qt_begin_header_test == 0 and $line =~ /^QT_END_HEADER\s*$/) { + $qt_end_header_found = 1; + } elsif ($header_skip_qt_begin_namespace_test == 0 and $line =~ /^QT_BEGIN_NAMESPACE\s*$/) { + $qt_begin_namespace_found = 1; + } elsif ($header_skip_qt_begin_namespace_test == 0 and $line =~ /^QT_END_NAMESPACE\s*$/) { + $qt_end_namespace_found = 1; } elsif ($header_skip_qt_module_test == 0 and $line =~ /^QT_MODULE\(.*\)\s*$/) { $qt_module_found = 1; } - } + } if ($header_skip_qt_begin_header_test == 0) { if ($qt_begin_header_found == 0) { print "WARNING: $iheader does not include QT_BEGIN_HEADER\n"; @@ -1091,13 +1091,13 @@ if($check_includes) { print "WARNING: $iheader does not include QT_MODULE\n"; } } - close(F); - } - } - } - } - } - } + close(F); + } + } + } + } + } + } } } -- cgit v0.12 From a9b3381f4b42e1641834cbc1dfff4815b625807b Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Thu, 3 Jun 2010 15:44:40 +0200 Subject: deprecate header files in $$QT_BUILD_TREE/include/Qt To resolve the header file conflict as described in QTBUG-10647, we * remove include/Qt/private * "syncqt -copy" creates in include/Qt local forwarding headers instead of header file copies In case of a conflict, e.g. qxmlstream.h, we include both header files. All header files in include/Qt now yield a preprocessor warning, if they're included. They should not be used and will vanish some day. Task-number: QTBUG-10647 Reviewed-by: ossi --- bin/syncqt | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/bin/syncqt b/bin/syncqt index f993fd9..f499bbc 100755 --- a/bin/syncqt +++ b/bin/syncqt @@ -681,6 +681,7 @@ $isunix = checkUnix; #cache checkUnix # create path mkpath "$out_basedir/include", !$quiet; +mkpath "$out_basedir/include/Qt", !$quiet; my @ignore_headers = (); my $class_lib_map_contents = ""; @@ -689,6 +690,7 @@ my @ignore_for_include_check = ( "qatomic.h" ); my @ignore_for_qt_begin_header_check = ( "qiconset.h", "qconfig.h", "qconfig-dist.h", "qconfig-large.h", "qconfig-medium.h", "qconfig-minimal.h", "qconfig-small.h", "qfeatures.h", "qt_windows.h" ); my @ignore_for_qt_begin_namespace_check = ( "qconfig.h", "qconfig-dist.h", "qconfig-large.h", "qconfig-medium.h", "qconfig-minimal.h", "qconfig-small.h", "qfeatures.h", "qatomic_arch.h", "qatomic_windowsce.h", "qt_windows.h", "qatomic_macosx.h" ); my @ignore_for_qt_module_check = ( "$modules{QtCore}/arch", "$modules{QtCore}/global", "$modules{QtSql}/drivers", "$modules{QtTest}", "$modules{QtDesigner}", "$modules{QtUiTools}", "$modules{QtDBus}", "$modules{phonon}" ); +my %colliding_headers = (); foreach (@modules_to_sync) { #iteration info @@ -828,8 +830,30 @@ foreach (@modules_to_sync) { my @headers; if ($public_header) { @headers = ( "$out_basedir/include/$lib/$header" ); - push @headers, "$out_basedir/include/Qt/$header" - if ("$lib" ne "phonon" && "$subdir" =~ /^$basedir\/src/); + + # write forwarding headers to include/Qt + if ("$lib" ne "phonon" && "$subdir" =~ /^$basedir\/src/) { + my $file_name = "$out_basedir/include/Qt/$header"; + my $header_content = ''; + if (exists $colliding_headers{$file_name}) { + $file_name = ">>$file_name"; + } else { + $colliding_headers{$file_name} = 1; + $file_name = ">$file_name"; + my $warning_msg = 'Inclusion of header files from include/Qt is deprecated.'; + $header_content = "#ifndef QT_NO_QT_INCLUDE_WARN\n" . + " #if defined(__GNUC__)\n" . + " #pragma warning \"$warning_msg\"\n" . + " #elif defined(_MSC_VER)\n" . + " #pragma message \"WARNING: $warning_msg\"\n" . + " #endif\n". + "#endif\n\n"; + } + $header_content .= '#include "' . "../$lib/$header" . "\"\n"; + open HEADERFILE, $file_name; + print HEADERFILE $header_content; + close HEADERFILE; + } foreach(@classes) { my $header_base = basename($header); @@ -849,8 +873,6 @@ foreach (@modules_to_sync) { } } elsif ($create_private_headers) { @headers = ( "$out_basedir/include/$lib/private/$header" ); - push @headers, "$out_basedir/include/Qt/private/$header" - if ("$lib" ne "phonon"); } foreach(@headers) { #sync them $header_copies++ if(syncHeader($_, $iheader, $copy_headers)); -- cgit v0.12 From 7fb445a5cbfb24a7846270ef8da63362c6b6f84d Mon Sep 17 00:00:00 2001 From: Marek Wieckowski Date: Wed, 9 Jun 2010 09:11:30 +0200 Subject: designer: add sorting in signal-slot editor window Reviewed-by: Friedemann Kleint --- .../src/components/signalsloteditor/signalsloteditorwindow.cpp | 10 +++++++--- .../src/components/signalsloteditor/signalsloteditorwindow.h | 2 ++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp b/tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp index a25bd5d..5547761 100644 --- a/tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp +++ b/tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp @@ -63,6 +63,7 @@ #include #include #include +#include #include #include #include @@ -712,9 +713,12 @@ SignalSlotEditorWindow::SignalSlotEditorWindow(QDesignerFormEditorInterface *cor m_remove_button(new QToolButton), m_core(core), m_model(new ConnectionModel(this)), + m_proxy_model(new QSortFilterProxyModel(this)), m_handling_selection_change(false) { - m_view->setModel(m_model); + m_proxy_model->setSourceModel(m_model); + m_view->setModel(m_proxy_model); + m_view->setSortingEnabled(true); m_view->setItemDelegate(new ConnectionDelegate(this)); m_view->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::EditKeyPressed); @@ -790,7 +794,7 @@ void SignalSlotEditorWindow::updateDialogSelection(Connection *con) if (m_handling_selection_change || m_editor == 0) return; - QModelIndex index = m_model->connectionToIndex(con); + QModelIndex index = m_proxy_model->mapFromSource(m_model->connectionToIndex(con)); if (index == m_view->currentIndex()) return; m_handling_selection_change = true; @@ -808,7 +812,7 @@ void SignalSlotEditorWindow::updateEditorSelection(const QModelIndex &index) if (m_editor == 0) return; - Connection *con = m_model->indexToConnection(index); + Connection *con = m_model->indexToConnection(m_proxy_model->mapToSource(index)); if (m_editor->selected(con)) return; m_handling_selection_change = true; diff --git a/tools/designer/src/components/signalsloteditor/signalsloteditorwindow.h b/tools/designer/src/components/signalsloteditor/signalsloteditorwindow.h index 9315955..665f0b7 100644 --- a/tools/designer/src/components/signalsloteditor/signalsloteditorwindow.h +++ b/tools/designer/src/components/signalsloteditor/signalsloteditorwindow.h @@ -50,6 +50,7 @@ QT_BEGIN_NAMESPACE class QDesignerFormWindowInterface; class QDesignerFormEditorInterface; class QModelIndex; +class QSortFilterProxyModel; class QTreeView; class QToolButton; @@ -84,6 +85,7 @@ private: QToolButton *m_add_button, *m_remove_button; QDesignerFormEditorInterface *m_core; ConnectionModel *m_model; + QSortFilterProxyModel *m_proxy_model; bool m_handling_selection_change; }; -- cgit v0.12 From 3a72a4004fc7aaa610ac8ef988371ae37a99630a Mon Sep 17 00:00:00 2001 From: Mark Brand Date: Wed, 9 Jun 2010 10:43:14 +0200 Subject: minor cosmetic improvements Made whitespace and case more consistent. Merge-request: 2407 Reviewed-by: Oswald Buddenhagen --- configure | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 1980cf1..663faf9 100755 --- a/configure +++ b/configure @@ -4668,7 +4668,7 @@ if [ "$CFG_IWMMXT" = "yes" ]; then fi # detect neon support -if ([ "$CFG_ARCH" = "arm" ] || [ "$CFG_ARCH" = "armv6" ]) && [ "${CFG_NEON}" = "auto" ]; then +if ( [ "$CFG_ARCH" = "arm" ] || [ "$CFG_ARCH" = "armv6" ] ) && [ "${CFG_NEON}" = "auto" ]; then if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/neon "neon" $L_FLAGS $I_FLAGS $l_FLAGS "-mfpu=neon"; then CFG_NEON=yes else @@ -5354,7 +5354,7 @@ if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" ]; then fi fi # X11/QWS -# x11 +# X11 if [ "$PLATFORM_X11" = "yes" ]; then x11tests="$relpath/config.tests/x11" X11TESTS_FLAGS= -- cgit v0.12 From e6f601ce80726bf2d5c2fdb1b87a62b563cb471b Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Wed, 9 Jun 2010 20:24:17 +0200 Subject: Attempt to fix build failure on Linux introduced by 09c6a81109 --- src/corelib/global/qendian.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/corelib/global/qendian.h b/src/corelib/global/qendian.h index 01550cf..d867738 100644 --- a/src/corelib/global/qendian.h +++ b/src/corelib/global/qendian.h @@ -42,8 +42,9 @@ #ifndef QENDIAN_H #define QENDIAN_H +#include + #ifdef Q_OS_LINUX -# include QT_BEGIN_INCLUDE_NAMESPACE # include QT_END_INCLUDE_NAMESPACE @@ -53,8 +54,6 @@ QT_END_INCLUDE_NAMESPACE #include #endif -#include - QT_BEGIN_HEADER QT_BEGIN_NAMESPACE -- cgit v0.12 From c6468c19975e2d05b13f3cc60da46929ab44ea8d Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 10 Jun 2010 10:10:46 +0200 Subject: actually fix namespaced compile --- src/corelib/global/qendian.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/corelib/global/qendian.h b/src/corelib/global/qendian.h index d867738..d53504a 100644 --- a/src/corelib/global/qendian.h +++ b/src/corelib/global/qendian.h @@ -45,9 +45,7 @@ #include #ifdef Q_OS_LINUX -QT_BEGIN_INCLUDE_NAMESPACE # include -QT_END_INCLUDE_NAMESPACE #endif #ifdef __GLIBC__ -- cgit v0.12 From 1fc149fdc32e12043c9c2676e2a381e225886dbf Mon Sep 17 00:00:00 2001 From: ck Date: Thu, 10 Jun 2010 12:05:10 +0200 Subject: Demos: Fix compilation with namespace. --- demos/spectrum/app/mainwidget.h | 1 - 1 file changed, 1 deletion(-) diff --git a/demos/spectrum/app/mainwidget.h b/demos/spectrum/app/mainwidget.h index b3dc352..ddab8b7 100644 --- a/demos/spectrum/app/mainwidget.h +++ b/demos/spectrum/app/mainwidget.h @@ -59,7 +59,6 @@ QT_FORWARD_DECLARE_CLASS(QLabel) QT_FORWARD_DECLARE_CLASS(QPushButton) QT_FORWARD_DECLARE_CLASS(QMenu) QT_FORWARD_DECLARE_CLASS(QAction) -QT_END_NAMESPACE /** * Main application widget, responsible for connecting the various UI -- cgit v0.12 From 0d5649713af91dcce58a623bbef7d38e2fbdf13b Mon Sep 17 00:00:00 2001 From: Mark Brand Date: Thu, 10 Jun 2010 14:35:03 +0200 Subject: use "win32-g++*" scope to match all MinGW makespecs The scope "win32-g++" comes from the name of the makespec. However, it is frequently used to check for MinGW. This works fine as long as win32-g++ is the only makespec for MinGW. Now we need the wildcard to cover "win32-g++-cross" as well. Also reordered test of win32 before win32-g++*. Also took opportunity to use else. Merge-request: 2407 Reviewed-by: Oswald Buddenhagen --- doc/doc.pri | 6 +++--- examples/activeqt/activeqt.pro | 2 +- qmake/qmake.pri | 2 +- src/3rdparty/javascriptcore/WebKit.pri | 2 +- .../webkit/JavaScriptCore/JavaScriptCore.pro | 2 +- src/3rdparty/webkit/WebCore/WebCore.pro | 4 ++-- src/3rdparty/webkit/WebKit.pri | 2 +- src/3rdparty/webkit/WebKit/qt/Api/DerivedSources.pro | 2 +- src/activeqt/container/container.pro | 2 +- src/activeqt/control/control.pro | 4 ++-- src/gui/painting/painting.pri | 2 +- src/plugins/sqldrivers/psql/psql.pro | 4 ++-- src/sql/drivers/drivers.pri | 20 +++++++++----------- src/winmain/winmain.pro | 2 +- .../auto/qprocess/testProcessEOF/testProcessEOF.pro | 2 +- tests/auto/qsqldriver/qsqldriver.pro | 2 +- .../qsqlrelationaltablemodel.pro | 2 +- .../qtcpserver/crashingServer/crashingServer.pro | 2 +- tools/activeqt/testcon/testcon.pro | 2 +- .../assistant/lib/fulltextsearch/fulltextsearch.pro | 2 +- tools/configure/configure.pro | 2 +- 21 files changed, 34 insertions(+), 36 deletions(-) diff --git a/doc/doc.pri b/doc/doc.pri index 0a5cc9a..f748f3d 100644 --- a/doc/doc.pri +++ b/doc/doc.pri @@ -5,9 +5,9 @@ DOCS_GENERATION_DEFINES = GENERATOR = $$QT_BUILD_TREE/bin/qhelpgenerator -win32:!win32-g++ { +win32:!win32-g++* { unixstyle = false -} else :win32-g++:isEmpty(QMAKE_SH) { +} else :win32-g++*:isEmpty(QMAKE_SH) { unixstyle = false } else { unixstyle = true @@ -41,7 +41,7 @@ QT_JA_JP_DOCUMENTATION = ($$QDOC qt-api-only_ja_JP.qdocconf) && \ $$GENERATOR doc-build/html-qt_ja_JP/qt.qhp -o doc/qch/qt_ja_JP.qch \ ) -win32-g++:isEmpty(QMAKE_SH) { +win32-g++*:isEmpty(QMAKE_SH) { QT_DOCUMENTATION = $$replace(QT_DOCUMENTATION, "/", "\\\\") QT_ZH_CN_DOCUMENTATION = $$replace(QT_ZH_CN_DOCUMENTATION, "/", "\\\\") QT_JA_JP_DOCUMENTATION = $$replace(QT_JA_JP_DOCUMENTATION, "/", "\\\\") diff --git a/examples/activeqt/activeqt.pro b/examples/activeqt/activeqt.pro index 262e1a1..79d257a 100644 --- a/examples/activeqt/activeqt.pro +++ b/examples/activeqt/activeqt.pro @@ -11,7 +11,7 @@ contains(QT_CONFIG, opengl):SUBDIRS += opengl # For now only the contain examples with mingw, for the others you need # an IDL compiler -win32-g++|wince*:SUBDIRS = webbrowser +win32-g++*|wince*:SUBDIRS = webbrowser # install target.path = $$[QT_INSTALL_EXAMPLES]/activeqt diff --git a/qmake/qmake.pri b/qmake/qmake.pri index 6e0f8a2..a7e0ab1 100644 --- a/qmake/qmake.pri +++ b/qmake/qmake.pri @@ -134,7 +134,7 @@ bootstrap { #Qt code } else:win32 { SOURCES += qfsfileengine_win.cpp qfsfileengine_iterator_win.cpp qsettings_win.cpp win32-msvc*:LIBS += ole32.lib advapi32.lib - win32-g++:LIBS += -lole32 -luuid + win32-g++*:LIBS += -lole32 -luuid } qnx { diff --git a/src/3rdparty/javascriptcore/WebKit.pri b/src/3rdparty/javascriptcore/WebKit.pri index 0dd0799..9aaaa99 100644 --- a/src/3rdparty/javascriptcore/WebKit.pri +++ b/src/3rdparty/javascriptcore/WebKit.pri @@ -36,7 +36,7 @@ building-libs { win32-*|wince* { CONFIG(debug, debug|release):build_pass: QTWEBKITLIBNAME = $${QTWEBKITLIBNAME}d QTWEBKITLIBNAME = $${QTWEBKITLIBNAME}$${QT_MAJOR_VERSION} - win32-g++: LIBS += -l$$QTWEBKITLIBNAME + win32-g++*: LIBS += -l$$QTWEBKITLIBNAME else: LIBS += $${QTWEBKITLIBNAME}.lib } else { LIBS += -lQtWebKit diff --git a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro index 22fcc91..3f1ac86 100644 --- a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro +++ b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro @@ -43,7 +43,7 @@ CONFIG(QTDIR_build) { } # Pick up 3rdparty libraries from INCLUDE/LIB just like with MSVC -win32-g++ { +win32-g++* { TMPPATH = $$quote($$(INCLUDE)) QMAKE_INCDIR_POST += $$split(TMPPATH,";") TMPPATH = $$quote($$(LIB)) diff --git a/src/3rdparty/webkit/WebCore/WebCore.pro b/src/3rdparty/webkit/WebCore/WebCore.pro index 048fc93..92082b5 100644 --- a/src/3rdparty/webkit/WebCore/WebCore.pro +++ b/src/3rdparty/webkit/WebCore/WebCore.pro @@ -103,7 +103,7 @@ win32-msvc2005|win32-msvc2008:{ } # Pick up 3rdparty libraries from INCLUDE/LIB just like with MSVC -win32-g++ { +win32-g++* { TMPPATH = $$quote($$(INCLUDE)) QMAKE_INCDIR_POST += $$split(TMPPATH,";") TMPPATH = $$quote($$(LIB)) @@ -2935,7 +2935,7 @@ CONFIG(QTDIR_build) { CONFIG += no_debug_info } -!win32-g++:win32:contains(QMAKE_HOST.arch, x86_64):{ +win32:!win32-g++*:contains(QMAKE_HOST.arch, x86_64):{ asm_compiler.commands = ml64 /c asm_compiler.commands += /Fo ${QMAKE_FILE_OUT} ${QMAKE_FILE_IN} asm_compiler.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}$${first(QMAKE_EXT_OBJ)} diff --git a/src/3rdparty/webkit/WebKit.pri b/src/3rdparty/webkit/WebKit.pri index 921a6e0..fcd2891 100644 --- a/src/3rdparty/webkit/WebKit.pri +++ b/src/3rdparty/webkit/WebKit.pri @@ -24,7 +24,7 @@ building-libs { win32-*|wince* { !CONFIG(release, debug|release):build_pass: QTWEBKITLIBNAME = $${QTWEBKITLIBNAME}d QTWEBKITLIBNAME = $${QTWEBKITLIBNAME}$${QT_MAJOR_VERSION} - win32-g++: LIBS += -l$$QTWEBKITLIBNAME + win32-g++*: LIBS += -l$$QTWEBKITLIBNAME else: LIBS += $${QTWEBKITLIBNAME}.lib } else { LIBS += -lQtWebKit diff --git a/src/3rdparty/webkit/WebKit/qt/Api/DerivedSources.pro b/src/3rdparty/webkit/WebKit/qt/Api/DerivedSources.pro index 22d4c8d..62546f6 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/DerivedSources.pro +++ b/src/3rdparty/webkit/WebKit/qt/Api/DerivedSources.pro @@ -12,7 +12,7 @@ DOUBLE_ESCAPED_QUOTE = "" ESCAPE = "" win32-msvc*|symbian { ESCAPE = "^" -} else:win32-g++:isEmpty(QMAKE_SH) { +} else:win32-g++*:isEmpty(QMAKE_SH) { # MinGW's make will run makefile commands using sh, even if make # was run from the Windows shell, if it finds sh in the path. ESCAPE = "^" diff --git a/src/activeqt/container/container.pro b/src/activeqt/container/container.pro index d654f92..4c9b3a8 100644 --- a/src/activeqt/container/container.pro +++ b/src/activeqt/container/container.pro @@ -19,7 +19,7 @@ QTDIR_build:DESTDIR = $$QT_BUILD_TREE/lib LIBS += -lole32 -loleaut32 !wince*:LIBS += -luser32 -lgdi32 -ladvapi32 -win32-g++:LIBS += -luuid +win32-g++*:LIBS += -luuid HEADERS = ../control/qaxaggregated.h \ qaxbase.h \ diff --git a/src/activeqt/control/control.pro b/src/activeqt/control/control.pro index 44eb928..361ca29 100644 --- a/src/activeqt/control/control.pro +++ b/src/activeqt/control/control.pro @@ -18,11 +18,11 @@ CONFIG += qt warn_off staticlib QTDIR_build:DESTDIR = $$QT_BUILD_TREE\\lib DEFINES += QAX_SERVER -win32-g++:DEFINES += QT_NEEDS_QMAIN +win32-g++*:DEFINES += QT_NEEDS_QMAIN win32-borland:DEFINES += QT_NEEDS_QMAIN LIBS += -luser32 -lole32 -loleaut32 -lgdi32 -win32-g++:LIBS += -luuid +win32-g++*:LIBS += -luuid HEADERS = qaxaggregated.h \ qaxbindable.h \ diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri index 123af1c..c3b0e3e 100644 --- a/src/gui/painting/painting.pri +++ b/src/gui/painting/painting.pri @@ -234,7 +234,7 @@ contains(QMAKE_MAC_XARCH, no) { IWMMXT_SOURCES += painting/qdrawhelper_iwmmxt.cpp } - win32-g++|!win32:!*-icc* { + win32-g++*|!win32:!*-icc* { mmx { mmx_compiler.commands = $$QMAKE_CXX -c -Winline diff --git a/src/plugins/sqldrivers/psql/psql.pro b/src/plugins/sqldrivers/psql/psql.pro index 0a38ee4..80a5348 100644 --- a/src/plugins/sqldrivers/psql/psql.pro +++ b/src/plugins/sqldrivers/psql/psql.pro @@ -4,7 +4,7 @@ HEADERS = ../../../sql/drivers/psql/qsql_psql.h SOURCES = main.cpp \ ../../../sql/drivers/psql/qsql_psql.cpp -unix|win32-g++: { +unix|win32-g++*: { !isEmpty(QT_LFLAGS_PSQL) { !contains(QT_CONFIG, system-zlib): QT_LFLAGS_PSQL -= -lz !static:LIBS *= $$QT_LFLAGS_PSQL @@ -13,6 +13,6 @@ unix|win32-g++: { !contains(LIBS, .*pq.*):LIBS *= -lpq } -win32:!win32-g++:!contains(LIBS, .*pq.* ) LIBS *= -llibpq -lws2_32 -ladvapi32 +win32:!win32-g++*:!contains(LIBS, .*pq.* ) LIBS *= -llibpq -lws2_32 -ladvapi32 include(../qsqldriverbase.pri) diff --git a/src/sql/drivers/drivers.pri b/src/sql/drivers/drivers.pri index 8dfc50f..05e7265 100644 --- a/src/sql/drivers/drivers.pri +++ b/src/sql/drivers/drivers.pri @@ -6,16 +6,14 @@ contains(sql-drivers, psql) { HEADERS += drivers/psql/qsql_psql.h SOURCES += drivers/psql/qsql_psql.cpp - unix|win32-g++ { + unix|win32-g++* { !static:!isEmpty(QT_LFLAGS_PSQL) { !contains(QT_CONFIG, system-zlib): QT_LFLAGS_PSQL -= -lz !static:LIBS *= $$QT_LFLAGS_PSQL QMAKE_CXXFLAGS *= $$QT_CFLAGS_PSQL } !contains(LIBS, .*pq.*):LIBS *= -lpq - } - - win32:!win32-g++:!contains(LIBS, .*pq.* ) LIBS *= -llibpq -lws2_32 -ladvapi32 + } else:win32:!contains(LIBS, .*pq.* ) LIBS *= -llibpq -lws2_32 -ladvapi32 } contains(sql-drivers, mysql) { @@ -35,8 +33,8 @@ contains(sql-drivers, mysql) { } win32:!contains(LIBS, .*mysql.*):!contains(LIBS, .*mysqld.*) { - !win32-g++:LIBS *= -llibmysql - win32-g++:LIBS *= -lmysql + !win32-g++*:LIBS *= -llibmysql + else:LIBS *= -lmysql } } @@ -49,8 +47,8 @@ contains(sql-drivers, odbc) { unix:DEFINES += UNICODE win32 { - !win32-borland:LIBS *= -lodbc32 - win32-borland:LIBS *= $(BCB)/lib/PSDK/odbc32.lib + !win32-borland:LIBS *= -lodbc32 + else:LIBS *= $(BCB)/lib/PSDK/odbc32.lib } } @@ -71,7 +69,7 @@ contains(sql-drivers, tds) { win32 { !win32-borland:LIBS += -lNTWDBLIB - win32-borland:LIBS += $(BCB)/lib/PSDK/NTWDBLIB.LIB + else:LIBS += $(BCB)/lib/PSDK/NTWDBLIB.LIB } } @@ -83,7 +81,7 @@ contains(sql-drivers, db2) { win32 { !win32-borland:LIBS += -ldb2cli -# win32-borland:LIBS += $(BCB)/lib/PSDK/db2cli.lib +# else:LIBS += $(BCB)/lib/PSDK/db2cli.lib } } @@ -95,7 +93,7 @@ contains(sql-drivers, ibase) { win32 { !win32-borland:LIBS *= -lgds32_ms - win32-borland:LIBS += gds32.lib + else:LIBS += gds32.lib } } diff --git a/src/winmain/winmain.pro b/src/winmain/winmain.pro index bc322b9..efee3cd 100644 --- a/src/winmain/winmain.pro +++ b/src/winmain/winmain.pro @@ -8,7 +8,7 @@ CONFIG += staticlib warn_on CONFIG -= qt shared win32 { - win32-g++:DEFINES += QT_NEEDS_QMAIN + win32-g++*:DEFINES += QT_NEEDS_QMAIN win32-borland:DEFINES += QT_NEEDS_QMAIN SOURCES = qtmain_win.cpp CONFIG += png zlib diff --git a/tests/auto/qprocess/testProcessEOF/testProcessEOF.pro b/tests/auto/qprocess/testProcessEOF/testProcessEOF.pro index f406759..756bd23 100644 --- a/tests/auto/qprocess/testProcessEOF/testProcessEOF.pro +++ b/tests/auto/qprocess/testProcessEOF/testProcessEOF.pro @@ -2,7 +2,7 @@ SOURCES = main.cpp CONFIG -= qt app_bundle CONFIG += console -!win32-g++:win32:!equals(TEMPLATE_PREFIX, "vc"):QMAKE_CXXFLAGS += /GS- +win32:!win32-g++*:!equals(TEMPLATE_PREFIX, "vc"):QMAKE_CXXFLAGS += /GS- DESTDIR = ./ diff --git a/tests/auto/qsqldriver/qsqldriver.pro b/tests/auto/qsqldriver/qsqldriver.pro index d04ca83..2e9ed67 100644 --- a/tests/auto/qsqldriver/qsqldriver.pro +++ b/tests/auto/qsqldriver/qsqldriver.pro @@ -9,7 +9,7 @@ wince*: { DEPLOYMENT += plugFiles LIBS += -lws2 } else { - win32-g++ { + win32-g++* { LIBS += -lws2_32 } else:win32 { LIBS += ws2_32.lib diff --git a/tests/auto/qsqlrelationaltablemodel/qsqlrelationaltablemodel.pro b/tests/auto/qsqlrelationaltablemodel/qsqlrelationaltablemodel.pro index ee4f2f0..c6681d5 100644 --- a/tests/auto/qsqlrelationaltablemodel/qsqlrelationaltablemodel.pro +++ b/tests/auto/qsqlrelationaltablemodel/qsqlrelationaltablemodel.pro @@ -17,7 +17,7 @@ wince*: { } } } else { - win32-g++ { + win32-g++* { LIBS += -lws2_32 } else:win32 { LIBS += ws2_32.lib diff --git a/tests/auto/qtcpserver/crashingServer/crashingServer.pro b/tests/auto/qtcpserver/crashingServer/crashingServer.pro index 70e42b4..0bea655 100644 --- a/tests/auto/qtcpserver/crashingServer/crashingServer.pro +++ b/tests/auto/qtcpserver/crashingServer/crashingServer.pro @@ -5,4 +5,4 @@ DESTDIR = ./ # This means the auto test works on some machines for MinGW. No dialog stalls # the application. -win32-g++:CONFIG += console +win32-g++*:CONFIG += console diff --git a/tools/activeqt/testcon/testcon.pro b/tools/activeqt/testcon/testcon.pro index dc98218..89f8067 100644 --- a/tools/activeqt/testcon/testcon.pro +++ b/tools/activeqt/testcon/testcon.pro @@ -16,6 +16,6 @@ RC_FILE = testcon.rc win32-borland { QMAKE_POST_LINK = -midl $$QT_SOURCE_TREE/tools/activeqt/testcon/testcon.idl } else { - !win32-g++:QMAKE_POST_LINK = midl $$QT_SOURCE_TREE/tools/activeqt/testcon/testcon.idl && move testcon.tlb $(TARGETDIR) + !win32-g++*:QMAKE_POST_LINK = midl $$QT_SOURCE_TREE/tools/activeqt/testcon/testcon.idl && move testcon.tlb $(TARGETDIR) } diff --git a/tools/assistant/lib/fulltextsearch/fulltextsearch.pro b/tools/assistant/lib/fulltextsearch/fulltextsearch.pro index fb1a0dd..4d2fddb 100644 --- a/tools/assistant/lib/fulltextsearch/fulltextsearch.pro +++ b/tools/assistant/lib/fulltextsearch/fulltextsearch.pro @@ -29,7 +29,7 @@ unix:QMAKE_PKGCONFIG_REQUIRES = QtCore CONFIG(exceptions_off) { CONFIG -= exceptions_off CONFIG += exceptions - !win32|win32-g++ { + !win32|win32-g++* { QMAKE_CFLAGS -= -fno-exceptions QMAKE_CXXFLAGS -= -fno-exceptions QMAKE_LFLAGS -= -fno-exceptions diff --git a/tools/configure/configure.pro b/tools/configure/configure.pro index d926a76..64a6d9a 100644 --- a/tools/configure/configure.pro +++ b/tools/configure/configure.pro @@ -8,7 +8,7 @@ DEFINES += QT_BOOTSTRAPPED win32 : LIBS += -lole32 -ladvapi32 win32-msvc.net | win32-msvc2* : QMAKE_CXXFLAGS += /EHsc -win32-g++ : LIBS += -luuid +win32-g++* : LIBS += -luuid win32-msvc* { QMAKE_CFLAGS_RELEASE -= -MD -- cgit v0.12 From b65a1e0be447abca16f20001efe1be43a0469808 Mon Sep 17 00:00:00 2001 From: Mark Brand Date: Thu, 10 Jun 2010 14:35:05 +0200 Subject: support for cross building Qt for MinGW (win32-g++) on Unix This changeset provides the basis for targetting win32-g++ on Unix using the configure shell script: support added to the configure script itself support added to relevant config.tests support added to mingw makefile generator in qmake new makespec: unsupported/win32-g++-cross The makespec is based on the win32-g++ makespec. Merge-request: 2407 Reviewed-by: Oswald Buddenhagen --- config.tests/unix/compile.test | 6 +- config.tests/unix/getaddrinfo/getaddrinfotest.cpp | 7 ++ config.tests/unix/iconv/iconv.pro | 2 +- config.tests/unix/ipv6/ipv6test.cpp | 5 + config.tests/unix/odbc/odbc.cpp | 3 + config.tests/unix/odbc/odbc.pro | 3 +- config.tests/x11/opengl/opengl.pro | 3 +- configure | 70 +++++++++++--- mkspecs/unsupported/win32-g++-cross/qmake.conf | 101 +++++++++++++++++++++ .../unsupported/win32-g++-cross/qplatformdefs.h | 42 +++++++++ qmake/generators/metamakefile.cpp | 11 ++- qmake/generators/win32/mingw_make.cpp | 7 +- 12 files changed, 241 insertions(+), 19 deletions(-) create mode 100644 mkspecs/unsupported/win32-g++-cross/qmake.conf create mode 100644 mkspecs/unsupported/win32-g++-cross/qplatformdefs.h diff --git a/config.tests/unix/compile.test b/config.tests/unix/compile.test index 67a4636..99ebfd2 100755 --- a/config.tests/unix/compile.test +++ b/config.tests/unix/compile.test @@ -65,8 +65,10 @@ test -d "$OUTDIR/$TEST" || mkdir -p "$OUTDIR/$TEST" cd "$OUTDIR/$TEST" test -r Makefile && $MAKE distclean >/dev/null 2>&1 +# Make sure output from possible previous tests is gone +rm -f "$EXE" "${EXE}.exe" -"$OUTDIR/bin/qmake" -nocache -spec "$QMKSPEC" "CONFIG+=$QMAKE_CONFIG" "LIBS*=$LFLAGS" "LIBS+=$MAC_ARCH_LFLAGS" "INCLUDEPATH*=$INCLUDEPATH" "QMAKE_CXXFLAGS*=$CXXFLAGS" "QMAKE_CXXFLAGS+=$MAC_ARCH_CXXFLAGS" "$SRCDIR/$TEST/$EXE.pro" -o "$OUTDIR/$TEST/Makefile" +"$OUTDIR/bin/qmake" -nocache -spec "$QMKSPEC" "CONFIG+=$QMAKE_CONFIG" "CONFIG-=debug_and_release" "LIBS*=$LFLAGS" "LIBS+=$MAC_ARCH_LFLAGS" "INCLUDEPATH*=$INCLUDEPATH" "QMAKE_CXXFLAGS*=$CXXFLAGS" "QMAKE_CXXFLAGS+=$MAC_ARCH_CXXFLAGS" "$SRCDIR/$TEST/$EXE.pro" -o "$OUTDIR/$TEST/Makefile" if [ "$VERBOSE" = "yes" ]; then $MAKE @@ -74,7 +76,7 @@ else $MAKE >/dev/null 2>&1 fi -[ -x "$EXE" ] && SUCCESS=yes +( [ -x "$EXE" ] || [ -x "${EXE}.exe" ] ) && SUCCESS=yes # done if [ "$SUCCESS" != "yes" ]; then diff --git a/config.tests/unix/getaddrinfo/getaddrinfotest.cpp b/config.tests/unix/getaddrinfo/getaddrinfotest.cpp index 0c482cc..df6ae10 100644 --- a/config.tests/unix/getaddrinfo/getaddrinfotest.cpp +++ b/config.tests/unix/getaddrinfo/getaddrinfotest.cpp @@ -42,9 +42,16 @@ /* Sample program for configure to test for getaddrinfo on the unix platform. we check for all structures and functions required. */ +#include +#include +#ifdef __MINGW32__ +#include +#include +#else #include #include #include +#endif int main() { diff --git a/config.tests/unix/iconv/iconv.pro b/config.tests/unix/iconv/iconv.pro index 8cdc776..d642da2 100644 --- a/config.tests/unix/iconv/iconv.pro +++ b/config.tests/unix/iconv/iconv.pro @@ -1,3 +1,3 @@ SOURCES = iconv.cpp CONFIG -= qt dylib app_bundle -mac:LIBS += -liconv +mac|win32-g++*:LIBS += -liconv diff --git a/config.tests/unix/ipv6/ipv6test.cpp b/config.tests/unix/ipv6/ipv6test.cpp index 4fb27f2..4243f2d 100644 --- a/config.tests/unix/ipv6/ipv6test.cpp +++ b/config.tests/unix/ipv6/ipv6test.cpp @@ -46,9 +46,14 @@ platforms. We check for the required IPv6 data structures. */ #define _HPUX_SOURCE #endif +#ifdef __MINGW32__ +#include +#include +#else #include #include #include +#endif int main() { diff --git a/config.tests/unix/odbc/odbc.cpp b/config.tests/unix/odbc/odbc.cpp index 32602c0..98f3571 100644 --- a/config.tests/unix/odbc/odbc.cpp +++ b/config.tests/unix/odbc/odbc.cpp @@ -39,6 +39,9 @@ ** ****************************************************************************/ +#ifdef __MINGW32__ +#include +#endif #include #include diff --git a/config.tests/unix/odbc/odbc.pro b/config.tests/unix/odbc/odbc.pro index c588ede..06a548f 100644 --- a/config.tests/unix/odbc/odbc.pro +++ b/config.tests/unix/odbc/odbc.pro @@ -1,4 +1,5 @@ SOURCES = odbc.cpp CONFIG -= qt dylib mac:CONFIG -= app_bundle -LIBS += -lodbc +win32-g++*:LIBS += -lodbc32 +else:LIBS += -lodbc diff --git a/config.tests/x11/opengl/opengl.pro b/config.tests/x11/opengl/opengl.pro index 432bd8d..5fd41d3 100644 --- a/config.tests/x11/opengl/opengl.pro +++ b/config.tests/x11/opengl/opengl.pro @@ -7,4 +7,5 @@ for(p, QMAKE_LIBDIR_OPENGL) { } CONFIG -= qt -LIBS += -lGL -lGLU +win32-g++*:LIBS += -lopengl32 +else:LIBS += -lGL -lGLU diff --git a/configure b/configure index 663faf9..5ba0e57 100755 --- a/configure +++ b/configure @@ -779,6 +779,7 @@ RPATH_FLAGS= l_FLAGS= QCONFIG_FLAGS= XPLATFORM= # This seems to be the QMAKESPEC, like "linux-g++" or "symbian/linux-gcce" +XPLATFORM_MINGW=no # Whether target platform is MinGW (win32-g++*) PLATFORM=$QMAKESPEC QT_CROSS_COMPILE=no OPT_CONFIRM_LICENSE=no @@ -1326,7 +1327,9 @@ while [ "$#" -gt 0 ]; do fi ;; arch) - if [ "$PLATFORM_MAC" = "yes" ]; then + # if this is a Mac then "windows" probably means + # we are cross-compiling for MinGW + if [ "$PLATFORM_MAC" = "yes" ] && [ "$VAL" != "windows" ]; then CFG_MAC_ARCHS="$CFG_MAC_ARCHS $VAL" else CFG_ARCH=$VAL @@ -1444,6 +1447,7 @@ while [ "$#" -gt 0 ]; do ;; xplatform) XPLATFORM="$VAL" + case `basename "$XPLATFORM"` in win32-g++*) XPLATFORM_MINGW=yes;; esac ;; debug-and-release) if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then @@ -2578,9 +2582,13 @@ if [ -z "$PLATFORM" ]; then " ;; SunOS:5*) - #PLATFORM=solaris-g++ - PLATFORM=solaris-cc - #PLATFORM=solaris-cc64 + if [ "$XPLATFORM_MINGW" = "yes" ]; then + PLATFORM="solaris-g++" + else + #PLATFORM=solaris-g++ + PLATFORM=solaris-cc + #PLATFORM=solaris-cc64 + fi PLATFORM_NOTES=" - Also available for Solaris: solaris-g++ solaris-cc-64 " @@ -2650,6 +2658,9 @@ else fi [ -z "$XPLATFORM" ] && XPLATFORM="$PLATFORM" + +case `basename "$XPLATFORM"` in win32-g++*) XPLATFORM_MINGW=yes;; esac + if [ -d "$PLATFORM" ]; then QMAKESPEC="$PLATFORM" else @@ -2922,6 +2933,8 @@ if [ "$PLATFORM" != "$XPLATFORM" -a "$CFG_EMBEDDED" != "no" ]; then CFG_ARCH="$CFG_EMBEDDED" ;; esac +elif [ "$XPLATFORM_MINGW" = "yes" ]; then + [ -z "$CFG_ARCH" ] && CFG_ARCH="windows" elif [ "$PLATFORM_MAC" = "yes" ] || [ -z "$CFG_ARCH" ]; then CFG_ARCH=$CFG_HOST_ARCH fi @@ -4087,6 +4100,8 @@ elif [ "$PLATFORM_MAC" = "yes" ]; then Platform="Qt for Mac OS X" elif echo "$XPLATFORM" | grep "symbian" > /dev/null ; then Platform="Qt for Symbian" +elif [ "$XPLATFORM_MINGW" = "yes" ]; then + Platform="Qt for Windows" elif [ '!' -z "`getQMakeConf \"$XQMAKESPEC\" | grep QMAKE_LIBS_X11 | awk '{print $3;}'`" ]; then PLATFORM_X11=yes Platform="Qt for Linux/X11" @@ -4698,6 +4713,8 @@ if [ "$CFG_ZLIB" = "auto" ]; then fi fi +[ "$XPLATFORM_MINGW" = "yes" ] && QMakeVar add styles "windowsxp windowsvista" + case "$XPLATFORM" in *symbian*) QMakeVar set styles "windows s60" #overwrite previous default CFG_LIBFREETYPE=no @@ -4897,7 +4914,8 @@ for _SQLDR in $CFG_SQL_AVAILABLE; do ;; psql) if [ "$CFG_SQL_psql" != "no" ]; then - if "$WHICH" pg_config >/dev/null 2>&1; then + # Be careful not to use native pg_config when cross building. + if [ "$XPLATFORM_MINGW" != "yes" ] && "$WHICH" pg_config >/dev/null 2>&1; then QT_CFLAGS_PSQL=`pg_config --includedir 2>/dev/null` QT_LFLAGS_PSQL=`pg_config --libdir 2>/dev/null` fi @@ -4924,7 +4942,7 @@ for _SQLDR in $CFG_SQL_AVAILABLE; do ;; odbc) if [ "$CFG_SQL_odbc" != "no" ]; then - if [ "$PLATFORM_MAC" != "yes" ] && "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/odbc "ODBC" $L_FLAGS $I_FLAGS $l_FLAGS $MAC_CONFIG_TEST_COMMANDLINE; then + if ( [ "$PLATFORM_MAC" != "yes" ] || [ "$XPLATFORM_MINGW" = "yes" ] ) && "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/odbc "ODBC" $L_FLAGS $I_FLAGS $l_FLAGS $MAC_CONFIG_TEST_COMMANDLINE; then if [ "$CFG_SQL_odbc" = "auto" ]; then CFG_SQL_odbc=plugin fi @@ -5190,6 +5208,7 @@ if [ "$PLATFORM_MAC" = "yes" -a ! -z "$QT_NAMESPACE" ]; then QT_NAMESPACE_MAC_CRC=`"$mactests/crc.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/mac/crc $QT_NAMESPACE $L_FLAGS $I_FLAGS $l_FLAGS` fi +# X11/QWS if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" ]; then # auto-detect Glib support @@ -5375,7 +5394,10 @@ if [ "$PLATFORM_X11" = "yes" ]; then echo " QMAKE_INCDIR_X11 and QMAKE_LIBDIR_X11 in ${XQMAKESPEC}." exit 1 fi +fi +# X11/MINGW OpenGL +if [ "$PLATFORM_X11" = "yes" -o "$XPLATFORM_MINGW" = "yes" ]; then # auto-detect OpenGL support (es1 = OpenGL ES 1.x Common, es2 = OpenGL ES 2.x) if [ "$CFG_GUI" = "no" ]; then if [ "$CFG_OPENGL" = "auto" ]; then @@ -5471,7 +5493,10 @@ if [ "$PLATFORM_X11" = "yes" ]; then echo "OpenGL Graphics System is disabled due to missing OpenGL support..." CFG_GRAPHICS_SYSTEM=default fi +fi # X11/MINGW OpenGL +# X11 +if [ "$PLATFORM_X11" = "yes" ]; then # auto-detect Xcursor support if [ "$CFG_XCURSOR" != "no" ]; then if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/x11/xcursor "Xcursor" $L_FLAGS $I_FLAGS $l_FLAGS $X11TESTS_FLAGS; then @@ -5917,9 +5942,12 @@ if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" ]; then fi fi +[ "$XPLATFORM_MINGW" = "yes" ] && [ "$CFG_PHONON" != "no" ] && CFG_PHONON="yes" + # freetype support [ "x$CFG_EMBEDDED" != "xno" ] && CFG_LIBFREETYPE="$CFG_QWS_FREETYPE" [ "x$PLATFORM_MAC" = "xyes" ] && CFG_LIBFREETYPE=no +[ "$XPLATFORM_MINGW" = "yes" ] && [ "$CFG_LIBFREETYPE" = "auto" ] && CFG_LIBFREETYPE=no if [ "$CFG_LIBFREETYPE" = "auto" ]; then if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/freetype "FreeType" $L_FLAGS $I_FLAGS $l_FLAGS $MAC_CONFIG_TEST_COMMANDLINE; then CFG_LIBFREETYPE=system @@ -5929,7 +5957,9 @@ if [ "$CFG_LIBFREETYPE" = "auto" ]; then fi if [ "$CFG_ENDIAN" = "auto" ]; then - if [ "$PLATFORM_MAC" = "yes" ]; then + if [ "$XPLATFORM_MINGW" = "yes" ]; then + CFG_ENDIAN="Q_LITTLE_ENDIAN" + elif [ "$PLATFORM_MAC" = "yes" ]; then true #leave as auto elif [ "$XPLATFORM" = "symbian-sbsv2" ]; then CFG_ENDIAN="Q_LITTLE_ENDIAN" @@ -6255,6 +6285,11 @@ if [ "$CFG_AUDIO_BACKEND" = "auto" ]; then fi fi +if [ "$CFG_LARGEFILE" != "yes" ] && [ "$XPLATFORM_MINGW" = "yes" ]; then + echo "Warning: largefile support cannot be disabled for win32." + CFG_LARGEFILE="yes" +fi + #------------------------------------------------------------------------------- # ask for all that hasn't been auto-detected or specified in the arguments #------------------------------------------------------------------------------- @@ -6357,6 +6392,9 @@ if [ "$PLATFORM_MAC" = "yes" ]; then fi fi +# but disable Cocoa if cross-building for mingw +[ "$XPLATFORM_MINGW" = "yes" ] && CFG_MAC_COCOA="no" + # set the global Mac deployment target. This is overridden on an arch-by-arch basis # in some cases, see code further down case "$PLATFORM,$CFG_MAC_COCOA" in @@ -6495,7 +6533,7 @@ QMakeVar set OBJECTS_DIR ".obj/$QMAKE_OUTDIR" QMakeVar set MOC_DIR ".moc/$QMAKE_OUTDIR" QMakeVar set RCC_DIR ".rcc/$QMAKE_OUTDIR" QMakeVar set UI_DIR ".uic/$QMAKE_OUTDIR" -if [ "$CFG_LARGEFILE" = "yes" ]; then +if [ "$CFG_LARGEFILE" = "yes" ] && [ "$XPLATFORM_MINGW" != "yes" ]; then QMAKE_CONFIG="$QMAKE_CONFIG largefile" fi if [ "$CFG_STL" = "no" ]; then @@ -6611,7 +6649,7 @@ else fi -if [ "x$PLATFORM_MAC" = "xyes" ] && [ "$XPLATFORM" != "win32-g++" ]; then +if [ "x$PLATFORM_MAC" = "xyes" ] && [ "$XPLATFORM_MINGW" != "yes" ]; then #On Mac we implicitly link against libz, so we #never use the 3rdparty stuff. [ "$CFG_ZLIB" = "yes" ] && CFG_ZLIB="system" @@ -6750,6 +6788,12 @@ if [ "$CFG_EXCEPTIONS" != "no" ]; then QTCONFIG_CONFIG="$QTCONFIG_CONFIG exceptions" fi +if [ "$XPLATFORM_MINGW" = "yes" ]; then + # mkspecs/features/win32/default_pre.prf sets "no-rtti". + # Follow default behavior of configure.exe by overriding with "rtti". + QTCONFIG_CONFIG="$QTCONFIG_CONFIG rtti" +fi + if [ "$CFG_ALSA" = "yes" ]; then QT_CONFIG="$QT_CONFIG alsa" fi @@ -7343,7 +7387,7 @@ EOF echo '/* Compile time features */' >>"$outpath/src/corelib/global/qconfig.h.new" [ '!' -z "$LicenseKeyExt" ] && echo "#define QT_PRODUCT_LICENSEKEY \"$LicenseKeyExt\"" >>"$outpath/src/corelib/global/qconfig.h.new" -if [ "$CFG_LARGEFILE" = "yes" ]; then +if [ "$CFG_LARGEFILE" = "yes" ] && [ "$XPLATFORM_MINGW" != "yes" ]; then echo "#define QT_LARGEFILE_SUPPORT 64" >>"$outpath/src/corelib/global/qconfig.h.new" fi @@ -7688,7 +7732,7 @@ QMAKE_LIBDIR_QT = \$\$QT_BUILD_TREE/lib EOF # Ensure we can link to uninistalled libraries -if linkerSupportsFlag -rpath-link "$outpath/lib"; then +if [ "$XPLATFORM_MINGW" != "yes" ] && linkerSupportsFlag -rpath-link "$outpath/lib"; then echo "QMAKE_LFLAGS += -Wl,-rpath-link,\$\$QT_BUILD_TREE/lib" >> "$CACHEFILE.tmp" fi @@ -8226,7 +8270,9 @@ for file in .projects .projects.3; do [ "$IN_ROOT" = "no" ] && continue case $a in - *winmain/winmain.pro) continue ;; + *winmain/winmain.pro) + [ "$XPLATFORM_MINGW" = "yes" ] || continue + SPEC=$XQMAKESPEC ;; *s60main/s60main.pro) continue ;; *examples/activeqt/*) continue ;; */qmake/qmake.pro) continue ;; diff --git a/mkspecs/unsupported/win32-g++-cross/qmake.conf b/mkspecs/unsupported/win32-g++-cross/qmake.conf new file mode 100644 index 0000000..e338a22 --- /dev/null +++ b/mkspecs/unsupported/win32-g++-cross/qmake.conf @@ -0,0 +1,101 @@ +# +# qmake configuration for win32-g++-cross +# +# Written for MinGW cross building on Unix +# + +MAKEFILE_GENERATOR = MINGW +TEMPLATE = app +CONFIG += qt warn_on release link_prl copy_dir_files debug_and_release debug_and_release_target precompile_header +QT += core gui +DEFINES += UNICODE QT_LARGEFILE_SUPPORT +QMAKE_COMPILER_DEFINES += __GNUC__ WIN32 + +QMAKE_EXT_OBJ = .o +QMAKE_EXT_RES = _res.o + +QMAKE_CC = i686-pc-mingw32-gcc +QMAKE_LEX = flex +QMAKE_LEXFLAGS = +QMAKE_YACC = byacc +QMAKE_YACCFLAGS = -d +QMAKE_CFLAGS = -pipe +QMAKE_CFLAGS_DEPS = -M +QMAKE_CFLAGS_WARN_ON = -Wall +QMAKE_CFLAGS_WARN_OFF = -w +QMAKE_CFLAGS_RELEASE = -O2 +QMAKE_CFLAGS_DEBUG = -g +QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses + +QMAKE_CXX = i686-pc-mingw32-g++ +QMAKE_CXXFLAGS = $$QMAKE_CFLAGS +QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS +QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON +QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF +QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE +QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG +QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC +QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD +QMAKE_CXXFLAGS_RTTI_ON = -frtti +QMAKE_CXXFLAGS_RTTI_OFF = -fno-rtti +QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads +QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions + +QMAKE_INCDIR = +QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS] +QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS] + +QMAKE_RUN_CC = $(CC) -c $(CFLAGS) $(INCPATH) -o $obj $src +QMAKE_RUN_CC_IMP = $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $< +QMAKE_RUN_CXX = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $obj $src +QMAKE_RUN_CXX_IMP = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< + +QMAKE_LINK = i686-pc-mingw32-g++ +QMAKE_LINK_C = i686-pc-mingw32-gcc +QMAKE_LFLAGS = -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc +QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads -Wl +QMAKE_LFLAGS_EXCEPTIONS_OFF = +QMAKE_LFLAGS_RELEASE = -Wl,-s +QMAKE_LFLAGS_DEBUG = +QMAKE_LFLAGS_CONSOLE = -Wl,-subsystem,console +QMAKE_LFLAGS_WINDOWS = -Wl,-subsystem,windows +QMAKE_LFLAGS_DLL = -shared +QMAKE_LINK_OBJECT_MAX = 10 +QMAKE_LINK_OBJECT_SCRIPT= object_script + + +QMAKE_LIBS = +QMAKE_LIBS_CORE = -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -lws2_32 +QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lws2_32 -lole32 -luuid -luser32 -ladvapi32 +QMAKE_LIBS_NETWORK = -lws2_32 +QMAKE_LIBS_OPENGL = -lopengl32 -lglu32 -lgdi32 -luser32 +QMAKE_LIBS_COMPAT = -ladvapi32 -lshell32 -lcomdlg32 -luser32 -lgdi32 -lws2_32 +QMAKE_LIBS_QT_ENTRY = -lmingw32 -lqtmain + +QMAKE_SH = bash + +MINGW_IN_SHELL = 1 +QMAKE_DIR_SEP = / +QMAKE_COPY = cp +QMAKE_COPY_DIR = cp -r +QMAKE_MOVE = mv +QMAKE_DEL_FILE = rm -f +QMAKE_MKDIR = mkdir -p +QMAKE_DEL_DIR = rmdir +QMAKE_SYMBOLIC_LINK = ln -s +QMAKE_CHK_DIR_EXISTS = test -d + +#QMAKE_IDC = i686-pc-mingw32-idc +QMAKE_MOC = i686-pc-mingw32-moc +QMAKE_RCC = i686-pc-mingw32-rcc +QMAKE_UIC = i686-pc-mingw32-uic + +#QMAKE_IDL = midl +QMAKE_LIB = i686-pc-mingw32-ar -ru +QMAKE_RC = i686-pc-mingw32-windres +QMAKE_ZIP = zip -r -9 + +QMAKE_STRIP = i686-pc-mingw32-strip +QMAKE_STRIPFLAGS_LIB += --strip-unneeded +PKG_CONFIG = i686-pc-mingw32-pkg-config +load(qt_config) diff --git a/mkspecs/unsupported/win32-g++-cross/qplatformdefs.h b/mkspecs/unsupported/win32-g++-cross/qplatformdefs.h new file mode 100644 index 0000000..309e24a --- /dev/null +++ b/mkspecs/unsupported/win32-g++-cross/qplatformdefs.h @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** 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 qmake spec 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$ +** +****************************************************************************/ + +#include "../../win32-g++/qplatformdefs.h" diff --git a/qmake/generators/metamakefile.cpp b/qmake/generators/metamakefile.cpp index ad8750b..e98831d 100644 --- a/qmake/generators/metamakefile.cpp +++ b/qmake/generators/metamakefile.cpp @@ -529,9 +529,18 @@ MetaMakefileGenerator::modesForGenerator(const QString &gen, *host_mode = Option::HOST_UNIX_MODE; *target_mode = Option::TARG_UNIX_MODE; #endif - } else if (gen == "MSVC.NET" || gen == "MINGW" || gen == "BMAKE" || gen == "MSBUILD") { + } else if (gen == "MSVC.NET" || gen == "BMAKE" || gen == "MSBUILD") { *host_mode = Option::HOST_WIN_MODE; *target_mode = Option::TARG_WIN_MODE; + } else if (gen == "MINGW") { +#if defined(Q_OS_MAC) + *host_mode = Option::HOST_MACX_MODE; +#elif defined(Q_OS_UNIX) + *host_mode = Option::HOST_UNIX_MODE; +#else + *host_mode = Option::HOST_WIN_MODE; +#endif + *target_mode = Option::TARG_WIN_MODE; } else if (gen == "PROJECTBUILDER" || gen == "XCODE") { *host_mode = Option::HOST_MACX_MODE; *target_mode = Option::TARG_MACX_MODE; diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp index 0936d15..5685d6b 100644 --- a/qmake/generators/win32/mingw_make.cpp +++ b/qmake/generators/win32/mingw_make.cpp @@ -371,7 +371,12 @@ void MingwMakefileGenerator::writeObjectsPart(QTextStream &t) ar_script_file += "." + var("BUILD_NAME"); } createArObjectScriptFile(ar_script_file, var("DEST_TARGET"), project->values("OBJECTS")); - objectsLinkLine = "ar -M < " + ar_script_file; + // QMAKE_LIB is used for win32, including mingw, whereas QMAKE_AR is used on Unix. + // Strip off any options since the ar commands will be read from file. + QString ar_cmd = var("QMAKE_LIB").section(" ", 0, 0);; + if (ar_cmd.isEmpty()) + ar_cmd = "ar"; + objectsLinkLine = ar_cmd + " -M < " + ar_script_file; } else { QString ld_script_file = var("QMAKE_LINK_OBJECT_SCRIPT") + "." + var("TARGET"); if (!var("BUILD_NAME").isEmpty()) { -- cgit v0.12 From ec3bc9bbba71438374148118e539e75ee119a65f Mon Sep 17 00:00:00 2001 From: Mark Brand Date: Thu, 10 Jun 2010 14:58:16 +0200 Subject: make postgresql support sensitive to PSQL_LIBS The PSQL_LIBS environment variable is a standard way to pass the required library list. The changes here add support for this to the configures. Merge-request: 673 Reviewed-by: Oswald Buddenhagen --- config.tests/unix/psql/psql.pro | 2 +- configure | 2 ++ tools/configure/configureapp.cpp | 4 ++++ tools/configure/configureapp.h | 1 + 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/config.tests/unix/psql/psql.pro b/config.tests/unix/psql/psql.pro index 64bb3d6..38bfb3e 100644 --- a/config.tests/unix/psql/psql.pro +++ b/config.tests/unix/psql/psql.pro @@ -1,4 +1,4 @@ SOURCES = psql.cpp CONFIG -= qt dylib mac:CONFIG -= app_bundle -LIBS += -lpq +LIBS *= -lpq diff --git a/configure b/configure index 5ba0e57..f61ac6c 100755 --- a/configure +++ b/configure @@ -4921,6 +4921,8 @@ for _SQLDR in $CFG_SQL_AVAILABLE; do fi [ -z "$QT_CFLAGS_PSQL" ] || QT_CFLAGS_PSQL="-I$QT_CFLAGS_PSQL" [ -z "$QT_LFLAGS_PSQL" ] || QT_LFLAGS_PSQL="-L$QT_LFLAGS_PSQL" + # But, respect PSQL_LIBS if set + [ -z "$PSQL_LIBS" ] || QT_LFLAGS_PSQL="$PSQL_LIBS" if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/psql "PostgreSQL" $QT_LFLAGS_PSQL $L_FLAGS $QT_CFLAGS_PSQL $I_FLAGS $l_FLAGS $MAC_CONFIG_TEST_COMMANDLINE; then if [ "$CFG_SQL_psql" = "auto" ]; then CFG_SQL_psql=plugin diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index a5f9f2c..2e2d8ba 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -1035,6 +1035,8 @@ void Configure::parseCmdLine() qmakeLibs += QString("-l" + configCmdLine.at(i)); } else if (configCmdLine.at(i).startsWith("OPENSSL_LIBS=")) { opensslLibs = configCmdLine.at(i); + } else if (configCmdLine.at(i).startsWith("PSQL_LIBS=")) { + psqlLibs = configCmdLine.at(i); } else if( ( configCmdLine.at(i) == "-override-version" ) || ( configCmdLine.at(i) == "-version-override" ) ){ @@ -2747,6 +2749,8 @@ void Configure::generateOutputVars() else qmakeVars += QString("OPENSSL_LIBS = -lssleay32 -llibeay32"); } + if (!psqlLibs.isEmpty()) + qmakeVars += QString("QT_LFLAGS_PSQL=") + psqlLibs.section("=", 1); if (!qmakeSql.isEmpty()) qmakeVars += QString("sql-drivers += ") + qmakeSql.join( " " ); if (!qmakeSqlPlugins.isEmpty()) diff --git a/tools/configure/configureapp.h b/tools/configure/configureapp.h index 6c10dd8..ff2ee8b 100644 --- a/tools/configure/configureapp.h +++ b/tools/configure/configureapp.h @@ -133,6 +133,7 @@ private: QStringList qmakeIncludes; QStringList qmakeLibs; QString opensslLibs; + QString psqlLibs; QMap licenseInfo; QString outputLine; -- cgit v0.12 From 66539b167c01968f3040bfad9a59561a8b253639 Mon Sep 17 00:00:00 2001 From: Constantin Makshin Date: Thu, 10 Jun 2010 16:38:42 +0200 Subject: Updated project files so it is now possible to use "-system-zlib" configuration option on Windows and Symbian platforms. Improved support of "-system-jpeg" "-system-mng" "-system-png" and "-system-tiff" configuration options on Windows (thanks to Mark Brand ) Merge-request: 2411 Reviewed-by: Oswald Buddenhagen --- src/corelib/tools/tools.pri | 5 +++-- src/gui/image/image.pri | 14 +++++++++++--- src/gui/painting/painting.pri | 5 +++-- src/network/access/access.pri | 5 +++-- src/plugins/imageformats/jpeg/jpeg.pro | 4 ++-- src/plugins/imageformats/mng/mng.pro | 13 +++++++------ src/plugins/imageformats/tiff/tiff.pro | 18 ++++++++++++------ src/qbase.pri | 1 - src/svg/svg.pro | 4 +++- src/tools/bootstrap/bootstrap.pri | 5 +++-- src/tools/bootstrap/bootstrap.pro | 4 ++++ src/winmain/winmain.pro | 2 +- 12 files changed, 52 insertions(+), 28 deletions(-) diff --git a/src/corelib/tools/tools.pri b/src/corelib/tools/tools.pri index 4e0ebbc..e579dd5 100644 --- a/src/corelib/tools/tools.pri +++ b/src/corelib/tools/tools.pri @@ -106,8 +106,9 @@ contains(QT_CONFIG, zlib) { ../3rdparty/zlib/uncompr.c \ ../3rdparty/zlib/zutil.c } else:!contains(QT_CONFIG, no-zlib) { - unix:LIBS_PRIVATE += -lz -# win32:LIBS += libz.lib + symbian:LIBS_PRIVATE += -llibz + else:if(unix|win32-g++*):LIBS_PRIVATE += -lz + else:LIBS += zdll.lib } DEFINES += HB_EXPORT=Q_CORE_EXPORT diff --git a/src/gui/image/image.pri b/src/gui/image/image.pri index 8d75fdd..c4eac95 100644 --- a/src/gui/image/image.pri +++ b/src/gui/image/image.pri @@ -93,12 +93,12 @@ SOURCES += \ SOURCES += image/qpnghandler.cpp contains(QT_CONFIG, system-png) { - unix:LIBS_PRIVATE += -lpng - win32:LIBS += libpng.lib + unix|win32-g++*:LIBS_PRIVATE += -lpng + win32:!win32-g++*:LIBS += libpng.lib } else { DEFINES *= QT_USE_BUNDLED_LIBPNG !isEqual(QT_ARCH, i386):!isEqual(QT_ARCH, x86_64):DEFINES += PNG_NO_ASSEMBLER_CODE - INCLUDEPATH += ../3rdparty/libpng ../3rdparty/zlib + INCLUDEPATH += ../3rdparty/libpng SOURCES += ../3rdparty/libpng/png.c \ ../3rdparty/libpng/pngerror.c \ ../3rdparty/libpng/pngget.c \ @@ -114,6 +114,14 @@ SOURCES += \ ../3rdparty/libpng/pngwrite.c \ ../3rdparty/libpng/pngwtran.c \ ../3rdparty/libpng/pngwutil.c + + contains(QT_CONFIG, system-zlib) { + symbian:LIBS_PRIVATE += -llibz + else:if(unix|win32-g++*):LIBS_PRIVATE += -lz + else:LIBS += zdll.lib + } else { + INCLUDEPATH += ../3rdparty/zlib + } } } else { DEFINES *= QT_NO_IMAGEFORMAT_PNG diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri index c3b0e3e..1900750 100644 --- a/src/gui/painting/painting.pri +++ b/src/gui/painting/painting.pri @@ -405,7 +405,8 @@ neon:*-g++* { contains(QT_CONFIG, zlib) { INCLUDEPATH += ../3rdparty/zlib } else:!contains(QT_CONFIG, no-zlib) { - unix:LIBS_PRIVATE += -lz -# win32:LIBS += libz.lib + symbian:LIBS_PRIVATE += -llibz + else:if(unix|win32-g++*):LIBS_PRIVATE += -lz + else:LIBS += zdll.lib } diff --git a/src/network/access/access.pri b/src/network/access/access.pri index aa36890..b91ccbd 100644 --- a/src/network/access/access.pri +++ b/src/network/access/access.pri @@ -61,6 +61,7 @@ SOURCES += access/qftp.cpp \ contains(QT_CONFIG, zlib) { INCLUDEPATH += ../3rdparty/zlib } else:!contains(QT_CONFIG, no-zlib) { - unix:LIBS_PRIVATE += -lz -# win32:LIBS += libz.lib + symbian:LIBS_PRIVATE += -llibz + else:if(unix|win32-g++*):LIBS_PRIVATE += -lz + else:LIBS += zdll.lib } diff --git a/src/plugins/imageformats/jpeg/jpeg.pro b/src/plugins/imageformats/jpeg/jpeg.pro index 5b45422..e28c5fb 100644 --- a/src/plugins/imageformats/jpeg/jpeg.pro +++ b/src/plugins/imageformats/jpeg/jpeg.pro @@ -22,8 +22,8 @@ symbian: { } contains(QT_CONFIG, system-jpeg) { - unix:LIBS += -ljpeg - win32:LIBS += libjpeg.lib + unix|win32-g++*:LIBS += -ljpeg + win32:!win32-g++*:LIBS += libjpeg.lib } !contains(QT_CONFIG, system-jpeg) { INCLUDEPATH += ../../../3rdparty/libjpeg diff --git a/src/plugins/imageformats/mng/mng.pro b/src/plugins/imageformats/mng/mng.pro index de7dfa7..f23a5ef 100644 --- a/src/plugins/imageformats/mng/mng.pro +++ b/src/plugins/imageformats/mng/mng.pro @@ -14,8 +14,8 @@ symbian: { } contains(QT_CONFIG, system-mng) { - unix:LIBS += -lmng - win32:LIBS += libmng.lib + unix|win32-g++*:LIBS += -lmng + win32:!win32-g++*:LIBS += libmng.lib } !contains(QT_CONFIG, system-mng) { DEFINES += MNG_BUILD_SO @@ -44,10 +44,11 @@ contains(QT_CONFIG, system-mng) { } contains(QT_CONFIG, system-zlib) { - LIBS += -lz -} -!contains(QT_CONFIG, system-zlib) { - INCLUDEPATH += ../../../3rdparty/zlib + symbian:LIBS_PRIVATE += -llibz + else:if(unix|win32-g++*):LIBS_PRIVATE += -lz + else:LIBS += zdll.lib +} else { + INCLUDEPATH += ../../../3rdparty/zlib } QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/imageformats diff --git a/src/plugins/imageformats/tiff/tiff.pro b/src/plugins/imageformats/tiff/tiff.pro index 3cb64ad..3bf203c 100644 --- a/src/plugins/imageformats/tiff/tiff.pro +++ b/src/plugins/imageformats/tiff/tiff.pro @@ -8,8 +8,13 @@ SOURCES += main.cpp \ qtiffhandler.cpp contains(QT_CONFIG, system-tiff) { - unix:LIBS += -ltiff - win32:LIBS += libtiff.lib + unix|win32-g++*:LIBS += -ltiff + win32:!win32-g++*:LIBS += libtiff.lib + + contains(QT_CONFIG, system-jpeg) { + unix|win32-g++*:LIBS += -ljpeg + win32:!win32-g++*:LIBS += libjpeg.lib + } } !contains(QT_CONFIG, system-tiff) { INCLUDEPATH += ../../../3rdparty/libtiff/libtiff @@ -64,10 +69,11 @@ contains(QT_CONFIG, system-tiff) { } contains(QT_CONFIG, system-zlib) { - LIBS += -lz -} -!contains(QT_CONFIG, system-zlib) { - INCLUDEPATH += ../../../3rdparty/zlib + symbian:LIBS_PRIVATE += -llibz + else:if(unix|win32-g++*):LIBS_PRIVATE += -lz + else:LIBS += zdll.lib +} else { + INCLUDEPATH += ../../../3rdparty/zlib } QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/imageformats diff --git a/src/qbase.pri b/src/qbase.pri index 83ae069..064e67c 100644 --- a/src/qbase.pri +++ b/src/qbase.pri @@ -85,7 +85,6 @@ win32-borland { } win32 { - CONFIG += zlib INCLUDEPATH += tmp !static: DEFINES+=QT_MAKEDLL } diff --git a/src/svg/svg.pro b/src/svg/svg.pro index d2a4227..fa975e7 100644 --- a/src/svg/svg.pro +++ b/src/svg/svg.pro @@ -46,5 +46,7 @@ symbian:TARGET.UID3=0x2001B2E2 contains(QT_CONFIG, zlib) { INCLUDEPATH += ../3rdparty/zlib } else:!contains(QT_CONFIG, no-zlib) { - unix:LIBS_PRIVATE += -lz + symbian:LIBS_PRIVATE += -llibz + else:if(unix|win32-g++*):LIBS_PRIVATE += -lz + else:LIBS += zdll.lib } diff --git a/src/tools/bootstrap/bootstrap.pri b/src/tools/bootstrap/bootstrap.pri index 1de7b18..1aa8121 100644 --- a/src/tools/bootstrap/bootstrap.pri +++ b/src/tools/bootstrap/bootstrap.pri @@ -52,8 +52,9 @@ hpux-acc*|hpuxi-acc* { LIBS += -lbootstrap } !contains(QT_CONFIG, zlib):!contains(QT_CONFIG, no-zlib):!cross_compile { - unix:LIBS += -lz -# win32:LIBS += libz.lib + symbian:LIBS_PRIVATE += -llibz + else:if(unix|win32-g++*):LIBS_PRIVATE += -lz + else:LIBS += zdll.lib } win32:LIBS += -luser32 diff --git a/src/tools/bootstrap/bootstrap.pro b/src/tools/bootstrap/bootstrap.pro index 44dd625..149291a 100644 --- a/src/tools/bootstrap/bootstrap.pro +++ b/src/tools/bootstrap/bootstrap.pro @@ -109,6 +109,10 @@ contains(QT_CONFIG, zlib)|cross_compile { ../3rdparty/zlib/trees.c \ ../3rdparty/zlib/uncompr.c \ ../3rdparty/zlib/zutil.c +} else:!contains(QT_CONFIG, no-zlib) { + symbian:LIBS_PRIVATE += -llibz + else:if(unix|win32-g++*):LIBS_PRIVATE += -lz + else:LIBS += zdll.lib } lib.CONFIG = dummy_install diff --git a/src/winmain/winmain.pro b/src/winmain/winmain.pro index efee3cd..0c9b214 100644 --- a/src/winmain/winmain.pro +++ b/src/winmain/winmain.pro @@ -11,7 +11,7 @@ win32 { win32-g++*:DEFINES += QT_NEEDS_QMAIN win32-borland:DEFINES += QT_NEEDS_QMAIN SOURCES = qtmain_win.cpp - CONFIG += png zlib + CONFIG += png CONFIG -= jpeg INCLUDEPATH += tmp $$QMAKE_INCDIR_QT/QtCore } -- cgit v0.12 From f7f4cd37c9e649ed62d2d95a6dbb71d631391b53 Mon Sep 17 00:00:00 2001 From: Constantin Makshin Date: Thu, 10 Jun 2010 16:38:44 +0200 Subject: Updated leading whitespace to make indentation more consistent Merge-request: 2411 Reviewed-by: Oswald Buddenhagen --- src/gui/painting/painting.pri | 2 +- src/network/access/access.pri | 2 +- src/svg/svg.pro | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri index 1900750..a5cfb84 100644 --- a/src/gui/painting/painting.pri +++ b/src/gui/painting/painting.pri @@ -403,7 +403,7 @@ neon:*-g++* { } contains(QT_CONFIG, zlib) { - INCLUDEPATH += ../3rdparty/zlib + INCLUDEPATH += ../3rdparty/zlib } else:!contains(QT_CONFIG, no-zlib) { symbian:LIBS_PRIVATE += -llibz else:if(unix|win32-g++*):LIBS_PRIVATE += -lz diff --git a/src/network/access/access.pri b/src/network/access/access.pri index b91ccbd..173a087 100644 --- a/src/network/access/access.pri +++ b/src/network/access/access.pri @@ -59,7 +59,7 @@ SOURCES += access/qftp.cpp \ #zlib support contains(QT_CONFIG, zlib) { - INCLUDEPATH += ../3rdparty/zlib + INCLUDEPATH += ../3rdparty/zlib } else:!contains(QT_CONFIG, no-zlib) { symbian:LIBS_PRIVATE += -llibz else:if(unix|win32-g++*):LIBS_PRIVATE += -lz diff --git a/src/svg/svg.pro b/src/svg/svg.pro index fa975e7..de4bba6 100644 --- a/src/svg/svg.pro +++ b/src/svg/svg.pro @@ -44,7 +44,7 @@ symbian:TARGET.UID3=0x2001B2E2 #zlib support contains(QT_CONFIG, zlib) { - INCLUDEPATH += ../3rdparty/zlib + INCLUDEPATH += ../3rdparty/zlib } else:!contains(QT_CONFIG, no-zlib) { symbian:LIBS_PRIVATE += -llibz else:if(unix|win32-g++*):LIBS_PRIVATE += -lz -- cgit v0.12 From 9385f050620f14e3c3e4616906cf1999bf166041 Mon Sep 17 00:00:00 2001 From: Constantin Makshin Date: Thu, 10 Jun 2010 16:38:46 +0200 Subject: Replaced redundant "!contains" scopes in "contains(A, B) {...} !contains(A, B) {...}" constructions with "else" Merge-request: 2411 Reviewed-by: Oswald Buddenhagen --- src/plugins/imageformats/jpeg/jpeg.pro | 3 +-- src/plugins/imageformats/mng/mng.pro | 3 +-- src/plugins/imageformats/tiff/tiff.pro | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/plugins/imageformats/jpeg/jpeg.pro b/src/plugins/imageformats/jpeg/jpeg.pro index e28c5fb..0b5d389 100644 --- a/src/plugins/imageformats/jpeg/jpeg.pro +++ b/src/plugins/imageformats/jpeg/jpeg.pro @@ -24,8 +24,7 @@ symbian: { contains(QT_CONFIG, system-jpeg) { unix|win32-g++*:LIBS += -ljpeg win32:!win32-g++*:LIBS += libjpeg.lib -} -!contains(QT_CONFIG, system-jpeg) { +} else { INCLUDEPATH += ../../../3rdparty/libjpeg SOURCES += \ ../../../3rdparty/libjpeg/jaricom.c \ diff --git a/src/plugins/imageformats/mng/mng.pro b/src/plugins/imageformats/mng/mng.pro index f23a5ef..c188b47 100644 --- a/src/plugins/imageformats/mng/mng.pro +++ b/src/plugins/imageformats/mng/mng.pro @@ -16,8 +16,7 @@ symbian: { contains(QT_CONFIG, system-mng) { unix|win32-g++*:LIBS += -lmng win32:!win32-g++*:LIBS += libmng.lib -} -!contains(QT_CONFIG, system-mng) { +} else { DEFINES += MNG_BUILD_SO DEFINES += MNG_NO_INCLUDE_JNG INCLUDEPATH += ../../../3rdparty/libmng diff --git a/src/plugins/imageformats/tiff/tiff.pro b/src/plugins/imageformats/tiff/tiff.pro index 3bf203c..90868e8 100644 --- a/src/plugins/imageformats/tiff/tiff.pro +++ b/src/plugins/imageformats/tiff/tiff.pro @@ -15,8 +15,7 @@ contains(QT_CONFIG, system-tiff) { unix|win32-g++*:LIBS += -ljpeg win32:!win32-g++*:LIBS += libjpeg.lib } -} -!contains(QT_CONFIG, system-tiff) { +} else { INCLUDEPATH += ../../../3rdparty/libtiff/libtiff SOURCES += \ ../../../3rdparty/libtiff/libtiff/tif_aux.c \ -- cgit v0.12 From 6de46501e508fd8d1bbf3d73903f2a3d50218f6b Mon Sep 17 00:00:00 2001 From: Aaron McCarthy Date: Fri, 11 Jun 2010 10:57:17 +1000 Subject: Attempt to fix build failure on Symbian. --- mkspecs/features/symbian/data_caging_paths.prf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mkspecs/features/symbian/data_caging_paths.prf b/mkspecs/features/symbian/data_caging_paths.prf index 6b709cc..a3fe7e7 100644 --- a/mkspecs/features/symbian/data_caging_paths.prf +++ b/mkspecs/features/symbian/data_caging_paths.prf @@ -74,8 +74,8 @@ exists($${EPOCROOT}epoc32/include/data_caging_paths.prf) { BOOTDATA_DIR = /resource/bootdata } -isEmpty(QT_PLUGINS_BASE_DIR): QT_PLUGINS_BASE_DIR = $$RESOURCE_FILES_DIR/qt$${QT_LIBINFIX}/plugins +QT_PLUGINS_BASE_DIR = $$RESOURCE_FILES_DIR/qt$${QT_LIBINFIX}/plugins isEmpty(QT_IMPORTS_BASE_DIR): QT_IMPORTS_BASE_DIR = $$RESOURCE_FILES_DIR/qt/imports isEmpty(HW_ZDIR): HW_ZDIR = epoc32/data/z isEmpty(REG_RESOURCE_DIR): REG_RESOURCE_DIR = /private/10003a3f/apps -isEmpty(REG_RESOURCE_IMPORT_DIR): REG_RESOURCE_IMPORT_DIR = /private/10003a3f/import/apps \ No newline at end of file +isEmpty(REG_RESOURCE_IMPORT_DIR): REG_RESOURCE_IMPORT_DIR = /private/10003a3f/import/apps -- cgit v0.12 From 6ecb66ef888fd4c1f3e92ca6de8a227a96da3ec1 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy Date: Fri, 11 Jun 2010 12:09:02 +1000 Subject: Revert "Attempt to fix build failure on Symbian." This reverts commit 6de46501e508fd8d1bbf3d73903f2a3d50218f6b. --- mkspecs/features/symbian/data_caging_paths.prf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mkspecs/features/symbian/data_caging_paths.prf b/mkspecs/features/symbian/data_caging_paths.prf index a3fe7e7..6b709cc 100644 --- a/mkspecs/features/symbian/data_caging_paths.prf +++ b/mkspecs/features/symbian/data_caging_paths.prf @@ -74,8 +74,8 @@ exists($${EPOCROOT}epoc32/include/data_caging_paths.prf) { BOOTDATA_DIR = /resource/bootdata } -QT_PLUGINS_BASE_DIR = $$RESOURCE_FILES_DIR/qt$${QT_LIBINFIX}/plugins +isEmpty(QT_PLUGINS_BASE_DIR): QT_PLUGINS_BASE_DIR = $$RESOURCE_FILES_DIR/qt$${QT_LIBINFIX}/plugins isEmpty(QT_IMPORTS_BASE_DIR): QT_IMPORTS_BASE_DIR = $$RESOURCE_FILES_DIR/qt/imports isEmpty(HW_ZDIR): HW_ZDIR = epoc32/data/z isEmpty(REG_RESOURCE_DIR): REG_RESOURCE_DIR = /private/10003a3f/apps -isEmpty(REG_RESOURCE_IMPORT_DIR): REG_RESOURCE_IMPORT_DIR = /private/10003a3f/import/apps +isEmpty(REG_RESOURCE_IMPORT_DIR): REG_RESOURCE_IMPORT_DIR = /private/10003a3f/import/apps \ No newline at end of file -- cgit v0.12 From 90a671581d2eef96f7ab5b04c1db798da24d0f6b Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Fri, 11 Jun 2010 12:01:50 +1000 Subject: Fixed error deploying qsymbianbearer.qtplugin on Symbian. EPOCROOT already ends with a slash, adding another one breaks it. --- src/s60installs/s60installs.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro index 963515e..e360a84 100644 --- a/src/s60installs/s60installs.pro +++ b/src/s60installs/s60installs.pro @@ -58,7 +58,7 @@ symbian: { bearerStubZ = $${EPOCROOT}$${HW_ZDIR}$${QT_PLUGINS_BASE_DIR}/bearer/qsymbianbearer$${QT_LIBINFIX}.qtplugin BLD_INF_RULES.prj_exports += \ "qsymbianbearer.qtplugin $$bearerStubZ" \ - "qsymbianbearer.qtplugin $${EPOCROOT}/epoc32/winscw/c$${QT_PLUGINS_BASE_DIR}/bearer/qsymbianbearer$${QT_LIBINFIX}.qtplugin" + "qsymbianbearer.qtplugin $${EPOCROOT}epoc32/winscw/c$${QT_PLUGINS_BASE_DIR}/bearer/qsymbianbearer$${QT_LIBINFIX}.qtplugin" } else { pluginLocations = $$QT_BUILD_TREE/plugins/s60 bearerPluginLocation = $$QT_BUILD_TREE/plugins/bearer -- cgit v0.12 From 7f338180e88b71e793069e2fbe9a70f3c434e126 Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko Date: Fri, 11 Jun 2010 12:36:34 +0200 Subject: Changed the way we detect touch screen on Windows. Instead of using the IInkTablets interface (which sometimes freezes in the get_Count() call for 10 seconds), we just check if there is digitizer support. Task-number: QTBUG-6007 Reviewed-by: Prasanth --- src/gui/kernel/qapplication_win.cpp | 36 +++------------------- .../kernel/qwinnativepangesturerecognizer_win_p.h | 32 +++++++++++++++++++ 2 files changed, 36 insertions(+), 32 deletions(-) diff --git a/src/gui/kernel/qapplication_win.cpp b/src/gui/kernel/qapplication_win.cpp index 09535fa..622d4e4 100644 --- a/src/gui/kernel/qapplication_win.cpp +++ b/src/gui/kernel/qapplication_win.cpp @@ -118,8 +118,6 @@ extern void qt_wince_hide_taskbar(HWND hwnd); //defined in qguifunctions_wince.c # include #endif -#include "private/qwinnativepangesturerecognizer_win_p.h" - #ifndef WM_TOUCH # define WM_TOUCH 0x0240 @@ -4066,36 +4064,10 @@ PtrCloseTouchInputHandle QApplicationPrivate::CloseTouchInputHandle = 0; void QApplicationPrivate::initializeMultitouch_sys() { - static const IID QT_IID_IInkTablets = {0x112086D9, 0x7779, 0x4535, {0xA6, 0x99, 0x86, 0x2B, 0x43, 0xAC, 0x18, 0x63} }; - static const IID QT_IID_IInkTablet2 = {0x90c91ad2, 0xfa36, 0x49d6, {0x95, 0x16, 0xce, 0x8d, 0x57, 0x0f, 0x6f, 0x85} }; - static const CLSID QT_CLSID_InkTablets = {0x6E4FCB12, 0x510A, 0x4d40, {0x93, 0x04, 0x1D, 0xA1, 0x0A, 0xE9, 0x14, 0x7C} }; - - IInkTablets *iInkTablets = 0; - HRESULT hr = CoCreateInstance(QT_CLSID_InkTablets, NULL, CLSCTX_ALL, QT_IID_IInkTablets, (void**)&iInkTablets); - if (SUCCEEDED(hr)) { - long count = 0; - iInkTablets->get_Count(&count); - for (long i = 0; i < count; ++i) { - IInkTablet *iInkTablet = 0; - hr = iInkTablets->Item(i, &iInkTablet); - if (FAILED(hr)) - continue; - IInkTablet2 *iInkTablet2 = 0; - hr = iInkTablet->QueryInterface(QT_IID_IInkTablet2, (void**)&iInkTablet2); - iInkTablet->Release(); - if (FAILED(hr)) - continue; - TabletDeviceKind kind; - hr = iInkTablet2->get_DeviceKind(&kind); - iInkTablet2->Release(); - if (FAILED(hr)) - continue; - if (kind == TDK_Touch) { - QApplicationPrivate::HasTouchSupport = true; - break; - } - } - iInkTablets->Release(); + if (QSysInfo::windowsVersion() >= QSysInfo::WV_WINDOWS7) { + static const int QT_SM_DIGITIZER = 94; + QApplicationPrivate::HasTouchSupport = GetSystemMetrics(QT_SM_DIGITIZER); + qDebug() << "QApplicationPrivate::HasTouchSupport " << QApplicationPrivate::HasTouchSupport; } QLibrary library(QLatin1String("user32")); diff --git a/src/gui/kernel/qwinnativepangesturerecognizer_win_p.h b/src/gui/kernel/qwinnativepangesturerecognizer_win_p.h index 64addeb..eb99b74 100644 --- a/src/gui/kernel/qwinnativepangesturerecognizer_win_p.h +++ b/src/gui/kernel/qwinnativepangesturerecognizer_win_p.h @@ -54,6 +54,38 @@ // #include +#include + +class IInkRectangle; +class TabletHardwareCapabilities; +class TabletPropertyMetricUnit; +DECLARE_INTERFACE_(IInkTablet, IDispatch) +{ + STDMETHOD(get_Name)(THIS_ BSTR *Name) PURE; + STDMETHOD(get_PlugAndPlayId)(THIS_ BSTR *Id) PURE; + STDMETHOD(get_MaximumInputRectangle)(THIS_ IInkRectangle **Rectangle) PURE; + STDMETHOD(get_HardwareCapabilities)(THIS_ TabletHardwareCapabilities *Capabilities) PURE; + STDMETHOD(IsPacketPropertySupported)(THIS_ BSTR packetPropertyName) PURE; + STDMETHOD(GetPropertyMetrics)(THIS_ BSTR propertyName, long *Minimum, long *Maximum, TabletPropertyMetricUnit *Units, float *Resolution) PURE; +}; +enum TabletDeviceKind +{ + TDK_Mouse = 0, + TDK_Pen = 1, + TDK_Touch = 2 +}; +DECLARE_INTERFACE_(IInkTablet2, IDispatch) +{ + STDMETHOD(get_DeviceKind)(THIS_ TabletDeviceKind *Kind) PURE; +}; +DECLARE_INTERFACE_(IInkTablets, IDispatch) +{ + STDMETHOD(get_Count)(THIS_ long *Count) PURE; + STDMETHOD(get__NewEnum)(THIS_ IUnknown **_NewEnum) PURE; + STDMETHOD(get_DefaultTablet)(THIS_ IInkTablet **DefaultTablet) PURE; + STDMETHOD(Item)(THIS_ long Index, IInkTablet **Tablet) PURE; + STDMETHOD(IsPacketPropertySupported)(THIS_ BSTR packetPropertyName, VARIANT_BOOL *Supported) PURE; +}; #include -- cgit v0.12 From 24bcac9de46c89f4d8b533946e7b0feeacca1b0d Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko Date: Fri, 11 Jun 2010 13:26:05 +0200 Subject: Fixed a broken merge. Reviewed-by: trustme --- src/gui/kernel/qapplication_win.cpp | 1 - .../kernel/qwinnativepangesturerecognizer_win_p.h | 65 ---------------------- 2 files changed, 66 deletions(-) diff --git a/src/gui/kernel/qapplication_win.cpp b/src/gui/kernel/qapplication_win.cpp index 622d4e4..0edb8fb 100644 --- a/src/gui/kernel/qapplication_win.cpp +++ b/src/gui/kernel/qapplication_win.cpp @@ -4067,7 +4067,6 @@ void QApplicationPrivate::initializeMultitouch_sys() if (QSysInfo::windowsVersion() >= QSysInfo::WV_WINDOWS7) { static const int QT_SM_DIGITIZER = 94; QApplicationPrivate::HasTouchSupport = GetSystemMetrics(QT_SM_DIGITIZER); - qDebug() << "QApplicationPrivate::HasTouchSupport " << QApplicationPrivate::HasTouchSupport; } QLibrary library(QLatin1String("user32")); diff --git a/src/gui/kernel/qwinnativepangesturerecognizer_win_p.h b/src/gui/kernel/qwinnativepangesturerecognizer_win_p.h index eb99b74..9d0e6f7 100644 --- a/src/gui/kernel/qwinnativepangesturerecognizer_win_p.h +++ b/src/gui/kernel/qwinnativepangesturerecognizer_win_p.h @@ -54,71 +54,6 @@ // #include -#include - -class IInkRectangle; -class TabletHardwareCapabilities; -class TabletPropertyMetricUnit; -DECLARE_INTERFACE_(IInkTablet, IDispatch) -{ - STDMETHOD(get_Name)(THIS_ BSTR *Name) PURE; - STDMETHOD(get_PlugAndPlayId)(THIS_ BSTR *Id) PURE; - STDMETHOD(get_MaximumInputRectangle)(THIS_ IInkRectangle **Rectangle) PURE; - STDMETHOD(get_HardwareCapabilities)(THIS_ TabletHardwareCapabilities *Capabilities) PURE; - STDMETHOD(IsPacketPropertySupported)(THIS_ BSTR packetPropertyName) PURE; - STDMETHOD(GetPropertyMetrics)(THIS_ BSTR propertyName, long *Minimum, long *Maximum, TabletPropertyMetricUnit *Units, float *Resolution) PURE; -}; -enum TabletDeviceKind -{ - TDK_Mouse = 0, - TDK_Pen = 1, - TDK_Touch = 2 -}; -DECLARE_INTERFACE_(IInkTablet2, IDispatch) -{ - STDMETHOD(get_DeviceKind)(THIS_ TabletDeviceKind *Kind) PURE; -}; -DECLARE_INTERFACE_(IInkTablets, IDispatch) -{ - STDMETHOD(get_Count)(THIS_ long *Count) PURE; - STDMETHOD(get__NewEnum)(THIS_ IUnknown **_NewEnum) PURE; - STDMETHOD(get_DefaultTablet)(THIS_ IInkTablet **DefaultTablet) PURE; - STDMETHOD(Item)(THIS_ long Index, IInkTablet **Tablet) PURE; - STDMETHOD(IsPacketPropertySupported)(THIS_ BSTR packetPropertyName, VARIANT_BOOL *Supported) PURE; -}; - -#include - -class IInkRectangle; -class TabletHardwareCapabilities; -class TabletPropertyMetricUnit; -DECLARE_INTERFACE_(IInkTablet, IDispatch) -{ - STDMETHOD(get_Name)(THIS_ BSTR *Name) PURE; - STDMETHOD(get_PlugAndPlayId)(THIS_ BSTR *Id) PURE; - STDMETHOD(get_MaximumInputRectangle)(THIS_ IInkRectangle **Rectangle) PURE; - STDMETHOD(get_HardwareCapabilities)(THIS_ TabletHardwareCapabilities *Capabilities) PURE; - STDMETHOD(IsPacketPropertySupported)(THIS_ BSTR packetPropertyName) PURE; - STDMETHOD(GetPropertyMetrics)(THIS_ BSTR propertyName, long *Minimum, long *Maximum, TabletPropertyMetricUnit *Units, float *Resolution) PURE; -}; -enum TabletDeviceKind -{ - TDK_Mouse = 0, - TDK_Pen = 1, - TDK_Touch = 2 -}; -DECLARE_INTERFACE_(IInkTablet2, IDispatch) -{ - STDMETHOD(get_DeviceKind)(THIS_ TabletDeviceKind *Kind) PURE; -}; -DECLARE_INTERFACE_(IInkTablets, IDispatch) -{ - STDMETHOD(get_Count)(THIS_ long *Count) PURE; - STDMETHOD(get__NewEnum)(THIS_ IUnknown **_NewEnum) PURE; - STDMETHOD(get_DefaultTablet)(THIS_ IInkTablet **DefaultTablet) PURE; - STDMETHOD(Item)(THIS_ long Index, IInkTablet **Tablet) PURE; - STDMETHOD(IsPacketPropertySupported)(THIS_ BSTR packetPropertyName, VARIANT_BOOL *Supported) PURE; -}; #ifndef QT_NO_GESTURES -- cgit v0.12 From a295a69e76ff330a2716c97b70723f0bd408f197 Mon Sep 17 00:00:00 2001 From: Martin Smith Date: Fri, 11 Jun 2010 14:05:43 +0200 Subject: doc: Added DITA XML generator Task-number: QTBUG-11391 --- src/gui/kernel/qwidget.cpp | 1 - tools/qdoc3/ditaxmlgenerator.cpp | 1479 +++++++++++++++++----------------- tools/qdoc3/ditaxmlgenerator.h | 25 +- tools/qdoc3/main.cpp | 2 + tools/qdoc3/pagegenerator.cpp | 4 +- tools/qdoc3/test/qt-ditaxml.qdocconf | 11 + 6 files changed, 772 insertions(+), 750 deletions(-) create mode 100644 tools/qdoc3/test/qt-ditaxml.qdocconf diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index b5879ae..0fddbf8 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -1019,7 +1019,6 @@ struct QWidgetExceptionCleaner \sa windowFlags */ - QWidget::QWidget(QWidget *parent, Qt::WindowFlags f) : QObject(*new QWidgetPrivate, 0), QPaintDevice() { diff --git a/tools/qdoc3/ditaxmlgenerator.cpp b/tools/qdoc3/ditaxmlgenerator.cpp index a64e8e7..2c578f0 100644 --- a/tools/qdoc3/ditaxmlgenerator.cpp +++ b/tools/qdoc3/ditaxmlgenerator.cpp @@ -45,23 +45,295 @@ #include "codemarker.h" #include "codeparser.h" -#include "helpprojectwriter.h" #include "ditaxmlgenerator.h" #include "node.h" #include "separator.h" #include "tree.h" #include - #include #include #include #include +#include QT_BEGIN_NAMESPACE -#define COMMAND_VERSION Doc::alias("version") +#define COMMAND_VERSION Doc::alias("version") int DitaXmlGenerator::id = 0; +#define cxxapi_d_xref Doc::alias("cxxapi-d-xref") +#define cxxclass Doc::alias("cxxclass") +#define cxxdefine Doc::alias("cxxdefine") +#define cxxenumeration Doc::alias("cxxenumeration") +#define cxxfile Doc::alias("cxxfile") +#define cxxfunction Doc::alias("cxxfunction") +#define cxxstruct Doc::alias("cxxstruct") +#define cxxtypedef Doc::alias("cxxtypedef") +#define cxxunion Doc::alias("cxxunion") +#define cxxvariable Doc::alias("cxxvariable") + +#define CXXAPIMAP Doc::alias("cxxAPIMap") +#define CXXCLASSREF Doc::alias("cxxClassRef") +#define CXXDEFINEREF Doc::alias("cxxDefineRef") +#define CXXENUMERATIONREF Doc::alias("cxxEnumerationRef") +#define CXXFILEREF Doc::alias("cxxFileRef") +#define CXXFUNCTIONREF Doc::alias("cxxFunctionRef") +#define CXXSTRUCTREF Doc::alias("cxxStructRef") +#define CXXTYPDEFREF Doc::alias("cxxTypedefRef") +#define CXXUNIONREF Doc::alias("cxxUnionRef") +#define CXXVARIABLEREF Doc::alias("cxxVariableRef") + +#define CXXCLASS Doc::alias("cxxClass") +#define CXXCLASSABSTRACT Doc::alias("cxxClassAbstract") +#define CXXCLASSACCESSSPECIFIER Doc::alias("cxxClassAccessSpecifier") +#define CXXCLASSAPIITEMLOCATION Doc::alias("cxxClassAPIItemLocation") +#define CXXCLASSBASECLASS Doc::alias("cxxClassBaseClass") +#define CXXCLASSBASECLASSSTRUCT Doc::alias("cxxClassBaseStruct") +#define CXXCLASSBASEUNION Doc::alias("cxxClassBaseUnion") +#define CXXCLASSDECLARATIONFILE Doc::alias("cxxClassDeclarationFile") +#define CXXCLASSDECLARATIONFILELINE Doc::alias("cxxClassDeclarationFileLine") +#define CXXCLASSDEFINITION Doc::alias("cxxClassDefinition") +#define CXXCLASSDEFINITIONFILE Doc::alias("cxxClassDefinitionFile") +#define CXXCLASSDEFINITIONFILEEND Doc::alias("cxxClassDefinitionFileLineEnd") +#define CXXCLASSDEFINITIONFILESTART Doc::alias("cxxClassDefinitionFileLineStart") +#define CXXCLASSDERIVATION Doc::alias("cxxClassDerivation") +#define CXXCLASSDERIVATIONACCESSSPECIFIER Doc::alias("cxxClassDerivationAccessSpecifier") +#define CXXCLASSDERIVATIONS Doc::alias("cxxClassDerivations") +#define CXXCLASSDERIVATIONVIRTUAL Doc::alias("cxxClassDerivationVirtual") +#define CXXCLASSDETAIL Doc::alias("cxxClassDetail") +#define CXXCLASSENUMERATIONINHERITED Doc::alias("cxxClassEnumerationInherited") +#define CXXCLASSENUMERATORINHERITED Doc::alias("cxxClassEnumeratorInherited") +#define CXXCLASSFUNCTIONINHERITED Doc::alias("cxxClassFunctionInherited") +#define CXXCLASSINHERITS Doc::alias("cxxClassInherits") +#define CXXCLASSINHERITSDETAIL Doc::alias("cxxClassInheritsDetail") +#define CXXCLASSNESTED Doc::alias("cxxClassNested") +#define CXXCLASSNESTEDCLASS Doc::alias("cxxClassNestedClass") +#define CXXCLASSNESTEDDETAIL Doc::alias("cxxClassNestedDetail") +#define CXXCLASSNESTEDSTRUCT Doc::alias("cxxClassNestedStruct") +#define CXXCLASSNESTEDUNION Doc::alias("cxxClassNestedUnion") +#define CXXCLASSTEMPLATEPARAMETER Doc::alias("cxxClassTemplateParameter") +#define CXXCLASSTEMPLATEPARAMETERS Doc::alias("cxxClassTemplateParameters") +#define CXXCLASSTEMPLATEPARAMETERTYPE Doc::alias("cxxClassTemplateParameterType") +#define CXXCLASSVARIABLEINHERITED Doc::alias("cxxClassVariableInherited") + +#define CXXDEFINE Doc::alias("cxxDefine") +#define CXXDEFINEACCESSSPECIFIER Doc::alias("cxxDefineAccessSpecifier") +#define CXXDEFINEAPIITEMLOCATION Doc::alias("cxxDefineAPIItemLocation") +#define CXXDEFINEDECLARATIONFILE Doc::alias("cxxDefineDeclarationFile") +#define CXXDEFINEDECLARATIONFILELINE Doc::alias("cxxDefineDeclarationFileLine") +#define CXXDEFINEDEFINITION Doc::alias("cxxDefineDefinition") +#define CXXDEFINEDETAIL Doc::alias("cxxDefineDetail") +#define CXXDEFINENAMELOOKUP Doc::alias("cxxDefineNameLookup") +#define CXXDEFINEPARAMETER Doc::alias("cxxDefineParameter") +#define CXXDEFINEPARAMETERDECLARATIONNAME Doc::alias("cxxDefineParameterDeclarationName") +#define CXXDEFINEPARAMETERS Doc::alias("cxxDefineParameters") +#define CXXDEFINEPROTOTYPE Doc::alias("cxxDefinePrototype") +#define CXXDEFINEREIMPLEMENTED Doc::alias("cxxDefineReimplemented") + +#define CXXENUMERATION Doc::alias("cxxEnumeration") +#define CXXENUMERATIONACCESSSPECIFIER Doc::alias("cxxEnumerationAccessSpecifier") +#define CXXENUMERATIONAPIITEMLOCATION Doc::alias("cxxEnumerationAPIItemLocation") +#define CXXENUMERATIONDECLARATIONFILE Doc::alias("cxxEnumerationDeclarationFile") +#define CXXENUMERATIONDECLARATIONFILELINE Doc::alias("cxxEnumerationDeclarationFileLine") +#define CXXENUMERATIONDEFINITION Doc::alias("cxxEnumerationDefinition") +#define CXXENUMERATIONDEFINITIONFILE Doc::alias("cxxEnumerationDefinitionFile") +#define CXXENUMERATIONDEFINITIONFILELINEEND Doc::alias("cxxEnumerationDefinitionFileLineEnd") +#define CXXENUMERATIONDEFINITIONFILELINESTART Doc::alias("cxxEnumerationDefinitionFileLineStart") +#define CXXENUMERATIONDETAIL Doc::alias("cxxEnumerationDetail") +#define CXXENUMERATIONNAMELOOKUP Doc::alias("cxxEnumerationNameLookup") +#define CXXENUMERATIONPROTOTYPE Doc::alias("cxxEnumerationPrototype") +#define CXXENUMERATIONREIMPLEMENTED Doc::alias("cxxEnumerationReimplemented") +#define CXXENUMERATIONSCOPEDNAME Doc::alias("cxxEnumerationScopedName") +#define CXXENUMERATOR Doc::alias("cxxEnumerator") +#define CXXENUMERATORAPIITEMLOCATION Doc::alias("cxxEnumeratorAPIItemLocation") +#define CXXENUMERATORDECLARATIONFILE Doc::alias("cxxEnumeratorDeclarationFile") +#define CXXENUMERATORDECLARATIONFILELINE Doc::alias("cxxEnumeratorDeclarationFileLine") +#define CXXENUMERATORINITIALISER Doc::alias("cxxEnumeratorInitialiser") +#define CXXENUMERATORNAMELOOKUP Doc::alias("cxxEnumeratorNameLookup") +#define CXXENUMERATORPROTOTYPE Doc::alias("cxxEnumeratorPrototype") +#define CXXENUMERATORS Doc::alias("cxxEnumerators") +#define CXXENUMERATORSCOPEDNAME Doc::alias("cxxEnumeratorScopedName") + +#define CXXFILE_INFO_TYPES Doc::alias("cxxFile-info-types") +#define CXXFILE_TYPES_DEFAULT Doc::alias("cxxFile-types-default") +#define CXXFILE Doc::alias("cxxFile") +#define CXXFILEAPIITMELOCATION Doc::alias("cxxFileAPIItemLocation") +#define CXXFILEDECLARATIONFILE Doc::alias("cxxFileDeclarationFile") + +#define CXXFUNCTION Doc::alias("cxxFunction") +#define CXXFUNCTIONACCESSSPECIFIER Doc::alias("cxxFunctionAccessSpecifier") +#define CXXFUNCTIONAPIITEMLOCATION Doc::alias("cxxFunctionAPIItemLocation") +#define CXXFUNCTIONCONST Doc::alias("cxxFunctionConst") +#define CXXFUNCTIONCONSTRUCTOR Doc::alias("cxxFunctionConstructor") +#define CXXFUNCTIONDECLARATIONFILE Doc::alias("cxxFunctionDeclarationFile") +#define CXXFUNCTIONDECLARATIONFILELINE Doc::alias("cxxFunctionDeclarationFileLine") +#define CXXFUNCTIONDECLAREDTYPE Doc::alias("cxxFunctionDeclaredType") +#define CXXFUNCTIONDEFINITION Doc::alias("cxxFunctionDefinition") +#define CXXFUNCTIONDEFINITIONFILE Doc::alias("cxxFunctionDefinitionFile") +#define CXXFUNCTIONDEFINITIONFILELINEEND Doc::alias("cxxFunctionDefinitionFileLineEnd") +#define CXXFUNCTIONDEFINITIONFILELINESTART Doc::alias("cxxFunctionDefinitionFileLineStart") +#define CXXFUNCTIONDESTRUCTOR Doc::alias("cxxFunctionDestructor") +#define CXXFUNCTIONDETAIL Doc::alias("cxxFunctionDetail") +#define CXXFUNCTIONEXPLICIT Doc::alias("cxxFunctionExplicit") +#define CXXFUNCTIONINLINE Doc::alias("cxxFunctionInline") +#define CXXFUNCTIONNAMELOOKUP Doc::alias("cxxFunctionNameLookup") +#define CXXFUNCTIONPARAMETER Doc::alias("cxxFunctionParameter") +#define CXXFUNCTIONPARAMETERDECLARATIONNAME Doc::alias("cxxFunctionParameterDeclarationName") +#define CXXFUNCTIONPARAMETERDECLAREDTYPE Doc::alias("cxxFunctionParameterDeclaredType") +#define CXXFUNCTIONPARAMETERDEFAULTVALUE Doc::alias("cxxFunctionParameterDefaultValue") +#define CXXFUNCTIONPARAMETERDEFINITIONNAME Doc::alias("cxxFunctionParameterDefinitionName") +#define CXXFUNCTIONPARAMETERS Doc::alias("cxxFunctionParameters") +#define CXXFUNCTIONPROTOTYPE Doc::alias("cxxFunctionPrototype") +#define CXXFUNCTIONPUREVIRTUAL Doc::alias("cxxFunctionPureVirtual") +#define CXXFUNCTIONREIMPLEMENTED Doc::alias("cxxFunctionReimplemented") +#define CXXFUNCTIONRETURNTYPE Doc::alias("cxxFunctionReturnType") +#define CXXFUNCTIONSCOPEDNAME Doc::alias("cxxFunctionScopedName") +#define CXXFUNCTIONSTORAGECLASSSPECIFIEREXTERN Doc::alias("cxxFunctionStorageClassSpecifierExtern") +#define CXXFUNCTIONSTORAGECLASSSPECIFIERMUTABLE Doc::alias("cxxFunctionStorageClassSpecifierMutable") +#define CXXFUNCTIONSTORAGECLASSSPECIFIERSTATIC Doc::alias("cxxFunctionStorageClassSpecifierStatic") +#define CXXFUNCTIONTEMPLATEPARAMETER Doc::alias("cxxFunctionTemplateParameter") +#define CXXFUNCTIONTEMPLATEPARAMETERS Doc::alias("cxxFunctionTemplateParameters") +#define CXXFUNCTIONTEMPLATEPARAMETERTYPE Doc::alias("cxxFunctionTemplateParameterType") +#define CXXFUNCTIONVIRTUAL Doc::alias("cxxFunctionVirtual") +#define CXXFUNCTIONVOLATILE Doc::alias("cxxFunctionVolatile") + +#define CXXSTRUCT Doc::alias("cxxStruct") +#define CXXSTRUCTABSTRACT Doc::alias("cxxStructAbstract") +#define CXXSTRUCTACCESSSPECIFIER Doc::alias("cxxStructAccessSpecifier") +#define CXXSTRUCTAPIITEMLOCATION Doc::alias("cxxStructAPIItemLocation") +#define CXXSTRUCTBASECLASS Doc::alias("cxxStructBaseClass") +#define CXXSTRUCTBASESTRUCT Doc::alias("cxxStructBaseStruct") +#define CXXSTRUCTBASEUNION Doc::alias("cxxStructBaseUnion") +#define CXXSTRUCTDECLARATIONFILE Doc::alias("cxxStructDeclarationFile") +#define CXXSTRUCTDECLARATIONFILELINE Doc::alias("cxxStructDeclarationFileLine") +#define CXXSTRUCTDEFINITION Doc::alias("cxxStructDefinition") +#define CXXSTRUCTDEFINITIONFILE Doc::alias("cxxStructDefinitionFile") +#define CXXSTRUCTDEFINITIONFILELINEEND Doc::alias("cxxStructDefinitionFileLineEnd") +#define CXXSTRUCTDEFINITIONFILELINESTART Doc::alias("cxxStructDefinitionFileLineStart") +#define CXXSTRUCTDERIVATION Doc::alias("cxxStructDerivation") +#define CXXSTRUCTDERIVATIONACCESSSPECIFIER Doc::alias("cxxStructDerivationAccessSpecifier") +#define CXXSTRUCTDERIVATIONS Doc::alias("cxxStructDerivations") +#define CXXSTRUCTDERIVATIONVIRTUAL Doc::alias("cxxStructDerivationVirtual") +#define CXXSTRUCTDETAIL Doc::alias("cxxStructDetail") +#define CXXSTRUCTENUMERATIONINHERITED Doc::alias("cxxStructEnumerationInherited") +#define CXXSTRUCTENUMERATORINHERITED Doc::alias("cxxStructEnumeratorInherited") +#define CXXSTRUCTFUNCTIONINHERITED Doc::alias("cxxStructFunctionInherited") +#define CXXSTRUCTINHERITS Doc::alias("cxxStructInherits") +#define CXXSTRUCTINHERITSDETAIL Doc::alias("cxxStructInheritsDetail") +#define CXXSTRUCTNESTED Doc::alias("cxxStructNested") +#define CXXSTRUCTNESTEDCLASS Doc::alias("cxxStructNestedClass") +#define CXXSTRUCTNESTEDDETAIL Doc::alias("cxxStructNestedDetail") +#define CXXSTRUCTNESTEDSTRUCT Doc::alias("cxxStructNestedStruct") +#define CXXSTRUCTNESTEDUNION Doc::alias("cxxStructNestedUnion") +#define CXXSTRUCTTEMPLATEPARAMETER Doc::alias("cxxStructTemplateParameter") +#define CXXSTRUCTTEMPLATEPARAMETERS Doc::alias("cxxStructTemplateParameters") +#define CXXSTRUCTTEMPLATEPARAMETERTYPE Doc::alias("cxxStructTemplateParameterType") +#define CXXSTRUCTVARIABLEINHERITED Doc::alias("cxxStructVariableInherited") + +#define CXXTYPEDEF Doc::alias("cxxTypedef") +#define CXXTYPEDEFACCESSSPECIFIER Doc::alias("cxxTypedefAccessSpecifier") +#define CXXTYPEDEFAPIITEMLOCATION Doc::alias("cxxTypedefAPIItemLocation") +#define CXXTYPEDEFDECLARATIONFILE Doc::alias("cxxTypedefDeclarationFile") +#define CXXTYPEDEFDECLARATIONFILELINE Doc::alias("cxxTypedefDeclarationFileLine") +#define CXXTYPEDEFDECLAREDTYPE Doc::alias("cxxTypedefDeclaredType") +#define CXXTYPEDEFDEFINITION Doc::alias("cxxTypedefDefinition") +#define CXXTYPEDEFDETAIL Doc::alias("cxxTypedefDetail") +#define CXXTYPEDEFNAMELOOKUP Doc::alias("cxxTypedefNameLookup") +#define CXXTYPEDEFPROTOTYPE Doc::alias("cxxTypedefPrototype") +#define CXXTYPEDEFREIMPLEMENTED Doc::alias("cxxTypedefReimplemented") +#define CXXTYPEDEFSCOPEDNAME Doc::alias("cxxTypedefScopedName") + +#define CXXUNION Doc::alias("cxxUnion") +#define CXXUNIONABSTRACT Doc::alias("cxxUnionAbstract") +#define CXXUNIONACCESSSPECIFIER Doc::alias("cxxUnionAccessSpecifier") +#define CXXUNIONAPIITEMLOCATION Doc::alias("cxxUnionAPIItemLocation") +#define CXXUNIONDECLARATIONFILE Doc::alias("cxxUnionDeclarationFile") +#define CXXUNIONDECLARATIONFILELINE Doc::alias("cxxUnionDeclarationFileLine") +#define CXXUNIONDEFINITION Doc::alias("cxxUnionDefinition") +#define CXXUNIONDEFINITIONFILE Doc::alias("cxxUnionDefinitionFile") +#define CXXUNIONDEFINITIONFILELINEEND Doc::alias("cxxUnionDefinitionFileLineEnd") +#define CXXUNIONDEFINITIONFILELINESTART Doc::alias("cxxUnionDefinitionFileLineStart") +#define CXXUNIONDETAIL Doc::alias("cxxUnionDetail") +#define CXXUNIONNESTED Doc::alias("cxxUnionNested") +#define CXXUNIONNESTEDCLASS Doc::alias("cxxUnionNestedClass") +#define CXXUNIONNESTEDDETAIL Doc::alias("cxxUnionNestedDetail") +#define CXXUNIONNESTEDSTRUCT Doc::alias("cxxUnionNestedStruct") +#define CXXUNIONNESTEDUNION Doc::alias("cxxUnionNestedUnion") +#define CXXUNIONTEMPLATEPARAMETER Doc::alias("cxxUnionTemplateParameter") +#define CXXUNIONTEMPLATEPARAMETERS Doc::alias("cxxUnionTemplateParameters") +#define CXXUNIONTEMPLATEPARAMETERTYPE Doc::alias("cxxUnionTemplateParameterType") + +#define CXXVARIABLE Doc::alias("cxxVariable") +#define CXXVARIABLEACCESSSPECIFIER Doc::alias("cxxVariableAccessSpecifier") +#define CXXVARIABLEAPIITEMLOCATION Doc::alias("cxxVariableAPIItemLocation") +#define CXXVARIABLECONST Doc::alias("cxxVariableConst") +#define CXXVARIABLEDECLARATIONFILE Doc::alias("cxxVariableDeclarationFile") +#define CXXVARIABLEDECLARATIONFILELINE Doc::alias("cxxVariableDeclarationFileLine") +#define CXXVARIABLEDECLAREDTYPE Doc::alias("cxxVariableDeclaredType") +#define CXXVARIABLEDEFINITION Doc::alias("cxxVariableDefinition") +#define CXXVARIABLEDETAIL Doc::alias("cxxVariableDetail") +#define CXXVARIABLENAMELOOKUP Doc::alias("cxxVariableNameLookup") +#define CXXVARIABLEPROTOTYPE Doc::alias("cxxVariablePrototype") +#define CXXVARIABLEREIMPLEMENTED Doc::alias("cxxVariableReimplemented") +#define CXXVARIABLESCOPEDNAME Doc::alias("cxxVariableScopedName") +#define CXXVARIABLESTORAGECLASSSPECIFIEREXTERN Doc::alias("cxxVariableStorageClassSpecifierExtern") +#define CXXVARIABLESTORAGECLASSSPECIFIERMUTABLE Doc::alias("cxxVariableStorageClassSpecifierMutable") +#define CXXVARIABLESTORAGECLASSSPECIFIERSTATIC Doc::alias("cxxVariableStorageClassSpecifierStatic") +#define CXXVARIABLEVOLATILE Doc::alias("cxxVariableVolatile") + +#define APIREF Doc::alias("apiRef") +#define APINAME Doc::alias("apiName") +#define APIDETAIL Doc::alias("apiDetail") +#define APISYNTAX Doc::alias("apiSyntax") +#define APISYNTAXTEXT Doc::alias("apiSyntaxText") +#define APISYNTAXITEM Doc::alias("apiSyntaxItem") +#define APIDEF Doc::alias("apiDef") +#define APIQUALIFIER Doc::alias("apiQualifier") +#define APIRELATION Doc::alias("apiRelation") +#define APITYPE Doc::alias("apiType") +#define APIARRAY Doc::alias("apiArray") +#define APIDATA Doc::alias("apiData") +#define APIDEFNOTE Doc::alias("apiDefNote") +#define APIDEFITEM Doc::alias("apiDefItem") +#define APIITEMNAME Doc::alias("apiItemName") +#define APIDESC Doc::alias("apiDesc") +#define APIIMPL Doc::alias("apiImpl") + +#define APIPACKAGE Doc::alias("apiPackage") + +#define APICLASSIFIER Doc::alias("apiClassifier") +#define APICLASSIFIERDETAIL Doc::alias("apiClassifierDetail") +#define APICLASSIFIERDEF Doc::alias("apiClassifierDef") +#define APICLASSIFIERMEMBER Doc::alias("apiClassifierMember") +#define APIOTHERCLASSIFIER Doc::alias("apiOtherClassifier") +#define APIBASECLASSIFIER Doc::alias("apiBaseClassifier") + +#define APIOPERATION Doc::alias("apiOperation") +#define APIOPERATIONDETAIL Doc::alias("apiOperationDetail") +#define APIOPERATIONDEF Doc::alias("apiOperationDef") +#define APIRETURN Doc::alias("apiReturn") +#define APIPARAM Doc::alias("apiParam") +#define APIEVENT Doc::alias("apiEvent") +#define APIOPERATIONDEFITEM Doc::alias("apiOperationDefItem") +#define APIOPERATIONCLASSIFIER Doc::alias("apiOperationClassifier") +#define APICONSTRUCTORDEF Doc::alias("apiConstructorDef") + +#define APIVALUE Doc::alias("apiValue") +#define APIVALUEDETAIL Doc::alias("apiValueDetail") +#define APIVALUEDEF Doc::alias("apiValueDef") +#define APIVALUEMEMBER Doc::alias("apiValueMember") +#define APIVALUECLASSIFIER Doc::alias("apiValueClassifier") + +#define APIclassifier Doc::alias("apiclassifier") +#define APIoperation Doc::alias("apioperation") +#define APIpackage Doc::alias("apipackage") +#define APIvalue Doc::alias("apivalue") + +#define APIMAP Doc::alias("apiMap") +#define APIITEMREF Doc::alias("apiItemRef") + +#define SHORTDESC Doc::alias("shortdesc") + QString DitaXmlGenerator::sinceTitles[] = { " New Namespaces", @@ -88,11 +360,11 @@ static void addLink(const QString &linkTarget, QString *res) { if (!linkTarget.isEmpty()) { - *res += ""; *res += nestedStuff; - *res += ""; + *res += ""; } else { *res += nestedStuff; @@ -101,8 +373,7 @@ static void addLink(const QString &linkTarget, DitaXmlGenerator::DitaXmlGenerator() - : helpProjectWriter(0), - inLink(false), + : inLink(false), inContents(false), inSectionHeading(false), inTableHeader(false), @@ -112,32 +383,31 @@ DitaXmlGenerator::DitaXmlGenerator() funcLeftParen("\\S(\\()"), myTree(0), slow(false), - obsoleteLinks(false) + obsoleteLinks(false), + noLinks(0) { } DitaXmlGenerator::~DitaXmlGenerator() { - if (helpProjectWriter) - delete helpProjectWriter; + // nothing yet. } void DitaXmlGenerator::initializeGenerator(const Config &config) { static const struct { const char *key; - const char *left; - const char *right; + const char *tag; } defaults[] = { - { ATOM_FORMATTING_BOLD, "", "" }, - { ATOM_FORMATTING_INDEX, "" }, - { ATOM_FORMATTING_ITALIC, "", "" }, - { ATOM_FORMATTING_PARAMETER, "", "" }, - { ATOM_FORMATTING_SUBSCRIPT, "", "" }, - { ATOM_FORMATTING_SUPERSCRIPT, "", "" }, - { ATOM_FORMATTING_TELETYPE, "", "" }, - { ATOM_FORMATTING_UNDERLINE, "", "" }, - { 0, 0, 0 } + { ATOM_FORMATTING_BOLD, "b" }, + { ATOM_FORMATTING_INDEX, ""; + writer.writeCharacters("-->"); break; case Atom::FormatElse: case Atom::FormatEndif: case Atom::FormatIf: break; case Atom::FormattingLeft: - out() << formattingLeftMap()[atom->string()]; + writer.writeStartElement(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) << "" - << subscriptRegExp.cap(2) << ""; + writer.writeCharacters(subscriptRegExp.cap(1)); + writer.writeStartElement("sub"); + writer.writeCharacters(subscriptRegExp.cap(2)); + writer.writeEndElement(); // skipAhead = 1; } } @@ -477,7 +703,7 @@ int DitaXmlGenerator::generateAtom(const Atom *atom, endLink(); } else { - out() << formattingRightMap()[atom->string()]; + writer.writeEndElement(); // ? } break; case Atom::AnnotatedList: @@ -676,30 +902,33 @@ int DitaXmlGenerator::generateAtom(const Atom *atom, /* First generate the table of contents. */ - out() << "
    \n"; + writer.writeStartElement("ul"); s = sections.constBegin(); while (s != sections.constEnd()) { if (!(*s).members.isEmpty()) { - out() << "
  • " - << "" - << (*s).name - << "
  • \n"; + writer.writeStartElement("li"); + writer.writeStartElement("xref"); + writer.writeAttribute("href",QString("#" + Doc::canonicalTitle((*s).name))); + writer.writeCharacters((*s).name); + writer.writeEndElement(); // + writer.writeEndElement(); // } ++s; } - out() << "
\n"; + writer.writeEndElement(); // int idx = 0; s = sections.constBegin(); while (s != sections.constEnd()) { if (!(*s).members.isEmpty()) { - out() << "\n"; - out() << "

" << protectEnc((*s).name) << "

\n"; + QString guid = QUuid::createUuid().toString(); + guidMap.insert(Doc::canonicalTitle((*s).name),guid); + writer.writeStartElement("p"); + writer.writeAttribute("id",guid); + writer.writeAttribute("outputclass","h3"); + writer.writeCharacters(protectEnc((*s).name)); + writer.writeEndElement(); //

if (idx == Class) generateCompactList(0, marker, ncmap.value(), false, QString("Q")); else if (idx == QmlClass) @@ -719,17 +948,18 @@ int DitaXmlGenerator::generateAtom(const Atom *atom, pmap = parentmaps.begin(); while (pmap != parentmaps.end()) { NodeList nlist = pmap->values(); - out() << "

Class "; - - out() << ""; + writer.writeStartElement("p"); + writer.writeCharacters("Class "); + writer.writeStartElement("xref"); + writer.writeAttribute("href",linkForNode(pmap.key(), 0)); QStringList pieces = fullName(pmap.key(), 0, marker).split("::"); - out() << protectEnc(pieces.last()); - out() << "" << ":

\n"; + writer.writeCharacters(protectEnc(pieces.last())); + writer.writeEndElement(); // + writer.writeCharacters(":"); + writer.writeEndElement(); //

generateSection(nlist, 0, marker, CodeMarker::Summary); - out() << "
"; + writer.writeEmptyElement("br"); ++pmap; } } @@ -749,33 +979,40 @@ int DitaXmlGenerator::generateAtom(const Atom *atom, QString text; if (atom->next() != 0) text = atom->next()->string(); - if (atom->type() == Atom::Image) - out() << "

"; + if (atom->type() == Atom::Image) { + writer.writeStartElement("p"); + writer.writeAttribute("outputclass","centerAlign"); + } if (fileName.isEmpty()) { - out() << "[Missing image " - << protectEnc(atom->string()) << "]"; + writer.writeStartElement("font"); + writer.writeAttribute("color","red"); + writer.writeCharacters("[Missing image: "); + writer.writeCharacters(protectEnc(atom->string())); + writer.writeEndElement(); // } else { - out() << "\"""; - helpProjectWriter->addExtraFile(fileName); + writer.writeAttribute("alt",protectEnc(text)); + writer.writeEndElement(); // } if (atom->type() == Atom::Image) - out() << "

"; + writer.writeEndElement(); //

} break; case Atom::ImageText: + // nothing break; case Atom::LegaleseLeft: - out() << "
"; + writer.writeStartElement("p"); + writer.writeAttribute("outputclass","legalese"); break; case Atom::LegaleseRight: - out() << "
"; + writer.writeEndElement(); //

break; case Atom::LineBreak: - out() << "
"; + writer.writeEmptyElement("br"); break; case Atom::Link: { @@ -799,69 +1036,83 @@ int DitaXmlGenerator::generateAtom(const Atom *atom, break; case Atom::ListLeft: if (in_para) { - out() << "

\n"; + writer.writeEndElement(); //

in_para = false; } if (atom->string() == ATOM_LIST_BULLET) { - out() << "
    \n"; + writer.writeStartElement("ul"); } else if (atom->string() == ATOM_LIST_TAG) { - out() << "
    \n"; + writer.writeStartElement("dl"); } else if (atom->string() == ATOM_LIST_VALUE) { threeColumnEnumValueTable = isThreeColumnEnumValueTable(atom); if (threeColumnEnumValueTable) { - out() << ""; - // << "" - if (++numTableRows % 2 == 1) - out() << ""; - else - out() << ""; - - out() << "" - << "" - << "\n"; + writer.writeStartElement("table"); + writer.writeAttribute("outputclass","valuelist"); + writer.writeStartElement("tr"); + if (++numTableRows % 2 == 1) + writer.writeAttribute("outputclass","odd"); + else + writer.writeAttribute("outputclass","even"); + writer.writeStartElement("th"); + writer.writeCharacters("Constant"); + writer.writeEndElement(); // + writer.writeStartElement("th"); + writer.writeCharacters("Value"); + writer.writeEndElement(); // + writer.writeStartElement("th"); + writer.writeCharacters("Description"); + writer.writeEndElement(); // + writer.writeEndElement(); // } else { - out() << "
    ConstantValueDescription
    " - << "\n"; + writer.writeStartElement("table"); + writer.writeAttribute("outputclass","valuelist"); + writer.writeStartElement("tr"); + writer.writeStartElement("th"); + writer.writeCharacters("Constant"); + writer.writeEndElement(); // + writer.writeStartElement("th"); + writer.writeCharacters("Value"); + writer.writeEndElement(); // + writer.writeEndElement(); // } } else { - out() << "
      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\""; - } + writer.writeStartElement("ol"); + if (atom->string() == ATOM_LIST_UPPERALPHA) + writer.writeAttribute("type","A"); + else if (atom->string() == ATOM_LIST_LOWERALPHA) + writer.writeAttribute("type","a"); + else if (atom->string() == ATOM_LIST_UPPERROMAN) + writer.writeAttribute("type","I"); + else if (atom->string() == ATOM_LIST_LOWERROMAN) + writer.writeAttribute("type","i"); + else // (atom->string() == ATOM_LIST_NUMERIC) + writer.writeAttribute("type","1"); if (atom->next() != 0 && atom->next()->string().toInt() != 1) - out() << " start=\"" << atom->next()->string() << "\""; - out() << ">\n"; + writer.writeAttribute("start",atom->next()->string()); } break; case Atom::ListItemNumber: + // nothing break; case Atom::ListTagLeft: if (atom->string() == ATOM_LIST_TAG) { - out() << "
      "; + writer.writeStartElement("dt"); } else { // (atom->string() == ATOM_LIST_VALUE) - // ### Trenton - - out() << "
    + writer.writeStartElement("td"); + writer.writeAttribute("outputclass","topAlign"); QString itemValue; if (relative->type() == Node::Enum) { @@ -870,188 +1121,178 @@ int DitaXmlGenerator::generateAtom(const Atom *atom, } if (itemValue.isEmpty()) - out() << "?"; - else - out() << "" << protectEnc(itemValue) << ""; - + writer.writeCharacters("?"); + else { + writer.writeStartElement("tt"); + writer.writeCharacters(protectEnc(itemValue)); + writer.writeEndElement(); // + } skipAhead = 1; } break; case Atom::ListTagRight: if (atom->string() == ATOM_LIST_TAG) - out() << "\n"; + writer.writeEndElement(); // break; case Atom::ListItemLeft: if (atom->string() == ATOM_LIST_TAG) { - out() << "
    "; + writer.writeStartElement("dd"); } else if (atom->string() == ATOM_LIST_VALUE) { if (threeColumnEnumValueTable) { - out() << "
    + writer.writeStartElement("td"); + writer.writeAttribute("outputclass","topAlign"); if (matchAhead(atom, Atom::ListItemRight)) - out() << " "; + writer.writeCharacters(" "); } } else { - out() << "
  • "; + writer.writeStartElement("li"); } if (matchAhead(atom, Atom::ParaLeft)) skipAhead = 1; break; case Atom::ListItemRight: if (atom->string() == ATOM_LIST_TAG) { - out() << "\n"; + writer.writeEndElement(); // } else if (atom->string() == ATOM_LIST_VALUE) { - out() << "
  • \n"; + writer.writeEndElement(); // + writer.writeEndElement(); // } else { - out() << "\n"; + writer.writeEndElement(); // } break; case Atom::ListRight: if (atom->string() == ATOM_LIST_BULLET) { - out() << "\n"; + writer.writeEndElement(); // } else if (atom->string() == ATOM_LIST_TAG) { - out() << "\n"; + writer.writeEndElement(); // } else if (atom->string() == ATOM_LIST_VALUE) { - out() << "
    ConstantValue
    " - << protectEnc(plainCode(marker->markedUpEnumValue(atom->next()->string(), - relative))) - << ""; + writer.writeStartElement("tr"); + writer.writeStartElement("td"); + writer.writeAttribute("outputclass","topAlign"); + writer.writeStartElement("tt"); + writer.writeCharacters(protectEnc(plainCode(marker->markedUpEnumValue(atom->next()->string(), + relative)))); + writer.writeEndElement(); // + writer.writeEndElement(); // "; + writer.writeEndElement(); //
    \n"; + writer.writeEndElement(); // } else { - out() << "\n"; + writer.writeEndElement(); // } break; case Atom::Nop: + // nothing break; case Atom::ParaLeft: - out() << "

    "; + writer.writeStartElement("p"); in_para = true; break; case Atom::ParaRight: endLink(); if (in_para) { - out() << "

    \n"; + writer.writeEndElement(); // \n"; break; case Atom::QuotationLeft: - out() << "
    "; + writer.writeStartElement("blockquote"); break; case Atom::QuotationRight: - out() << "
    \n"; + writer.writeEndElement(); // break; case Atom::RawString: - out() << atom->string(); + writer.writeCharacters(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() << "\n"; - } -#else +#if zzz out() << "\n"; -#endif +#endif break; case Atom::SectionRight: + // nothing break; case Atom::SectionHeadingLeft: - out() << "string().toInt() + hOffset(relative)) + ">"; + writer.writeStartElement("p"); + hx = "h" + QString::number(atom->string().toInt() + hOffset(relative)); + writer.writeAttribute("outputclass",hx); inSectionHeading = true; break; case Atom::SectionHeadingRight: - out() << "string().toInt() + hOffset(relative)) + ">\n"; + writer.writeEndElement(); //

    (see case Atom::SectionHeadingLeft) inSectionHeading = false; break; case Atom::SidebarLeft: + // nothing break; case Atom::SidebarRight: + // nothing break; case Atom::String: if (inLink && !inContents && !inSectionHeading) { generateLink(atom, relative, marker); } else { - out() << protectEnc(atom->string()); + writer.writeCharacters(protectEnc(atom->string())); } break; case Atom::TableLeft: if (in_para) { - out() << "

    \n"; + writer.writeEndElement(); //

    in_para = false; } - if (!atom->string().isEmpty()) { - if (atom->string().contains("%")) - out() << "\n "; // width=\"" << atom->string() << "\">\n "; - else { - out() << "
    \n"; - } - } - else { - out() << "
    \n"; - } + writer.writeStartElement("table"); + writer.writeAttribute("outputclass","generic"); numTableRows = 0; break; case Atom::TableRight: - out() << "
    \n"; + writer.writeEndElement(); // break; case Atom::TableHeaderLeft: - out() << ""; + writer.writeStartElement("thead"); + writer.writeStartElement("tr"); + writer.writeAttribute("outputclass","qt-style topAlign"); inTableHeader = true; break; case Atom::TableHeaderRight: - out() << ""; + writer.writeEndElement(); // if (matchAhead(atom, Atom::TableHeaderLeft)) { skipAhead = 1; - out() << "\n"; + writer.writeStartElement("tr"); + writer.writeAttribute("outputclass","qt-style topAlign"); } - else { - out() << "\n"; + else { + writer.writeEndElement(); // inTableHeader = false; } break; case Atom::TableRowLeft: + writer.writeStartElement("tr"); if (++numTableRows % 2 == 1) - out() << ""; + writer.writeAttribute("outputclass","odd topAlign"); else - out() << ""; + writer.writeAttribute("outputclass","even topAlign"); break; case Atom::TableRowRight: - out() << "\n"; + writer.writeEndElement(); // \n"; break; case Atom::TableItemLeft: { if (inTableHeader) - out() << "string().split(","); if (spans.size() == 2) { +#if zzz + 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() << ">

    "; +#endif + if (!inTableHeader) + writer.writeStartElement("p"); } if (matchAhead(atom, Atom::ParaLeft)) skipAhead = 1; @@ -1059,9 +1300,11 @@ int DitaXmlGenerator::generateAtom(const Atom *atom, break; case Atom::TableItemRight: if (inTableHeader) - out() << ""; - else - out() << "

    "; + writer.writeEndElement(); // + else { + writer.writeEndElement(); //

    + writer.writeEndElement(); // + } if (matchAhead(atom, Atom::ParaLeft)) skipAhead = 1; break; @@ -1095,14 +1338,20 @@ int DitaXmlGenerator::generateAtom(const Atom *atom, } break; case Atom::Target: +#if zzz out() << "string()) << "\">"; +#endif break; case Atom::UnhandledFormat: +#if zzz out() << "<Missing DITAXML>"; +#endif break; case Atom::UnknownCommand: +#if zzz out() << "\\" << protectEnc(atom->string()) << ""; +#endif break; #ifdef QDOC_QML case Atom::QmlText: @@ -1111,7 +1360,8 @@ int DitaXmlGenerator::generateAtom(const Atom *atom, break; #endif default: - unknownAtom(atom); + // unknownAtom(atom); + break; } return skipAhead; } @@ -1119,8 +1369,8 @@ int DitaXmlGenerator::generateAtom(const Atom *atom, /*! Generate a reference page for a C++ class. */ -void DitaXmlGenerator::generateClassLikeNode(const InnerNode *inner, - CodeMarker *marker) +void +DitaXmlGenerator::generateClassLikeNode(const InnerNode* inner, CodeMarker* marker) { QList
    sections; QList
    ::ConstIterator s; @@ -1144,41 +1394,57 @@ void DitaXmlGenerator::generateClassLikeNode(const InnerNode *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 publicGroups = myTree->publicGroups(); - QList groupNames = publicGroups.values(inner->name()); - if (!groupNames.isEmpty()) { - qSort(groupNames.begin(), groupNames.end()); - subtitleText << "["; - for (int j=0; jdoc().isEmpty()) { + writer.writeStartElement("p"); + writer.writeAttribute("outputclass","h2"); + writer.writeCharacters("Detailed Description"); + writer.writeEndElement(); // p + generateBody(inner, marker); + // generateAlsoList(inner, marker); + } + + writer.writeEndElement(); // apiDesc + writer.writeEndElement(); // cxxClassDetail + writer.writeEndElement(); // cxxClass + +#ifdef WRITE_HTML + QString shortVersion; + shortVersion = project + " " + shortVersion + ": "; + 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 + ": "; } -#endif - generateHeader(title, inner, marker); + out() << " " << shortVersion << protectEnc(title) << "\n"; + +#if 0 + out() << QString(postHeader).replace("\\" + COMMAND_VERSION, myTree->version()); + generateBreadCrumbs(title,node,marker); + out() << QString(postPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); +#endif + sections = marker->sections(inner, CodeMarker::Summary, CodeMarker::Okay); generateTableOfContents(inner,marker,§ions); generateTitle(title, subtitleText, SmallSubTitle, inner, marker); @@ -1203,22 +1469,22 @@ void DitaXmlGenerator::generateClassLikeNode(const InnerNode *inner, QString membersLink = generateListOfAllMemberFile(inner, marker); if (!membersLink.isEmpty()) - out() << "
  • " - << "List of all members, including inherited members
  • \n"; + out() << "
  • " + << "List of all members, including inherited members
  • \n"; QString obsoleteLink = generateLowStatusMemberFile(inner, marker, CodeMarker::Obsolete); if (!obsoleteLink.isEmpty()) - out() << "
  • " - << "Obsolete members
  • \n"; + out() << "
  • " + << "Obsolete members
  • \n"; QString compatLink = generateLowStatusMemberFile(inner, marker, CodeMarker::Compat); if (!compatLink.isEmpty()) - out() << "
  • " - << "Qt 3 support members
  • \n"; + out() << "
  • " + << "Qt 3 support members
  • \n"; out() << "
\n"; @@ -1335,8 +1601,6 @@ void DitaXmlGenerator::generateClassLikeNode(const InnerNode *inner, names << plainCode(marker->markedUpEnumValue(enumName, enume)); } - foreach (const QString &name, names) - classSection.keywords += qMakePair(name,linkForNode(*m,0)); } ++m; } @@ -1344,28 +1608,7 @@ void DitaXmlGenerator::generateClassLikeNode(const InnerNode *inner, out() << "
\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); +#endif } /*! @@ -1374,16 +1617,14 @@ void DitaXmlGenerator::generateClassLikeNode(const InnerNode *inner, */ void DitaXmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker) { + return; // zzz + SubTitleSize subTitleSize = LargeSubTitle; - DcfSection fakeSection; - fakeSection.title = fake->fullTitle(); - fakeSection.ref = linkForNode(fake, 0); - QList
sections; QList
::const_iterator s; - QString fullTitle = fake->fullTitle(); QString htmlTitle = fullTitle; + if (fake->subType() == Node::File && !fake->subTitle().isEmpty()) { subTitleSize = SmallSubTitle; htmlTitle += " (" + fake->subTitle() + ")"; @@ -1393,7 +1634,7 @@ void DitaXmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker htmlTitle = fullTitle; } - generateHeader(htmlTitle, fake, marker); + generateHeader(fake); /* Generate the TOC for the new doc format. @@ -1433,43 +1674,24 @@ void DitaXmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker QString membersLink = generateListOfAllMemberFile(fake, marker); if (!membersLink.isEmpty()) - out() << "
  • " - << "List of all members, including inherited members
  • \n"; + out() << "
  • " + << "List of all members, including inherited members
  • \n"; QString obsoleteLink = generateLowStatusMemberFile(fake, marker, CodeMarker::Obsolete); if (!obsoleteLink.isEmpty()) - out() << "
  • " - << "Obsolete members
  • \n"; + out() << "
  • " + << "Obsolete members
  • \n"; QString compatLink = generateLowStatusMemberFile(fake, marker, CodeMarker::Compat); if (!compatLink.isEmpty()) - out() << "
  • " - << "Qt 3 support members
  • \n"; + out() << "
  • " + << "Qt 3 support members
  • \n"; out() << "\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) { @@ -1504,13 +1726,10 @@ void DitaXmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker while (m != (*s).members.end()) { generateDetailedQmlMember(*m, fake, marker); out() << "
    \n"; - fakeSection.keywords += qMakePair((*m)->name(), - linkForNode(*m,0)); ++m; } ++s; } - generateFooter(fake); return; } #endif @@ -1546,8 +1765,6 @@ void DitaXmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker 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()) { @@ -1557,57 +1774,32 @@ void DitaXmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker 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. + Returns "xml" for this subclass of Generator. */ QString DitaXmlGenerator::fileExtension(const Node * /* node */) const { - return "html"; + return "xml"; } /*! Output breadcrumb list in the html file. */ void DitaXmlGenerator::generateBreadCrumbs(const QString& title, - const Node *node, - CodeMarker *marker) + const Node *node, + CodeMarker *marker) { Text breadcrumb; if (node->type() == Node::Class) { const ClassNode* cn = static_cast(node); QString name = node->moduleName(); - out() << "
  • All Modules
  • "; + out() << "
  • All Modules
  • "; if (!name.isEmpty()) { out() << "
  • "; breadcrumb << Atom(Atom::AutoLink,name); @@ -1625,7 +1817,7 @@ void DitaXmlGenerator::generateBreadCrumbs(const QString& title, else if (node->type() == Node::Fake) { const FakeNode* fn = static_cast(node); if (node->subType() == Node::Module) { - out() << "
  • All Modules
  • "; + out() << "
  • All Modules
  • "; QString name = node->name(); if (!name.isEmpty()) { out() << "
  • "; @@ -1636,125 +1828,111 @@ void DitaXmlGenerator::generateBreadCrumbs(const QString& title, } else if (node->subType() == Node::Group) { if (fn->name() == QString("modules")) - out() << "
  • All Modules
  • "; + out() << "
  • All Modules
  • "; else { - out() << "
  • name() << "\">" << title - << "
  • "; + out() << "
  • name() << "\">" << title + << "
  • "; } } else if (node->subType() == Node::Page) { if (fn->name() == QString("examples.html")) { - out() << "
  • Examples
  • "; + out() << "
  • Examples
  • "; } else if (fn->name().startsWith("examples-")) { - out() << "
  • Examples
  • "; - out() << "
  • name() << "\">" << title - << "
  • "; + out() << "
  • Examples
  • "; + out() << "
  • name() << "\">" << title + << "
  • "; } else if (fn->name() == QString("namespaces.html")) { - out() << "
  • All Namespaces
  • "; + out() << "
  • All Namespaces
  • "; } else { - out() << "
  • name() << "\">" << title - << "
  • "; + out() << "
  • name() << "\">" << title + << "
  • "; } } else if (node->subType() == Node::QmlClass) { - out() << "
  • QML Elements
  • "; - out() << "
  • name() << "\">" << title - << "
  • "; + out() << "
  • QML Elements
  • "; + out() << "
  • name() << "\">" << title + << "
  • "; } else if (node->subType() == Node::Example) { - out() << "
  • Examples
  • "; + out() << "
  • Examples
  • "; QStringList sl = fn->name().split('/'); QString name = "examples-" + sl.at(0) + ".html"; QString t = CodeParser::titleFromName(name); - out() << "
  • " - << t << "
  • "; - out() << "
  • " + << t << "
  • "; + out() << "
  • " - << title << "
  • "; + << title << ""; } } else if (node->type() == Node::Namespace) { const NamespaceNode* nsn = static_cast(node); - out() << "
  • All Namespaces
  • "; - out() << "
  • " << title - << "
  • "; + out() << "
  • All Namespaces
  • "; + out() << "
  • " << title + << "
  • "; } } -void DitaXmlGenerator::generateHeader(const QString& title, - const Node *node, - CodeMarker *marker) +void DitaXmlGenerator::generateHeader(const Node* node) { - out() << QString("\n").arg(outputEncoding); - out() << "\n"; - out() << QString("\n").arg(naturalLanguage); - out() << "\n"; - out() << " \n"; - QString shortVersion; - shortVersion = project + " " + shortVersion + ": "; - if (node && !node->doc().location().isEmpty()) - out() << "\n"; + writer.setDevice(out().device()); + writer.setAutoFormatting(true); + writer.setAutoFormattingIndent(4); + writer.writeStartDocument(); + + if (!node) + return; - 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 + ": "; + QString docType; + QString dtd; + QString version; + if (node->type() == Node::Class) { + docType = "cxxClass"; + dtd = "dtd/cxxClass.dtd"; + version = "0.6.0"; } - out() << " " << shortVersion << protectEnc(title) << "\n"; - - out() << " "; - out() << ""; - out() << ""; - out() << ""; - - - //out() << " Qt Reference Documentation"; - out() << " \n"; - out() << " \n"; - out() << " \n"; - out() << "\n"; - - if (offlineDocs) - out() << "\n"; - else - out() << "\n"; +#if 0 + writer.writeCharacters("\n\n"); + + if (node && !node->doc().location().isEmpty()) { + writer.writeCharacters("\n"); + } +#endif -#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()); + QString doctype = ""; + writer.writeDTD(doctype); + writer.writeComment(node->doc().location().fileName()); + +#if 0 + out() << "\n\n"; -#if 0 // Removed for new docf format. MWS - if (node && !node->links().empty()) - out() << "

    \n" << navigationLinks << "

    \n"; + if (node && !node->doc().location().isEmpty()) + out() << "\n"; + out().flush(); #endif } void DitaXmlGenerator::generateTitle(const QString& title, - const Text &subTitle, - SubTitleSize subTitleSize, - const Node *relative, - CodeMarker *marker) + const Text &subTitle, + SubTitleSize subTitleSize, + const Node *relative, + CodeMarker *marker) { if (!title.isEmpty()) out() << "

    " << protectEnc(title) << "

    \n"; @@ -1769,30 +1947,18 @@ void DitaXmlGenerator::generateTitle(const QString& title, } } -void DitaXmlGenerator::generateFooter(const Node *node) -{ - if (node && !node->links().empty()) - out() << "

    \n" << navigationLinks << "

    \n"; - - out() << QString(footer).replace("\\" + COMMAND_VERSION, myTree->version()) - << QString(address).replace("\\" + COMMAND_VERSION, myTree->version()); - out() << " \n"; - out() << "\n"; - out() << "\n"; -} - -void DitaXmlGenerator::generateBrief(const Node *node, CodeMarker *marker, - const Node *relative) +/*! + Outputs the brief command as a doc().briefText(); if (!brief.isEmpty()) { - out() << "

    "; + ++noLinks; + writer.writeStartElement(SHORTDESC); generateText(brief, node, marker); - if (!relative || node == relative) - out() << " More...

    \n"; + writer.writeEndElement(); // shortdesc + --noLinks; } } @@ -1870,13 +2036,13 @@ void DitaXmlGenerator::generateTableOfContents(const Node *node, columnSize = 0; } out() << "
  • "; - out() << ""; generateAtomList(headingText.firstAtom(), node, marker, true, numAtoms); - out() << "
  • \n"; + out() << "\n"; ++columnSize; } @@ -1922,22 +2088,22 @@ void DitaXmlGenerator::generateTableOfContents(const Node *node, if (moduleNamespaceMap.contains(node->name())) { out() << "
  • Namespaces
  • \n"; + << "\">Namespaces\n"; } if (moduleClassMap.contains(node->name())) { out() << "
  • Classes
  • \n"; + << "\">Classes\n"; } out() << "
  • Detailed Description
  • \n"; + << "\">Detailed Description\n"; for (int i = 0; i < toc.size(); ++i) { if (toc.at(i)->string().toInt() == 1) { detailsBase = 1; @@ -1951,18 +2117,18 @@ void DitaXmlGenerator::generateTableOfContents(const Node *node, if (!s->members.isEmpty() || !s->reimpMembers.isEmpty()) { out() << "
  • " << (*s).name - << "
  • \n"; + << "\n"; } ++s; } out() << "
  • Detailed Description
  • \n"; + << "\">Detailed Description\n"; for (int i = 0; i < toc.size(); ++i) { if (toc.at(i)->string().toInt() == 1) { detailsBase = 1; @@ -1991,12 +2157,12 @@ void DitaXmlGenerator::generateTableOfContents(const Node *node, out() << "
  • "; - out() << ""; generateAtomList(headingText.firstAtom(), node, marker, true, numAtoms); - out() << "
  • \n"; + out() << "\n"; } while (!sectionNumber.isEmpty()) { sectionNumber.removeLast(); @@ -2017,21 +2183,21 @@ void DitaXmlGenerator::generateNavigationBar(const NavigationBar& bar, out() << "

    "; if (bar.prev.begin() != 0) { #if 0 - out() << "[Prev: "; generateText(section.previousHeading(), node, marker); - out() << "]\n"; + out() << "]\n"; #endif } if (bar.current.begin() != 0) { - out() << "[Home]\n"; + out() << "[Home]\n"; } if (bar.next.begin() != 0) { - out() << "[Next: "; generateText(Text::sectionHeading(bar.next.begin()), node, marker); - out() << "]\n"; + out() << "]\n"; } out() << "

    \n"; } @@ -2053,7 +2219,7 @@ QString DitaXmlGenerator::generateListOfAllMemberFile(const InnerNode *inner, QString fileName = fileBase(inner) + "-members." + fileExtension(inner); beginSubPage(inner->location(), fileName); QString title = "List of All Members for " + inner->name(); - generateHeader(title, inner, marker); + generateHeader(inner); generateTitle(title, Text(), SmallSubTitle, inner, marker); out() << "

    This is the complete list of members for "; generateFullName(inner, 0, marker); @@ -2062,7 +2228,6 @@ QString DitaXmlGenerator::generateListOfAllMemberFile(const InnerNode *inner, Section section = sections.first(); generateSectionList(section, 0, marker, CodeMarker::SeparateList); - generateFooter(); endSubPage(); return fileName; } @@ -2097,12 +2262,12 @@ QString DitaXmlGenerator::generateLowStatusMemberFile(const InnerNode *inner, } beginSubPage(inner->location(), fileName); - generateHeader(title, inner, marker); + generateHeader(inner); generateTitle(title, Text(), SmallSubTitle, inner, marker); if (status == CodeMarker::Compat) { out() << "

    The following class members are part of the " - "Qt 3 support layer. " + "Qt 3 support layer. " "They are provided to help you port old code to Qt 4. We advise against " "using them in new code.

    \n"; } @@ -2112,10 +2277,10 @@ QString DitaXmlGenerator::generateLowStatusMemberFile(const InnerNode *inner, << "We strongly advise against using them in new code.

    \n"; } - out() << "

    \n"; for (i = 0; i < sections.size(); ++i) { out() << "

    " << protectEnc(sections.at(i).name) << "

    \n"; @@ -2135,7 +2300,6 @@ QString DitaXmlGenerator::generateLowStatusMemberFile(const InnerNode *inner, } } - generateFooter(); endSubPage(); return fileName; } @@ -2362,7 +2526,7 @@ void DitaXmlGenerator::generateCompactList(const Node *relative, for (int i = 0; i < 26; i++) { QChar ch('a' + i); if (usedParagraphNames.contains(char('a' + i))) - out() << QString("%2 ").arg(ch).arg(ch.toUpper()); + out() << QString("%2 ").arg(ch).arg(ch.toUpper()); } out() << "

    \n"; } @@ -2415,7 +2579,7 @@ void DitaXmlGenerator::generateCompactList(const Node *relative, Previously, we used generateFullName() for this, but we require some special formatting. */ - out() << ""; + out() << ""; QStringList pieces; if (it.value()->subType() == Node::QmlClass) @@ -2423,7 +2587,7 @@ void DitaXmlGenerator::generateCompactList(const Node *relative, else pieces = fullName(it.value(), relative, marker).split("::"); out() << protectEnc(pieces.last()); - out() << ""; + out() << ""; if (pieces.size() > 1) { out() << " ("; generateFullName(it.value()->parent(), relative, marker); @@ -2443,7 +2607,7 @@ void DitaXmlGenerator::generateFunctionIndex(const Node *relative, out() << "

    "; for (int i = 0; i < 26; i++) { QChar ch('a' + i); - out() << QString("%2 ").arg(ch).arg(ch.toUpper()); + out() << QString("%2 ").arg(ch).arg(ch.toUpper()); } out() << "

    \n"; @@ -2657,7 +2821,7 @@ void DitaXmlGenerator::generateOverviewList(const Node *relative, CodeMarker * / if (!fakeNodeMap.isEmpty()) { foreach (const QString &groupTitle, groupTitlesMap.keys()) { const FakeNode *groupNode = groupTitlesMap[groupTitle]; - out() << QString("

    %2

    \n").arg( + out() << QString("

    %2

    \n").arg( linkForNode(groupNode, relative)).arg( protectEnc(groupNode->fullTitle())); @@ -2670,8 +2834,8 @@ void DitaXmlGenerator::generateOverviewList(const Node *relative, CodeMarker * / QString title = fakeNode->fullTitle(); if (title.startsWith("The ")) title.remove(0, 4); - out() << "
  • " - << protectEnc(title) << "
  • \n"; + out() << "
  • " + << protectEnc(title) << "
  • \n"; } out() << "\n"; } @@ -2684,8 +2848,8 @@ void DitaXmlGenerator::generateOverviewList(const Node *relative, CodeMarker * / QString title = fakeNode->fullTitle(); if (title.startsWith("The ")) title.remove(0, 4); - out() << "
  • " - << protectEnc(title) << "
  • \n"; + out() << "
  • " + << protectEnc(title) << "
  • \n"; } out() << "\n"; } @@ -2838,10 +3002,10 @@ void DitaXmlGenerator::generateSectionInheritedList(const Section& section, else { out() << section.pluralMember; } - out() << " inherited from " << protectEnc(marker->plainFullName((*p).first, relative)) - << "\n"; + << "\n"; ++p; } } @@ -3126,10 +3290,10 @@ void DitaXmlGenerator::generateSectionInheritedList(const Section& section, } else { out() << section.pluralMember; } - out() << " inherited from " << protectEnc(marker->plainFullName((*p).first, relative)) - << "\n"; + << "\n"; ++p; } } @@ -3340,29 +3504,32 @@ void DitaXmlGenerator::generateLink(const Atom* atom, 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)); + writer.writeCharacters(protectEnc(atom->string().left(k))); if (link.isEmpty()) { if (showBrokenLinks) - out() << "
    "; - } else { - out() << ""; + writer.writeEndElement(); //
    + } + else { + writer.writeEndElement(); // } inLink = false; - out() << protectEnc(atom->string().mid(k)); + writer.writeCharacters(protectEnc(atom->string().mid(k))); } else if (marker->recognizeLanguage("Java")) { // hack for Java: remove () and use when appropriate bool func = atom->string().endsWith("()"); bool tt = (func || atom->string().contains(camelCase)); if (tt) - out() << ""; + writer.writeStartElement("tt"); if (func) { - out() << protectEnc(atom->string().left(atom->string().length() - 2)); - } else { - out() << protectEnc(atom->string()); + writer.writeCharacters(protectEnc(atom->string().left(atom->string().length() - 2))); } - out() << ""; - } else { - out() << protectEnc(atom->string()); + else { + writer.writeCharacters(protectEnc(atom->string())); + } + writer.writeEndElement(); // + } + else { + writer.writeCharacters(protectEnc(atom->string())); } } @@ -3444,13 +3611,13 @@ QString DitaXmlGenerator::protectEnc(const QString &string) QString DitaXmlGenerator::protect(const QString &string, const QString &outputEncoding) { #define APPEND(x) \ - if (html.isEmpty()) { \ - html = string; \ - html.truncate(i); \ + if (xml.isEmpty()) { \ + xml = string; \ + xml.truncate(i); \ } \ - html += (x); + xml += (x); - QString html; + QString xml; int n = string.length(); for (int i = 0; i < n; ++i) { @@ -3469,16 +3636,16 @@ QString DitaXmlGenerator::protect(const QString &string, const QString &outputEn || (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(';'); + xml += QString::number(ch.unicode(), 16); + xml += QLatin1Char(';'); } else { - if (!html.isEmpty()) - html += ch; + if (!xml.isEmpty()) + xml += ch; } } - if (!html.isEmpty()) - return html; + if (!xml.isEmpty()) + return xml; return string; #undef APPEND @@ -3615,12 +3782,6 @@ QString DitaXmlGenerator::linkForNode(const Node *node, const Node *relative) 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) { @@ -3654,7 +3815,7 @@ void DitaXmlGenerator::generateFullName(const Node *apparentNode, { if (actualNode == 0) actualNode = apparentNode; - out() << "status() != actualNode->status()) { switch (actualNode->status()) { case Node::Obsolete: @@ -3669,7 +3830,7 @@ void DitaXmlGenerator::generateFullName(const Node *apparentNode, } out() << "\">"; out() << protectEnc(fullName(apparentNode, relative, marker)); - out() << ""; + out() << ""; } void DitaXmlGenerator::generateDetailedMember(const Node *node, @@ -3735,7 +3896,7 @@ void DitaXmlGenerator::generateDetailedMember(const Node *node, if (enume->flagsType()) { out() << "

    The " << protectEnc(enume->flagsType()->name()) << " type is a typedef for " - << "QFlags<" + << "QFlags<" << protectEnc(enume->name()) << ">. It stores an OR combination of " << protectEnc(enume->name()) @@ -4136,16 +4297,6 @@ QString DitaXmlGenerator::getLink(const Atom *atom, 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) @@ -4228,22 +4379,28 @@ void DitaXmlGenerator::beginLink(const QString &link, this->link = link; if (link.isEmpty()) { if (showBrokenLinks) - out() << ""; + writer.writeStartElement("i"); } else if (node == 0 || (relative != 0 && node->status() == relative->status())) { - out() << ""; + writer.writeStartElement("xref"); + writer.writeAttribute("href",link); } else { switch (node->status()) { case Node::Obsolete: - out() << ""; + writer.writeStartElement("xref"); + writer.writeAttribute("href",link); + writer.writeAttribute("outputclass","obsolete"); break; case Node::Compat: - out() << ""; + writer.writeStartElement("xref"); + writer.writeAttribute("href",link); + writer.writeAttribute("outputclass","compat"); break; default: - out() << ""; + writer.writeStartElement("xref"); + writer.writeAttribute("href",link); } } inLink = true; @@ -4254,13 +4411,15 @@ void DitaXmlGenerator::endLink() if (inLink) { if (link.isEmpty()) { if (showBrokenLinks) - out() << ""; + writer.writeEndElement(); // i } else { if (inObsoleteLink) { - out() << "(obsolete)"; + writer.writeStartElement("sup"); + writer.writeCharacters("(obsolete)"); + writer.writeEndElement(); // sup } - out() << ""; + writer.writeEndElement(); // xref } } inLink = false; @@ -4636,138 +4795,4 @@ void DitaXmlGenerator::generatePageIndex(const QString& fileName, CodeMarker* ma #endif -#if 0 // fossil removed for new doc format MWS 19/04/2010 - out() << "\n"; - out() << QString("\n").arg(naturalLanguage); - - QString shortVersion; - if ((project != "Qtopia") && (project != "Qt Extended")) { - shortVersion = project + " " + shortVersion + ": "; - if (node && !node->doc().location().isEmpty()) - out() << "\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() << "\n" - " " << shortVersion << protectEnc(title) << "\n"; - out() << QString("").arg(outputEncoding); - - if (!style.isEmpty()) - out() << " \n"; - - const QMap &metaMap = node->doc().metaTagMap(); - if (!metaMap.isEmpty()) { - QMapIterator i(metaMap); - while (i.hasNext()) { - i.next(); - out() << " \n"; - } - } - - navigationLinks.clear(); - - if (node && !node->links().empty()) { - QPair linkPair; - QPair 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() << " \n"; - - navigationLinks += "[Previous: "; - if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty()) - navigationLinks += protectEnc(anchorPair.second); - else - navigationLinks += protectEnc(linkPair.second); - navigationLinks += "]\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() << " \n"; - - navigationLinks += "["; - if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty()) - navigationLinks += protectEnc(anchorPair.second); - else - navigationLinks += protectEnc(linkPair.second); - navigationLinks += "]\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() << " \n"; - - navigationLinks += "[Next: "; - if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty()) - navigationLinks += protectEnc(anchorPair.second); - else - navigationLinks += protectEnc(linkPair.second); - navigationLinks += "]\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() << " \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() << " \n"; - } - } - - foreach (const QString &stylesheet, stylesheets) { - out() << " \n"; - } - - foreach (const QString &customHeadElement, customHeadElements) { - out() << " " << customHeadElement << "\n"; - } - - out() << "\n" - #endif - - QT_END_NAMESPACE +QT_END_NAMESPACE diff --git a/tools/qdoc3/ditaxmlgenerator.h b/tools/qdoc3/ditaxmlgenerator.h index 4de578d..1a5eca0 100644 --- a/tools/qdoc3/ditaxmlgenerator.h +++ b/tools/qdoc3/ditaxmlgenerator.h @@ -51,10 +51,8 @@ #include #include #include - #include "codemarker.h" #include "config.h" -#include "dcfsection.h" #include "pagegenerator.h" QT_BEGIN_NAMESPACE @@ -134,18 +132,13 @@ class DitaXmlGenerator : public PageGenerator void generateBreadCrumbs(const QString& title, const Node *node, CodeMarker *marker); - void generateHeader(const QString& title, - const Node *node = 0, - CodeMarker *marker = 0); + void generateHeader(const Node* node); 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 generateBrief(const Node* node, CodeMarker* marker); void generateIncludes(const InnerNode *inner, CodeMarker *marker); #if 0 void generateNavigationBar(const NavigationBar& bar, @@ -261,9 +254,6 @@ class DitaXmlGenerator : public PageGenerator 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); @@ -288,15 +278,8 @@ class DitaXmlGenerator : public PageGenerator NavigationBar currentNavigationBar; #endif QMap refMap; + QMap guidMap; int codeIndent; - DcfSection dcfClassesRoot; - DcfSection dcfOverviewsRoot; - DcfSection dcfExamplesRoot; - DcfSection dcfDesignerRoot; - DcfSection dcfLinguistRoot; - DcfSection dcfAssistantRoot; - DcfSection dcfQmakeRoot; - HelpProjectWriter *helpProjectWriter; bool inLink; bool inObsoleteLink; bool inContents; @@ -323,6 +306,7 @@ class DitaXmlGenerator : public PageGenerator const Tree *myTree; bool slow; bool obsoleteLinks; + int noLinks; QMap moduleClassMap; QMap moduleNamespaceMap; NodeMap nonCompatClasses; @@ -341,6 +325,7 @@ class DitaXmlGenerator : public PageGenerator NewClassMaps newClassMaps; NewClassMaps newQmlClassMaps; static int id; + QXmlStreamWriter writer; }; #define DITAXMLGENERATOR_ADDRESS "address" diff --git a/tools/qdoc3/main.cpp b/tools/qdoc3/main.cpp index fe4ad86..616ae2f 100644 --- a/tools/qdoc3/main.cpp +++ b/tools/qdoc3/main.cpp @@ -68,6 +68,7 @@ #include "qscodeparser.h" #include "sgmlgenerator.h" #include "webxmlgenerator.h" +#include "ditaxmlgenerator.h" #include "tokenizer.h" #include "tree.h" #include @@ -427,6 +428,7 @@ int main(int argc, char **argv) ManGenerator manGenerator; SgmlGenerator smglGenerator; WebXMLGenerator webxmlGenerator; + DitaXmlGenerator ditaxmlGenerator; QStringList qdocFiles; QString opt; diff --git a/tools/qdoc3/pagegenerator.cpp b/tools/qdoc3/pagegenerator.cpp index 13c83a8..cd364ef 100644 --- a/tools/qdoc3/pagegenerator.cpp +++ b/tools/qdoc3/pagegenerator.cpp @@ -299,8 +299,8 @@ QTextStream &PageGenerator::out() /*! Recursive writing of html files from the root \a node. */ -void PageGenerator::generateInnerNode(const InnerNode *node, - CodeMarker *marker) +void +PageGenerator::generateInnerNode(const InnerNode* node, CodeMarker* marker) { if (!node->url().isNull()) return; diff --git a/tools/qdoc3/test/qt-ditaxml.qdocconf b/tools/qdoc3/test/qt-ditaxml.qdocconf new file mode 100644 index 0000000..66f30e3 --- /dev/null +++ b/tools/qdoc3/test/qt-ditaxml.qdocconf @@ -0,0 +1,11 @@ +include(qt.qdocconf) + +imagedirs = $QTDIR/doc/src/images \ + $QTDIR/examples \ + $QTDIR/doc/src/template/images + +outputdir = $QTDIR/doc/ditaxml +outputformats = DITAXML + +generateindex = true +url = . -- cgit v0.12 From 4d5525d0209ba6d0ed0db734fedc1ce67ee14a62 Mon Sep 17 00:00:00 2001 From: miniak Date: Fri, 11 Jun 2010 14:54:16 +0200 Subject: Cleanup obsolete stuff Merge-request: 2355 Reviewed-by: Denis Dzyubenko --- src/gui/util/qsystemtrayicon_win.cpp | 52 ++-------------------------------- src/gui/util/qsystemtrayicon_wince.cpp | 10 +------ 2 files changed, 4 insertions(+), 58 deletions(-) diff --git a/src/gui/util/qsystemtrayicon_win.cpp b/src/gui/util/qsystemtrayicon_win.cpp index c89fbae..370a0ff 100644 --- a/src/gui/util/qsystemtrayicon_win.cpp +++ b/src/gui/util/qsystemtrayicon_win.cpp @@ -53,11 +53,8 @@ #include #include -#include #include #include -#include -#include #include QT_BEGIN_NAMESPACE @@ -87,7 +84,6 @@ public: ~QSystemTrayIconSys(); bool winEvent( MSG *m, long *result ); bool trayMessage(DWORD msg); - bool iconDrawItem(LPDRAWITEMSTRUCT lpdi); void setIconContents(NOTIFYICONDATA &data); bool showMessage(const QString &title, const QString &message, QSystemTrayIcon::MessageIcon type, uint uSecs); bool allowsMessages(); @@ -170,7 +166,6 @@ void QSystemTrayIconSys::setIconContents(NOTIFYICONDATA &tnd) static int iconFlag( QSystemTrayIcon::MessageIcon icon ) { -#if NOTIFYICON_VERSION >= 3 switch (icon) { case QSystemTrayIcon::Information: return NIIF_INFO; @@ -184,15 +179,10 @@ static int iconFlag( QSystemTrayIcon::MessageIcon icon ) Q_ASSERT_X(false, "QSystemTrayIconSys::showMessage", "Invalid QSystemTrayIcon::MessageIcon value"); return NIIF_NONE; } -#else - Q_UNUSED(icon); - return 0; -#endif } bool QSystemTrayIconSys::showMessage(const QString &title, const QString &message, QSystemTrayIcon::MessageIcon type, uint uSecs) { -#if NOTIFYICON_VERSION >= 3 NOTIFYICONDATA tnd; memset(&tnd, 0, notifyIconSize); Q_ASSERT(testAttribute(Qt::WA_WState_Created)); @@ -209,13 +199,6 @@ bool QSystemTrayIconSys::showMessage(const QString &title, const QString &messag tnd.uFlags = NIF_INFO; return Shell_NotifyIcon(NIM_MODIFY, &tnd); -#else - Q_UNUSED(title); - Q_UNUSED(message); - Q_UNUSED(type); - Q_UNUSED(uSecs); - return false; -#endif } bool QSystemTrayIconSys::trayMessage(DWORD msg) @@ -235,15 +218,6 @@ bool QSystemTrayIconSys::trayMessage(DWORD msg) return Shell_NotifyIcon(msg, &tnd); } -bool QSystemTrayIconSys::iconDrawItem(LPDRAWITEMSTRUCT lpdi) -{ - if (!hIcon) - return false; - - DrawIconEx(lpdi->hDC, lpdi->rcItem.left, lpdi->rcItem.top, hIcon, 0, 0, 0, 0, DI_NORMAL); - return true; -} - void QSystemTrayIconSys::createIcon() { hIcon = 0; @@ -264,25 +238,8 @@ void QSystemTrayIconSys::createIcon() bool QSystemTrayIconSys::winEvent( MSG *m, long *result ) { switch(m->message) { - case WM_CREATE: -#ifdef GWLP_USERDATA - SetWindowLongPtr(winId(), GWLP_USERDATA, (LONG_PTR)((CREATESTRUCTW*)m->lParam)->lpCreateParams); -#else - SetWindowLong(winId(), GWL_USERDATA, (LONG)((CREATESTRUCTW*)m->lParam)->lpCreateParams); -#endif - break; - - case WM_DRAWITEM: - return iconDrawItem((LPDRAWITEMSTRUCT)m->lParam); - case MYWM_NOTIFYICON: { - RECT r; - GetWindowRect(winId(), &r); - QEvent *e = 0; - Qt::KeyboardModifiers keys = QApplication::keyboardModifiers(); - QPoint gpos = QCursor::pos(); - switch (m->lParam) { case WM_LBUTTONUP: if (ignoreNextMouseRelease) @@ -311,13 +268,9 @@ bool QSystemTrayIconSys::winEvent( MSG *m, long *result ) case WM_MBUTTONUP: emit q->activated(QSystemTrayIcon::MiddleClick); break; + default: - break; - } - if (e) { - bool res = QApplication::sendEvent(q, e); - delete e; - return res; + break; } break; } @@ -474,6 +427,7 @@ QRect QSystemTrayIconPrivate::geometry_sys() const { if (!sys) return QRect(); + return sys->findIconGeometry(q_uNOTIFYICONID); } diff --git a/src/gui/util/qsystemtrayicon_wince.cpp b/src/gui/util/qsystemtrayicon_wince.cpp index 0a0d340..6ff5c58 100644 --- a/src/gui/util/qsystemtrayicon_wince.cpp +++ b/src/gui/util/qsystemtrayicon_wince.cpp @@ -155,10 +155,6 @@ bool QSystemTrayIconSys::winEvent( MSG *m, long *result ) case MYWM_NOTIFYICON: { - RECT r; - GetWindowRect(winId(), &r); - QEvent *e = 0; - Qt::KeyboardModifiers keys = QApplication::keyboardModifiers(); QPoint gpos = QCursor::pos(); switch (m->lParam) { @@ -193,14 +189,10 @@ bool QSystemTrayIconSys::winEvent( MSG *m, long *result ) case WM_MBUTTONUP: emit q->activated(QSystemTrayIcon::MiddleClick); break; + default: break; } - if (e) { - bool res = QApplication::sendEvent(q, e); - delete e; - return res; - } break; } default: -- cgit v0.12 From d36e728d35f9b83710b4d88c719fbe64bbe58c1b Mon Sep 17 00:00:00 2001 From: miniak Date: Fri, 11 Jun 2010 14:54:17 +0200 Subject: Use NIM_SETVERSION to get the latest behavior Merge-request: 2355 Reviewed-by: Denis Dzyubenko --- src/gui/util/qsystemtrayicon_win.cpp | 87 +++++++++++++++++++++++++++++------- 1 file changed, 71 insertions(+), 16 deletions(-) diff --git a/src/gui/util/qsystemtrayicon_win.cpp b/src/gui/util/qsystemtrayicon_win.cpp index 370a0ff..aee2027 100644 --- a/src/gui/util/qsystemtrayicon_win.cpp +++ b/src/gui/util/qsystemtrayicon_win.cpp @@ -41,18 +41,19 @@ #include "qsystemtrayicon_p.h" #ifndef QT_NO_SYSTEMTRAYICON -#define _WIN32_IE 0x0600 //required for NOTIFYICONDATA_V2_SIZE -//missing defines for MINGW : -#ifndef NIN_BALLOONTIMEOUT -#define NIN_BALLOONTIMEOUT (WM_USER + 4) +#ifndef _WIN32_WINNT +#define _WIN32_WINNT 0x0600 #endif -#ifndef NIN_BALLOONUSERCLICK -#define NIN_BALLOONUSERCLICK (WM_USER + 5) + +#ifndef _WIN32_IE +#define _WIN32_IE 0x600 #endif #include +#include #include + #include #include #include @@ -71,6 +72,30 @@ struct Q_NOTIFYICONIDENTIFIER { GUID guidItem; }; +#ifndef NOTIFYICON_VERSION_4 +#define NOTIFYICON_VERSION_4 4 +#endif + +#ifndef NIN_SELECT +#define NIN_SELECT (WM_USER + 0) +#endif + +#ifndef NIN_KEYSELECT +#define NIN_KEYSELECT (WM_USER + 1) +#endif + +#ifndef NIN_BALLOONTIMEOUT +#define NIN_BALLOONTIMEOUT (WM_USER + 4) +#endif + +#ifndef NIN_BALLOONUSERCLICK +#define NIN_BALLOONUSERCLICK (WM_USER + 5) +#endif + +#ifndef NIF_SHOWTIP +#define NIF_SHOWTIP 0x00000080 +#endif + #define Q_MSGFLT_ALLOW 1 typedef HRESULT (WINAPI *PtrShell_NotifyIconGetRect)(const Q_NOTIFYICONIDENTIFIER* identifier, RECT* iconLocation); @@ -96,6 +121,7 @@ public: private: uint notifyIconSize; int maxTipLength; + int version; bool ignoreNextMouseRelease; }; @@ -119,7 +145,14 @@ QSystemTrayIconSys::QSystemTrayIconSys(QSystemTrayIcon *object) : hIcon(0), q(object), ignoreNextMouseRelease(false) { - notifyIconSize = FIELD_OFFSET(NOTIFYICONDATA, guidItem); // NOTIFYICONDATAW_V2_SIZE; + if (QSysInfo::windowsVersion() >= QSysInfo::WV_VISTA) { + notifyIconSize = sizeof(NOTIFYICONDATA); + version = NOTIFYICON_VERSION_4; + } else { + notifyIconSize = NOTIFYICONDATA_V2_SIZE; + version = NOTIFYICON_VERSION; + } + maxTipLength = 128; // For restoring the tray icon after explorer crashes @@ -153,7 +186,7 @@ QSystemTrayIconSys::~QSystemTrayIconSys() void QSystemTrayIconSys::setIconContents(NOTIFYICONDATA &tnd) { - tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; + tnd.uFlags |= NIF_MESSAGE | NIF_ICON | NIF_TIP; tnd.uCallbackMessage = MYWM_NOTIFYICON; tnd.hIcon = hIcon; QString tip = q->toolTip(); @@ -185,9 +218,7 @@ bool QSystemTrayIconSys::showMessage(const QString &title, const QString &messag { NOTIFYICONDATA tnd; memset(&tnd, 0, notifyIconSize); - Q_ASSERT(testAttribute(Qt::WA_WState_Created)); - setIconContents(tnd); memcpy(tnd.szInfo, message.utf16(), qMin(message.length() + 1, 256) * sizeof(wchar_t)); memcpy(tnd.szInfoTitle, title.utf16(), qMin(title.length() + 1, 64) * sizeof(wchar_t)); @@ -196,7 +227,9 @@ bool QSystemTrayIconSys::showMessage(const QString &title, const QString &messag tnd.cbSize = notifyIconSize; tnd.hWnd = winId(); tnd.uTimeout = uSecs; - tnd.uFlags = NIF_INFO; + tnd.uFlags = NIF_INFO | NIF_SHOWTIP; + + Q_ASSERT(testAttribute(Qt::WA_WState_Created)); return Shell_NotifyIcon(NIM_MODIFY, &tnd); } @@ -205,17 +238,25 @@ bool QSystemTrayIconSys::trayMessage(DWORD msg) { NOTIFYICONDATA tnd; memset(&tnd, 0, notifyIconSize); + tnd.uID = q_uNOTIFYICONID; tnd.cbSize = notifyIconSize; tnd.hWnd = winId(); + tnd.uFlags = NIF_SHOWTIP; + tnd.uVersion = version; Q_ASSERT(testAttribute(Qt::WA_WState_Created)); - if (msg != NIM_DELETE) { + if (msg == NIM_ADD || msg == NIM_MODIFY) { setIconContents(tnd); } - return Shell_NotifyIcon(msg, &tnd); + bool success = Shell_NotifyIcon(msg, &tnd); + + if (msg == NIM_ADD) + return success && Shell_NotifyIcon(NIM_SETVERSION, &tnd); + else + return success; } void QSystemTrayIconSys::createIcon() @@ -240,8 +281,22 @@ bool QSystemTrayIconSys::winEvent( MSG *m, long *result ) switch(m->message) { case MYWM_NOTIFYICON: { - switch (m->lParam) { - case WM_LBUTTONUP: + int message = 0; + QPoint gpos; + + if (version == NOTIFYICON_VERSION_4) { + Q_ASSERT(q_uNOTIFYICONID == HIWORD(m->lParam)); + message = LOWORD(m->lParam); + gpos = QPoint(GET_X_LPARAM(m->wParam), GET_Y_LPARAM(m->wParam)); + } else { + Q_ASSERT(q_uNOTIFYICONID == m->wParam); + message = m->lParam; + gpos = QCursor::pos(); + } + + switch (message) { + case NIN_SELECT: + case NIN_KEYSELECT: if (ignoreNextMouseRelease) ignoreNextMouseRelease = false; else @@ -254,7 +309,7 @@ bool QSystemTrayIconSys::winEvent( MSG *m, long *result ) emit q->activated(QSystemTrayIcon::DoubleClick); break; - case WM_RBUTTONUP: + case WM_CONTEXTMENU: if (q->contextMenu()) { q->contextMenu()->popup(gpos); } -- cgit v0.12 From 936fc54e313cfe8923ba94738e52a92adcf6ccf0 Mon Sep 17 00:00:00 2001 From: miniak Date: Fri, 11 Jun 2010 14:54:19 +0200 Subject: Fix QSystemTrayIcon::supportsMessages() on Windows Add QSystemTrayIconPrivate::supportsMessages_sys() method Report support for balloon messages only when they are actually allowed ("EnableBalloonTips" registry value) Merge-request: 2355 Reviewed-by: Denis Dzyubenko --- src/gui/util/qsystemtrayicon.cpp | 5 +---- src/gui/util/qsystemtrayicon_mac.mm | 5 +++++ src/gui/util/qsystemtrayicon_p.h | 2 ++ src/gui/util/qsystemtrayicon_qws.cpp | 5 +++++ src/gui/util/qsystemtrayicon_win.cpp | 26 ++++++++------------------ src/gui/util/qsystemtrayicon_wince.cpp | 5 +++++ src/gui/util/qsystemtrayicon_x11.cpp | 5 +++++ 7 files changed, 31 insertions(+), 22 deletions(-) diff --git a/src/gui/util/qsystemtrayicon.cpp b/src/gui/util/qsystemtrayicon.cpp index d7dde87..941961b 100644 --- a/src/gui/util/qsystemtrayicon.cpp +++ b/src/gui/util/qsystemtrayicon.cpp @@ -356,10 +356,7 @@ bool QSystemTrayIcon::isSystemTrayAvailable() */ bool QSystemTrayIcon::supportsMessages() { -#if defined(Q_WS_QWS) - return false; -#endif - return true; + return QSystemTrayIconPrivate::supportsMessages_sys(); } /*! diff --git a/src/gui/util/qsystemtrayicon_mac.mm b/src/gui/util/qsystemtrayicon_mac.mm index 8aaaa0f..22134cb 100644 --- a/src/gui/util/qsystemtrayicon_mac.mm +++ b/src/gui/util/qsystemtrayicon_mac.mm @@ -226,6 +226,11 @@ bool QSystemTrayIconPrivate::isSystemTrayAvailable_sys() return true; } +bool QSystemTrayIconPrivate::supportsMessages_sys() +{ + return true; +} + void QSystemTrayIconPrivate::showMessage_sys(const QString &title, const QString &message, QSystemTrayIcon::MessageIcon icon, int) { diff --git a/src/gui/util/qsystemtrayicon_p.h b/src/gui/util/qsystemtrayicon_p.h index e8bf197..4592e43 100644 --- a/src/gui/util/qsystemtrayicon_p.h +++ b/src/gui/util/qsystemtrayicon_p.h @@ -83,7 +83,9 @@ public: void updateMenu_sys(); QRect geometry_sys() const; void showMessage_sys(const QString &msg, const QString &title, QSystemTrayIcon::MessageIcon icon, int secs); + static bool isSystemTrayAvailable_sys(); + static bool supportsMessages_sys(); QPointer menu; QIcon icon; diff --git a/src/gui/util/qsystemtrayicon_qws.cpp b/src/gui/util/qsystemtrayicon_qws.cpp index b1b895b..cda47aa 100644 --- a/src/gui/util/qsystemtrayicon_qws.cpp +++ b/src/gui/util/qsystemtrayicon_qws.cpp @@ -75,6 +75,11 @@ bool QSystemTrayIconPrivate::isSystemTrayAvailable_sys() return false; } +bool QSystemTrayIconPrivate::supportsMessages_sys() +{ + return false; +} + void QSystemTrayIconPrivate::showMessage_sys(const QString &message, const QString &title, QSystemTrayIcon::MessageIcon icon, diff --git a/src/gui/util/qsystemtrayicon_win.cpp b/src/gui/util/qsystemtrayicon_win.cpp index aee2027..a9585b9 100644 --- a/src/gui/util/qsystemtrayicon_win.cpp +++ b/src/gui/util/qsystemtrayicon_win.cpp @@ -111,8 +111,6 @@ public: bool trayMessage(DWORD msg); void setIconContents(NOTIFYICONDATA &data); bool showMessage(const QString &title, const QString &message, QSystemTrayIcon::MessageIcon type, uint uSecs); - bool allowsMessages(); - bool supportsMessages(); QRect findIconGeometry(const int a_iButtonID); void createIcon(); HICON hIcon; @@ -125,7 +123,7 @@ private: bool ignoreNextMouseRelease; }; -bool QSystemTrayIconSys::allowsMessages() +static bool allowsMessages() { #ifndef QT_NO_SETTINGS QSettings settings(QLatin1String("HKEY_CURRENT_USER\\Software\\Microsoft" @@ -136,11 +134,6 @@ bool QSystemTrayIconSys::allowsMessages() #endif } -bool QSystemTrayIconSys::supportsMessages() -{ - return allowsMessages(); -} - QSystemTrayIconSys::QSystemTrayIconSys(QSystemTrayIcon *object) : hIcon(0), q(object), ignoreNextMouseRelease(false) @@ -449,7 +442,7 @@ QRect QSystemTrayIconSys::findIconGeometry(const int iconId) void QSystemTrayIconPrivate::showMessage_sys(const QString &title, const QString &message, QSystemTrayIcon::MessageIcon type, int timeOut) { - if (!sys || !sys->allowsMessages()) + if (!sys || !allowsMessages()) return; uint uSecs = 0; @@ -467,15 +460,7 @@ void QSystemTrayIconPrivate::showMessage_sys(const QString &title, const QString //title is limited to 63 chars + NULL QString titleString = title.left(63) + QChar(); - if (sys->supportsMessages()) { - sys->showMessage(titleString, messageString, type, (unsigned int)uSecs); - } else { - //use fallback - QRect iconPos = sys->findIconGeometry(q_uNOTIFYICONID); - if (iconPos.isValid()) { - QBalloonTip::showBalloon(type, title, message, sys->q, iconPos.center(), uSecs, true); - } - } + sys->showMessage(titleString, messageString, type, uSecs); } QRect QSystemTrayIconPrivate::geometry_sys() const @@ -528,6 +513,11 @@ bool QSystemTrayIconPrivate::isSystemTrayAvailable_sys() return true; } +bool QSystemTrayIconPrivate::supportsMessages_sys() +{ + return allowsMessages(); +} + QT_END_NAMESPACE #endif diff --git a/src/gui/util/qsystemtrayicon_wince.cpp b/src/gui/util/qsystemtrayicon_wince.cpp index 6ff5c58..e5cf0fd 100644 --- a/src/gui/util/qsystemtrayicon_wince.cpp +++ b/src/gui/util/qsystemtrayicon_wince.cpp @@ -283,6 +283,11 @@ bool QSystemTrayIconPrivate::isSystemTrayAvailable_sys() return true; } +bool QSystemTrayIconPrivate::supportsMessages_sys() +{ + return true; +} + QT_END_NAMESPACE #endif diff --git a/src/gui/util/qsystemtrayicon_x11.cpp b/src/gui/util/qsystemtrayicon_x11.cpp index 82b4325..59fdc07 100644 --- a/src/gui/util/qsystemtrayicon_x11.cpp +++ b/src/gui/util/qsystemtrayicon_x11.cpp @@ -381,6 +381,11 @@ bool QSystemTrayIconPrivate::isSystemTrayAvailable_sys() return QSystemTrayIconSys::locateSystemTray() != XNone; } +bool QSystemTrayIconPrivate::supportsMessages_sys() +{ + return true; +} + void QSystemTrayIconPrivate::showMessage_sys(const QString &message, const QString &title, QSystemTrayIcon::MessageIcon icon, int msecs) { -- cgit v0.12 From 164f347aba7287407615223dc2219a016ebc8248 Mon Sep 17 00:00:00 2001 From: Zeno Albisser Date: Wed, 26 May 2010 09:55:07 +0200 Subject: Adjusted RegExp in QSslCertificate::fromPath() Reviewed-by: Thiago Task-number: QTBUG-2706 --- src/network/ssl/qsslcertificate.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/ssl/qsslcertificate.cpp b/src/network/ssl/qsslcertificate.cpp index 31c5ed1..ed12e00 100644 --- a/src/network/ssl/qsslcertificate.cpp +++ b/src/network/ssl/qsslcertificate.cpp @@ -537,7 +537,7 @@ QList QSslCertificate::fromPath(const QString &path, // $, (,), *, +, ., ?, [, ,], ^, {, | and }. int pos = -1; if (syntax == QRegExp::Wildcard) - pos = path.indexOf(QRegExp(QLatin1String("[^\\][\\*\\?\\[\\]]"))); + pos = path.indexOf(QRegExp(QLatin1String("[\\*\\?\\[]"))); else if (syntax != QRegExp::FixedString) pos = path.indexOf(QRegExp(QLatin1String("[^\\][\\$\\(\\)\\*\\+\\.\\?\\[\\]\\^\\{\\}\\|]"))); QString pathPrefix = path.left(pos); // == path if pos < 0 -- cgit v0.12 From 9a982779eabc4fafafe18dc9ad1b44fb2425563c Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Wed, 19 May 2010 18:47:42 +0200 Subject: make QSslSocket::systemCaCertificates() use system certs before, we were shipping our own bundle of CA certificates. Now we read the certificates from the system CA store. Patch-by: Zeno Albisser and Peter Hartmann Reviewed-by: Thiago Task-number: QTBUG-8833 Task-number: QT-3361 --- src/network/ssl/qsslsocket.cpp | 8 +-- src/network/ssl/qsslsocket_openssl.cpp | 126 ++++++++++++++++++++++++++++----- src/network/ssl/qsslsocket_p.h | 24 +++++++ 3 files changed, 138 insertions(+), 20 deletions(-) diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index 0918539..a8c602a 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -1329,8 +1329,8 @@ void QSslSocket::setDefaultCaCertificates(const QList &certific /*! Returns the current default CA certificate database. This database is originally set to your system's default CA certificate database. - If no system default database is found, Qt will provide its own - default database. You can override the default CA certificate database + If no system default database is found, an empty database will be + returned. You can override the default CA certificate database with your own CA certificate database using setDefaultCaCertificates(). Each SSL socket's CA certificate database is initialized to the @@ -1344,8 +1344,8 @@ QList QSslSocket::defaultCaCertificates() } /*! - This function provides a default CA certificate database - shipped together with Qt. The CA certificate database + This function provides the CA certificate database + provided by the operating system. The CA certificate database returned by this function is used to initialize the database returned by defaultCaCertificates(). You can replace that database with your own with setDefaultCaCertificates(). diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index 050fb1b..36a0cc7 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -57,12 +57,18 @@ #include #include #include - -static void initNetworkResources() -{ - // Initialize resources - Q_INIT_RESOURCE(network); -} +#include // for loading the security lib for the CA store + +#if defined(Q_OS_MAC) +#define kSecTrustSettingsDomainSystem 2 // so we do not need to include the header file + PtrSecCertificateGetData QSslSocketPrivate::ptrSecCertificateGetData = 0; + PtrSecTrustSettingsCopyCertificates QSslSocketPrivate::ptrSecTrustSettingsCopyCertificates = 0; + PtrSecTrustCopyAnchorCertificates QSslSocketPrivate::ptrSecTrustCopyAnchorCertificates = 0; +#elif defined(Q_OS_WIN) + PtrCertOpenSystemStoreW QSslSocketPrivate::ptrCertOpenSystemStoreW = 0; + PtrCertFindCertificateInStore QSslSocketPrivate::ptrCertFindCertificateInStore = 0; + PtrCertCloseStore QSslSocketPrivate::ptrCertCloseStore = 0; +#endif QT_BEGIN_NAMESPACE @@ -406,9 +412,6 @@ bool QSslSocketPrivate::ensureInitialized() if (!q_initialized) { q_initialized = true; - // Initialize resources - initNetworkResources(); - // Initialize OpenSSL. q_CRYPTO_set_id_callback(id_function); q_CRYPTO_set_locking_callback(locking_function); @@ -448,6 +451,36 @@ bool QSslSocketPrivate::ensureInitialized() resetDefaultCiphers(); setDefaultCaCertificates(systemCaCertificates()); } + + //load symbols needed to receive certificates from system store +#if defined(Q_OS_MAC) + QLibrary securityLib("/System/Library/Frameworks/Security.framework/Versions/Current/Security"); + if (securityLib.load()) { + ptrSecCertificateGetData = (PtrSecCertificateGetData) securityLib.resolve("SecCertificateGetData"); + if (!ptrSecCertificateGetData) + qWarning("could not resolve symbols in security library"); // should never happen + + ptrSecTrustSettingsCopyCertificates = (PtrSecTrustSettingsCopyCertificates) securityLib.resolve("SecTrustSettingsCopyCertificates"); + if (!ptrSecTrustSettingsCopyCertificates) { // method was introduced in Leopard, use legacy method if it's not there + ptrSecTrustCopyAnchorCertificates = (PtrSecTrustCopyAnchorCertificates) securityLib.resolve("SecTrustCopyAnchorCertificates"); + if (!ptrSecTrustCopyAnchorCertificates) + qWarning("could not resolve symbols in security library"); // should never happen + } + } else { + qWarning("could not load security library"); + } +#elif defined(Q_OS_WIN) + HINSTANCE hLib = LoadLibraryW(L"Crypt32"); + if (hLib) { + ptrCertOpenSystemStoreW = (PtrCertOpenSystemStoreW)GetProcAddress(hLib, "CertOpenSystemStoreW"); + ptrCertFindCertificateInStore = (PtrCertFindCertificateInStore)GetProcAddress(hLib, "CertFindCertificateInStore"); + ptrCertCloseStore = (PtrCertCloseStore)GetProcAddress(hLib, "CertCloseStore"); + if (!ptrCertOpenSystemStoreW || !ptrCertFindCertificateInStore || !ptrCertCloseStore) + qWarning("could not resolve symbols in crypt32 library"); // should never happen + } else { + qWarning("could not load crypt32 library"); // should never happen + } +#endif return true; } @@ -486,13 +519,74 @@ void QSslSocketPrivate::resetDefaultCiphers() QList QSslSocketPrivate::systemCaCertificates() { - // Qt provides a default bundle of certificates - QFile caBundle(QLatin1String(":/trolltech/network/ssl/qt-ca-bundle.crt")); - if (caBundle.open(QIODevice::ReadOnly | QIODevice::Text)) - return QSslCertificate::fromDevice(&caBundle); - - // Unreachable; return no bundle. - return QList(); + ensureInitialized(); + QList systemCerts; +#if defined(Q_OS_MAC) + CFArrayRef cfCerts; + OSStatus status = 1; + + OSStatus SecCertificateGetData ( + SecCertificateRef certificate, + CSSM_DATA_PTR data + ); + + if (ptrSecCertificateGetData) { + if (ptrSecTrustSettingsCopyCertificates) + status = ptrSecTrustSettingsCopyCertificates(kSecTrustSettingsDomainSystem, &cfCerts); + else if (ptrSecTrustCopyAnchorCertificates) + status = ptrSecTrustCopyAnchorCertificates(&cfCerts); + if (!status) { + CFIndex size = CFArrayGetCount(cfCerts); + for (CFIndex i = 0; i < size; ++i) { + SecCertificateRef cfCert = (SecCertificateRef)CFArrayGetValueAtIndex(cfCerts, i); + CSSM_DATA data; + CSSM_DATA_PTR dataPtr = &data; + if (ptrSecCertificateGetData(cfCert, dataPtr)) { + qWarning("error retrieving a CA certificate from the system store"); + } else { + int len = data.Length; + char *rawData = reinterpret_cast(data.Data); + QByteArray rawCert(rawData, len); + systemCerts.append(QSslCertificate::fromData(rawCert, QSsl::Der)); + } + } + } + else { + // no detailed error handling here + qWarning("could not retrieve system CA certificates"); + } + } +#elif defined(Q_OS_WIN) + if (ptrCertOpenSystemStoreW && ptrCertFindCertificateInStore && ptrCertCloseStore) { + HCERTSTORE hSystemStore; + hSystemStore = ptrCertOpenSystemStoreW(0, L"ROOT"); + if(hSystemStore) { + PCCERT_CONTEXT pc = NULL; + while(1) { + pc = ptrCertFindCertificateInStore( hSystemStore, X509_ASN_ENCODING, 0, CERT_FIND_ANY, NULL, pc); + if(!pc) + break; + QByteArray der((const char *)(pc->pbCertEncoded), static_cast(pc->cbCertEncoded)); + QSslCertificate cert(der,QSsl::Der); + systemCerts.append(cert); + } + ptrCertCloseStore(hSystemStore, 0); + } + } +#elif defined(Q_OS_AIX) + systemCerts.append(QSslCertificate::fromPath("/var/ssl/certs/*.pem", QSsl::Pem, QRegExp::Wildcard)); +#elif defined(Q_OS_SOLARIS) + systemCerts.append(QSslCertificate::fromPath("/usr/local/ssl/certs/*.pem", QSsl::Pem, QRegExp::Wildcard)); +#elif defined(Q_OS_HPUX) + systemCerts.append(QSslCertificate::fromPath("/opt/openssl/certs/*.pem", QSsl::Pem, QRegExp::Wildcard)); +#elif defined(Q_OS_LINUX) + systemCerts.append(QSslCertificate::fromPath("/etc/ssl/certs/*.pem", QSsl::Pem, QRegExp::Wildcard)); // (K)ubuntu, OpenSUSE, Mandriva, ... + systemCerts.append(QSslCertificate::fromPath("/etc/pki/tls/certs/ca-bundle.crt", QSsl::Pem)); // Fedora + systemCerts.append(QSslCertificate::fromPath("/usr/lib/ssl/certs/*.pem", QSsl::Pem, QRegExp::Wildcard)); // Gentoo, Mandrake + systemCerts.append(QSslCertificate::fromPath("/usr/share/ssl/*.pem", QSsl::Pem, QRegExp::Wildcard)); // Centos, Redhat, SuSE + systemCerts.append(QSslCertificate::fromPath("/usr/local/ssl/*.pem", QSsl::Pem, QRegExp::Wildcard)); // Normal OpenSSL Tarball +#endif + return systemCerts; } void QSslSocketBackendPrivate::startClientEncryption() diff --git a/src/network/ssl/qsslsocket_p.h b/src/network/ssl/qsslsocket_p.h index 8e22664..cf1786c 100644 --- a/src/network/ssl/qsslsocket_p.h +++ b/src/network/ssl/qsslsocket_p.h @@ -66,6 +66,20 @@ QT_BEGIN_NAMESPACE +#if defined(Q_OS_MAC) +#include +#include + typedef OSStatus (*PtrSecCertificateGetData)(SecCertificateRef, CSSM_DATA_PTR); + typedef OSStatus (*PtrSecTrustSettingsCopyCertificates)(int, CFArrayRef*); + typedef OSStatus (*PtrSecTrustCopyAnchorCertificates)(CFArrayRef*); +#elif defined(Q_OS_WIN) + typedef HCERTSTORE (WINAPI *PtrCertOpenSystemStoreW)(HCRYPTPROV_LEGACY, LPCWSTR); + typedef PCCERT_CONTEXT (WINAPI *PtrCertFindCertificateInStore)(HCERTSTORE, DWORD, DWORD, DWORD, const void*, PCCERT_CONTEXT); + typedef BOOL (WINAPI *PtrCertCloseStore)(HCERTSTORE, DWORD); +#endif + + + class QSslSocketPrivate : public QTcpSocketPrivate { Q_DECLARE_PUBLIC(QSslSocket) @@ -106,6 +120,16 @@ public: static void addDefaultCaCertificate(const QSslCertificate &cert); static void addDefaultCaCertificates(const QList &certs); +#if defined(Q_OS_MAC) + static PtrSecCertificateGetData ptrSecCertificateGetData; + static PtrSecTrustSettingsCopyCertificates ptrSecTrustSettingsCopyCertificates; + static PtrSecTrustCopyAnchorCertificates ptrSecTrustCopyAnchorCertificates; +#elif defined(Q_OS_WIN) + static PtrCertOpenSystemStoreW ptrCertOpenSystemStoreW; + static PtrCertFindCertificateInStore ptrCertFindCertificateInStore; + static PtrCertCloseStore ptrCertCloseStore; +#endif + // The socket itself, including private slots. QTcpSocket *plainSocket; void createPlainSocket(QIODevice::OpenMode openMode); -- cgit v0.12 From d28c9e9105f4b3f638bfa7492af10ce7d4f1c644 Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Thu, 3 Jun 2010 15:13:14 +0200 Subject: remove certificate bundle since we now use the system certificates we should not provide our own certificate bundle anymore. Patch-by: Zeno Albisser and Peter Hartmann Reviewed-by: Thiago Task-number: QTBUG-8833 Task-number: QT-3361 --- src/network/network.qrc | 5 - src/network/ssl/qt-ca-bundle.crt | 1984 -------------------------------------- src/network/ssl/ssl.pri | 3 - 3 files changed, 1992 deletions(-) delete mode 100644 src/network/network.qrc delete mode 100644 src/network/ssl/qt-ca-bundle.crt diff --git a/src/network/network.qrc b/src/network/network.qrc deleted file mode 100644 index 06f98cb..0000000 --- a/src/network/network.qrc +++ /dev/null @@ -1,5 +0,0 @@ - - -ssl/qt-ca-bundle.crt - - diff --git a/src/network/ssl/qt-ca-bundle.crt b/src/network/ssl/qt-ca-bundle.crt deleted file mode 100644 index 7755ca0..0000000 --- a/src/network/ssl/qt-ca-bundle.crt +++ /dev/null @@ -1,1984 +0,0 @@ -## -## ca-bundle.crt -- Bundle of CA Certificates -## -## This is a bundle of X.509 certificates of public -## Certificate Authorities (CA). -## - ------BEGIN CERTIFICATE----- -MIICfTCCAeagAwIBAgIEAgAAuDANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQGEwJJ -RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSkwJwYD -VQQDEyBCYWx0aW1vcmUgQ3liZXJUcnVzdCBNb2JpbGUgUm9vdDAeFw0wMDA1MTIx -ODIwMDBaFw0yMDA1MTIyMzU5MDBaMGExCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlC -YWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxKTAnBgNVBAMTIEJhbHRpbW9y -ZSBDeWJlclRydXN0IE1vYmlsZSBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB -iQKBgQCjbbE4Vqz8tVYh3sCQXSZHgsZ9jx+ghY8vu9ThHB3yJB8osC+5pKVvoiIg -ZP6ERzx+K2xparjUwJaOjFINzW9B1L8ErqeBLy2YSNLBlKO1GV1dUWT0jkGwm8At -IqBexthaEmO8EUpeJhId4iYF5g9fIh96X3aUrs9aKA6rRdoiMQIDAQABo0IwQDAd -BgNVHQ4EFgQUyeKPwAImWrbAB+N/lAcY2y6lmnAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQEFBQADgYEAUwgLJgl4QnPU7Hp3Rw3j -CzNx764zFE37+v0at1H15JkcBnHXKRnX5hUgUVFGbU/eGEmY0Ph4u3HojQEG1ddk -j5TfR/6ghWk2qS9CemhKEtaLC3BECqQE7yaIwTVxOF0bW0hC8OeUHHCVNKir9avi -eK318FL9m+pCDOjYVL5TZvU= ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ -RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD -VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX -DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y -ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy -VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr -mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr -IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK -mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu -XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy -dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye -jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 -BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 -DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 -9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx -jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 -Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz -ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS -R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV -UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL -EwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJ -BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x -ETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCg -bIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJENySZ -j9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlV -Sn5JTe2io74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCG -SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx -JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI -RFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEw -MjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5 -fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i -+DAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG -SIb3DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN -QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+ -gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6w4pl ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIID2DCCAsACEQDQHkCLAAACfAAAAAIAAAABMA0GCSqGSIb3DQEBBQUAMIGpMQsw -CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp -dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE -CxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDExITAfBgkqhkiG9w0B -CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODEyMDExODE4NTVaFw0wODExMjgx -ODE4NTVaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO -U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0 -IENvLjERMA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDEx -ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBANLGJrbnpT3BxGjVUG9TxW9JEwm4ryxIjRRqoxdf -WvnTLnUv2Chi0ZMv/E3Uq4flCMeZ55I/db3rJbQVwZsZPdJEjdd0IG03Ao9pk1uK -xBmd9LIO/BZsubEFkoPRhSxglD5FVaDZqwgh5mDoO3TymVBRaNADLbGAvqPYUrBE -zUNKcI5YhZXhTizWLUFv1oTnyJhEykfbLCSlaSbPa7gnYsP0yXqSI+0TZ4KuRS5F -5X5yP4WdlGIQ5jyRoa13AOAV7POEgHJ6jm5gl8ckWRA0g1vhpaRptlc1HHhZxtMv -OnNn7pTKBBMFYgZwI7P0fO5F2WQLW0mqpEPOJsREEmy43XkCAwEAATANBgkqhkiG -9w0BAQUFAAOCAQEAojeyP2n714Z5VEkxlTMr89EJFEliYIalsBHiUMIdBlc+Legz -ZL6bqq1fG03UmZWii5rJYnK1aerZWKs17RWiQ9a2vAd5ZWRzfdd5ynvVWlHG4VME -lo04z6MXrDlxawHDi1M8Y+nuecDkvpIyZHqzH5eUYr3qsiAVlfuX8ngvYzZAOONG -Dx3drJXK50uQe7FLqdTF65raqtWjlBRGjS0f8zrWkzr2Pnn86Oawde3uPclwx12q -gUtGJRzHbBXjlU4PqjI3lAoXJJIThFjSY28r9+ZbYgsTF7ANUkz+/m9c4pFuHf2k -Ytdo+o56T9II2pPc8JIRetDccpMMc5NihWjQ9A== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV -UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL -EwhEU1RDQSBFMjAeFw05ODEyMDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJ -BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x -ETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQC/ -k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGODVvso -LeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3o -TQPMx7JSxhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCG -SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx -JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI -RFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxOTE3 -MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFB6C -TShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5 -WzAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG -SIb3DQEBBQUAA4GBAEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHR -xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVL -B3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlihw6ID ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIID2DCCAsACEQDQHkCLAAB3bQAAAAEAAAAEMA0GCSqGSIb3DQEBBQUAMIGpMQsw -CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp -dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE -CxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIxITAfBgkqhkiG9w0B -CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODExMzAyMjQ2MTZaFw0wODExMjcy -MjQ2MTZaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO -U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0 -IENvLjERMA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIx -ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBANx18IzAdZaawGIfJvfE4Zrq4FZzW5nNAUSoCLbV -p9oaBBg5kkp4o4HC9Xd6ULRw/5qrxsfKboNPQpj7Jgva3G3WqZlVUmfpKAOS3OWw -BZoPFflrWXJW8vo5/Kpo7g8fEIMv/J36F5bdguPmRX3AS4BEH+0s4IT9kVySVGkl -5WJp3OXuAFK9MwutdQKFp2RQLcUZGTDAJtvJ0/0uma1ZtQtN1EGuhUhDWdy3qOKi -3sOP17ihYqZoUFLkzzGnlIXan0YyF1bl8utmPRL/Q9uY73fPy4GNNLHGUEom0eQ+ -QVCvbK4iNC7Va26Dunm4dmVI2gkpZGMiuftHdoWMhkTLCdsCAwEAATANBgkqhkiG -9w0BAQUFAAOCAQEAtTYOXeFhKFoRZcA/gwN5Tb4opgsHAlKFzfiR0BBstWogWxyQ -2TA8xkieil5k+aFxd+8EJx8H6+Qm93N0yUQYGmbT4EOvkTvRyyzYdFQ6HE3K1GjN -I3wdEJ5F6fYAbqbNGf9PLCmPV03Ed5K+4EwJ+11EhmYhqLkyolbV6YyDfFk/xPEL -553snr2cGA4+wjl5KLcDDQjLxufZATdQEOzMYRZA1K8xdHv8PzGn0EdzMzkbzE5q -10mDEQb+64JYMzJM8FasHpwvVpp7wUocpf1VNs78lk30sPDst2yC7S8xmUJMqbIN -uBVd8d+6ybVK1GSYsyapMMj9puyrliGtf8J4tg== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMC -VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5u -ZXQvQ2xpZW50X0NBX0luZm8vQ1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlh -Yi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV -BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJVUzEU -MBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9D -bGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjEl -MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMq -RW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0G -CSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdvkHvkGf9FozTC28GoT/Bo -6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGpOZ5V+Pux -5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zm -AqTmT173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSC -ARkwggEVMIHkoIHhoIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50 -cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5m -by9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMp -IDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQg -Q2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg -KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNV -HRAEJDAigA8xOTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8E -BAMCAQYwHwYDVR0jBBgwFoAUxPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYE -FMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA -BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K8ddmAwWePvrqHEa7 -pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6hURzz -wy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/a -EkP/TOYGJqibGapEPHayXOw= ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC -VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u -ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc -KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u -ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1 -MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE -ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j -b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF -bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg -U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA -A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/ -I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3 -wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC -AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb -oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5 -BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p -dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk -MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp -b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu -dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0 -MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi -E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa -MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI -hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN -95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd -2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDIzCCAoygAwIBAgIENeHvHjANBgkqhkiG9w0BAQUFADBPMQswCQYDVQQGEwJV -UzEQMA4GA1UEChMHRXF1aWZheDEuMCwGA1UECxMlRXF1aWZheCBQcmVtaXVtIENl -cnRpZmljYXRlIEF1dGhvcml0eTAeFw05ODA4MjQyMjU0MjNaFw0xODA4MjQyMjU0 -MjNaME8xCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFcXVpZmF4MS4wLAYDVQQLEyVF -cXVpZmF4IFByZW1pdW0gQ2VydGlmaWNhdGUgQXV0aG9yaXR5MIGfMA0GCSqGSIb3 -DQEBAQUAA4GNADCBiQKBgQDOoQaOBswIC8GGqN4g1Q0O0Q3En+pq2bPCMkdAb4qI -pAm9OCwd5svmpPM269rrvPxkswf2Lbyqzp8ZSGhK/PWiRX4JEPWPs0lcIwY56hOL -uAvNkR12X9k3oUT7X5DyZ7PNGJlDH3YSawLylYM4Q8L2YjTKyXhdX9LYupr/vhBg -WwIDAQABo4IBCjCCAQYwcQYDVR0fBGowaDBmoGSgYqRgMF4xCzAJBgNVBAYTAlVT -MRAwDgYDVQQKEwdFcXVpZmF4MS4wLAYDVQQLEyVFcXVpZmF4IFByZW1pdW0gQ2Vy -dGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIw -MTgwODI0MjI1NDIzWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUFe6yKFmrbuX4 -z4uB9CThrj91G5gwHQYDVR0OBBYEFBXusihZq27l+M+LgfQk4a4/dRuYMAwGA1Ud -EwQFMAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEB -BQUAA4GBAL0LnCepA9so3JipS9DRjqeoGlqR4Jzx9xh8LiKeNh/JqLXNRkpu+jUH -G4YI65/iqPmdQS06rlxctl80BOv8KmCw+3TkhellOJbuFcfGd2MSvYpoH6tsfdrK -XBPO6snrCVzFc+cSAdXZUwee4A+W8Iu0u0VIn4bFGVWgy5bFA/xI ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV -UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy -dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 -MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx -dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f -BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A -cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC -AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ -MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm -aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw -ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj -IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF -MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA -A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y -7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh -1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT -ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw -MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj -dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l -c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC -UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc -58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/ -o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH -MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr -aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA -A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA -Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv -8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT -ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw -MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j -LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ -KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo -RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu -WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw -Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD -AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK -eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM -zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+ -WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN -/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj -dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0 -NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD -VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G -vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/ -BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C -AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX -MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl -IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw -NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq -y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF -MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA -A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy -0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1 -E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD -VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv -bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv -b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV -UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU -cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds -b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH -iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS -r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4 -04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r -GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9 -3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P -lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDtjCCAp6gAwIBAgICAbYwDQYJKoZIhvcNAQEFBQAwcDELMAkGA1UEBhMCVVMx -GDAWBgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1 -c3QgU29sdXRpb25zLCBJbmMuMR4wHAYDVQQDExVHVEUgQ3liZXJUcnVzdCBSb290 -IDUwHhcNOTgwODE0MTQ1MDAwWhcNMTMwODE0MjM1OTAwWjBwMQswCQYDVQQGEwJV -UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU -cnVzdCBTb2x1dGlvbnMsIEluYy4xHjAcBgNVBAMTFUdURSBDeWJlclRydXN0IFJv -b3QgNTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALwSbj+KfHqXAewe -uzlaAvR4RKJIG457SVJ6uHtHs6+Um2+7lvoramVcuByUc76/iQoigO5X/IwFu3Cf -lzkE2qOHXKjlyq/AM5rVN1xLrOSA0KYjYPv9ci6UncfOwgQy73hgXe2thw9FZR48 -mgqavl0dmezn8tHGehfZrZtUln/EfGC/haoVNR1A2hG87FQhKC0joajwzy3N3fx+ -D17hZQdWywe00lboXjHMGGPEhtIthc+Tkqtt/mg5+95zvYb45EZ66p8My/QZ/mO8 -0Sx7iDM29uThnAxTgWAc2i6rlqkWiBNQmbK9Vd8VMH7o5Zj7cH5stQf8/Ea30O03 -ln4y/iECAwEAAaNaMFgwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMC -AQYwFwYDVR0gBBAwDjAMBgoqhkiG+GMBAgEDMBkGA1UdDgQSBBB2CkkhOEyf3vjE -ScdxcZGdMA0GCSqGSIb3DQEBBQUAA4IBAQBBOtQYW9q43iEc4Y4J5fFoNP/elvQH -9ac886xKsZv6kvqb7eYyIapKdsXcTzjl39WG5NXIdn2Y17HNj021kSNsi4rr6nzv -FJTExvAfSi0ycWMrY5EmAgm2gB3t4sy4f9uHY8jh0GwmsTUdQGYQG82VVBgzYewT -T9oT95mvPtDPjqZyorPDBZrJJ32SzH5SjbOrcG2eiZ9N6xp1wpiq1QIW1wyKvyXk -6y28mOlYOBl8uTf+2+KZCHMGx5eDan0QAS8yuRcFSmXmL86+XlOmgumaUwqEdC2D -ysiUFnZflGEo8IWnObvXi9moshMdVAk0JH0ggX1mfqKQdFwQxr3sqxvC ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDnjCCAoagAwIBAgILAgAAAAAA1ni50a8wDQYJKoZIhvcNAQEEBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05OTAxMjgxMjAw -MDBaFw0wOTAxMjgxMjAwMDBaMF8xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMRQwEgYDVQQLEwtQYXJ0bmVycyBDQTEfMB0GA1UEAxMWR2xv -YmFsU2lnbiBQYXJ0bmVycyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBANIs+DKsShJ6N8gpkaWujG4eDsA0M4jlM3EWHHiEaMMYNFAuFj6xlIJPsZqf -APjGETXGaXuYAq0ABohs50wzKACIJ0Yfh7NxdWO8MruI3mYYDlAGk7T2vBQ3MD0i -3z3/dX7ZChrFn7P80KyzCHqJ0wHoAFznSgs9TXsmordiBovaRt2TFz8/WwJLC7aI -IBGSAK27xy7U40Wu9YlafI2krYVkMsAnjMbyioCShiRWWY10aKKDQrOePVBBhm8g -bvb9ztMZ4zLMj+2aXm0fKPVSrG4YXvg90ZLlumwBiEsK8i3eZTMFQqBMqjF2vv2/ -gXj5cRxGXi0VlS0wWY5MQdFiqz0CAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgAGMB0G -A1UdDgQWBBRDJI1wFQhiVZxPDEAXXYZeD6JM+zAfBgNVHSMEGDAWgBRge2YaRQ2X -yolQL30EzTSo//z9SzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBAUAA4IB -AQBm7bSIaRGZgiGDrKFti5uErQ8tyB6Mynt+rarUjt4H1p5Fx6W4nAc5YCVVGsBP -GeXPFylJiRg1ZuXrKEBOV8mvs+S4IAWjO5VQkUmUKX0s5YhBpUWIXp2CJ/fS71u1 -T5++/jVlLFVkn+FR2iJhd7pYTo/GeVlZbjCAok+QbiELrdBoOZAQm+0iZW8eETjm -f4zS8zltR9Uh6Op1OkHRrfYWnV0LIb3zH2MGJR3BHzVxLOsgGdXBsOw95W/tAgc/ -E3tmktZEwZj3X1CLelvCb22w0fjldKBAN6MlD+Q9ymQxk5BcMHu5OTGaXkzNuUFP -UOQ9OK7IZtnHO11RR6ybq/Kt ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDrDCCApSgAwIBAgILAgAAAAAA1ni4N88wDQYJKoZIhvcNAQEEBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MTUxMjAw -MDBaFw0wOTAxMjgxMjAwMDBaMG0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMRswGQYDVQQLExJQcmltYXJ5IENsYXNzIDEgQ0ExJjAkBgNV -BAMTHUdsb2JhbFNpZ24gUHJpbWFyeSBDbGFzcyAxIENBMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAvSA1R9Eo1gijEjkjRw29cCFSDlcxlaY0V2vsfkN5 -wwZSSM28taGZvdgfMrzP125ybS53IpCCTkuPmgwBQprZcFm2nR/mY9EMrR1O+IWB -+a7vn6ZSYUR5GnVF4GFWRW1CjD1yy6akErea9dZg0GBQs46mpuy09BLNf6jO77Ph -hTD+csTm53eznlhB1lGDiAfGtmlPNt7RC0g/vdafIXRkbycGPkv9Dqabv6RIV4yQ -7okYCwKBGL5n/lNgiCe6o3M0S1pWtN5zBe2Yll3sSudA/EsJYuvQ4zFPhdF6q1ln -K/uID+uqg701/WEn7GYOQlf3acIM7/xqwm5J2o9BOK5IqQIDAQABo2MwYTAOBgNV -HQ8BAf8EBAMCAAYwHQYDVR0OBBYEFPzgZvZaNZnrQB7SuB5DvJiOH4rDMB8GA1Ud -IwQYMBaAFGB7ZhpFDZfKiVAvfQTNNKj//P1LMA8GA1UdEwEB/wQFMAMBAf8wDQYJ -KoZIhvcNAQEEBQADggEBAJujCETO8pCdcfMyswVqterPKZjeVT6gFn0GekTWr9L6 -E1iM+BzHqx20G+9paJhcCDmP4Pf7SMwh57gz2wWqNCRsSuXpe2Deg7MfCr5BdfzM -MEi3wSYdBDOqtnjtKsu6VpcybvcxlS5G8hTuJ8f3Yom5XFrTOIpk9Te08bM0ctXV -IT1L13iT1zFmNR6j2EdJbxyt4YB/+JgkbHOsDsIadwKjJge3x2tdvILVKkgdY89Q -Mqb7HBhHFQpbDFw4JJoEmKgISF98NIdjqy2NTAB3lBt2uvUWGKMVry+U9ikAdsEV -F9PpN0121MtLKVkkrNpKoOpj3l9Usfrz0UXLxWS0cyE= ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDrDCCApSgAwIBAgILAgAAAAAA1ni4jY0wDQYJKoZIhvcNAQEEBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05OTAxMjgxMjAw -MDBaFw0wOTAxMjgxMjAwMDBaMG0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMRswGQYDVQQLExJQcmltYXJ5IENsYXNzIDIgQ0ExJjAkBgNV -BAMTHUdsb2JhbFNpZ24gUHJpbWFyeSBDbGFzcyAyIENBMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAkoz+7/RFjhdBbvzYvyFvqwadUsEsAJ0/joW4f0qP -vaBjKspJJ65agvR04lWS/8LRqnmitvrVnYIET8ayxl5jpzq62O7rim+ftrsoQcAi -+05IGgaS17/Xz7nZvThPOw1EblVB/vwJ29i/844h8egStfYTpdPGTJMisAL/7h0M -xKhrT3VoVujcKBJQ96gknS4kOfsJBd7lo2RJIdBofnEwkbFg4Dn0UPh6TZgAa3x5 -uk7OSuK6Nh23xTYVlZxkQupfxLr1QAW+4TpZvYSnGbjeTVNQzgfR0lHT7w2BbObn -bctdfD98zOxPgycl/3BQ9oNZdYQGZlgs3omNAKZJ+aVDdwIDAQABo2MwYTAOBgNV -HQ8BAf8EBAMCAAYwHQYDVR0OBBYEFHznsrEs3rGna+l2DOGj/U5sx7n2MB8GA1Ud -IwQYMBaAFGB7ZhpFDZfKiVAvfQTNNKj//P1LMA8GA1UdEwEB/wQFMAMBAf8wDQYJ -KoZIhvcNAQEEBQADggEBAGPdWc6KeaqYnU7FiWQ3foqTZy8Q6m8nw413bfJcVpQZ -GmlgMEZdj/JtRTyONZd8L7hR4uiJvYjPJxwINFyIwWgk25GF5M/7+0ON6CUBG8QO -9wBCSIYfJAhYWoyN8mtHLGiRsWlC/Q2NySbmkoamZG6Sxc4+PH1x4yOkq8fVqKnf -gqc76IbVw08Y40TQ4NzzxWgu/qUvBYTIfkdCU2uHSv4y/14+cIy3qBXMF8L/RuzQ -7C20bhIoqflA6evUZpdTqWlVwKmqsi7N0Wn0vvi7fGnuVKbbnvtapj7+mu+UUUt1 -7tjU4ZrxAlYTiQ6nQouWi4UMG4W+Jq6rppm8IvFz30I= ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDrDCCApSgAwIBAgILAgAAAAAA1ni41sMwDQYJKoZIhvcNAQEEBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05OTAxMjgxMjAw -MDBaFw0wOTAxMjgxMjAwMDBaMG0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMRswGQYDVQQLExJQcmltYXJ5IENsYXNzIDMgQ0ExJjAkBgNV -BAMTHUdsb2JhbFNpZ24gUHJpbWFyeSBDbGFzcyAzIENBMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAkV5WZdbAwAScv0fEXHt6MQH5WJaZ4xyEL9xWj631 -WYHVQ2ZdWpOMdcqp5xHBURAUYMks1HuvxneGq3onrm+VuQvKtkb7fhr0DRRt0slO -sq7wVPZcQEw2SHToVIxlZhCnvSu3II0FSa14fdIkI1Dj8LR5mwE5/6870y3u4UmN -jS88akFFL5vjPeES5JF1ns+gPjySgW+KLhjc4PKMjP2H2Qf0QJTJTk9D32dWb70D -UHyZZ6S5PJFsAm6E1vxG98xvGD4X8O8LZBZX5qyG8UiqQ8HJJ3hzREXihX26/7Ph -+xsFpEs7mRIlAVAUaq9d6sgM7uTa7EuLXGgTldzDtTA61wIDAQABo2MwYTAOBgNV -HQ8BAf8EBAMCAAYwHQYDVR0OBBYEFMw2zBe0RZEv7c87MEh3+7UUmb7jMB8GA1Ud -IwQYMBaAFGB7ZhpFDZfKiVAvfQTNNKj//P1LMA8GA1UdEwEB/wQFMAMBAf8wDQYJ -KoZIhvcNAQEEBQADggEBAFeyVMy9lRdkYIm2U5EMRZLDPahsw8yyGPV4QXTYfaMn -r3cNWT6UHWn6idMMvRoB9D/o4Hcagiha5mLXt+M2yQ6feuPC08xZiQzvFovwNnci -yqS2t8FCZwFAY8znOGSHWxSWZnstFO69SW3/d9DiTlvTgMJND8q4nYGXpzRux+Oc -SOW0qkX19mVMSPISwtKTjMIVJPMrUv/jCK64btYsEs85yxIq56l7X5g9o+HMpmOJ -XH0xdfnV1l3y0NQ9355xqA7c5CCXeOZ/U6QNUU+OOwOuow1aTcN55zVYcELJXqFe -tNkio0RTNaTQz3OAxc+fVph2+RRMd4eCydx+XTTVNnU= ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILAgAAAAAA1ni3lAUwDQYJKoZIhvcNAQEEBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw -MDBaFw0xNDAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT -aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ -jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp -xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp -1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG -snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ -U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 -9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIABjAdBgNVHQ4EFgQU -YHtmGkUNl8qJUC99BM00qP/8/UswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B -AQQFAAOCAQEArqqf/LfSyx9fOSkoGJ40yWxPbxrwZKJwSk8ThptgKJ7ogUmYfQq7 -5bCdPTbbjwVR/wkxKh/diXeeDy5slQTthsu0AD+EAk2AaioteAuubyuig0SDH81Q -gkwkr733pbTIWg/050deSY43lv6aiAU62cDbKYfmGZZHpzqmjIs8d/5GY6dT2iHR -rH5Jokvmw2dZL7OKDrssvamqQnw1wdh/1acxOk5jQzmvCLBhNIzTmKlDNPYPhyk7 -ncJWWJh3w/cbrPad+D6qp1RF8PX51TFl/mtYnHGzHtdS6jIX/EBgHcl5JLL2bP2o -Zg6C3ZjL2sJETy6ge/L3ayx2EYRGinij4w== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD -VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT -ZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBlcnNvbmFsIEJhc2lj -IENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0aGF3dGUuY29tMB4X -DTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpBMRUw -EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE -ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy -dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBD -QTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzAN -BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53 -dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdK -wPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7 -G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF -AAOBgQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7 -c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P -9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD -VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT -ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt -YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu -Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT -AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa -MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp -b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG -cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh -d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY -DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E -rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq -uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN -BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP -MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa -/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei -gQ== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD -VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT -ZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBlcnNvbmFsIFByZW1p -dW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1pdW1AdGhhd3RlLmNv -bTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQGEwJa -QTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY -BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u -IFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJl -bWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUu -Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0Vs -Bd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWI -Et12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYD -ZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG -SIb3DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH -b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBh -KXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1KzGJ ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD -VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy -dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t -MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB -MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG -A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp -b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl -cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv -bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE -VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ -ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR -uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG -9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI -hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM -pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD -VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm -MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx -MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT -DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3 -dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl -cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3 -DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD -gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91 -yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX -L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj -EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG -7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e -QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ -qdq5snUb9kLy78fyGPmJvKP/iiMucEc= ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIRIjCCCQoCAQAwDQYJKoZIhvcNAQEFBQAwVzEPMA0GA1UEChMGVGhhd3RlMSEw -HwYDVQQLExhUaGF3dGUgVW5pdmVyc2FsIENBIFJvb3QxITAfBgNVBAMTGFRoYXd0 -ZSBVbml2ZXJzYWwgQ0EgUm9vdDAeFw05OTEyMDUxMzU2MDVaFw0zNzA0MDMxMzU2 -MDVaMFcxDzANBgNVBAoTBlRoYXd0ZTEhMB8GA1UECxMYVGhhd3RlIFVuaXZlcnNh -bCBDQSBSb290MSEwHwYDVQQDExhUaGF3dGUgVW5pdmVyc2FsIENBIFJvb3Qwgggi -MA0GCSqGSIb3DQEBAQUAA4IIDwAwgggKAoIIAQDiiQVtw3+tpok6/7vHzZ03seHS -IR6bYSoV53tXT1U80Lv52T0+przstK1TmhYC6wty/Yryj0QFxevT5b22RDnm+0e/ -ap4KlRjiaOLWltYhrYj99Rf109pCpZDtKZWWdTrah6HU9dOH3gVipuNmdJLPpby7 -32j/cXVWQVk16zNaZlHy0qMKwYzOc1wRby2MlYyRsf3P5a1WlcyFkoOQVUHJwnft -+aN0QgpoCPPQ0WX9Zyw0/yR/53nIBzslV92kDJg9vuDMGWXb8lSir0LUneKuhCMl -CTMStWoedsSL2UkAbF66H/Ib2mfKJ6qjRCMbg4LO8qsz7VSk3MmrWWXROA7BPhtn -j9Z1AeBVIt12d+yO3fTPeSJtuVcD9ZkIpzw+NPvEF64jWM0k8yPKagIolAGBNLRs -a66LGsOj0gk8FlT1Nl8k459KoeJkxhbDpoF6JDZHjsFeDvv5FXgE1g5Z2Z1YZmLS -lCkyMsh4uWb2tVbhbMYUS5ZSWZECJGpVR9c/tiMaYHeXLuJAr54EV56tEcXJQ3Dv -SLRerBxpLi6C1VuLvoK+GRRe5w0ix1Eb/x6b8TCPcTEGszQnj196ZoJPii0Tq0LP -IVael45mNg+Wm+Ur9AKpKmqMLMTDuHAsLSkeP1B3Hm0qVORVCpE4ocW1ZqJ2Wu4P -v7Rn4ShuD+E2oYLRv9R34cRnMpN4yOdUU/4jeeZozCaQ9hBjXSpvkS2kczJRIfK7 -Fd+qJAhIBt6hnia/uoO/fKTIoIy90v+8hGknEyQYxEUYIyZeGBTKLoiHYqNT5iG3 -uIV7moW7FSZy+Ln3anQPST+SvqkFt5knv78JF0uZTK0REHzfdDH2jyZfqoiuOFfI -VS3T+9gbUZm+JRs6usB9G+3O0km5z/PFfYmQgdhpSCAQo/jvklEYMosRGMA/G4VW -zlfJ8oJkxt8CCS5KES+xJ203UvDwFmHxZ43fh3Kvh9rP+1CUbtSUheuKLOoh9ZZK -RNXgzmp0RE3QBdOHFe020KSLZlVwk+5HBsF+LqUYeWfzKIXxcPcOg6R+VJ5adjLL -ZRu4zfvIKAPSVJHRp8WFQwgXdqXmL2cI2KGigi0M+MGvY9RQd21rRkpBhdWQX3kt -xOzXEYdAiuFo4mT4VTL7b5Ms2nfZIcEX5TYsTn6Qf6yUKzJnvjhQdriuQbnXIcUJ -TGDIo1HENJtXN9/LyTNXi+v7dp8ZTcVqHypFrivtL42npQDLBPolYi50SBvKKoy6 -27Z+9rsCfKnD21h4ob/w/hoQVRHO6GlOlmXGFwPWB2iMVIKuHCJVP/H0CZcowEb3 -TgslHfcH1wkdOhhXODvoMwbnj3hGHlv1BrbsuKYN8boTS9YYIN1pM0ozFa64yJiK -JyyTvC377jO/ZuZNurabBlVgl0u8RM1+9KHYqi/AAighFmJ42whU8vz0NOPGjxxD -V86QGkvcLjsokYk/eto1HY4s7kns9DOtyVOojJ8EUz4kHFLJEvliV6O87izrQHwg -I3ArlflzF4rRwRxpprc4mmf3cB16WgxAz2IPhTzCAk5+tfbFKimEsx83KuGqckLE -7Wsaj5IcXb7R8lvyq6qp0vW4pEErK5FuEkjKmNg3jcjtADC1tgROfpzahOzA+nvl -HYikU0awlORcG6ElLA9IUneXCWzsWxgzgwLlgn7NhSEwEf0nT8/kHuw/pVds6Sow -GSqI5cNpOKtvOXF/hOFBw+HMKokgUi6DD2w5P0stFqwt8CSsAHP0m7MGPwW4FIUf -q55cPJ5inQ5tO4AJ/ALqopd0ysf541bhw8qlpprAkOAkElPSwovavu0CQ15n4YmY -ee7LqsrDG9znpUalfGsWh7ZaKNfbJzxepb22Ud0fQ887Jsg6jSVhwUn0PBvJROqv -HMIrlAEqDjDRW4srR+XD0QQDmw45LNYn1OZwWtl1zyrYyQAF5BOI7MM5+4dhMDZD -A8ienKIGwi/F/PCAY7FUBKBMqS7G9XZ62NDk1JQR5RW1eAbcuICPmakgMz0QhUxl -Cco+WF5gk5qqYl3AUQYcXWCgDZxLQ/anFiGkh6rywS7ukjC4nt/fEAGLhglw2Gyo -t1AeFpa092f9NTohkCoyxwB7TQcQCbkvc9gYfmeZBE8G/FDHhZudQJ2zljf6pdyy -ck7vTgks/ZH9Tfe7pqE+q3uiA0CmqVUn4vr5Gc6HdarxdTbz87iR+JHDi3UTjkxl -mhY5auU06HqWWX81sAD9W2n8Qyb69Shu/ofZfiT7tKCCblSi/66/YrT0cgHCy5hH -mOFMtReAgM6PpijuHkVq+9/xHfxaO9bq9GwdYklXO4qPhurwUwTOnBZo/7q5/IgP -R/cCRHJAuMo7LVOd3DxWjFl7aBosjXG7bADHGs5vQJKxoy8P2UTyo3Aunu4OrjLQ -Oz6LB+rmebNcKeJ9a6he+Vox6AiWoowDmEbxuH2QVCbtdmL+numabl7JScdcNFMp -VNns5EbhgDt12d/7edWH8bqe6xnOTFJz5luHriVPOXnMxrj5EHvs8JtxpAWg0ynT -Tn8f9C0oeMxVlXsekS/MVhhzi7LbvGkH5tDYT+2i/1iFo23gSlO3Z32NDFxbe3co -AjVEegTTKEPIazAXXTK4KTW6dto7FEp2GFik+JI8nk0zb0ZrCNkxSGjd9PskVjSy -z2lmvkjSimYizfJpzcJTE0UpQSLWXZgftqSyo8LuAi9RG9yDpOxwJajUCGEyb+Sh -gS58Y3L6KWW8cETPXQIDAQABMA0GCSqGSIb3DQEBBQUAA4IIAQBVmjRqIgZpCUUz -x66pXMcJTpuGvEGQ1JRS9s0jKZRLIs3ovf6dzVLyve2rh8mrq0YEtL2iPyIwR1DA -S4x2DwP1ktKxLcR6NZzJc4frpp/eD3ON03+Z2LqPb8Tzvhqui6KUNpDi5euNBfT8 -Zd+V8cSUTRdW1588j1A853e/lYYmZPtq/8ba6YyuQrtp5TPG2OkNxlUhScEMtKP5 -m0tc3oNPQQPOKnloOH3wVEkg9bYQ/wjcM2aWm/8G3gCe185WQ5pR/HDN9vBRo7fN -tFyFYs1xt8YrIyvdw25AQvo3/zcc9npXlIeFI9fUycdfwU0vyQ3XXOycJe6eMIKR -lnK4dR34CWhXl7ItS+4l7HokKe5y1JwT26vcAwrYShTJCFdEXaG1U4A08hSXz1Le -og6KEOkU79BgvmGh8SVd1RhzP5MQypbus0DS26NVz1dapQ5PdUff6veQmm31cC4d -FBw3ZARZULDccoZvnDc9XSivc1Xv0u4kdHQT79zbMUn7P2P10wg+M6XnnQreUyxR -jmfbm0FlQVC91KSWbIe8EuCUx9PA5MtzWACD4awnhdadU51cvQo+A0OcDJH1bXv4 -QHJ1qxF2kSvhxqofcGl2cBUJ/pPQ1i23FWqbZ1y0aZ8lpn2K+30iqXHyzk6MuCEt -3v5BcQ3/nexzprsHT4gOWEcufqnCx3jdunqeTuAwTmNvhdQgQen6/kNF5/uverLO -pAUdIppYht/kzkyp/tgWpW/72M5We/XWIO/kR81jJP+5vvFIo8EBcua9wK3tJg3K -NJ/8Ai0gTwUgriE9DMIgPD/wBITcz4n9uSWRjtBD5rMgq1wt1UCeoEvY9LLMffFY -Co6H7YisNpbkVqARivKa0LNXozS7Gas44XRrIsQxzgHVGzbjHjhMM5PfQONZV06s -bnseWj3FHVusyBCCNQIisvx16BCRjcR9eJNHnhydrGtiAliM1hwj1q94woCcpKok -VBS1FJjG+CsaJMtxMgrimw5pa91+jGTRLmPvDn+xPohMnVXlyW4XBLdB/72KQcsl -MW9Edz9HsfyBiAeOBUkgtxHZaQMqA525M4Sa399640Zzo9iijFMZiFVMdLj2RIQr -0RQtTjkukmj/afyFYhvrVU/vJYRiRZnW2E5vP1MIfR0GlYGAf09OdDaYteKHcJjc -1/XcUhXmxtZ5ljl/j5XPq4BTrRsLRUAO1Bi9LN6Kd3b98kRHxiHQ5HTw2BgFyHww -csff8bv8AjCp9EImWQ2TBYKhc+005ThdzVCQ/pT8E7y9/KiiiKdzxLKo0V2IxAKi -evEEyf6MdMnvHWRBn6welmdkrKsoQced98CYG24HwmR9WoNmVig2nOf7HHcOKKDE -92t5OQQghMdXk7wboOq860LlqBH+/KxlzP34KIj0pZrlc1HgqJsNA3dO5eCYs4ja -febGnnwUZsEuU0qSBzegfuk9CeQVfM/9uEGl755mncReBx2H+EGt6ucv0kFjGDf5 -FONN0OX3Q/0V4/k2cwYm3wFPqcNO3iBGd5i0eiQrO3UrTliNm12kxxagvDKIP6GD -8wDI+NhY6WNdTCu18HJB2Kt3N9ZydK62NpzIpoNJS+DJVgspvgAwy93WyEKKANns -FdE0cfJbZIf2J9K364awkL8p2yGeNozjIC+VI1FsG8Kk1ebYAkNnoP6bUANEf7vk -ctXR5NqPkhRk+10UEBJKlQbJZQgpyiGjJjgRySffcGcE/cpIMn9jskV0MVBPh9kg -cNIhcLHWEJ0zXXiDkW1Vguza5GJjx4FG1xllcipDGZC41yNNTBzgRKlmZ6zucXkn -Jnhtcg71XUsjtXx8ZekXxjoLDd1eHlHDhrjsf8cnSqVG6GotGcGHo8uZk4dkolUU -TLdDpZPX59JOeUDKZZlGPT96gHqIaswe5WszRvRQwNUfCbjNii6hJ+tdc6foawrl -V4IqsPziVFJW8KupEsYjlgcknOC8RqW0IATaCZNj5dQuwn7FMe21FXSGF7mz8yaK -HQJq2ho/6LrxBG2UUVTiWrRZgx1g0C1zzAe1Joz518aIke+Az10PoWDLRdRCItGx -cB390LcwkDrGSG1n5TLaj9vjqOMdICWiHOFMuaT2xj9cWA27xrJ3ARaRnxcGDbdA -PsyPjpxL4J1+mx4Fq4gi+tMoG1cUZEo+JCw4TSFpAHMu0FUtdPIV6JRDPkAqxsa5 -alveoswYUFRdTiqFbPaSiykZfufqSuAiKyW892bPd5pBdPI8FA10afVQg83NLyHb -IkaK0PdRGpVX8gWLGhntO0XoNsJufvtXIgAfBlOprpPGj3EqMUWS545t5pkiwIP8 -79xXZndPojYx+6ETjeXKo5V9AQxkcDtTQmiAx7udqAA1aZgMqGfYQ+Wqz5XgUZWk -Fz9CnbgEztN5ecjTihYykuDXou7XN0wvrLh7vkX28RgznHs3piTZvECrAOnDN4ur -2LbzXoFOsBRrBz4f7ML2RCKVu7Pmb9b5cGW6CoNlqg4TL4MTI1OLQBb6zi/8TQT4 -69isxTbCFVdIOOxVs7Qeuq3SQgYXDXPIV6a+lk2p8sD7eiEc9clwqYKQtfEM1HkQ -voGm6VxhnHd5mqTDNyZXN8lSLPoI/9BfxmHA9Ha+/N5Oz6tRmXHH33701s8GVhkT -UwttdFlIGZtTBS2dMlTT5SxTi2Q+1GR744AJFMz+FkZja3Fp+PnLJ/aIVLxFs84C -yJTuQFv5QgLC/7DYLOsof17JJgGZpw== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy -NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y -LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+ -TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y -TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0 -LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW -I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw -nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy -NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY -dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9 -WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS -v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v -UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu -IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC -W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy -NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD -cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs -2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY -JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE -Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ -n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A -PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh -c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05 -NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD -VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJp -bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB -jQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0N -H8xlbgyw0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR -4k5FVmkfeAKA2txHkSm7NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATAN -BgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZo -EWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5 -FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89Fx -lA== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh -c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy -MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp -emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X -DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw -FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg -UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo -YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 -MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB -AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK -VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm -Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID -AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J -h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul -uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68 -DzFc6PLZ ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4 -nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO -8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV -ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb -PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2 -6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr -n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a -qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4 -wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3 -ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs -pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4 -E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz -cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 -MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV -BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN -ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh -YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7 -FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G -CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg -J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc -r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns -YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH -MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y -aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe -Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX -MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj -IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx -KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s -eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM -HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw -DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC -AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji -nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX -rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn -jBJ7xUS0rg== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy -aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s -IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp -Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV -BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp -Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu -Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g -Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt -IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU -J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO -JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY -wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o -koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN -qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E -Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe -xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u -7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU -sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI -sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP -cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz -cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 -MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV -BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN -ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE -BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is -I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G -CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do -lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc -AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh -c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy -MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp -emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X -DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw -FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg -UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo -YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 -MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB -AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4 -pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0 -13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID -AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk -U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i -F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY -oJ2daZH9 ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b -N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t -KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu -kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm -CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ -Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu -imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te -2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe -DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC -/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p -F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt -TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh -c3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy -MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp -emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X -DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw -FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMg -UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo -YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 -MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB -AQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDM -HO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtK -qsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwID -AQABMA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwj -cSGIL4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y -cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRP -T8qAkbYp ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1 -GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ -+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd -U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm -NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY -ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ -ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1 -CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq -g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm -fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c -2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/ -bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkG -A1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD -VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0 -MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVowXzELMAkGA1UEBhMCVVMxIDAeBgNV -BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2Vy -dmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUAA4GJ -ADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII -0haGN1XpsSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphI -uR2nKRoTLkoRWZweFdVJVCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZI -hvcNAQECBQADfgBl3X7hsuyw4jrg7HFGmhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3 -YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2qUtN8iD3zV9/ZHuO3ABc -1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM -MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD -QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM -MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD -QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E -jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo -ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI -ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu -Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg -AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7 -HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA -uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa -TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg -xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q -CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x -O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs -6GAqm4VKQPNriiTsBhYscw== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIICjTCCAXWgAwIBAgIDAQAhMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM -MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD -QTAeFw0wMjA3MTIxNjMxNTNaFw0xMjA3MTIxNjMxNTNaMEMxCzAJBgNVBAYTAlBM -MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xFzAVBgNVBAMTDkNlcnR1bSBM -ZXZlbCBJMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCl73pZ9DFcn7Qy0qBZ -K+So18cav7drUrJ8SiYOlDDVskt81+eIcL/4FelTSGjuAOvYdmm+HGYG998RPB0i -Z+Ak67vXFJ537vRWOcu6aMjNuAwu8BOdc5eSgB0Y8X4+3LOYfugtaZa8mrEQ8Hit -0yLE9UBcU9J+4PmkVGecmZ8jZQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0G -CSqGSIb3DQEBBQUAA4IBAQAlDS4aTmgK0YgmUvt/3zN7G2/ZrtBBCtONlUvC69c7 -TmLJWJ842y2AH7ryNXXkcsn6p0ZBTrTJ2tA2y/j2PXJeXrCkK/qAJIpM0l4u0MT7 -enY5akasduHp2NXMP9vDlgMy7elU2s3nkOT79gfh5XttC+5D/x4JDNi1DMAA9hk1 -6DK4zWmDVfjkiP/G3fEndtJgNDQsyqnaQ3E3bljv3f1KJTjZUvtA2Ml6MP2hFRhg -ZPsxuhW8QXidQYNiua1h7XUUiPiERLDLWZmfY6dxGrHXjSTx3shHNaQM0qkDs9gS -6UK8uWJN2bf2YBnvGmzy0IQvx5wDCH7h8AdaBD6DgIG1 ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIICjjCCAXagAwIBAgIDAQAiMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM -MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD -QTAeFw0wMjA3MTIxNjMyMDNaFw0xMjA3MTIxNjMyMDNaMEQxCzAJBgNVBAYTAlBM -MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xGDAWBgNVBAMTD0NlcnR1bSBM -ZXZlbCBJSTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAyMQSaN5fA94hNE46 -bMKpGUb5yIPEowReGZzGttYBQnC6oUOy+iM3md8WerzXeBKf7iIZEDW2HAp7BKhS -4rMB6taxT07vDtkNfEKwOk6X7dODw6KY4mxnzjmjh5pf2feKKJ3MoZxi2HAz2a6J -vHKFMq8dAlGL2GBtLvzlFp2jwkMCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN -BgkqhkiG9w0BAQUFAAOCAQEAWo3wgy+/0B7UiTCu4Wn1rvGRXIUtbPNp4Bc4PP/i -1q6pPheIe0ooCopuqnDX9maTHhZeNpnApgCUSbyw71EaOremD7HjWXASRUTylhwL -5FdSx+D6MgF2uW9uwZ+NErkeRJYT2aRXe5FBOVIseC4g93Ay0D8Hg50MkAC5pQqW -+8GSszT94NzT7ppIaMtq53PZpUtLGiL3UBZ5vUJ5pE4lLKD7Ce+pXzZevy/MnkMG -D1L7LgjRWL17OcMlASFETyUTajNjvxMy+oM4C22rwHRh2WQrvgw5MO+Q3UyYA1r5 -VrSaqgQ1g06ZcQt+mhzoc2swlOSwm8iis8H6orR8xmCWrA== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIICjzCCAXegAwIBAgIDAQAjMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM -MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD -QTAeFw0wMjA3MTIxNjMyMTdaFw0xMjA3MTIxNjMyMTdaMEUxCzAJBgNVBAYTAlBM -MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xGTAXBgNVBAMTEENlcnR1bSBM -ZXZlbCBJSUkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALZjBbfGFmlsLjPe -pWaDwG0LqhF11lWKabaHi1sQhK3qomHY7Em7qpL11dUQ1vsMcnnpzz/J0AEH6KDh -+yAyXV1SE/tVToLYYByZK+JGacLYIYF9aCwV8AhqyzOGurO5QX6vLboXB2WNnwmX -hyNVKUgnUVy4ktAR2qZJIw5Bjsn/AgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8w -DQYJKoZIhvcNAQEFBQADggEBAIsLt3vKCZqd/gui45ovm3FSO6FLjzzq4pagPvbN -nZ39HrhRaCpqkHDAj71L5L27U3eW2D4ILL0iUmZadbC4i3at/PUL9mjhGlajcCN8 -EF6IXGT87Tbcii735jRaaXSbEY4YhNOg9DPBoD4uJMkA8Z0Y/6lYmk4S6KUMCzzt -t5zZBiWjdd08yFi5VGMvpE74KVOMdMa3JNVaR0XvT0Q8yXo1XKCrY9OFIxnhVgDb -hzr9fwjKWDwu8kxhT9khAETm0BU2Buu+CTasaJdT/bBR2YEx9qcN7XyXTeDtkOO5 -QeGSqFgzquwjWEbKhf7l/e+efdRCg+ikH3O5snHB6iS+dgg= ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIICjjCCAXagAwIBAgIDAQAkMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM -MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD -QTAeFw0wMjA3MTIxNjMyMzVaFw0xMjA3MTIxNjMyMzVaMEQxCzAJBgNVBAYTAlBM -MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xGDAWBgNVBAMTD0NlcnR1bSBM -ZXZlbCBJVjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAmyb1lKqCAKE4juAy -6lpVNUl6aJ2DuWPSiJ3BBk3/6ty6I4Lr2Dpy1b1vjVelhaFsVKEDgK2JyQlk9XMq -LPZI2Ql166mJiPKFg77aY/W78EcQfGyjnRvVcs0tG40mAs/p84OEpFcVe/RSqDrD -/D7R01u+Wj5xLl0PUsFplIGDbikCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN -BgkqhkiG9w0BAQUFAAOCAQEAPS99JujKGVRfa50TKfieq+uK1SxjidErYaZTb3cJ -NNfQDYn6nk4lnrnab5EUVhO/NegP2yIu3YOnZGfxFDhvVozMTKKAB5r5XKOvzsP9 -9C9578PVMLozucfUMCSwau7Z4l5uuQOHuzjzlVLCibbbf4RwfvZ7hh5sB5c0pNbw -RQq64RXQUUEvul/W9gUeT9ISHOsASGTq+HJ5i7vNARjukEAXW/maqs9vyTWWbGVI -1FSOnVyteymq4Xk+9YlIyNPNyacgnsMnU72XKBLDS0KJdhIWALFAZI4dSh5WZNuW -ZguUnEmeH81lLbR+p/N3iuN8+oSo8UXik92jxeUY2tQJUA== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDXDCCAsWgAwIBAgICA+owDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF -MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU -QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI -MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAyIENBMSkwJwYJKoZIhvcN -AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla -Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy -ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y -IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1 -c3RDZW50ZXIgQ2xhc3MgMiBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA -dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANo46O0y -AClxgwENv4wB3NrGrTmkqYov1YtcaF9QxmL1Zr3KkSLsqh1R1z2zUbKDTl3LSbDw -TFXlay3HhQswHJJOgtTKAu33b77c4OMUuAVT8pr0VotanoWT0bSCVq5Nu6hLVxa8 -/vhYnvgpjbB7zXjJT6yLZwzxnPv8V5tXXE8NAgMBAAGjazBpMA8GA1UdEwEB/wQF -MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3 -LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G -CSqGSIb3DQEBBAUAA4GBAIRS+yjf/x91AbwBvgRWl2p0QiQxg/lGsQaKic+WLDO/ -jLVfenKhhQbOhvgFjuj5Jcrag4wGrOs2bYWRNAQ29ELw+HkuCkhcq8xRT3h2oNms -Gb0q0WkEKJHKNhAngFdb0lz1wlurZIFjdFH0l7/NEij3TWZ/p/AcASZ4smZHcFFk ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDXDCCAsWgAwIBAgICA+swDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF -MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU -QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI -MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAzIENBMSkwJwYJKoZIhvcN -AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla -Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy -ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y -IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1 -c3RDZW50ZXIgQ2xhc3MgMyBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA -dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALa0wTUF -Lg2N7KBAahwOJ6ZQkmtQGwfeLud2zODa/ISoXoxjaitN2U4CdhHBC/KNecoAtvGw -Dtf7pBc9r6tpepYnv68zoZoqWarEtTcI8hKlMbZD9TKWcSgoq40oht+77uMMfTDW -w1Krj10nnGvAo+cFa1dJRLNu6mTP0o56UHd3AgMBAAGjazBpMA8GA1UdEwEB/wQF -MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3 -LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G -CSqGSIb3DQEBBAUAA4GBABY9xs3Bu4VxhUafPiCPUSiZ7C1FIWMjWwS7TJC4iJIE -Tb19AaM/9uzO8d7+feXhPrvGq14L3T2WxMup1Pkm5gZOngylerpuw3yCGdHHsbHD -2w2Om0B8NwvxXej9H5CIpQ5ON2QhqE6NtJ/x3kit1VYYUimLRzQSCdS7kjXvD9s0 ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIG2jCCBcKgAwIBAgIDFc/9MA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJE -RTEhMB8GA1UEChMYRGV1dHNjaGVzIEZvcnNjaHVuZ3NuZXR6MRYwFAYDVQQLEw1E -Rk4tQ0VSVCBHbWJIMRAwDgYDVQQLEwdERk4tUENBMS0wKwYDVQQDEyRERk4gVG9w -bGV2ZWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEmNl -cnRpZnlAcGNhLmRmbi5kZTAeFw0wMTEyMDExMjExMTZaFw0xMDAxMzExMjExMTZa -MIGsMQswCQYDVQQGEwJERTEhMB8GA1UEChMYRGV1dHNjaGVzIEZvcnNjaHVuZ3Nu -ZXR6MRYwFAYDVQQLEw1ERk4tQ0VSVCBHbWJIMRAwDgYDVQQLEwdERk4tUENBMS0w -KwYDVQQDEyRERk4gVG9wbGV2ZWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxITAf -BgkqhkiG9w0BCQEWEmNlcnRpZnlAcGNhLmRmbi5kZTCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAMF5rhMt6zmhxK5oWPwT2FG7Up7T5DovHSD/YKPIRxsv -DWmC4dTzByIBLnOmEflk+5KAqAYao6eY1qF0hR4WiS4DjCsn7l3zNo/4i2eF4EmG -EksBygb4tRlTThcO7heFX+Du5qFoks+ONqa70RlwOr2l53KVwjMXBCtCLFSKRLVu -xeh5+Smkm+FuOmwEugndM2n74Djjyf9DCOaHGZrHwVDh+Vpy5Ny4bKCSboujRxd5 -NxsStUshDVbTeS3B8TuzAJbywYWEE7erox+7WTfQr8ivSCBhrNJ36VRjAb8hiV9I -uy2TmJYo2oPyC8a3eM3xj9Ku2IW3tS2zpfiIzt9xvFMCAwEAAaOCAwEwggL9MA8G -A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFAYL+rX4SHijILELPs+g0MTRf33QMIHb -BgNVHSMEgdMwgdCAFAYL+rX4SHijILELPs+g0MTRf33QoYGypIGvMIGsMQswCQYD -VQQGEwJERTEhMB8GA1UEChMYRGV1dHNjaGVzIEZvcnNjaHVuZ3NuZXR6MRYwFAYD -VQQLEw1ERk4tQ0VSVCBHbWJIMRAwDgYDVQQLEwdERk4tUENBMS0wKwYDVQQDEyRE -Rk4gVG9wbGV2ZWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxITAfBgkqhkiG9w0B -CQEWEmNlcnRpZnlAcGNhLmRmbi5kZYIDFc/9MAsGA1UdDwQEAwIBBjARBglghkgB -hvhCAQEEBAMCAAcwgaUGA1UdHwSBnTCBmjBLoEmgR4ZFaHR0cDovL3d3dy5kZm4t -cGNhLmRlL2NlcnRpZmljYXRpb24veDUwOS9nMS9kYXRhL2NybHMvcm9vdC1jYS1j -cmwuY3J4MEugSaBHhkVodHRwOi8vd3d3LmRmbi1wY2EuZGUvY2VydGlmaWNhdGlv -bi94NTA5L2cxL2RhdGEvY3Jscy9yb290LWNhLWNybC5jcmwwOAYJYIZIAYb4QgED -BCsWKWh0dHBzOi8vd3d3LmRmbi1wY2EuZGUvY2dpL2NoZWNrLXJldi5jZ2k/MEsG -CWCGSAGG+EIBCAQ+FjxodHRwOi8vd3d3LmRmbi1wY2EuZGUvY2VydGlmaWNhdGlv -bi9wb2xpY2llcy94NTA5cG9saWN5Lmh0bWwwOAYJYIZIAYb4QgENBCsWKVRoZSBE -Rk4gVG9wLUxldmVsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MGQGA1UdIARdMFsw -WQYLKwYBBAHZGoIsAQEwSjBIBggrBgEFBQcCARY8aHR0cDovL3d3dy5kZm4tcGNh -LmRlL2NlcnRpZmljYXRpb24vcG9saWNpZXMveDUwOXBvbGljeS5odG1sMA0GCSqG -SIb3DQEBBQUAA4IBAQAmbai6JMt7nkuavyvxKzLGn04Gyt0zKrp8zmERp4inktvY -7p+vkaomYu2QYC7cHq0tlrPXQQhhetjiXGb+36aJtHDkEA0NwrJzYnHgPsvx7z0w -ysENP4wxf97KsSWm07RY+f6/gIQF7Je7CW30Rzq7N6R0NMBs32mJgdn3ntqlFNw3 -Nbs050FEjPNq54RdawlJo85x+w+QJd7uQM4yZjHpRhvwgte9Ge1UqCUdpMsLHzeM -KJ0B9GhwIIqOJCMiPgKjcUBrn6ehSX70POvXvjjE2+FzhPGTyTkS474d2UCAnL9q -hPrdWXzBjOumOjhJutT1aecm9eljlshmh1cNen00 ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCB -ozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3Qt -TmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5WhcNMTkwNzA5MTg1 -NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0 -IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYD -VQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VS -Rmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IB -DwAwggEKAoIBAQCz+5Gh5DZVhawGNFugmliy+LUPBXeDrjKxdpJo7CNKyXY/45y2 -N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4CjDUeJT1FxL+78P/m4FoCH -iZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXuOzr0hARe -YFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1 -axwiP8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6g -yN7igEL66S/ozjIEj3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQD -AgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPh -ahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9V -VE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0GCSqGSIb3DQEB -BQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y -IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6Lzs -QCv4AdRWOOTKRIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4 -ZSfP1FMa8Kxun08FDAOBp4QpxFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qM -YEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAqDbUMo2s/rn9X9R+WfN9v3YIwLGUb -QErNaLly7HF27FSOH4UMAWr6pjisH8SE ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB -kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw -IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG -EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD -VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu -dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN -BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6 -E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ -D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK -4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq -lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW -bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB -o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT -MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js -LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr -BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB -AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft -Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj -j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH -KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv -2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3 -mfnGV/TJVTl4uix5yaaIK/QI ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj -YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM -GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua -BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe -3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 -YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR -rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm -ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU -oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF -MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v -QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t -b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF -AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q -GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 -G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi -l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 -smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp -ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow -fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV -BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM -cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S -HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996 -CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk -3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz -6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV -HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud -EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv -Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw -Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww -DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0 -5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj -Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI -gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ -aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl -izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk= ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0 -aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla -MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO -BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD -VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW -fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt -TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL -fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW -1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7 -kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G -A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v -ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo -dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu -Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/ -HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 -pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS -jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+ -xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn -dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP -MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAx -MDQwNjEwNDkxM1oXDTIxMDQwNjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNV -BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMSBDQTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H887dF+2rDNbS82rDTG -29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9EJUk -oVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk -3w0LBUXl0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBL -qdReLjVQCfOAl/QMF6452F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIIN -nvmLVz5MxxftLItyM19yejhW1ebZrgUaHXVFsculJRwSVzb9IjcCAwEAAaMzMDEw -DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZTiFIwCwYDVR0PBAQDAgEG -MA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE928Jj2VuX -ZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0H -DjxVyhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VO -TzF2nBBhjrZTOqMRvq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2Uv -kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4w -zMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP -MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx -MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV -BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o -Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt -5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s -3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej -vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu -8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw -DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG -MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil -zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/ -3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD -FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6 -Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2 -ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB -lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt -SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG -A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe -MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v -d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh -cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn -0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ -M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a -MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd -oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI -DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy -oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0 -dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy -bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF -BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM -//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli -CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE -CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t -3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS -KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB -kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw -IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG -EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD -VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu -dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN -BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6 -E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ -D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK -4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq -lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW -bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB -o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT -MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js -LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr -BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB -AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft -Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj -j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH -KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv -2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3 -mfnGV/TJVTl4uix5yaaIK/QI ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB -rjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1VU0VSRmlyc3Qt -Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05OTA3MDkxNzI4NTBa -Fw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAV -BgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l -dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UE -AxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3B -YHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9 -hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6l -L8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLm -SGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM -1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws -6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud -DgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJhkdodHRw -Oi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50 -aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH -AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u -7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0 -xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQ -rfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarVNZ1yQAOJujEdxRBoUp7fooXFXAim -eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk -USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ= ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCB -lTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAbBgNVBAMTFFVUTi1VU0VSRmlyc3Qt -T2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAzNlowgZUxCzAJBgNV -BAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAc -BgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3 -dy51c2VydHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicP -HxzfOpuCaDDASmEd8S8O+r5596Uj71VRloTN2+O5bj4x2AogZ8f02b+U60cEPgLO -KqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQw5ujm9M89RKZd7G3CeBo -5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vulBe3/IW+ -pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehb -kkj7RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUC -AwEAAaOBrzCBrDALBgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E -FgQU2u1kdBScFDyr3ZmpvVsoTYs8ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDov -L2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmlyc3QtT2JqZWN0LmNybDApBgNV -HSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQwDQYJKoZIhvcN -AQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw -NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXB -mMiKVl0+7kNOPmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU -4U3GDZlDAQ0Slox4nb9QorFEqmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK5 -81OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCGhU3IfdeLA/5u1fedFqySLKAj5ZyR -Uh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g= ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx -ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0 -b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQD -EytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBDKSBUYW51c2l0dmFueWtpYWRvMB4X -DTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJBgNVBAYTAkhVMREw -DwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9u -c2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMr -TmV0TG9jayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzAN -BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNA -OoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC -2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwW -RMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0P -AQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEW -ggJNRklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0 -YWxhbm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFz -b2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBO -ZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2ZWRpLiBB -IGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0ZWxlIGF6IGVs -b2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs -ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25s -YXBqYW4gYSBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kg -a2VyaGV0byBheiBlbGxlbm9yemVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4g -SU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0 -aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQUyBhdmFpbGFibGUg -YXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwgYXQg -Y3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmY -ta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g -pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4 -Fp1hBWeAyNDYpQcCNJgEjTME1A== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV -MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe -TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0 -dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB -KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0 -N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC -dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu -MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL -b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD -zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi -3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8 -WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY -Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi -NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC -ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4 -QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0 -YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz -aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu -IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm -ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg -ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs -amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv -IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3 -Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6 -ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1 -YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg -dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs -b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G -CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO -xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP -0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ -QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk -f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK -8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx -ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0 -b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD -EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05 -OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G -A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh -Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l -dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG -SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK -gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX -iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc -Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E -BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G -SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu -b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh -bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv -Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln -aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0 -IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh -c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph -biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo -ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP -UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj -YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo -dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA -bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06 -sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa -n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS -NitjrFgBazMpUIaD8QFI ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIICiTCCAfKgAwIBAgIEN4dnrDANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJi -ZTERMA8GA1UEChMIQmVsZ2Fjb20xDDAKBgNVBAsTA01UTTEkMCIGA1UEAxMbQmVs -Z2Fjb20gRS1UcnVzdCBQcmltYXJ5IENBMR8wHQYKCZImiZPyLGQBAxQPaW5mb0Bl -LXRydXN0LmJlMB4XDTk4MTEwNDEzMDQzOVoXDTEwMDEyMTEzMDQzOVowdTELMAkG -A1UEBhMCYmUxETAPBgNVBAoTCEJlbGdhY29tMQwwCgYDVQQLEwNNVE0xJDAiBgNV -BAMTG0JlbGdhY29tIEUtVHJ1c3QgUHJpbWFyeSBDQTEfMB0GCgmSJomT8ixkAQMU -D2luZm9AZS10cnVzdC5iZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAqtm5 -s9VPak3FQdB7BGFqi3GBB9pk41huJ1XCrc4XsPz6ko0I8Bxy/7LDMf7gaoeXTMxD -V6coeTq1g12kHWrxasU+FCIdWQZv8KYxd9ywSTjmywwP/qpyNIjaKDohWu50Kxuk -21sTFrVzX8OujNLAPj2wy/Dsi4YLwsFEGFpjqNUCAwEAAaMmMCQwDwYDVR0TBAgw -BgEB/wIBATARBglghkgBhvhCAQEEBAMCAAcwDQYJKoZIhvcNAQEFBQADgYEAerKx -pbF9M+nC4RvO05OMfwH9Gx1amq6rB1Ev7Ymr3VBCux//SrWknLFhKQpM6oNZSY2v -hmnXgaxHqqRxblnvynxqblSK2qiSyfVms3lf1IsBniFjRjWTpcJfImIDcB1jI+hr -SB0jECfY9t9HorrsgFBKbMRwpnrkdCJ/9oRiMn8= ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB -gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk -MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY -UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx -NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 -dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy -dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 -38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP -KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q -DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 -qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa -JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi -PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P -BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs -jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 -eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD -ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR -vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa -IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy -i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ -O+7ETPTsJ3xCwnR8gooJybQDJbw= ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJE -SzEMMAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEw -ODM5MzBaFw0zNzAyMTEwOTA5MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNU -REMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuHnEz9pPPEXyG9VhDr -2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0zY0s -2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItU -GBxIYXvViGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKj -dGqPqcNiKXEx5TukYBdedObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+r -TpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/ -BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB5DCB4TCB3gYIKoFQgSkB -AQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5kay9yZXBv -c2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRl -ciBmcmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEu -MS4xLiBDZXJ0aWZpY2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIg -T0lEIDEuMi4yMDguMTY5LjEuMS4xLjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1Ud -HwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEMMAoGA1UEChMDVERDMRQwEgYD -VQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYmaHR0cDovL2Ny -bC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy -MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZ -J2cdUBVLc647+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqG -SIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACrom -JkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4A9G28kNBKWKnctj7fAXmMXAnVBhO -inxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYscA+UYyAFMP8uXBV2Y -caaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9AOoB -mbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQ -YqbsFbS1AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9 -BKNDLdr8C2LqL19iUw== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE -SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg -Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV -BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl -cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA -vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu -Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a -0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1 -4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN -eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD -R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG -A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu -dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME -Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3 -WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw -HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ -KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO -Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX -wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+ -2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89 -9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0 -jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38 -aQNiuJkFBT1reBK9sG9l ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUx -ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0 -b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQD -EzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVneXpvaSAoQ2xhc3MgUUEpIFRhbnVz -aXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0bG9jay5odTAeFw0w -MzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTERMA8G -A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh -Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5l -dExvY2sgTWlub3NpdGV0dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZh -bnlraWFkbzEeMBwGCSqGSIb3DQEJARYPaW5mb0BuZXRsb2NrLmh1MIIBIjANBgkq -hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRVCacbvWy5FPSKAtt2/Goq -eKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e8ia6AFQe -r7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO5 -3Lhbm+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWd -vLrqOU+L73Sa58XQ0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0l -mT+1fMptsK6ZmfoIYOcZwvK9UdPM0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4IC -wDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8EBAMCAQYwggJ1Bglg -hkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2YW55IGEgTmV0 -TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh -biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQg -ZWxla3Ryb25pa3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywg -dmFsYW1pbnQgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6 -b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwgYXogQWx0YWxhbm9zIFN6ZXJ6b2Rl -c2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kgZWxqYXJhcyBtZWd0 -ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczovL3d3 -dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0Bu -ZXRsb2NrLm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBh -bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRo -ZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3 -Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0IGluZm9AbmV0bG9jay5u -ZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3DQEBBQUA -A4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQ -MznNwNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+ -NFAwLvt/MpqNPfMgW/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCR -VCHnpgu0mfVRQdzNo0ci2ccBgcTcR08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY -83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR5qq5aKrN9p2QdRLqOBrKROi3 -macqaJVmlaut74nLYKkGEsaUR+ko ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh -MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE -YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 -MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo -ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg -MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN -ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA -PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w -wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi -EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY -avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ -YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE -sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h -/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 -IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD -ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy -OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P -TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER -dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf -ReYNnyicsbkqWletNw+vHX/bvZ8= ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl -MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp -U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw -NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE -ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp -ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 -DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf -8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN -+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 -X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa -K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA -1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G -A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR -zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 -YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD -bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w -DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 -L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D -eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp -VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY -WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT -MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i -YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg -R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 -9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq -fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv -iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU -1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ -bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW -MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA -ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l -uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn -Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS -tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF -PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un -hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV -5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs -IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg -R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A -PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8 -Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL -TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL -5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7 -S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe -2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE -FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap -EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td -EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv -/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN -A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0 -abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF -I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz -4iIprn2DQKi6bA== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy -c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE -BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0 -IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV -VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8 -cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT -QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh -F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v -c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w -mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd -VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX -teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ -f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe -Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+ -nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB -/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY -MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG -9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc -aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX -IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn -ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z -uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN -Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja -QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW -koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9 -ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt -DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm -bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw= ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy -c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD -VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1 -c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81 -WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG -FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq -XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL -se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb -KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd -IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73 -y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt -hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc -QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4 -Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV -HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ -KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z -dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ -L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr -Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo -ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY -T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz -GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m -1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV -OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH -6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX -QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz -MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw -IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR -dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp -li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D -rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ -WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug -F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU -xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC -Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv -dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw -ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl -IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh -c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy -ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh -Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI -KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T -KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq -y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p -dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD -VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL -MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk -fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8 -7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R -cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y -mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW -xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK -SnQ2+Q== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c -JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP -mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ -wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 -VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ -AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB -AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun -pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC -dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf -fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm -NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx -H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD -QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB -CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 -nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt -43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P -T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 -gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO -BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR -TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw -DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr -hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg -06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF -PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls -YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j -ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 -LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug -RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm -+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW -PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM -xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB -Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 -hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg -EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA -FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec -nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z -eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF -hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 -Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep -+OkuE6N36B9K ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa -GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg -Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J -WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB -rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp -+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 -ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i -Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz -PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og -/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH -oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI -yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud -EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 -A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL -MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT -ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f -BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn -g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl -fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K -WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha -B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc -hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR -TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD -mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z -ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y -4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza -8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM -V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB -4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr -H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd -8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv -vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT -mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe -btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc -T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt -WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ -c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A -4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD -VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG -CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 -aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 -aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu -dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw -czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G -A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg -Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 -7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem -d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd -+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B -4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN -t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x -DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 -k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s -zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j -Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT -mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK -4SVhM7JZG+Ju1zdXtg2pEto= ------END CERTIFICATE----- - ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 -MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL -v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 -eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq -tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd -C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa -zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB -mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH -V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n -bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG -3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs -J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO -291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS -ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd -AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 -TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== ------END CERTIFICATE----- diff --git a/src/network/ssl/ssl.pri b/src/network/ssl/ssl.pri index 72ea80f..8b2e2c1 100644 --- a/src/network/ssl/ssl.pri +++ b/src/network/ssl/ssl.pri @@ -31,9 +31,6 @@ symbian { ssl/qsslsocket_openssl.cpp \ ssl/qsslsocket_openssl_symbols.cpp - # Include Qt's default CA bundle - RESOURCES += network.qrc - # Add optional SSL libs LIBS_PRIVATE += $$OPENSSL_LIBS } -- cgit v0.12 From 91b3cea424e08e7480fb32987f757206d885504c Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 11 Jun 2010 16:51:18 +0300 Subject: Fix symbian-abld build failure with bearer plugins All different Symbian bearer plugins had same UID which caused duplicate extension makefiles. Assigned each dll different UID. Reviewed-by: Jason Barron --- src/plugins/bearer/symbian/3_1/3_1.pro | 1 + src/plugins/bearer/symbian/3_2/3_2.pro | 1 + src/plugins/bearer/symbian/symbian.pri | 2 -- src/plugins/bearer/symbian/symbian_3/symbian_3.pro | 2 ++ 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/plugins/bearer/symbian/3_1/3_1.pro b/src/plugins/bearer/symbian/3_1/3_1.pro index a60d18b..2d721a8 100644 --- a/src/plugins/bearer/symbian/3_1/3_1.pro +++ b/src/plugins/bearer/symbian/3_1/3_1.pro @@ -2,3 +2,4 @@ include(../symbian.pri) LIBS += -lapengine TARGET = $${TARGET}_3_1 +TARGET.UID3 = 0x2002131C diff --git a/src/plugins/bearer/symbian/3_2/3_2.pro b/src/plugins/bearer/symbian/3_2/3_2.pro index 4e5b416..3404dde 100644 --- a/src/plugins/bearer/symbian/3_2/3_2.pro +++ b/src/plugins/bearer/symbian/3_2/3_2.pro @@ -10,3 +10,4 @@ exists($${EPOCROOT}epoc32/release/armv5/lib/cmmanager.lib) { } TARGET = $${TARGET}_3_2 +TARGET.UID3 = 0x2002131D diff --git a/src/plugins/bearer/symbian/symbian.pri b/src/plugins/bearer/symbian/symbian.pri index bfcd9ed..afe84dc 100644 --- a/src/plugins/bearer/symbian/symbian.pri +++ b/src/plugins/bearer/symbian/symbian.pri @@ -10,8 +10,6 @@ SOURCES += ../symbianengine.cpp \ ../qnetworksession_impl.cpp \ ../main.cpp -TARGET.UID3=0x20021319 - INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE symbian-abld:INCLUDEPATH += $$QT_BUILD_TREE/include/QtNetwork/private diff --git a/src/plugins/bearer/symbian/symbian_3/symbian_3.pro b/src/plugins/bearer/symbian/symbian_3/symbian_3.pro index 455aa67..f9d486e 100644 --- a/src/plugins/bearer/symbian/symbian_3/symbian_3.pro +++ b/src/plugins/bearer/symbian/symbian_3/symbian_3.pro @@ -12,3 +12,5 @@ exists($${EPOCROOT}epoc32/release/armv5/lib/cmmanager.lib) { # Fall back to 3_1 implementation on platforms that do not have cmmanager LIBS += -lapengine } + +TARGET.UID3 = 0x20021319 -- cgit v0.12 From ea8817a59e92e40927ae4cecd301771eb115fb6f Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Mon, 14 Jun 2010 14:19:56 +0200 Subject: QSslSocket: fix build for MinGW and VS 2005 Reviewed-by: Zeno Albisser --- src/network/ssl/qsslsocket_p.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/network/ssl/qsslsocket_p.h b/src/network/ssl/qsslsocket_p.h index cf1786c..42ae98f 100644 --- a/src/network/ssl/qsslsocket_p.h +++ b/src/network/ssl/qsslsocket_p.h @@ -73,6 +73,10 @@ QT_BEGIN_NAMESPACE typedef OSStatus (*PtrSecTrustSettingsCopyCertificates)(int, CFArrayRef*); typedef OSStatus (*PtrSecTrustCopyAnchorCertificates)(CFArrayRef*); #elif defined(Q_OS_WIN) +#include +#ifndef HCRYPTPROV_LEGACY +#define HCRYPTPROV_LEGACY HCRYPTPROV +#endif typedef HCERTSTORE (WINAPI *PtrCertOpenSystemStoreW)(HCRYPTPROV_LEGACY, LPCWSTR); typedef PCCERT_CONTEXT (WINAPI *PtrCertFindCertificateInStore)(HCERTSTORE, DWORD, DWORD, DWORD, const void*, PCCERT_CONTEXT); typedef BOOL (WINAPI *PtrCertCloseStore)(HCERTSTORE, DWORD); -- cgit v0.12 From b00cd9859d8b666b851953ee3b37def0ab078a54 Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Tue, 8 Dec 2009 19:15:58 +0100 Subject: QXmlSchema: allow usage of xsd:all previously, loading schemas that contained xsd:all elements was not possible because the algorithm used did not scale in that case. This patch introduces a special checking for those elements which removes the performance downside. Reviewed-by: Tobias Koenig Task-number: QTBUG-6485 --- src/xmlpatterns/schema/qxsdparticlechecker.cpp | 30 ++++++++++++++++++++++++++ src/xmlpatterns/schema/qxsdparticlechecker_p.h | 7 ++++++ 2 files changed, 37 insertions(+) diff --git a/src/xmlpatterns/schema/qxsdparticlechecker.cpp b/src/xmlpatterns/schema/qxsdparticlechecker.cpp index ef1d135..15c2afe 100644 --- a/src/xmlpatterns/schema/qxsdparticlechecker.cpp +++ b/src/xmlpatterns/schema/qxsdparticlechecker.cpp @@ -344,6 +344,19 @@ bool XsdParticleChecker::hasDuplicatedElements(const XsdParticle::Ptr &particle, bool XsdParticleChecker::isUPAConform(const XsdParticle::Ptr &particle, const NamePool::Ptr &namePool) { + + /** + * In case we encounter an element, don't construct a state machine, but use the approach + * described at http://www.w3.org/TR/xmlschema-1/#non-ambig + * Reason: For n elements inside the , represented in the NDA, the state machine + * constructs n! states in the DFA, which does not scale. + */ + if (particle->term()->isModelGroup()) { + const XsdModelGroup::Ptr group(particle->term()); + if (group->compositor() == XsdModelGroup::AllCompositor) + return isUPAConformXsdAll(particle, namePool); + } + /** * The algorithm is implemented like described in http://www.ltg.ed.ac.uk/~ht/XML_Europe_2003.html#S2.2 */ @@ -414,6 +427,23 @@ bool XsdParticleChecker::isUPAConform(const XsdParticle::Ptr &particle, const Na return true; } +bool XsdParticleChecker::isUPAConformXsdAll(const XsdParticle::Ptr &particle, const NamePool::Ptr &namePool) +{ + /** + * see http://www.w3.org/TR/xmlschema-1/#non-ambig + */ + const XsdModelGroup::Ptr group(particle->term()); + const XsdParticle::List particles = group->particles(); + const int count = particles.count(); + for (int left = 0; left < count; ++left) { + for (int right = left+1; right < count; ++right) { + if (termMatches(particles.at(left)->term(), particles.at(right)->term(), namePool)) + return false; + } + } + return true; +} + bool XsdParticleChecker::subsumes(const XsdParticle::Ptr &particle, const XsdParticle::Ptr &derivedParticle, const XsdSchemaContext::Ptr &context, QString &errorMsg) { /** diff --git a/src/xmlpatterns/schema/qxsdparticlechecker_p.h b/src/xmlpatterns/schema/qxsdparticlechecker_p.h index 742f0d0..40c525a 100644 --- a/src/xmlpatterns/schema/qxsdparticlechecker_p.h +++ b/src/xmlpatterns/schema/qxsdparticlechecker_p.h @@ -85,6 +85,13 @@ namespace QPatternist static bool isUPAConform(const XsdParticle::Ptr &particle, const NamePool::Ptr &namePool); /** + * Checks whether the given @p particle, which must be an xsd:all element, + * is valid according the UPA (http://www.w3.org/TR/xmlschema-1/#cos-nonambig) constraint. + * For xsd:all elements, we do not want to construct a state machine. + */ + static bool isUPAConformXsdAll(const XsdParticle::Ptr &particle, const NamePool::Ptr &namePool); + + /** * Checks whether the given @p particle subsumes the given @p derivedParticle. * (http://www.w3.org/TR/xmlschema-1/#cos-particle-restrict) */ -- cgit v0.12 From 3e72884174b2894b6007f90b6c1298f1ba4da4a9 Mon Sep 17 00:00:00 2001 From: Robin Burchell Date: Tue, 15 Jun 2010 01:51:31 +0200 Subject: Fix a minor typo in QAbstractItemModel's documentation. Merge-request: 687 Reviewed-by: Andreas Kling --- src/corelib/kernel/qabstractitemmodel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/kernel/qabstractitemmodel.cpp b/src/corelib/kernel/qabstractitemmodel.cpp index b0e2f48..8415259 100644 --- a/src/corelib/kernel/qabstractitemmodel.cpp +++ b/src/corelib/kernel/qabstractitemmodel.cpp @@ -2854,7 +2854,7 @@ void QAbstractItemModel::endMoveColumns() \note Use beginResetModel() and endResetModel() instead whenever possible. Use this method only if there is no way to call beginResetModel() before invalidating the model. - Otherwise it could lead to unexcpected behaviour, especially when used with proxy models. + Otherwise it could lead to unexpected behaviour, especially when used with proxy models. */ void QAbstractItemModel::reset() { -- cgit v0.12 From 11420641d9341af6615baa21453e08c092f7fb10 Mon Sep 17 00:00:00 2001 From: Thomas Zander Date: Tue, 15 Jun 2010 10:42:42 +0200 Subject: Fix symbian building of TARGET with a slash In case there is a slash in the target (for example; ../foo) then we don't want to add a faulty cxxflags to the compile line. Reviewed-by: Axis --- mkspecs/features/symbian/symbian_building.prf | 4 ++-- tests/auto/qlocale/test/test.pro | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mkspecs/features/symbian/symbian_building.prf b/mkspecs/features/symbian/symbian_building.prf index 92988aa..9fc4d1e 100644 --- a/mkspecs/features/symbian/symbian_building.prf +++ b/mkspecs/features/symbian/symbian_building.prf @@ -1,7 +1,7 @@ # we have some module specific options (defined in qt.prf) lets add them -!contains(TARGET, ".*[ -].*"):eval(TMPVAR = \$\$QMAKE_$${TARGET}_CXXFLAGS) +!contains(TARGET, ".*[ -/].*"):eval(TMPVAR = \$\$QMAKE_$${TARGET}_CXXFLAGS) !isEmpty(TMPVAR):QMAKE_CXXFLAGS += $$TMPVAR -!contains(TARGET, ".*[ -].*"):eval(TMPVAR = \$\$QMAKE_$${TARGET}_LFLAGS) +!contains(TARGET, ".*[ -/].*"):eval(TMPVAR = \$\$QMAKE_$${TARGET}_LFLAGS) !isEmpty(TMPVAR) { QMAKE_LFLAGS += $$TMPVAR } else :linux-gcce { # lets provide a simple default. Without elf2e32 complains diff --git a/tests/auto/qlocale/test/test.pro b/tests/auto/qlocale/test/test.pro index d57f2d1..e33d0fe 100644 --- a/tests/auto/qlocale/test/test.pro +++ b/tests/auto/qlocale/test/test.pro @@ -36,4 +36,4 @@ symbian:contains(S60_VERSION,3.2) { "PAGED" \ "$${LITERAL_HASH}endif" MMP_RULES += custom_paged_rule -} \ No newline at end of file +} -- cgit v0.12 From e9e93fe79d7451f05a714241f759c557a455de67 Mon Sep 17 00:00:00 2001 From: Martin Smith Date: Tue, 15 Jun 2010 14:54:37 +0200 Subject: doc: Added more DITA output to the XML generator Task-number: QTBUG-11391 --- tools/qdoc3/ditaxmlgenerator.cpp | 542 ++++++++++----------------------------- tools/qdoc3/ditaxmlgenerator.h | 45 +--- tools/qdoc3/node.cpp | 35 +++ tools/qdoc3/node.h | 2 + 4 files changed, 178 insertions(+), 446 deletions(-) diff --git a/tools/qdoc3/ditaxmlgenerator.cpp b/tools/qdoc3/ditaxmlgenerator.cpp index 2c578f0..197bc13 100644 --- a/tools/qdoc3/ditaxmlgenerator.cpp +++ b/tools/qdoc3/ditaxmlgenerator.cpp @@ -501,6 +501,34 @@ QString DitaXmlGenerator::format() } /*! + Create a new GUID, write it to the XML stream + as an "id" attribute, and return it. + */ +QString DitaXmlGenerator::writeGuidAttribute(QString text) +{ + QString guid = QUuid::createUuid().toString(); + name2guidMap.insert(text,guid); + writer.writeAttribute("id",guid); + return guid; +} + +/*! + Looks up \a text in the GUID map. It it finds \a text, + it returns the associated GUID. Otherwise it inserts + \a text into the map with a new GUID, and it returns + the new GUID. + */ +QString DitaXmlGenerator::lookupGuid(QString text) +{ + QMap::const_iterator i = name2guidMap.find(text); + if (i != name2guidMap.end()) + return i.value(); + QString guid = QUuid::createUuid().toString(); + name2guidMap.insert(text,guid); + return guid; +} + +/*! This is where the DITA XML files are written. \note The file generation is done in the base class, PageGenerator::generateTree(). @@ -521,9 +549,6 @@ void DitaXmlGenerator::generateTree(const Tree *tree, CodeMarker *marker) findAllFunctions(tree->root()); findAllLegaleseTexts(tree->root()); findAllNamespaces(tree->root()); -#ifdef ZZZ_QDOC_QML - findAllQmlClasses(tree->root()); -#endif findAllSince(tree->root()); PageGenerator::generateTree(tree, marker); @@ -552,7 +577,8 @@ int DitaXmlGenerator::generateAtom(const Atom *atom, int skipAhead = 0; QString hx; static bool in_para = false; - + QString guid; + switch (atom->type()) { case Atom::AbstractLeft: break; @@ -922,10 +948,8 @@ int DitaXmlGenerator::generateAtom(const Atom *atom, s = sections.constBegin(); while (s != sections.constEnd()) { if (!(*s).members.isEmpty()) { - QString guid = QUuid::createUuid().toString(); - guidMap.insert(Doc::canonicalTitle((*s).name),guid); writer.writeStartElement("p"); - writer.writeAttribute("id",guid); + writeGuidAttribute(Doc::canonicalTitle((*s).name)); writer.writeAttribute("outputclass","h3"); writer.writeCharacters(protectEnc((*s).name)); writer.writeEndElement(); //

    @@ -1203,10 +1227,11 @@ int DitaXmlGenerator::generateAtom(const Atom *atom, writer.writeCharacters(atom->string()); break; case Atom::SectionLeft: -#if zzz - out() << "\n"; -#endif + writer.writeStartElement("p"); + writeGuidAttribute(Doc::canonicalTitle(Text::sectionHeading(atom).toString())); + writer.writeAttribute("outputclass","target"); + writer.writeCharacters(protectEnc(Text::sectionHeading(atom).toString())); + writer.writeEndElement(); //

    break; case Atom::SectionRight: // nothing @@ -1338,20 +1363,23 @@ int DitaXmlGenerator::generateAtom(const Atom *atom, } break; case Atom::Target: -#if zzz - out() << "string()) << "\">"; -#endif + writer.writeStartElement("p"); + writeGuidAttribute(Doc::canonicalTitle(atom->string())); + writer.writeAttribute("outputclass","target"); + writer.writeCharacters(protectEnc(atom->string())); + writer.writeEndElement(); //

    break; case Atom::UnhandledFormat: -#if zzz - out() << "<Missing DITAXML>"; -#endif + writer.writeStartElement("b"); + writer.writeAttribute("outputclass","redFont"); + writer.writeCharacters("<Missing DITAXML>"); + writer.writeEndElement(); // break; case Atom::UnknownCommand: -#if zzz - out() << "\\" << protectEnc(atom->string()) - << ""; -#endif + writer.writeStartElement("b"); + writer.writeAttribute("outputclass","redFont code"); + writer.writeCharacters(protectEnc(atom->string())); + writer.writeEndElement(); // break; #ifdef QDOC_QML case Atom::QmlText: @@ -1375,7 +1403,7 @@ DitaXmlGenerator::generateClassLikeNode(const InnerNode* inner, CodeMarker* mark QList
    sections; QList
    ::ConstIterator s; - const ClassNode *classe = 0; + const ClassNode* cn = 0; const NamespaceNode *namespasse = 0; QString title; @@ -1388,43 +1416,51 @@ DitaXmlGenerator::generateClassLikeNode(const InnerNode* inner, CodeMarker* mark title = rawTitle + " Namespace"; } else if (inner->type() == Node::Class) { - classe = static_cast(inner); + cn = static_cast(inner); rawTitle = marker->plainName(inner); fullTitle = marker->plainFullName(inner); title = rawTitle + " Class Reference"; - } - - Text subtitleText; - if (rawTitle != fullTitle) - subtitleText << "(" << Atom(Atom::AutoLink, fullTitle) << ")" - << Atom(Atom::LineBreak); - generateHeader(inner); + generateHeader(inner); - writer.writeStartElement(CXXCLASS); - writer.writeStartElement(APINAME); - writer.writeCharacters(fullTitle); - writer.writeEndElement(); // apiName + writer.writeStartElement(CXXCLASS); + writeGuidAttribute(fullTitle); + writer.writeStartElement(APINAME); + writer.writeCharacters(fullTitle); + writer.writeEndElement(); // - generateBrief(inner, marker); + generateBrief(inner, marker); - writer.writeStartElement(CXXCLASSDETAIL); - writer.writeStartElement(APIDESC); - - if (!inner->doc().isEmpty()) { - writer.writeStartElement("p"); - writer.writeAttribute("outputclass","h2"); - writer.writeCharacters("Detailed Description"); - writer.writeEndElement(); // p - generateBody(inner, marker); - // generateAlsoList(inner, marker); - } + writer.writeStartElement(CXXCLASSDETAIL); + writer.writeStartElement(CXXCLASSDEFINITION); + writer.writeStartElement(CXXCLASSACCESSSPECIFIER); + writer.writeAttribute("value",inner->accessString()); + writer.writeEndElement(); // + writeDerivations(cn, marker); + writeLocation(cn, marker); + writer.writeEndElement(); // + writer.writeStartElement(APIDESC); + + if (!inner->doc().isEmpty()) { + writer.writeStartElement("p"); + writer.writeAttribute("outputclass","h2"); + writer.writeCharacters("Detailed Description"); + writer.writeEndElement(); //

    + generateBody(inner, marker); + // generateAlsoList(inner, marker); + } - writer.writeEndElement(); // apiDesc - writer.writeEndElement(); // cxxClassDetail - writer.writeEndElement(); // cxxClass + writer.writeEndElement(); // + writer.writeEndElement(); // + writer.writeEndElement(); // + } #ifdef WRITE_HTML + Text subtitleText; + if (rawTitle != fullTitle) + subtitleText << "(" << Atom(Atom::AutoLink, fullTitle) << ")" + << Atom(Atom::LineBreak); + QString shortVersion; shortVersion = project + " " + shortVersion + ": "; shortVersion = myTree->version(); @@ -1450,17 +1486,17 @@ DitaXmlGenerator::generateClassLikeNode(const InnerNode* inner, CodeMarker* mark generateTitle(title, subtitleText, SmallSubTitle, inner, marker); #ifdef QDOC_QML - if (classe && !classe->qmlElement().isEmpty()) { - generateInstantiatedBy(classe,marker); + if (cn && !cn->qmlElement().isEmpty()) { + generateInstantiatedBy(cn,marker); } #endif generateBrief(inner, marker); generateIncludes(inner, marker); generateStatus(inner, marker); - if (classe) { - generateInherits(classe, marker); - generateInheritedBy(classe, marker); + if (cn) { + generateInherits(cn, marker); + generateInheritedBy(cn, marker); } generateThreadSafeness(inner, marker); generateSince(inner, marker); @@ -1895,37 +1931,11 @@ void DitaXmlGenerator::generateHeader(const Node* node) version = "0.6.0"; } -#if 0 - writer.writeCharacters("\n\n"); - - if (node && !node->doc().location().isEmpty()) { - writer.writeCharacters("\n"); - } -#endif - QString doctype = ""; writer.writeDTD(doctype); writer.writeComment(node->doc().location().fileName()); - -#if 0 - out() << "\n\n"; - - if (node && !node->doc().location().isEmpty()) - out() << "\n"; - out().flush(); -#endif } void DitaXmlGenerator::generateTitle(const QString& title, @@ -2173,37 +2183,6 @@ void DitaXmlGenerator::generateTableOfContents(const Node *node, 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() << "

    "; - if (bar.prev.begin() != 0) { -#if 0 - out() << "[Prev: "; - generateText(section.previousHeading(), node, marker); - out() << "]\n"; -#endif - } - if (bar.current.begin() != 0) { - out() << "[Home]\n"; - } - if (bar.next.begin() != 0) { - out() << "[Next: "; - generateText(Text::sectionHeading(bar.next.begin()), node, marker); - out() << "]\n"; - } - out() << "

    \n"; - } -} -#endif - QString DitaXmlGenerator::generateListOfAllMemberFile(const InnerNode *inner, CodeMarker *marker) { @@ -2855,7 +2834,6 @@ void DitaXmlGenerator::generateOverviewList(const Node *relative, CodeMarker * / } } -#ifdef QDOC_NAME_ALIGNMENT void DitaXmlGenerator::generateSection(const NodeList& nl, const Node *relative, CodeMarker *marker, @@ -3220,281 +3198,6 @@ QString DitaXmlGenerator::highlightedCode(const QString& markedCode, 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() << "\n"; - if (++numTableRows % 2 == 1) - out() << ""; - else - out() << ""; - -// << "\n
    "; - out() << "
      \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() << "
      \n"; - - out() << "
    • "; - if (style == CodeMarker::Accessors) - out() << ""; - generateSynopsis(*m, relative, marker, style); - if (style == CodeMarker::Accessors) - out() << ""; - out() << "
    • \n"; - i++; - ++m; - } - out() << "
    \n"; - if (twoColumn) - out() << "
    \n"; - } - - if (style == CodeMarker::Summary && !section.inherited.isEmpty()) { - out() << "
      \n"; - generateSectionInheritedList(section, relative, marker); - out() << "
    \n"; - } -} - -void DitaXmlGenerator::generateSectionInheritedList(const Section& section, - const Node *relative, - CodeMarker *marker) -{ - QList >::ConstIterator p = section.inherited.begin(); - while (p != section.inherited.end()) { - out() << "
  • "; - out() << (*p).second << " "; - if ((*p).second == 1) { - out() << section.singularMember; - } else { - out() << section.pluralMember; - } - out() << " inherited from " - << protectEnc(marker->plainFullName((*p).first, relative)) - << "
  • \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])"), "\\1\\2"); - marked.replace("<@param>", ""); - marked.replace("", ""); - - if (style == CodeMarker::Summary) - marked.replace("@name>", "b>"); - - if (style == CodeMarker::SeparateList) { - QRegExp extraRegExp("<@extra>.*"); - extraRegExp.setMinimal(true); - marked.replace(extraRegExp, ""); - } else { - marked.replace("<@extra>", ""); - marked.replace("", ""); - } - - if (style != CodeMarker::Detailed) { - marked.replace("<@type>", ""); - marked.replace("", ""); - } - 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=\"([^\"]+)\">).*()" - 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=\"([^\"]*)\">)(.*)()" - 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)(?: +[^>]*)?>)(.*)()" 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>" -> ""; - // "<@preprocessor>" -> ""; - // "<@string>" -> ""; - // "<@char>" -> ""; - // "" -> "" - src = html; - html = QString(); - static const QString spanTags[] = { - "<@comment>", "", - "<@preprocessor>", "", - "<@string>", "", - "<@char>", "", - "", "", - "","", - "", "", - "", "" - // "<@char>", "", - // "", "", - // "<@func>", "", - // "", "", - // "<@id>", "", - // "", "", - // "<@keyword>", "", - // "", "", - // "<@number>", "", - // "", "", - // "<@op>", "", - // "", "", - // "<@param>", "", - // "", "", - // "<@string>", "", - // "", "", - }; - 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) @@ -4087,29 +3790,6 @@ void DitaXmlGenerator::findAllNamespaces(const InnerNode *node) } } -#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(*c); - if (fakeNode->subType() == Node::QmlClass) { - const QmlClassNode* qmlNode = - static_cast(fakeNode); - const Node* n = qmlNode->classNode(); - } - qmlClasses.insert(fakeNode->name(),*c); - } - ++c; - } -} -#endif - int DitaXmlGenerator::hOffset(const Node *node) { switch (node->type()) { @@ -4795,4 +4475,46 @@ void DitaXmlGenerator::generatePageIndex(const QString& fileName, CodeMarker* ma #endif +void DitaXmlGenerator::writeDerivations(const ClassNode* cn, CodeMarker* marker) +{ + QList::ConstIterator r; + int index; + + if (!cn->baseClasses().isEmpty()) { + writer.writeStartElement(CXXCLASSDERIVATIONS); + r = cn->baseClasses().begin(); + index = 0; + while (r != cn->baseClasses().end()) { + writer.writeStartElement(CXXCLASSDERIVATION); + writer.writeStartElement(CXXCLASSDERIVATIONACCESSSPECIFIER); + writer.writeAttribute("value",(*r).accessString()); + writer.writeEndElement(); // + writer.writeStartElement(CXXCLASSBASECLASS); + QString fullTitle = marker->plainFullName((*r).node); + QString guid = lookupGuid(fullTitle); + writer.writeAttribute("href",guid); + writer.writeCharacters(fullTitle); + writer.writeEndElement(); // + writer.writeEndElement(); // + ++r; + } + writer.writeEndElement(); // + } +} + +void DitaXmlGenerator::writeLocation(const ClassNode* cn, CodeMarker* marker) +{ + writer.writeStartElement(CXXCLASSAPIITEMLOCATION); + writer.writeStartElement(CXXCLASSDECLARATIONFILE); + writer.writeAttribute("name","filePath"); + writer.writeAttribute("value",cn->location().filePath()); + writer.writeEndElement(); // + writer.writeStartElement(CXXCLASSDECLARATIONFILELINE); + writer.writeAttribute("name","lineNumber"); + QString lineNr; + writer.writeAttribute("value",lineNr.setNum(cn->location().lineNo())); + writer.writeEndElement(); // + writer.writeEndElement(); // +} + QT_END_NAMESPACE diff --git a/tools/qdoc3/ditaxmlgenerator.h b/tools/qdoc3/ditaxmlgenerator.h index 1a5eca0..070329b 100644 --- a/tools/qdoc3/ditaxmlgenerator.h +++ b/tools/qdoc3/ditaxmlgenerator.h @@ -46,8 +46,6 @@ #ifndef DITAXMLGENERATOR_H #define DITAXMLGENERATOR_H -#define QDOC_NAME_ALIGNMENT - #include #include #include @@ -57,15 +55,6 @@ QT_BEGIN_NAMESPACE -#if 0 -struct NavigationBar -{ - SectionIterator prev; - SectionIterator current; - SectionIterator next; -}; -#endif - typedef QMultiMap NodeMultiMap; typedef QMap NewSinceMaps; typedef QMap ParentMaps; @@ -120,6 +109,9 @@ class DitaXmlGenerator : public PageGenerator virtual QString refForNode(const Node *node); virtual QString linkForNode(const Node *node, const Node *relative); virtual QString refForAtom(Atom *atom, const Node *node); + + void writeDerivations(const ClassNode* cn, CodeMarker* marker); + void writeLocation(const ClassNode* cn, CodeMarker* marker); private: enum SubTitleSize { SmallSubTitle, LargeSubTitle }; @@ -140,11 +132,6 @@ class DitaXmlGenerator : public PageGenerator CodeMarker *marker); void generateBrief(const Node* node, CodeMarker* marker); 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, @@ -191,7 +178,7 @@ class DitaXmlGenerator : public PageGenerator 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, @@ -210,18 +197,7 @@ class DitaXmlGenerator : public PageGenerator 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, @@ -244,9 +220,6 @@ class DitaXmlGenerator : public PageGenerator 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); @@ -273,12 +246,12 @@ class DitaXmlGenerator : public PageGenerator CodeMarker* marker) const; void generatePageIndex(const QString& fileName, CodeMarker* marker) const; + QString writeGuidAttribute(QString text); + QString lookupGuid(QString text); -#if 0 - NavigationBar currentNavigationBar; -#endif + private: QMap refMap; - QMap guidMap; + QMap name2guidMap; int codeIndent; bool inLink; bool inObsoleteLink; diff --git a/tools/qdoc3/node.cpp b/tools/qdoc3/node.cpp index 3c7e9dc..4664e9d 100644 --- a/tools/qdoc3/node.cpp +++ b/tools/qdoc3/node.cpp @@ -154,6 +154,41 @@ void Node::setLink(LinkType linkType, const QString &link, const QString &desc) } /*! + Returns a string representing the access specifier. + */ +QString Node::accessString() const +{ + switch (acc) { + case Protected: + return "protected"; + case Private: + return "private"; + case Public: + default: + break; + } + return "public"; +} + + +/*! + Returns a string representing the access specifier. + */ +QString RelatedClass::accessString() const +{ + switch (access) { + case Node::Protected: + return "protected"; + case Node::Private: + return "private"; + case Node::Public: + default: + break; + } + return "public"; +} + +/*! */ Node::Status Node::inheritedStatus() const { diff --git a/tools/qdoc3/node.h b/tools/qdoc3/node.h index 215a7ae..523394d 100644 --- a/tools/qdoc3/node.h +++ b/tools/qdoc3/node.h @@ -175,6 +175,7 @@ class Node virtual QString nameForLists() const { return nam; } Access access() const { return acc; } + QString accessString() const; const Location& location() const { return loc; } const Doc& doc() const { return d; } Status status() const { return sta; } @@ -312,6 +313,7 @@ struct RelatedClass : access(access0), node(node0), dataTypeWithTemplateArgs(dataTypeWithTemplateArgs0) { } + QString accessString() const; Node::Access access; ClassNode* node; -- cgit v0.12 From 20a39c16f236f999cd1694cdc47a3739efcbbfe4 Mon Sep 17 00:00:00 2001 From: Zeno Albisser Date: Tue, 15 Jun 2010 13:39:25 +0200 Subject: Temporary fix for regression in QSslCertificate::fromPath() The regression was introduced with 164f347aba7287407615223dc2219a016ebc8248. As soon as possible we should probably rewrite the fromPath() function, to have a proper solution. Nevertheless this might be a bigger change and should not be done so late in release cycle. Reviewed-by: TrustMe --- src/network/ssl/qsslcertificate.cpp | 11 ++++++++--- tests/auto/qsslcertificate/tst_qsslcertificate.cpp | 3 +++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/network/ssl/qsslcertificate.cpp b/src/network/ssl/qsslcertificate.cpp index ed12e00..a3ea555 100644 --- a/src/network/ssl/qsslcertificate.cpp +++ b/src/network/ssl/qsslcertificate.cpp @@ -537,7 +537,7 @@ QList QSslCertificate::fromPath(const QString &path, // $, (,), *, +, ., ?, [, ,], ^, {, | and }. int pos = -1; if (syntax == QRegExp::Wildcard) - pos = path.indexOf(QRegExp(QLatin1String("[\\*\\?\\[]"))); + pos = path.indexOf(QRegExp(QLatin1String("[^\\][\\*\\?\\[\\]]"))); else if (syntax != QRegExp::FixedString) pos = path.indexOf(QRegExp(QLatin1String("[^\\][\\$\\(\\)\\*\\+\\.\\?\\[\\]\\^\\{\\}\\|]"))); QString pathPrefix = path.left(pos); // == path if pos < 0 @@ -548,8 +548,13 @@ QList QSslCertificate::fromPath(const QString &path, // chop off the first two characters from the glob'ed paths. int startIndex = 0; if (pathPrefix.trimmed().isEmpty()) { - startIndex = 2; - pathPrefix = QLatin1String("."); + if(path.startsWith(QLatin1Char('/'))) { + pathPrefix = path.left(path.indexOf(QRegExp(QLatin1String("[\\*\\?\\[]")))); + pathPrefix = path.left(path.lastIndexOf(QLatin1Char('/'))); + } else { + startIndex = 2; + pathPrefix = QLatin1String("."); + } } // The path is a file. diff --git a/tests/auto/qsslcertificate/tst_qsslcertificate.cpp b/tests/auto/qsslcertificate/tst_qsslcertificate.cpp index 505b867..d0509bb 100644 --- a/tests/auto/qsslcertificate/tst_qsslcertificate.cpp +++ b/tests/auto/qsslcertificate/tst_qsslcertificate.cpp @@ -542,6 +542,9 @@ void tst_QSslCertificate::fromPath_data() QTest::newRow("\"d.*/c.*.pem\" regexp der") << QString("d.*/c.*.pem") << int(QRegExp::RegExp) << false << 0; QTest::newRow("\"d.*/c.*.pem\" wildcard pem") << QString("d.*/c.*.pem") << int(QRegExp::Wildcard) << true << 0; QTest::newRow("\"d.*/c.*.pem\" wildcard der") << QString("d.*/c.*.pem") << int(QRegExp::Wildcard) << false << 0; +#ifdef Q_OS_LINUX + QTest::newRow("absolute path wildcard pem") << QString(QDir::currentPath() + "/certificates/*.pem") << int(QRegExp::Wildcard) << true << 4; +#endif QTest::newRow("trailing-whitespace") << QString("more-certificates/trailing-whitespace.pem") << int(QRegExp::FixedString) << true << 1; QTest::newRow("no-ending-newline") << QString("more-certificates/no-ending-newline.pem") << int(QRegExp::FixedString) << true << 1; -- cgit v0.12 From 0e0e74f23566de7ae408a2e7091001941508b694 Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko Date: Mon, 14 Jun 2010 10:12:07 +0200 Subject: Use native locale aware string comparison on Symbian. Fix to use the native CompareC function instead. Task-number: QTBUG-11350 Reviewed-by: Miikka Heikkinen --- src/corelib/tools/qstring.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp index 1d5fab3..57f79a0 100644 --- a/src/corelib/tools/qstring.cpp +++ b/src/corelib/tools/qstring.cpp @@ -4768,6 +4768,10 @@ int QString::localeAwareCompare_helper(const QChar *data1, int length1, CFRelease(thisString); CFRelease(otherString); return result; +#elif defined(Q_OS_SYMBIAN) + TPtrC p1 = TPtrC16(reinterpret_cast(data1), length1); + TPtrC p2 = TPtrC16(reinterpret_cast(data2), length2); + return p1.CompareC(p2); #elif defined(Q_OS_UNIX) // declared in int delta = strcoll(toLocal8Bit_helper(data1, length1), toLocal8Bit_helper(data2, length2)); -- cgit v0.12