diff options
author | Bea Lam <bea.lam@nokia.com> | 2010-03-01 05:05:24 (GMT) |
---|---|---|
committer | Bea Lam <bea.lam@nokia.com> | 2010-03-01 05:05:24 (GMT) |
commit | e8b2404e04ff38511a96ae2dfb2aa097c6ec8166 (patch) | |
tree | 91f59051e690551cb89df3d0304bb714c711b2f0 | |
parent | 8095b3074a47ff317cafdce5e8a8f955bf8c97fa (diff) | |
parent | 20def6f5fe3e02bda1c5f5873ed1923d36511312 (diff) | |
download | Qt-e8b2404e04ff38511a96ae2dfb2aa097c6ec8166.zip Qt-e8b2404e04ff38511a96ae2dfb2aa097c6ec8166.tar.gz Qt-e8b2404e04ff38511a96ae2dfb2aa097c6ec8166.tar.bz2 |
Merge branch 'master' of scm.dev.nokia.troll.no:qt/qt-qml
Conflicts:
tests/auto/declarative/qdeclarativeproperty/tst_qdeclarativeproperty.cpp
426 files changed, 26562 insertions, 3734 deletions
@@ -2411,7 +2411,9 @@ if [ "$CFG_EMBEDDED" != "no" ]; then fi ;; CYGWIN*:*) - CFG_EMBEDDED=x86 + if [ -z "$XPLATFORM" ]; then + CFG_EMBEDDED=x86 + fi ;; *) echo "Qt for Embedded Linux is not supported on this platform. Disabling." diff --git a/configure.exe b/configure.exe Binary files differindex f937ea2..e310ee0 100755 --- a/configure.exe +++ b/configure.exe diff --git a/demos/declarative/flickr/common/ImageDetails.qml b/demos/declarative/flickr/common/ImageDetails.qml index ab94d7a..9604f10 100644 --- a/demos/declarative/flickr/common/ImageDetails.qml +++ b/demos/declarative/flickr/common/ImageDetails.qml @@ -50,7 +50,7 @@ Flipable { LikeOMeter { x: 40; y: 250; rating: container.rating } Flickable { id: flickable; x: 220; width: 480; height: 210; y: 130; clip: true - viewportWidth: 480; viewportHeight: descriptionText.height + contentWidth: 480; contentHeight: descriptionText.height WebView { id: descriptionText; width: parent.width html: "<style TYPE=\"text/css\">body {color: white;} a:link {color: cyan; text-decoration: underline; }</style>" + container.photoDescription } @@ -84,7 +84,7 @@ Flipable { Flickable { id: flick; width: container.width - 10; height: container.height - 10 x: 5; y: 5; clip: true; - viewportWidth: imageContainer.width; viewportHeight: imageContainer.height + contentWidth: imageContainer.width; contentHeight: imageContainer.height Item { id: imageContainer @@ -93,9 +93,7 @@ Flipable { Image { id: bigImage; source: container.photoUrl; scale: slider.value - // Center image if it is smaller than the flickable area. - x: imageContainer.width > width*scale ? (imageContainer.width - width*scale) / 2 : 0 - y: imageContainer.height > height*scale ? (imageContainer.height - height*scale) / 2 : 0 + anchors.centerIn: parent; smooth: !flick.moving onStatusChanged : { // Default scale shows the entire image. @@ -122,12 +120,12 @@ Flipable { id: slider; x: 25; y: 374; visible: { bigImage.status == 1 && maximum > minimum } onValueChanged: { if (bigImage.width * value > flick.width) { - var xoff = (flick.width/2 + flick.viewportX) * value / prevScale; - flick.viewportX = xoff - flick.width/2; + var xoff = (flick.width/2 + flick.contentX) * value / prevScale; + flick.contentX = xoff - flick.width/2; } if (bigImage.height * value > flick.height) { - var yoff = (flick.height/2 + flick.viewportY) * value / prevScale; - flick.viewportY = yoff - flick.height/2; + var yoff = (flick.height/2 + flick.contentY) * value / prevScale; + flick.contentY = yoff - flick.height/2; } prevScale = value; } diff --git a/demos/declarative/flickr/flickr-desktop.qml b/demos/declarative/flickr/flickr-desktop.qml index 3a86347..99216cb 100644 --- a/demos/declarative/flickr/flickr-desktop.qml +++ b/demos/declarative/flickr/flickr-desktop.qml @@ -21,9 +21,9 @@ Item { angle: wrapper.PathView.angle ? wrapper.PathView.angle : 0 } - Connection { - sender: imageDetails; signal: "closed()" - script: { + Connections { + target: imageDetails + onClosed: { if (wrapper.state == 'Details') { wrapper.state = ''; imageDetails.photoUrl = ""; diff --git a/demos/declarative/flickr/flickr-mobile-90.qml b/demos/declarative/flickr/flickr-mobile-90.qml index 259ff10..9fec242 100644 --- a/demos/declarative/flickr/flickr-mobile-90.qml +++ b/demos/declarative/flickr/flickr-mobile-90.qml @@ -5,6 +5,7 @@ Item { Loader { y: 320; rotation: -90 + transformOrigin: Item.TopLeft source: "flickr-mobile.qml" } } diff --git a/demos/declarative/flickr/flickr-mobile.qml b/demos/declarative/flickr/flickr-mobile.qml index 77ccd08..21e4c49 100644 --- a/demos/declarative/flickr/flickr-mobile.qml +++ b/demos/declarative/flickr/flickr-mobile.qml @@ -53,9 +53,9 @@ Item { onButton2Clicked: if (screen.inListView == true) screen.inListView = false; else screen.inListView = true } - Connection { - sender: imageDetails; signal: "closed()" - script: { + Connections { + target: imageDetails + onClosed: { if (background.state == "DetailedView") { background.state = ''; imageDetails.photoUrl = ""; diff --git a/demos/declarative/flickr/mobile/GridDelegate.qml b/demos/declarative/flickr/mobile/GridDelegate.qml index 5722f10..7634573 100644 --- a/demos/declarative/flickr/mobile/GridDelegate.qml +++ b/demos/declarative/flickr/mobile/GridDelegate.qml @@ -33,9 +33,9 @@ Image { source: "images/gloss.png" } } - Connection { - sender: toolBar; signal: "button2Clicked()" - script: if (scaleMe.state == 'Details' ) scaleMe.state = 'Show'; + Connections { + target: toolBar + onButton2Clicked: if (scaleMe.state == 'Details' ) scaleMe.state = 'Show' } states: [ diff --git a/demos/declarative/flickr/mobile/ImageDetails.qml b/demos/declarative/flickr/mobile/ImageDetails.qml index 415764e..8749b4c 100644 --- a/demos/declarative/flickr/mobile/ImageDetails.qml +++ b/demos/declarative/flickr/mobile/ImageDetails.qml @@ -57,7 +57,7 @@ Flipable { Common.Progress { anchors.centerIn: parent; width: 200; height: 18; progress: bigImage.progress; visible: bigImage.status!=1 } Flickable { id: flickable; anchors.fill: parent; clip: true - viewportWidth: imageContainer.width; viewportHeight: imageContainer.height + contentWidth: imageContainer.width; contentHeight: imageContainer.height Item { id: imageContainer @@ -97,12 +97,12 @@ Flipable { } onValueChanged: { if (bigImage.width * value > flickable.width) { - var xoff = (flickable.width/2 + flickable.viewportX) * value / prevScale; - flickable.viewportX = xoff - flickable.width/2; + var xoff = (flickable.width/2 + flickable.contentX) * value / prevScale; + flickable.contentX = xoff - flickable.width/2; } if (bigImage.height * value > flickable.height) { - var yoff = (flickable.height/2 + flickable.viewportY) * value / prevScale; - flickable.viewportY = yoff - flickable.height/2; + var yoff = (flickable.height/2 + flickable.contentY) * value / prevScale; + flickable.contentY = yoff - flickable.height/2; } prevScale = value; } diff --git a/demos/declarative/webbrowser/content/FlickableWebView.qml b/demos/declarative/webbrowser/content/FlickableWebView.qml index b60a95f..76a5813 100644 --- a/demos/declarative/webbrowser/content/FlickableWebView.qml +++ b/demos/declarative/webbrowser/content/FlickableWebView.qml @@ -2,6 +2,7 @@ import Qt 4.6 Flickable { property alias title: webView.title + property alias icon: webView.icon property alias progress: webView.progress property alias url: webView.url property alias back: webView.back @@ -10,8 +11,8 @@ Flickable { id: flickable width: parent.width - viewportWidth: Math.max(parent.width,webView.width*webView.scale) - viewportHeight: Math.max(parent.height,webView.height*webView.scale) + contentWidth: Math.max(parent.width,webView.width*webView.scale) + contentHeight: Math.max(parent.height,webView.height*webView.scale) anchors.top: headerSpace.bottom anchors.bottom: footer.top anchors.left: parent.left @@ -53,10 +54,10 @@ Flickable { if (centerX) { var sc = zoom/contentsScale; scaleAnim.to = sc; - flickVX.from = flickable.viewportX + flickVX.from = flickable.contentX flickVX.to = Math.max(0,Math.min(centerX-flickable.width/2,webView.width*sc-flickable.width)) finalX.value = flickVX.to - flickVY.from = flickable.viewportY + flickVY.from = flickable.contentY flickVY.to = Math.max(0,Math.min(centerY-flickable.height/2,webView.height*sc-flickable.height)) finalY.value = flickVY.to finalZoom.value = zoom @@ -76,8 +77,8 @@ Flickable { } onUrlChanged: { // got to topleft - flickable.viewportX = 0 - flickable.viewportY = 0 + flickable.contentX = 0 + flickable.contentY = 0 if (url != null) { header.editUrl = url.toString(); } } onDoubleClick: { @@ -110,7 +111,7 @@ Flickable { NumberAnimation { id: flickVX target: flickable - property: "viewportX" + property: "contentX" easing.type: "Linear" duration: 200 from: 0 // set before calling @@ -119,7 +120,7 @@ Flickable { NumberAnimation { id: flickVY target: flickable - property: "viewportY" + property: "contentY" easing.type: "Linear" duration: 200 from: 0 // set before calling @@ -136,19 +137,19 @@ Flickable { property: "scale" value: 1.0 } - // Have to set the viewportXY, since the above 2 + // Have to set the contentXY, since the above 2 // size changes may have started a correction if // contentsScale < 1.0. PropertyAction { id: finalX target: flickable - property: "viewportX" + property: "contentX" value: 0 // set before calling } PropertyAction { id: finalY target: flickable - property: "viewportY" + property: "contentY" value: 0 // set before calling } PropertyAction { diff --git a/demos/declarative/webbrowser/content/RetractingWebBrowserHeader.qml b/demos/declarative/webbrowser/content/RetractingWebBrowserHeader.qml index f905150..94c94f2 100644 --- a/demos/declarative/webbrowser/content/RetractingWebBrowserHeader.qml +++ b/demos/declarative/webbrowser/content/RetractingWebBrowserHeader.qml @@ -9,35 +9,44 @@ Image { source: "pics/header.png" width: parent.width height: 60 - x: webView.viewportX < 0 ? -webView.viewportX : webView.viewportX > webView.viewportWidth-webView.width - ? -webView.viewportX+webView.viewportWidth-webView.width : 0 - y: webView.viewportY < 0 ? -webView.viewportY : progressOff* - (webView.viewportY>height?-height:-webView.viewportY) - Text { - id: headerText - - text: webView.title!='' || webView.progress == 1.0 ? webView.title : 'Loading...' - elide: Text.ElideRight - - color: "white" - styleColor: "black" - style: Text.Raised - - font.family: "Helvetica" - font.pointSize: 10 - font.bold: true - - anchors.left: header.left - anchors.right: header.right - anchors.leftMargin: 4 - anchors.rightMargin: 4 + x: webView.contentX < 0 ? -webView.contentX : webView.contentX > webView.contentWidth-webView.width + ? -webView.contentX+webView.contentWidth-webView.width : 0 + y: webView.contentY < 0 ? -webView.contentY : progressOff* + (webView.contentY>height?-height:-webView.contentY) + Row { + id: headerTitle + anchors.top: header.top anchors.topMargin: 4 - horizontalAlignment: Text.AlignHCenter + anchors.horizontalCenter: parent.horizontalCenter + spacing: 6 + + Image { + id: headerIcon + pixmap: webView.icon + } + + Text { + id: headerText + + text: webView.title!='' || webView.progress == 1.0 ? webView.title : 'Loading...' + elide: Text.ElideRight + //width: parent.width - headerIcon.width-4 + + color: "white" + styleColor: "black" + style: Text.Raised + + font.family: "Helvetica" + font.pointSize: 10 + font.bold: true + + horizontalAlignment: Text.AlignHCenter + } } Item { width: parent.width - anchors.top: headerText.bottom + anchors.top: headerTitle.bottom anchors.topMargin: 2 anchors.bottom: parent.bottom diff --git a/demos/declarative/webbrowser/webbrowser.qml b/demos/declarative/webbrowser/webbrowser.qml index faafd5d..6a427f4 100644 --- a/demos/declarative/webbrowser/webbrowser.qml +++ b/demos/declarative/webbrowser/webbrowser.qml @@ -30,10 +30,10 @@ Item { anchors.bottom: footer.top } RectSoftShadow { - x: -webView.viewportX - y: -webView.viewportY - width: webView.viewportWidth - height: webView.viewportHeight+headerSpace.height + x: -webView.contentX + y: -webView.contentY + width: webView.contentWidth + height: webView.contentHeight+headerSpace.height } Item { id: headerSpace diff --git a/demos/embedded/desktopservices/contenttab.cpp b/demos/embedded/desktopservices/contenttab.cpp index 8714b9c..fa9c586 100644 --- a/demos/embedded/desktopservices/contenttab.cpp +++ b/demos/embedded/desktopservices/contenttab.cpp @@ -114,20 +114,6 @@ QUrl ContentTab::itemUrl(QListWidgetItem *item) void ContentTab::keyPressEvent(QKeyEvent *event) { switch (event->key()) { - case Qt::Key_Up: - if (currentRow() == 0) { - setCurrentRow(count() - 1); - } else { - setCurrentRow(currentRow() - 1); - } - break; - case Qt::Key_Down: - if (currentRow() == (count() - 1)) { - setCurrentRow(0); - } else { - setCurrentRow(currentRow() + 1); - } - break; case Qt::Key_Select: openItem(currentItem()); default: diff --git a/doc/src/declarative/elements.qdoc b/doc/src/declarative/elements.qdoc index da96b8e..1fd4dad 100644 --- a/doc/src/declarative/elements.qdoc +++ b/doc/src/declarative/elements.qdoc @@ -98,7 +98,7 @@ The following table lists the QML elements provided by the Qt Declarative module \o \list \o \l Script -\o \l Connection +\o \l Connections \o \l Component \o \l Timer \o \l QtObject diff --git a/doc/src/declarative/extending.qdoc b/doc/src/declarative/extending.qdoc index d823bf6..5aaa7bd 100644 --- a/doc/src/declarative/extending.qdoc +++ b/doc/src/declarative/extending.qdoc @@ -421,9 +421,8 @@ C++ signature: \snippet examples/declarative/extending/signal/birthdayparty.h 0 In classes with multiple signals with the same name, only the final signal -is accessible as a signal property. Although QML provides an element, -\l Connection, for accessing the other signals it is less elegant. For the best -QML API, class developers should avoid overloading signal names. +is accessible as a signal property. Note that signals with the same name +but different parameters cannot be distinguished. Signal parameters become accessible by name to the assigned script. An unnamed parameter cannot be accessed, so care should be taken to name all the diff --git a/doc/src/development/qmake-manual.qdoc b/doc/src/development/qmake-manual.qdoc index 6406193..36bfcfe 100644 --- a/doc/src/development/qmake-manual.qdoc +++ b/doc/src/development/qmake-manual.qdoc @@ -1727,8 +1727,15 @@ distinction between shared and \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 139 + There is also a convenience function for adding conditional rules + called \c{addMMPRules}. Suppose you need certain functionality + to require different library depending on architecture. This + can be specified with \c{addMMPRules} as follows: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 148 + \note You should not use this variable to add MMP statements that are - explicitly supported by their own variables, such as + explicitly supported by their own variables, such as \c TARGET.EPOCSTACKSIZE. Doing so could result in duplicate statements in the MMP file. diff --git a/doc/src/examples/scribble.qdoc b/doc/src/examples/scribble.qdoc index 3c6d136..5c66410 100644 --- a/doc/src/examples/scribble.qdoc +++ b/doc/src/examples/scribble.qdoc @@ -74,9 +74,8 @@ \o \c MainWindow provides a menu above the \c ScribbleArea. \endlist - We will start by reviewing the \c ScribbleArea class, which - contains the interesting, then we will take a look at the \c - MainWindow class that uses it. + We will start by reviewing the \c ScribbleArea class. Then we will + review the \c MainWindow class, which uses \c ScribbleArea. \section1 ScribbleArea Class Definition diff --git a/doc/src/files-and-resources/datastreamformat.qdoc b/doc/src/files-and-resources/datastreamformat.qdoc index 1c2d887..bab2c2c 100644 --- a/doc/src/files-and-resources/datastreamformat.qdoc +++ b/doc/src/files-and-resources/datastreamformat.qdoc @@ -47,7 +47,7 @@ The \l QDataStream allows you to serialize some of the Qt data types. The table below lists the data types that QDataStream can serialize and how they are represented. The format described below is - \l{QDataStream::setVersion()}{version 8}. + \l{QDataStream::setVersion()}{version 12}. It is always best to cast integers to a Qt integer type, such as qint16 or quint32, when reading and writing. This ensures that @@ -57,9 +57,9 @@ \table \row \o bool - \o \list - \o boolean - \endlist + \o \list + \o boolean + \endlist \row \o qint8 \o \list \o signed byte @@ -145,6 +145,17 @@ \o Time (QTime) \o 0 for Qt::LocalTime, 1 for Qt::UTC (quint8) \endlist + \row \o QEasingCurve + \o \list + \o type (quint8) + \o func (quint64) + \o hasConfig (bool) + \o If hasConfig is true then these fields follow: + \o list + \o period (double) + \o amplitude (double) + \o overshoot (double) + \endlist \row \o QFont \o \list \o The family (QString) diff --git a/doc/src/platforms/emb-directfb-EmbLinux.qdoc b/doc/src/platforms/emb-directfb-EmbLinux.qdoc index 74f2aaa..9e060f8 100644 --- a/doc/src/platforms/emb-directfb-EmbLinux.qdoc +++ b/doc/src/platforms/emb-directfb-EmbLinux.qdoc @@ -267,7 +267,8 @@ perform well. \o QT_NO_DIRECTFB_IMAGEPROVIDER \o By default Qt will use DirectFB to load QPixmaps from disk/memory. If your DirectFB implementation does not support this it might make sense to -define this. +define this. If you see strange rendering issues with pixmaps that have an +alpha channel defining this could solve the problem. \row \o QT_DIRECTFB_IMAGEPROVIDER_KEEPALIVE @@ -327,4 +328,9 @@ QT_DIRECTFB_DISABLE_RASTERFALLBACKS is defined, DirectFB will only return instead of falling back to QRasterPaintEngine. Please note that these defines should only be used when optimizing the application. +\section2 Top level transparency +\note DirectFB supports partially or fully transparent top level windows, +either through QWidget::setWindowOpacity or through setting a non-opaque +background brush. Note that for the latter it is not supported to change an +opaque window to be transparent at runtime. */ diff --git a/doc/src/qt4-intro.qdoc b/doc/src/qt4-intro.qdoc index 91593d3..cf53df0 100644 --- a/doc/src/qt4-intro.qdoc +++ b/doc/src/qt4-intro.qdoc @@ -471,6 +471,27 @@ \tableofcontents + \section1 Declarative UI development with Qt Quick + + \section1 Network Bearer Management + + Bearer Management controls the connectivity state of the system. + The new Bearer Management API in the QtNetwork module allows the + application to identify whether the system is online and how many + interfaces there are, as well as start and stop interfaces, or + roam transparently between access points. + + QNetworkAccessManager uses this API for HTTP level roaming. + + \section1 Multimedia - playback and declarative elements + + The Multimedia API provides media playback and playlist support + for Qt Applications. Play music and movies through a single interface + with selectable output for movies to widgets or graphics view. + + Multimedia support for Quick is also available with the new multimedia + declarative elements. + \section1 New Classes, Functions, Macros, etc. Links to new classes, functions, macros, and other items diff --git a/doc/src/snippets/code/doc_src_qmake-manual.qdoc b/doc/src/snippets/code/doc_src_qmake-manual.qdoc index a48b53f..5a04420 100644 --- a/doc/src/snippets/code/doc_src_qmake-manual.qdoc +++ b/doc/src/snippets/code/doc_src_qmake-manual.qdoc @@ -969,3 +969,16 @@ DEPLOYMENT.installer_header = 0x12345678 //! [147] DEPLOYMENT.installer_header = "$${LITERAL_HASH}{\"My Application Installer\"},(0x12345678),1,0,0" //! [147] + +//! [148] +# Set conditional libraries +LIB.MARM = "LIBRARY myarm.lib" +LIB.WINSCW = "LIBRARY mywinscw.lib" +LIB.default = "LIBRARY mydefault.lib" + +# Add the conditional MMP rules +MYCONDITIONS = MARM WINSCW +MYVARIABLES = LIB + +addMMPRules(MYCONDITIONS, MYVARIABLES) +//! [148] diff --git a/doc/src/snippets/code/src_corelib_tools_qscopedpointer.cpp b/doc/src/snippets/code/src_corelib_tools_qscopedpointer.cpp index c068ba9..4158388 100644 --- a/doc/src/snippets/code/src_corelib_tools_qscopedpointer.cpp +++ b/doc/src/snippets/code/src_corelib_tools_qscopedpointer.cpp @@ -128,7 +128,7 @@ private: QScopedPointer<int, QScopedPointerArrayDeleter<int> > arrayPointer(new int[42]); // this QScopedPointer frees its data using free(): -QScopedPointer<int, QScopedPointerPodDeleter<int> > podPointer(reinterpret_cast<int *>(malloc(42))); +QScopedPointer<int, QScopedPointerPodDeleter> podPointer(reinterpret_cast<int *>(malloc(42))); // this struct calls "myCustomDeallocator" to delete the pointer struct ScopedPointerCustomDeleter diff --git a/examples/declarative/animations/easing.qml b/examples/declarative/animations/easing.qml index a7ba1c5..8f2655e 100644 --- a/examples/declarative/animations/easing.qml +++ b/examples/declarative/animations/easing.qml @@ -89,7 +89,7 @@ Rectangle { } Flickable { - anchors.fill: parent; viewportHeight: layout.height + anchors.fill: parent; contentHeight: layout.height Column { id: layout anchors.left: parent.left; anchors.right: parent.right diff --git a/examples/declarative/connections/connections.qml b/examples/declarative/connections/connections.qml index c140017..4692343 100644 --- a/examples/declarative/connections/connections.qml +++ b/examples/declarative/connections/connections.qml @@ -22,6 +22,6 @@ Rectangle { anchors { right: parent.right; bottom: parent.bottom; rightMargin: 10; bottomMargin: 10 } } - Connection { sender: leftButton; signal: "clicked()"; script: window.angle -= 90 } - Connection { sender: rightButton; signal: "clicked()"; script: window.angle += 90 } + Connections { target: leftButton; onClicked: window.angle -= 90 } + Connections { target: rightButton; onClicked: window.angle += 90 } } diff --git a/examples/declarative/listview/recipes.qml b/examples/declarative/listview/recipes.qml index f848be0..b76a9ab 100644 --- a/examples/declarative/listview/recipes.qml +++ b/examples/declarative/listview/recipes.qml @@ -81,7 +81,7 @@ Rectangle { Flickable { id: flick anchors.top: methodTitle.bottom; anchors.bottom: parent.bottom - width: parent.width; viewportHeight: methodText.height; clip: true + width: parent.width; contentHeight: methodText.height; clip: true Text { id: methodText; text: method; wrap: true; width: details.width } } Image { @@ -114,7 +114,7 @@ Rectangle { // Make the detailed view fill the entire list area PropertyChanges { target: wrapper; height: list.height } // Move the list so that this item is at the top. - PropertyChanges { target: wrapper.ListView.view; explicit: true; viewportY: wrapper.y } + PropertyChanges { target: wrapper.ListView.view; explicit: true; contentY: wrapper.y } // Disallow flicking while we're in detailed view PropertyChanges { target: wrapper.ListView.view; interactive: false } } @@ -124,7 +124,7 @@ Rectangle { ParallelAnimation { ColorAnimation { property: "color"; duration: 500 } NumberAnimation { - duration: 300; properties: "detailsOpacity,x,viewportY,height,width" + duration: 300; properties: "detailsOpacity,x,contentY,height,width" } } } diff --git a/examples/declarative/parallax/qml/ParallaxView.qml b/examples/declarative/parallax/qml/ParallaxView.qml index 811891b..5e58100 100644 --- a/examples/declarative/parallax/qml/ParallaxView.qml +++ b/examples/declarative/parallax/qml/ParallaxView.qml @@ -10,8 +10,8 @@ Item { Image { id: background fillMode: Image.TileHorizontally - x: -list.viewportX / 2 - width: Math.max(list.viewportWidth, parent.width) + x: -list.contentX / 2 + width: Math.max(list.contentWidth, parent.width) } ListView { diff --git a/examples/declarative/progressbar/progressbars.qml b/examples/declarative/progressbar/progressbars.qml index fdd4ca7..6530c3d 100644 --- a/examples/declarative/progressbar/progressbars.qml +++ b/examples/declarative/progressbar/progressbars.qml @@ -6,7 +6,7 @@ Rectangle { width: 600; height: 405; color: "#edecec" Flickable { - anchors.fill: parent; viewportHeight: column.height + 20 + anchors.fill: parent; contentHeight: column.height + 20 Column { id: column; x: 10; y: 10; spacing: 10 Repeater { diff --git a/examples/declarative/scrollbar/display.qml b/examples/declarative/scrollbar/display.qml index a96db6e..84763d2 100644 --- a/examples/declarative/scrollbar/display.qml +++ b/examples/declarative/scrollbar/display.qml @@ -12,8 +12,8 @@ Rectangle { source: "pics/niagara_falls.jpg" asynchronous: true } - viewportWidth: picture.width - viewportHeight: picture.height + contentWidth: picture.width + contentHeight: picture.height // Only show the scrollbars when the view is moving. states: [ State { diff --git a/examples/declarative/velocity/velocity.qml b/examples/declarative/velocity/velocity.qml index 50d69d8..0d1881e 100644 --- a/examples/declarative/velocity/velocity.qml +++ b/examples/declarative/velocity/velocity.qml @@ -96,7 +96,7 @@ Rectangle { } Flickable { id: flickable - anchors.fill: parent; viewportWidth: lay.width + anchors.fill: parent; contentWidth: lay.width Row { id: lay Repeater { diff --git a/examples/declarative/webview/qdeclarative-in-html.qml b/examples/declarative/webview/qdeclarative-in-html.qml index a2f2f2a..77180ec 100644 --- a/examples/declarative/webview/qdeclarative-in-html.qml +++ b/examples/declarative/webview/qdeclarative-in-html.qml @@ -6,8 +6,8 @@ Rectangle { Flickable { width: parent.width height: parent.height/2 - viewportWidth: web.width*web.scale - viewportHeight: web.height*web.scale + contentWidth: web.width*web.scale + contentHeight: web.height*web.scale WebView { id: web width: 250 diff --git a/examples/network/http/httpwindow.cpp b/examples/network/http/httpwindow.cpp index 95fc82f..ec7cd33 100644 --- a/examples/network/http/httpwindow.cpp +++ b/examples/network/http/httpwindow.cpp @@ -49,9 +49,9 @@ HttpWindow::HttpWindow(QWidget *parent) : QDialog(parent) { #ifndef QT_NO_OPENSSL - urlLineEdit = new QLineEdit("https://"); + urlLineEdit = new QLineEdit("https://qt.nokia.com/"); #else - urlLineEdit = new QLineEdit("http://"); + urlLineEdit = new QLineEdit("http://qt.nokia.com/"); #endif urlLabel = new QLabel(tr("&URL:")); @@ -70,21 +70,14 @@ HttpWindow::HttpWindow(QWidget *parent) progressDialog = new QProgressDialog(this); - http = new QHttp(this); - connect(urlLineEdit, SIGNAL(textChanged(QString)), this, SLOT(enableDownloadButton())); - connect(http, SIGNAL(requestFinished(int,bool)), - this, SLOT(httpRequestFinished(int,bool))); - connect(http, SIGNAL(dataReadProgress(int,int)), - this, SLOT(updateDataReadProgress(int,int))); - connect(http, SIGNAL(responseHeaderReceived(QHttpResponseHeader)), - this, SLOT(readResponseHeader(QHttpResponseHeader))); - connect(http, SIGNAL(authenticationRequired(QString,quint16,QAuthenticator*)), - this, SLOT(slotAuthenticationRequired(QString,quint16,QAuthenticator*))); + + connect(&qnam, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)), + this, SLOT(slotAuthenticationRequired(QNetworkReply*,QAuthenticator*))); #ifndef QT_NO_OPENSSL - connect(http, SIGNAL(sslErrors(QList<QSslError>)), - this, SLOT(sslErrors(QList<QSslError>))); + connect(&qnam, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)), + this, SLOT(sslErrors(QNetworkReply*,QList<QSslError>))); #endif connect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelDownload())); connect(downloadButton, SIGNAL(clicked()), this, SLOT(downloadFile())); @@ -104,9 +97,21 @@ HttpWindow::HttpWindow(QWidget *parent) urlLineEdit->setFocus(); } +void HttpWindow::startRequest(QUrl url) +{ + reply = qnam.get(QNetworkRequest(url)); + connect(reply, SIGNAL(finished()), + this, SLOT(httpFinished())); + connect(reply, SIGNAL(readyRead()), + this, SLOT(httpReadyRead())); + connect(reply, SIGNAL(downloadProgress(qint64,qint64)), + this, SLOT(updateDataReadProgress(qint64,qint64))); +} + void HttpWindow::downloadFile() { - QUrl url(urlLineEdit->text()); + url = urlLineEdit->text(); + QFileInfo fileInfo(url.path()); QString fileName = fileInfo.fileName(); if (fileName.isEmpty()) @@ -132,35 +137,26 @@ void HttpWindow::downloadFile() return; } - QHttp::ConnectionMode mode = url.scheme().toLower() == "https" ? QHttp::ConnectionModeHttps : QHttp::ConnectionModeHttp; - http->setHost(url.host(), mode, url.port() == -1 ? 0 : url.port()); - - if (!url.userName().isEmpty()) - http->setUser(url.userName(), url.password()); - - httpRequestAborted = false; - QByteArray path = QUrl::toPercentEncoding(url.path(), "!$&'()*+,;=:@/"); - if (path.isEmpty()) - path = "/"; - httpGetId = http->get(path, file); progressDialog->setWindowTitle(tr("HTTP")); progressDialog->setLabelText(tr("Downloading %1.").arg(fileName)); downloadButton->setEnabled(false); + + // schedule the request + httpRequestAborted = false; + startRequest(url); } void HttpWindow::cancelDownload() { statusLabel->setText(tr("Download canceled.")); httpRequestAborted = true; - http->abort(); + reply->abort(); downloadButton->setEnabled(true); } -void HttpWindow::httpRequestFinished(int requestId, bool error) +void HttpWindow::httpFinished() { - if (requestId != httpGetId) - return; if (httpRequestAborted) { if (file) { file->close(); @@ -168,54 +164,58 @@ void HttpWindow::httpRequestFinished(int requestId, bool error) delete file; file = 0; } - + reply->deleteLater(); progressDialog->hide(); return; } - if (requestId != httpGetId) - return; - progressDialog->hide(); + file->flush(); file->close(); - if (error) { + + QVariant redirectionTarget = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); + if (reply->error()) { file->remove(); QMessageBox::information(this, tr("HTTP"), tr("Download failed: %1.") - .arg(http->errorString())); + .arg(reply->errorString())); + downloadButton->setEnabled(true); + } else if (!redirectionTarget.isNull()) { + QUrl newUrl = url.resolved(redirectionTarget.toUrl()); + if (QMessageBox::question(this, tr("HTTP"), + tr("Redirect to %1 ?").arg(newUrl.toString()), + QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { + url = newUrl; + reply->deleteLater(); + file->open(QIODevice::WriteOnly); + file->resize(0); + startRequest(url); + return; + } } else { QString fileName = QFileInfo(QUrl(urlLineEdit->text()).path()).fileName(); statusLabel->setText(tr("Downloaded %1 to current directory.").arg(fileName)); + downloadButton->setEnabled(true); } - downloadButton->setEnabled(true); + reply->deleteLater(); + reply = 0; delete file; file = 0; } -void HttpWindow::readResponseHeader(const QHttpResponseHeader &responseHeader) +void HttpWindow::httpReadyRead() { - switch (responseHeader.statusCode()) { - case 200: // Ok - case 301: // Moved Permanently - case 302: // Found - case 303: // See Other - case 307: // Temporary Redirect - // these are not error conditions - break; - - default: - QMessageBox::information(this, tr("HTTP"), - tr("Download failed: %1.") - .arg(responseHeader.reasonPhrase())); - httpRequestAborted = true; - progressDialog->hide(); - http->abort(); - } + // this slot gets called everytime the QNetworkReply has new data. + // We read all of its new data and write it into the file. + // That way we use less RAM than when reading it at the finished() + // signal of the QNetworkReply + if (file) + file->write(reply->readAll()); } -void HttpWindow::updateDataReadProgress(int bytesRead, int totalBytes) +void HttpWindow::updateDataReadProgress(qint64 bytesRead, qint64 totalBytes) { if (httpRequestAborted) return; @@ -229,14 +229,19 @@ void HttpWindow::enableDownloadButton() downloadButton->setEnabled(!urlLineEdit->text().isEmpty()); } -void HttpWindow::slotAuthenticationRequired(const QString &hostName, quint16, QAuthenticator *authenticator) +void HttpWindow::slotAuthenticationRequired(QNetworkReply*,QAuthenticator *authenticator) { QDialog dlg; Ui::Dialog ui; ui.setupUi(&dlg); dlg.adjustSize(); - ui.siteDescription->setText(tr("%1 at %2").arg(authenticator->realm()).arg(hostName)); - + ui.siteDescription->setText(tr("%1 at %2").arg(authenticator->realm()).arg(url.host())); + + // Did the URL have information? Fill the UI + // This is only relevant if the URL-supplied credentials were wrong + ui.userEdit->setText(url.userName()); + ui.passwordEdit->setText(url.password()); + if (dlg.exec() == QDialog::Accepted) { authenticator->setUser(ui.userEdit->text()); authenticator->setPassword(ui.passwordEdit->text()); @@ -244,7 +249,7 @@ void HttpWindow::slotAuthenticationRequired(const QString &hostName, quint16, QA } #ifndef QT_NO_OPENSSL -void HttpWindow::sslErrors(const QList<QSslError> &errors) +void HttpWindow::sslErrors(QNetworkReply*,const QList<QSslError> &errors) { QString errorString; foreach (const QSslError &error, errors) { @@ -253,10 +258,10 @@ void HttpWindow::sslErrors(const QList<QSslError> &errors) errorString += error.errorString(); } - if (QMessageBox::warning(this, tr("HTTP Example"), + if (QMessageBox::warning(this, tr("HTTP"), tr("One or more SSL errors has occurred: %1").arg(errorString), QMessageBox::Ignore | QMessageBox::Abort) == QMessageBox::Ignore) { - http->ignoreSslErrors(); + reply->ignoreSslErrors(); } } #endif diff --git a/examples/network/http/httpwindow.h b/examples/network/http/httpwindow.h index 9dca8a5..83898af 100644 --- a/examples/network/http/httpwindow.h +++ b/examples/network/http/httpwindow.h @@ -43,18 +43,21 @@ #define HTTPWINDOW_H #include <QDialog> +#include <QNetworkAccessManager> +#include <QUrl> QT_BEGIN_NAMESPACE class QDialogButtonBox; class QFile; -class QHttp; -class QHttpResponseHeader; class QLabel; class QLineEdit; class QProgressDialog; class QPushButton; class QSslError; class QAuthenticator; +class QNetworkReply; + + QT_END_NAMESPACE class HttpWindow : public QDialog @@ -64,16 +67,18 @@ class HttpWindow : public QDialog public: HttpWindow(QWidget *parent = 0); + void startRequest(QUrl url); + private slots: void downloadFile(); void cancelDownload(); - void httpRequestFinished(int requestId, bool error); - void readResponseHeader(const QHttpResponseHeader &responseHeader); - void updateDataReadProgress(int bytesRead, int totalBytes); + void httpFinished(); + void httpReadyRead(); + void updateDataReadProgress(qint64 bytesRead, qint64 totalBytes); void enableDownloadButton(); - void slotAuthenticationRequired(const QString &, quint16, QAuthenticator *); + void slotAuthenticationRequired(QNetworkReply*,QAuthenticator *); #ifndef QT_NO_OPENSSL - void sslErrors(const QList<QSslError> &errors); + void sslErrors(QNetworkReply*,const QList<QSslError> &errors); #endif private: @@ -85,7 +90,9 @@ private: QPushButton *quitButton; QDialogButtonBox *buttonBox; - QHttp *http; + QUrl url; + QNetworkAccessManager qnam; + QNetworkReply *reply; QFile *file; int httpGetId; bool httpRequestAborted; diff --git a/examples/network/http/main.cpp b/examples/network/http/main.cpp index ecbe100..817b2be 100644 --- a/examples/network/http/main.cpp +++ b/examples/network/http/main.cpp @@ -46,7 +46,6 @@ int main(int argc, char *argv[]) { QApplication app(argc, argv); - qWarning("The usage of QHttp is not recommended anymore, please use QNetworkAccessManager."); HttpWindow httpWin; httpWin.show(); return httpWin.exec(); diff --git a/examples/network/loopback/dialog.cpp b/examples/network/loopback/dialog.cpp index 27cff31..b504e36 100644 --- a/examples/network/loopback/dialog.cpp +++ b/examples/network/loopback/dialog.cpp @@ -44,12 +44,12 @@ #include "dialog.h" -#if !defined(Q_OS_WINCE) +#if !defined(Q_OS_WINCE) && !defined(Q_OS_SYMBIAN) static const int TotalBytes = 50 * 1024 * 1024; #else static const int TotalBytes = 5 * 1024 * 1024; #endif -static const int PayloadSize = 65536; +static const int PayloadSize = 64 * 1024; // 64 KB Dialog::Dialog(QWidget *parent) : QDialog(parent) @@ -130,6 +130,7 @@ void Dialog::acceptConnection() void Dialog::startTransfer() { + // called when the TCP client connected to the loopback server bytesToWrite = TotalBytes - (int)tcpClient.write(QByteArray(PayloadSize, '@')); clientStatusLabel->setText(tr("Connected")); } @@ -155,8 +156,11 @@ void Dialog::updateServerProgress() void Dialog::updateClientProgress(qint64 numBytes) { + // callen when the TCP client has written some bytes bytesWritten += (int)numBytes; - if (bytesToWrite > 0) + + // only write more if not finished and when the Qt write buffer is below a certain size. + if (bytesToWrite > 0 && tcpClient.bytesToWrite() <= 4*PayloadSize) bytesToWrite -= (int)tcpClient.write(QByteArray(qMin(bytesToWrite, PayloadSize), '@')); clientProgressBar->setMaximum(TotalBytes); diff --git a/mkspecs/aix-g++-64/qmake.conf b/mkspecs/aix-g++-64/qmake.conf index 995178b..d9d9c38 100644 --- a/mkspecs/aix-g++-64/qmake.conf +++ b/mkspecs/aix-g++-64/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/aix-g++/qmake.conf b/mkspecs/aix-g++/qmake.conf index 969aa76..5fc4c17 100644 --- a/mkspecs/aix-g++/qmake.conf +++ b/mkspecs/aix-g++/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/aix-xlc-64/qmake.conf b/mkspecs/aix-xlc-64/qmake.conf index a18aa9f..c67bd0b 100644 --- a/mkspecs/aix-xlc-64/qmake.conf +++ b/mkspecs/aix-xlc-64/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/aix-xlc/qmake.conf b/mkspecs/aix-xlc/qmake.conf index 42f6f7e..e81fb66 100644 --- a/mkspecs/aix-xlc/qmake.conf +++ b/mkspecs/aix-xlc/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/common/qws.conf b/mkspecs/common/qws.conf index 0242db4..96341a7 100644 --- a/mkspecs/common/qws.conf +++ b/mkspecs/common/qws.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release incremental link_prl QT += core gui network diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf index d2edbdb..48a28b7 100644 --- a/mkspecs/common/symbian/symbian.conf +++ b/mkspecs/common/symbian/symbian.conf @@ -115,6 +115,7 @@ QMAKE_STRIPFLAGS_LIB += --strip-unneeded load(qt_config) load(symbian/platform_paths) +load(symbian/add_mmp_rules) symbian-abld { # Versions of abld prior to Symbian^3 have a bug where you cannot remove something from the command line without replacing it @@ -123,7 +124,7 @@ symbian-abld { } else { MMP_RULES_DONT_EXPORT_ALL_CLASS_IMPEDIMENTA = "OPTION_REPLACE ARMCC --export_all_vtbl // don't use --export_all_vtbl" } -MMP_RULES += PAGED +MMP_RULES += PAGED BYTEPAIRCOMPRESSTARGET MMP_RULES += $$MMP_RULES_DONT_EXPORT_ALL_CLASS_IMPEDIMENTA SYMBIAN_PLATFORMS = WINSCW GCCE ARMV5 ARMV6 @@ -153,7 +154,7 @@ exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.0.sis S60_VERSION = 3.2 } else { S60_VERSION = 3.1 - MMP_RULES -= PAGED + MMP_RULES -= PAGED BYTEPAIRCOMPRESSTARGET } } @@ -171,4 +172,4 @@ symbian { # [TODO] QMAKE_CXXFLAGS.GCCE += $${QMAKE_CXXFLAGS_FAST_VFP.GCCE} } } -}
\ No newline at end of file +} diff --git a/mkspecs/cygwin-g++/qmake.conf b/mkspecs/cygwin-g++/qmake.conf index 9cbc3d7..af9881b 100644 --- a/mkspecs/cygwin-g++/qmake.conf +++ b/mkspecs/cygwin-g++/qmake.conf @@ -5,6 +5,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release incremental link_prl QT += core gui diff --git a/mkspecs/darwin-g++/qmake.conf b/mkspecs/darwin-g++/qmake.conf index 72baa89..995679e 100644 --- a/mkspecs/darwin-g++/qmake.conf +++ b/mkspecs/darwin-g++/qmake.conf @@ -5,6 +5,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = macx TEMPLATE = app CONFIG += qt warn_on release link_prl native_precompiled_headers QT += core gui diff --git a/mkspecs/features/default_post.prf b/mkspecs/features/default_post.prf index 01074f4..155bfc3 100644 --- a/mkspecs/features/default_post.prf +++ b/mkspecs/features/default_post.prf @@ -8,3 +8,14 @@ incredibuild_xge { QMAKE_INCDIR += $$QMAKE_INCDIR_POST QMAKE_LIBDIR += $$QMAKE_LIBDIR_POST + +# Let every project have a standard GNU `check' target +!contains(QMAKE_EXTRA_TARGETS, check) { + # `make check' should iterate through all subdirs + contains(TEMPLATE, subdirs) { + check.CONFIG = recursive + check.recurse = $$SUBDIRS + check.recurse_target = check + } + QMAKE_EXTRA_TARGETS += check +} diff --git a/mkspecs/features/qttest_p4.prf b/mkspecs/features/qttest_p4.prf index e0b22f2..53c0d74 100644 --- a/mkspecs/features/qttest_p4.prf +++ b/mkspecs/features/qttest_p4.prf @@ -20,12 +20,32 @@ check.path = . macx: check.commands += ./$(QMAKE_TARGET).app/Contents/MacOS/$(QMAKE_TARGET) else:unix: check.commands += ./$(QMAKE_TARGET) else:win32: { - CONFIG(debug, debug|release):check.commands += debug\\$(QMAKE_TARGET) - else:check.commands += release\\$(QMAKE_TARGET) + CONFIG(debug, debug|release):check.commands += $(DESTDIR_TARGET) + else:check.commands += $(DESTDIR_TARGET) } embedded: check.commands += -qws QMAKE_EXTRA_TARGETS += check +!debug_and_release|build_pass { + check.depends = $(DESTDIR_TARGET) +} else { + check.CONFIG = recursive + # In debug and release mode, only run the test once. + # Run debug if available, release otherwise. + debug_and_release { + check.target = dummy_check + check.recurse_target = check + debug { + real_check.depends = debug-check + real_check.target = check + QMAKE_EXTRA_TARGETS += real_check + } else { + real_check.depends = release-check + real_check.target = check + QMAKE_EXTRA_TARGETS += real_check + } + } +} target.path += $$[QT_INSTALL_PREFIX]/tests/qt4 INSTALLS += target diff --git a/mkspecs/features/symbian/add_mmp_rules.prf b/mkspecs/features/symbian/add_mmp_rules.prf new file mode 100644 index 0000000..5384dbe --- /dev/null +++ b/mkspecs/features/symbian/add_mmp_rules.prf @@ -0,0 +1,33 @@ +# Arg1: List of conditions to generate block for +# Arg2: List of variables containing rules to add +defineTest(addMMPRules) { + unset(myConditions) + unset(myVariables) + unset(myIfDef) + + myConditions = $$eval($$1) default + myVariables = $$eval($$2) + myIfDef = if + + for(condition, $$list($$myConditions)) { + contains(condition, default) { + libBlock = "$${LITERAL_HASH}else" + } else { + libBlock = "$${LITERAL_HASH}$${myIfDef} defined($${condition})" + myIfDef = elif + } + + for(var, $$list($$myVariables)) { + varVal = $$eval($${var}.$${condition}) + isEmpty(varVal) { + # No value defined for current condition, so use default + varVal = $$eval($${var}.default) + } + !isEmpty(varVal): libBlock += "$$join(varVal,$$escape_expand(\n))" + } + + MMP_RULES += $$libBlock + } + MMP_RULES += "$${LITERAL_HASH}endif" + export(MMP_RULES) +} diff --git a/mkspecs/freebsd-g++/qmake.conf b/mkspecs/freebsd-g++/qmake.conf index acd2a6a..51a1960 100644 --- a/mkspecs/freebsd-g++/qmake.conf +++ b/mkspecs/freebsd-g++/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/freebsd-g++34/qmake.conf b/mkspecs/freebsd-g++34/qmake.conf index 9627b46..3e6bf6a 100644 --- a/mkspecs/freebsd-g++34/qmake.conf +++ b/mkspecs/freebsd-g++34/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/freebsd-g++40/qmake.conf b/mkspecs/freebsd-g++40/qmake.conf index e3a3c86..43d6980 100644 --- a/mkspecs/freebsd-g++40/qmake.conf +++ b/mkspecs/freebsd-g++40/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/freebsd-icc/qmake.conf b/mkspecs/freebsd-icc/qmake.conf index 60fa7ee..c9c3140 100644 --- a/mkspecs/freebsd-icc/qmake.conf +++ b/mkspecs/freebsd-icc/qmake.conf @@ -28,6 +28,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/hpux-acc-64/qmake.conf b/mkspecs/hpux-acc-64/qmake.conf index 8757459..b138ef8 100644 --- a/mkspecs/hpux-acc-64/qmake.conf +++ b/mkspecs/hpux-acc-64/qmake.conf @@ -46,6 +46,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/hpux-acc-o64/qmake.conf b/mkspecs/hpux-acc-o64/qmake.conf index d4d2c7d..b703540 100644 --- a/mkspecs/hpux-acc-o64/qmake.conf +++ b/mkspecs/hpux-acc-o64/qmake.conf @@ -46,6 +46,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/hpux-acc/qmake.conf b/mkspecs/hpux-acc/qmake.conf index 19ee00f..8223a07 100644 --- a/mkspecs/hpux-acc/qmake.conf +++ b/mkspecs/hpux-acc/qmake.conf @@ -25,6 +25,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/hpux-g++-64/qmake.conf b/mkspecs/hpux-g++-64/qmake.conf index f76bd4e..734a5f7 100644 --- a/mkspecs/hpux-g++-64/qmake.conf +++ b/mkspecs/hpux-g++-64/qmake.conf @@ -6,6 +6,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/hpux-g++/qmake.conf b/mkspecs/hpux-g++/qmake.conf index 1ed2ee6..6935ea9 100644 --- a/mkspecs/hpux-g++/qmake.conf +++ b/mkspecs/hpux-g++/qmake.conf @@ -6,6 +6,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl plugin_no_soname QT += core gui diff --git a/mkspecs/hpuxi-acc-32/qmake.conf b/mkspecs/hpuxi-acc-32/qmake.conf index 00b400f..93006e5 100644 --- a/mkspecs/hpuxi-acc-32/qmake.conf +++ b/mkspecs/hpuxi-acc-32/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release plugin_no_soname QT += core gui diff --git a/mkspecs/hpuxi-acc-64/qmake.conf b/mkspecs/hpuxi-acc-64/qmake.conf index feefd30..2fa1f01 100644 --- a/mkspecs/hpuxi-acc-64/qmake.conf +++ b/mkspecs/hpuxi-acc-64/qmake.conf @@ -46,6 +46,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release plugin_no_soname QT += core gui diff --git a/mkspecs/hpuxi-g++-64/qmake.conf b/mkspecs/hpuxi-g++-64/qmake.conf index e8fa053..05b0691 100644 --- a/mkspecs/hpuxi-g++-64/qmake.conf +++ b/mkspecs/hpuxi-g++-64/qmake.conf @@ -11,6 +11,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/hurd-g++/qmake.conf b/mkspecs/hurd-g++/qmake.conf index f213f2d..6570e40 100644 --- a/mkspecs/hurd-g++/qmake.conf +++ b/mkspecs/hurd-g++/qmake.conf @@ -6,6 +6,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app QT += core gui CONFIG += qt warn_on release link_prl diff --git a/mkspecs/irix-cc-64/qmake.conf b/mkspecs/irix-cc-64/qmake.conf index bf5febb..4b651b2 100644 --- a/mkspecs/irix-cc-64/qmake.conf +++ b/mkspecs/irix-cc-64/qmake.conf @@ -35,6 +35,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/irix-cc/qmake.conf b/mkspecs/irix-cc/qmake.conf index 99e8064..0070d42 100644 --- a/mkspecs/irix-cc/qmake.conf +++ b/mkspecs/irix-cc/qmake.conf @@ -35,6 +35,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/irix-g++-64/qmake.conf b/mkspecs/irix-g++-64/qmake.conf index d614b9d..56f02f1 100644 --- a/mkspecs/irix-g++-64/qmake.conf +++ b/mkspecs/irix-g++-64/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/irix-g++/qmake.conf b/mkspecs/irix-g++/qmake.conf index 1f1df30..c1eafdb 100644 --- a/mkspecs/irix-g++/qmake.conf +++ b/mkspecs/irix-g++/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/linux-cxx/qmake.conf b/mkspecs/linux-cxx/qmake.conf index 633b738..879c78a 100644 --- a/mkspecs/linux-cxx/qmake.conf +++ b/mkspecs/linux-cxx/qmake.conf @@ -5,6 +5,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/linux-ecc-64/qmake.conf b/mkspecs/linux-ecc-64/qmake.conf index 359d44b..21f2960 100644 --- a/mkspecs/linux-ecc-64/qmake.conf +++ b/mkspecs/linux-ecc-64/qmake.conf @@ -5,6 +5,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/linux-g++-32/qmake.conf b/mkspecs/linux-g++-32/qmake.conf index 44866cf..1e5c50b 100644 --- a/mkspecs/linux-g++-32/qmake.conf +++ b/mkspecs/linux-g++-32/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release incremental link_prl QT += core gui diff --git a/mkspecs/linux-g++-64/qmake.conf b/mkspecs/linux-g++-64/qmake.conf index 4f8794f..e7372cc 100644 --- a/mkspecs/linux-g++-64/qmake.conf +++ b/mkspecs/linux-g++-64/qmake.conf @@ -6,6 +6,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release incremental link_prl QT += core gui diff --git a/mkspecs/linux-g++-maemo/qmake.conf b/mkspecs/linux-g++-maemo/qmake.conf index 38c26a6..ca201bc 100644 --- a/mkspecs/linux-g++-maemo/qmake.conf +++ b/mkspecs/linux-g++-maemo/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release incremental link_prl CONFIG += nostrip diff --git a/mkspecs/linux-g++/qmake.conf b/mkspecs/linux-g++/qmake.conf index 47784e2..4b21896 100644 --- a/mkspecs/linux-g++/qmake.conf +++ b/mkspecs/linux-g++/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release incremental link_prl QT += core gui diff --git a/mkspecs/linux-icc/qmake.conf b/mkspecs/linux-icc/qmake.conf index 965de0c..eeb24a3 100644 --- a/mkspecs/linux-icc/qmake.conf +++ b/mkspecs/linux-icc/qmake.conf @@ -11,6 +11,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/linux-kcc/qmake.conf b/mkspecs/linux-kcc/qmake.conf index 009c486..217572f 100644 --- a/mkspecs/linux-kcc/qmake.conf +++ b/mkspecs/linux-kcc/qmake.conf @@ -14,6 +14,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/linux-llvm/qmake.conf b/mkspecs/linux-llvm/qmake.conf index 9c34377..73d6609 100644 --- a/mkspecs/linux-llvm/qmake.conf +++ b/mkspecs/linux-llvm/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release incremental link_prl QT += core gui diff --git a/mkspecs/linux-lsb-g++/qmake.conf b/mkspecs/linux-lsb-g++/qmake.conf index b603a16..4b4deab 100644 --- a/mkspecs/linux-lsb-g++/qmake.conf +++ b/mkspecs/linux-lsb-g++/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release incremental link_prl QT += core gui diff --git a/mkspecs/linux-pgcc/qmake.conf b/mkspecs/linux-pgcc/qmake.conf index 756f1af..19af8ee 100644 --- a/mkspecs/linux-pgcc/qmake.conf +++ b/mkspecs/linux-pgcc/qmake.conf @@ -5,6 +5,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/lynxos-g++/qmake.conf b/mkspecs/lynxos-g++/qmake.conf index 40f2b9f..eae3308 100644 --- a/mkspecs/lynxos-g++/qmake.conf +++ b/mkspecs/lynxos-g++/qmake.conf @@ -5,6 +5,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release incremental link_prl QT += core gui diff --git a/mkspecs/macx-g++/qmake.conf b/mkspecs/macx-g++/qmake.conf index 4355073..4464686 100644 --- a/mkspecs/macx-g++/qmake.conf +++ b/mkspecs/macx-g++/qmake.conf @@ -7,6 +7,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = macx TEMPLATE = app CONFIG += qt warn_on release app_bundle incremental global_init_link_order lib_version_first plugin_no_soname link_prl QT += core gui diff --git a/mkspecs/macx-g++40/qmake.conf b/mkspecs/macx-g++40/qmake.conf index d6fd09d..784f5fc 100644 --- a/mkspecs/macx-g++40/qmake.conf +++ b/mkspecs/macx-g++40/qmake.conf @@ -7,6 +7,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = macx TEMPLATE = app CONFIG += qt warn_on release app_bundle incremental global_init_link_order lib_version_first plugin_no_soname link_prl QT += core gui diff --git a/mkspecs/macx-g++42/qmake.conf b/mkspecs/macx-g++42/qmake.conf index 06bbdcb..fb93697 100644 --- a/mkspecs/macx-g++42/qmake.conf +++ b/mkspecs/macx-g++42/qmake.conf @@ -7,6 +7,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = macx TEMPLATE = app CONFIG += qt warn_on release app_bundle incremental global_init_link_order lib_version_first plugin_no_soname link_prl QT += core gui diff --git a/mkspecs/macx-icc/qmake.conf b/mkspecs/macx-icc/qmake.conf index b7753d8..00de6c4 100644 --- a/mkspecs/macx-icc/qmake.conf +++ b/mkspecs/macx-icc/qmake.conf @@ -13,6 +13,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = macx TEMPLATE = app CONFIG += qt warn_on release link_prl app_bundle QT += core gui diff --git a/mkspecs/macx-llvm/qmake.conf b/mkspecs/macx-llvm/qmake.conf index de8040c..d46baea 100644 --- a/mkspecs/macx-llvm/qmake.conf +++ b/mkspecs/macx-llvm/qmake.conf @@ -7,6 +7,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = macx TEMPLATE = app CONFIG += qt warn_on release app_bundle incremental global_init_link_order lib_version_first plugin_no_soname link_prl QT += core gui diff --git a/mkspecs/macx-xlc/qmake.conf b/mkspecs/macx-xlc/qmake.conf index 6a8c246..f84524b 100644 --- a/mkspecs/macx-xlc/qmake.conf +++ b/mkspecs/macx-xlc/qmake.conf @@ -5,6 +5,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = macx TEMPLATE = app CONFIG += qt warn_on release app_bundle global_init_link_order lib_version_first plugin_no_soname link_prl QT += core gui diff --git a/mkspecs/netbsd-g++/qmake.conf b/mkspecs/netbsd-g++/qmake.conf index 622bace..1cb449f 100644 --- a/mkspecs/netbsd-g++/qmake.conf +++ b/mkspecs/netbsd-g++/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/openbsd-g++/qmake.conf b/mkspecs/openbsd-g++/qmake.conf index 4204f65..c948c90 100644 --- a/mkspecs/openbsd-g++/qmake.conf +++ b/mkspecs/openbsd-g++/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/qws/freebsd-generic-g++/qmake.conf b/mkspecs/qws/freebsd-generic-g++/qmake.conf index 19d6709..6e30d4f 100644 --- a/mkspecs/qws/freebsd-generic-g++/qmake.conf +++ b/mkspecs/qws/freebsd-generic-g++/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release QT += core gui network diff --git a/mkspecs/qws/macx-generic-g++/qmake.conf b/mkspecs/qws/macx-generic-g++/qmake.conf index b724cbc..f753222 100644 --- a/mkspecs/qws/macx-generic-g++/qmake.conf +++ b/mkspecs/qws/macx-generic-g++/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = macx TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui network diff --git a/mkspecs/qws/solaris-generic-g++/qmake.conf b/mkspecs/qws/solaris-generic-g++/qmake.conf index db83a57..f5874c2 100644 --- a/mkspecs/qws/solaris-generic-g++/qmake.conf +++ b/mkspecs/qws/solaris-generic-g++/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui network diff --git a/mkspecs/sco-cc/qmake.conf b/mkspecs/sco-cc/qmake.conf index f682f49..6eb5ca1 100644 --- a/mkspecs/sco-cc/qmake.conf +++ b/mkspecs/sco-cc/qmake.conf @@ -8,6 +8,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app QT += core gui CONFIG += qt warn_on release link_prl diff --git a/mkspecs/sco-g++/qmake.conf b/mkspecs/sco-g++/qmake.conf index 268bf32..746cf2c 100644 --- a/mkspecs/sco-g++/qmake.conf +++ b/mkspecs/sco-g++/qmake.conf @@ -5,6 +5,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/solaris-cc-64/qmake.conf b/mkspecs/solaris-cc-64/qmake.conf index d51d77a..3d35d62 100644 --- a/mkspecs/solaris-cc-64/qmake.conf +++ b/mkspecs/solaris-cc-64/qmake.conf @@ -22,6 +22,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/solaris-cc/qmake.conf b/mkspecs/solaris-cc/qmake.conf index 354b83c..0c97620 100644 --- a/mkspecs/solaris-cc/qmake.conf +++ b/mkspecs/solaris-cc/qmake.conf @@ -5,6 +5,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/solaris-g++-64/qmake.conf b/mkspecs/solaris-g++-64/qmake.conf index e89aff3..587c630 100644 --- a/mkspecs/solaris-g++-64/qmake.conf +++ b/mkspecs/solaris-g++-64/qmake.conf @@ -26,6 +26,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/solaris-g++/qmake.conf b/mkspecs/solaris-g++/qmake.conf index bce0889..0814980 100644 --- a/mkspecs/solaris-g++/qmake.conf +++ b/mkspecs/solaris-g++/qmake.conf @@ -9,6 +9,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/symbian-abld/qmake.conf b/mkspecs/symbian-abld/qmake.conf index 499bf63..33b897d 100644 --- a/mkspecs/symbian-abld/qmake.conf +++ b/mkspecs/symbian-abld/qmake.conf @@ -5,5 +5,6 @@ # MAKEFILE_GENERATOR = SYMBIAN_ABLD +option(recursive) include(../common/symbian/symbian.conf) diff --git a/mkspecs/symbian-sbsv2/flm/qt/qmake_emulator_deployment.flm b/mkspecs/symbian-sbsv2/flm/qt/qmake_emulator_deployment.flm index 3defe30..3877edb 100644 --- a/mkspecs/symbian-sbsv2/flm/qt/qmake_emulator_deployment.flm +++ b/mkspecs/symbian-sbsv2/flm/qt/qmake_emulator_deployment.flm @@ -7,14 +7,12 @@ # ** # ****************************************************************************/ -include $(FLMHOME)/metaflm.mk SINGLETON:=$(call sanitise,TARGET_$(DEPLOY_TARGET)) CLEAN_TARGET:= define qmake_emulator_deployment $(ALLTARGET):: $(1) -FINAL::$(1) # Prevent duplicate targets from being created $(SINGLETON):=1 diff --git a/mkspecs/symbian-sbsv2/flm/qt/qmake_extra_pre_targetdep.flm b/mkspecs/symbian-sbsv2/flm/qt/qmake_extra_pre_targetdep.flm index 79ab8cb..daf33d4 100644 --- a/mkspecs/symbian-sbsv2/flm/qt/qmake_extra_pre_targetdep.flm +++ b/mkspecs/symbian-sbsv2/flm/qt/qmake_extra_pre_targetdep.flm @@ -7,21 +7,17 @@ # ** # ****************************************************************************/ -include $(FLMHOME)/metaflm.mk SINGLETON:=$(call sanitise,TARGET_$(PREDEP_TARGET)) define qmake_extra_pre_targetdep -$(ALLTARGET):: $(PREDEP_TARGET) EXPORT:: $(PREDEP_TARGET) -LIBRARY:: $(PREDEP_TARGET) -TARGET:: $(PREDEP_TARGET) # Prevent duplicate targets from being created $(SINGLETON):=1 -$(PREDEP_TARGET): $(DEPS) - $(call startrule,qmake_extra_pre_targetdep) \ +$(PREDEP_TARGET): $(DEPS) + $(call startrule,qmake_extra_pre_targetdep,FORCESUCCESS) \ $(COMMAND) \ $(call endrule,qmake_extra_pre_targetdep) endef diff --git a/mkspecs/symbian-sbsv2/flm/qt/qmake_post_link.flm b/mkspecs/symbian-sbsv2/flm/qt/qmake_post_link.flm index 8ad89e7..9612d2e 100644 --- a/mkspecs/symbian-sbsv2/flm/qt/qmake_post_link.flm +++ b/mkspecs/symbian-sbsv2/flm/qt/qmake_post_link.flm @@ -7,7 +7,6 @@ # ** # ****************************************************************************/ -include $(FLMHOME)/metaflm.mk POST_LINK_TARGET:=POST_LINK_$(PLATFORM_PATH)_$(CFG_PATH)_$(call sanitise,$(LINK_TARGET)) POST_LINK_DEP:=$(EPOCROOT)/epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/$(LINK_TARGET) @@ -21,7 +20,6 @@ endef define qmake_post_link $(ALLTARGET):: $(POST_LINK_TARGET) -FINAL:: $(POST_LINK_TARGET) $(POST_LINK_TARGET): $(POST_LINK_DEP) $(call startrule,qmake_post_link) \ diff --git a/mkspecs/symbian-sbsv2/flm/qt/qmake_store_build.flm b/mkspecs/symbian-sbsv2/flm/qt/qmake_store_build.flm index d952f8f..e0b6503 100644 --- a/mkspecs/symbian-sbsv2/flm/qt/qmake_store_build.flm +++ b/mkspecs/symbian-sbsv2/flm/qt/qmake_store_build.flm @@ -7,7 +7,6 @@ # ** # ****************************************************************************/ -include $(FLMHOME)/metaflm.mk SINGLETON:=$(call sanitise,TSTORE_SINGLETON_$(EXTENSION_ROOT)) @@ -27,7 +26,7 @@ VISUAL_CFG:=RELEASE endif define qmake_store_build -FINAL:: $(STORE_BUILD_TARGET) +$(ALLTARGET):: $(STORE_BUILD_TARGET) $(STORE_BUILD_TARGET): $(call startrule,qmake_store_build) \ diff --git a/mkspecs/symbian-sbsv2/flm/qt/qt.xml b/mkspecs/symbian-sbsv2/flm/qt/qt.xml index 904f113..0f7db3c 100644 --- a/mkspecs/symbian-sbsv2/flm/qt/qt.xml +++ b/mkspecs/symbian-sbsv2/flm/qt/qt.xml @@ -16,7 +16,7 @@ <!-- Extension interfaces : replacements for Template Extension Makefiles --> - <interface name="qt.qmake_extra_pre_targetdep" extends="Symbian.UserFLM" + <interface name="qt.qmake_extra_pre_targetdep.export" extends="Symbian.UserFLM" flm="qmake_extra_pre_targetdep.flm"> <param name='PREDEP_TARGET' /> <param name='DEPS' default = '' /> diff --git a/mkspecs/symbian-sbsv2/qmake.conf b/mkspecs/symbian-sbsv2/qmake.conf index 0a5e878..585e645 100644 --- a/mkspecs/symbian-sbsv2/qmake.conf +++ b/mkspecs/symbian-sbsv2/qmake.conf @@ -5,5 +5,6 @@ # MAKEFILE_GENERATOR = SYMBIAN_SBSV2 +option(recursive) include(../common/symbian/symbian.conf) diff --git a/mkspecs/tru64-cxx/qmake.conf b/mkspecs/tru64-cxx/qmake.conf index 8cef84d..88021df 100644 --- a/mkspecs/tru64-cxx/qmake.conf +++ b/mkspecs/tru64-cxx/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl plugin_no_soname QT += core gui diff --git a/mkspecs/tru64-g++/qmake.conf b/mkspecs/tru64-g++/qmake.conf index 7749013..71e5682 100644 --- a/mkspecs/tru64-g++/qmake.conf +++ b/mkspecs/tru64-g++/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl plugin_no_soname QT += core gui diff --git a/mkspecs/unixware-cc/qmake.conf b/mkspecs/unixware-cc/qmake.conf index 978aaa1..5fb2b2c 100644 --- a/mkspecs/unixware-cc/qmake.conf +++ b/mkspecs/unixware-cc/qmake.conf @@ -8,6 +8,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/unixware-g++/qmake.conf b/mkspecs/unixware-g++/qmake.conf index ce1a0f1..b6a438a 100644 --- a/mkspecs/unixware-g++/qmake.conf +++ b/mkspecs/unixware-g++/qmake.conf @@ -5,6 +5,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/unsupported/linux-scratchbox2-g++/qmake.conf b/mkspecs/unsupported/linux-scratchbox2-g++/qmake.conf index 1ade6b9..28e7754 100644 --- a/mkspecs/unsupported/linux-scratchbox2-g++/qmake.conf +++ b/mkspecs/unsupported/linux-scratchbox2-g++/qmake.conf @@ -12,6 +12,7 @@ # $staging/usr/lib/pkgconfig) MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release incremental link_prl QT += core gui diff --git a/mkspecs/unsupported/qnx-g++/qmake.conf b/mkspecs/unsupported/qnx-g++/qmake.conf index 2e568dc..37e7bce 100644 --- a/mkspecs/unsupported/qnx-g++/qmake.conf +++ b/mkspecs/unsupported/qnx-g++/qmake.conf @@ -5,6 +5,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/unsupported/qws/qnx-641/qmake.conf b/mkspecs/unsupported/qws/qnx-641/qmake.conf index db333b7..12eaf1d 100644 --- a/mkspecs/unsupported/qws/qnx-641/qmake.conf +++ b/mkspecs/unsupported/qws/qnx-641/qmake.conf @@ -5,6 +5,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/unsupported/qws/qnx-generic-g++/qmake.conf b/mkspecs/unsupported/qws/qnx-generic-g++/qmake.conf index 51fe697..62857bf 100644 --- a/mkspecs/unsupported/qws/qnx-generic-g++/qmake.conf +++ b/mkspecs/unsupported/qws/qnx-generic-g++/qmake.conf @@ -5,6 +5,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/unsupported/qws/qnx-i386-g++/qmake.conf b/mkspecs/unsupported/qws/qnx-i386-g++/qmake.conf index fffb80f..dce60ea 100644 --- a/mkspecs/unsupported/qws/qnx-i386-g++/qmake.conf +++ b/mkspecs/unsupported/qws/qnx-i386-g++/qmake.conf @@ -5,6 +5,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/unsupported/qws/qnx-ppc-g++/qmake.conf b/mkspecs/unsupported/qws/qnx-ppc-g++/qmake.conf index 56a9c66..93d04ff 100644 --- a/mkspecs/unsupported/qws/qnx-ppc-g++/qmake.conf +++ b/mkspecs/unsupported/qws/qnx-ppc-g++/qmake.conf @@ -5,6 +5,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui diff --git a/mkspecs/unsupported/vxworks-ppc-dcc/qmake.conf b/mkspecs/unsupported/vxworks-ppc-dcc/qmake.conf index a8f7e49..fc0b125 100644 --- a/mkspecs/unsupported/vxworks-ppc-dcc/qmake.conf +++ b/mkspecs/unsupported/vxworks-ppc-dcc/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release incremental link_prl vxworks QT += core gui network diff --git a/mkspecs/unsupported/vxworks-ppc-g++/qmake.conf b/mkspecs/unsupported/vxworks-ppc-g++/qmake.conf index be8c13d..80b5f3e 100644 --- a/mkspecs/unsupported/vxworks-ppc-g++/qmake.conf +++ b/mkspecs/unsupported/vxworks-ppc-g++/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release incremental link_prl vxworks QT += core gui network diff --git a/mkspecs/unsupported/vxworks-simpentium-dcc/qmake.conf b/mkspecs/unsupported/vxworks-simpentium-dcc/qmake.conf index 6228a6b..be35172 100644 --- a/mkspecs/unsupported/vxworks-simpentium-dcc/qmake.conf +++ b/mkspecs/unsupported/vxworks-simpentium-dcc/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release incremental link_prl vxworks QT += core gui network diff --git a/mkspecs/unsupported/vxworks-simpentium-g++/qmake.conf b/mkspecs/unsupported/vxworks-simpentium-g++/qmake.conf index 29e9c70..83f46c0 100644 --- a/mkspecs/unsupported/vxworks-simpentium-g++/qmake.conf +++ b/mkspecs/unsupported/vxworks-simpentium-g++/qmake.conf @@ -3,6 +3,7 @@ # MAKEFILE_GENERATOR = UNIX +TARGET_PLATFORM = unix TEMPLATE = app CONFIG += qt warn_on release incremental link_prl vxworks QT += core gui network diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index ec712a0..a8c1c3c 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -2152,12 +2152,14 @@ QString MakefileGenerator::buildArgs(const QString &outdir) ret += " -nodependheuristics"; if(!Option::mkfile::qmakespec_commandline.isEmpty()) ret += " -spec " + specdir(outdir); - if(Option::target_mode == Option::TARG_MACX_MODE) - ret += " -macx"; - else if(Option::target_mode == Option::TARG_UNIX_MODE) - ret += " -unix"; - else if(Option::target_mode == Option::TARG_WIN_MODE) - ret += " -win32"; + if (Option::target_mode_overridden) { + if (Option::target_mode == Option::TARG_MACX_MODE) + ret += " -macx"; + else if (Option::target_mode == Option::TARG_UNIX_MODE) + ret += " -unix"; + else if (Option::target_mode == Option::TARG_WIN_MODE) + ret += " -win32"; + } //configs for(QStringList::Iterator it = Option::user_configs.begin(); diff --git a/qmake/generators/makefile.h b/qmake/generators/makefile.h index d89c3b1..addb1f5 100644 --- a/qmake/generators/makefile.h +++ b/qmake/generators/makefile.h @@ -247,7 +247,8 @@ public: virtual bool supportsMergedBuilds() { return false; } virtual bool mergeBuildProject(MakefileGenerator * /*other*/) { return false; } virtual bool openOutput(QFile &, const QString &build) const; - virtual bool isWindowsShell() const { return Option::target_mode == Option::TARG_WIN_MODE; } + virtual bool isWindowsShell() const { return Option::host_mode == Option::HOST_WIN_MODE; } + virtual bool isForSymbianSbsv2() const { return false; } // FIXME: killme - i'm ugly! }; inline void MakefileGenerator::setNoIO(bool o) diff --git a/qmake/generators/metamakefile.cpp b/qmake/generators/metamakefile.cpp index f48491c..bc8927c 100644 --- a/qmake/generators/metamakefile.cpp +++ b/qmake/generators/metamakefile.cpp @@ -293,7 +293,15 @@ SubdirsMetaMakefileGenerator::init() init_flag = true; bool hasError = false; - if(Option::recursive) { + // It might make sense to bequeath the CONFIG option to the recursed + // projects. OTOH, one would most likely have it in all projects anyway - + // either through a qmakespec, a .qmake.cache or explicitly - as otherwise + // running qmake in a subdirectory would have a different auto-recurse + // setting than in parent directories. + bool recurse = Option::recursive == Option::QMAKE_RECURSIVE_YES + || (Option::recursive == Option::QMAKE_RECURSIVE_DEFAULT + && project->isRecursive()); + if(recurse) { QString old_output_dir = Option::output_dir; QString old_output = Option::output.fileName(); QString oldpwd = qmake_getpwd(); @@ -375,7 +383,7 @@ SubdirsMetaMakefileGenerator::init() Subdir *self = new Subdir; self->input_dir = qmake_getpwd(); self->output_dir = Option::output_dir; - if(!Option::recursive || (!Option::output.fileName().endsWith(Option::dir_sep) && !QFileInfo(Option::output).isDir())) + if(!recurse || (!Option::output.fileName().endsWith(Option::dir_sep) && !QFileInfo(Option::output).isDir())) self->output_file = Option::output.fileName(); self->makefile = new BuildsMetaMakefileGenerator(project, name, false); self->makefile->init(); @@ -458,7 +466,7 @@ MetaMakefileGenerator::createMakefileGenerator(QMakeProject *proj, bool noIO) } else if(gen == "PROJECTBUILDER" || gen == "XCODE") { mkfile = new ProjectBuilderMakefileGenerator; } else if(gen == "MSVC.NET") { - if(proj->first("TEMPLATE").indexOf(QRegExp("^vc.*")) != -1) + if (proj->first("TEMPLATE").startsWith("vc")) mkfile = new VcprojGenerator; else mkfile = new NmakeMakefileGenerator; @@ -478,6 +486,40 @@ MetaMakefileGenerator::createMakefileGenerator(QMakeProject *proj, bool noIO) return mkfile; } +bool +MetaMakefileGenerator::modesForGenerator(const QString &gen, + Option::HOST_MODE *host_mode, Option::TARG_MODE *target_mode) +{ + if (gen == "UNIX") { +#ifdef Q_OS_MAC + *host_mode = Option::HOST_MACX_MODE; + *target_mode = Option::TARG_MACX_MODE; +#else + *host_mode = Option::HOST_UNIX_MODE; + *target_mode = Option::TARG_UNIX_MODE; +#endif + } else if (gen == "MSVC.NET" || gen == "MINGW" || gen == "BMAKE") { + *host_mode = Option::HOST_WIN_MODE; + *target_mode = Option::TARG_WIN_MODE; + } else if (gen == "PROJECTBUILDER" || gen == "XCODE") { + *host_mode = Option::HOST_MACX_MODE; + *target_mode = Option::TARG_MACX_MODE; + } else if (gen == "SYMBIAN_ABLD" || gen == "SYMBIAN_SBSV2") { +#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_SYMBIAN_MODE; + } else { + fprintf(stderr, "Unknown generator specified: %s\n", gen.toLatin1().constData()); + return false; + } + return true; +} + MetaMakefileGenerator * MetaMakefileGenerator::createMetaGenerator(QMakeProject *proj, const QString &name, bool op, bool *success) { diff --git a/qmake/generators/metamakefile.h b/qmake/generators/metamakefile.h index 8675115..e559c8e 100644 --- a/qmake/generators/metamakefile.h +++ b/qmake/generators/metamakefile.h @@ -42,6 +42,8 @@ #ifndef METAMAKEFILE_H #define METAMAKEFILE_H +#include <option.h> + #include <qlist.h> #include <qstring.h> @@ -65,6 +67,9 @@ public: static MetaMakefileGenerator *createMetaGenerator(QMakeProject *proj, const QString &name, bool op=true, bool *success = 0); static MakefileGenerator *createMakefileGenerator(QMakeProject *proj, bool noIO = false); + static bool modesForGenerator(const QString &generator, + Option::HOST_MODE *host_mode, Option::TARG_MODE *target_mode); + inline QMakeProject *projectFile() const { return project; } virtual bool init() = 0; diff --git a/qmake/generators/projectgenerator.cpp b/qmake/generators/projectgenerator.cpp index 8622cd9..d225635 100644 --- a/qmake/generators/projectgenerator.cpp +++ b/qmake/generators/projectgenerator.cpp @@ -111,7 +111,7 @@ ProjectGenerator::init() add_depend = true; if(dir.right(1) != Option::dir_sep) dir += Option::dir_sep; - if(Option::recursive) { + if(Option::recursive == Option::QMAKE_RECURSIVE_YES) { QStringList files = QDir(dir).entryList(QDir::Files); for(int i = 0; i < (int)files.count(); i++) { if(files[i] != "." && files[i] != "..") @@ -138,7 +138,7 @@ ProjectGenerator::init() dir = regex.left(s+1); regex = regex.right(regex.length() - (s+1)); } - if(Option::recursive) { + if(Option::recursive == Option::QMAKE_RECURSIVE_YES) { QStringList entries = QDir(dir).entryList(QDir::Dirs); for(int i = 0; i < (int)entries.count(); i++) { if(entries[i] != "." && entries[i] != "..") { @@ -193,7 +193,7 @@ ProjectGenerator::init() subdirs.append(nd); } } - if(Option::recursive) { + if(Option::recursive == Option::QMAKE_RECURSIVE_YES) { QStringList dirs = QDir(newdir).entryList(QDir::Dirs); for(int i = 0; i < (int)dirs.count(); i++) { QString nd = fileFixify(newdir + QDir::separator() + dirs[i]); @@ -230,7 +230,8 @@ ProjectGenerator::init() } } } - if(Option::recursive && !knownDirs.contains(newdir, Qt::CaseInsensitive)) + if(Option::recursive == Option::QMAKE_RECURSIVE_YES + && !knownDirs.contains(newdir, Qt::CaseInsensitive)) knownDirs.append(newdir); } } diff --git a/qmake/generators/symbian/initprojectdeploy_symbian.cpp b/qmake/generators/symbian/initprojectdeploy_symbian.cpp index 0d50112..81c9408 100644 --- a/qmake/generators/symbian/initprojectdeploy_symbian.cpp +++ b/qmake/generators/symbian/initprojectdeploy_symbian.cpp @@ -49,12 +49,18 @@ // Included from tools/shared #include <symbian/epocroot.h> -#define SYSBIN_DIR "\\sys\\bin" +#define SYSBIN_DIR "/sys/bin" #define SUFFIX_DLL "dll" #define SUFFIX_EXE "exe" #define SUFFIX_QTPLUGIN "qtplugin" +static QString fixPathToEpocOS(const QString &src) +{ + QString ret = Option::fixPathToTargetOS(src); + return ret.replace('/', '\\'); +} + static bool isPlugin(const QFileInfo& info, const QString& devicePath) { // Libraries are plugins if deployment path is something else than @@ -85,12 +91,12 @@ static void createPluginStub(const QFileInfo& info, QStringList& generatedDirs, QStringList& generatedFiles) { - QDir().mkpath(PLUGIN_STUB_DIR); + QDir().mkpath(QLatin1String(PLUGIN_STUB_DIR)); if (!generatedDirs.contains(PLUGIN_STUB_DIR)) generatedDirs << PLUGIN_STUB_DIR; // Plugin stubs must have different name from the actual plugins, because // the toolchain for creating ROM images cannot handle non-binary .dll files properly. - QFile stubFile(QDir(PLUGIN_STUB_DIR).filePath(info.completeBaseName() + "." SUFFIX_QTPLUGIN)); + QFile stubFile(QLatin1String(PLUGIN_STUB_DIR "/") + info.completeBaseName() + "." SUFFIX_QTPLUGIN); if (stubFile.open(QIODevice::WriteOnly)) { if (!generatedFiles.contains(stubFile.fileName())) generatedFiles << stubFile.fileName(); @@ -104,7 +110,7 @@ static void createPluginStub(const QFileInfo& info, } QFileInfo stubInfo(stubFile); deploymentList.append(CopyItem(Option::fixPathToLocalOS(stubInfo.absoluteFilePath()), - Option::fixPathToLocalOS(devicePath + "\\" + stubInfo.fileName()))); + fixPathToEpocOS(devicePath + "/" + stubInfo.fileName()))); } QString generate_uid(const QString& target) @@ -168,21 +174,29 @@ void initProjectDeploySymbian(QMakeProject* project, foreach(QString item, project->values("DEPLOYMENT")) { QString devicePath = project->first(item + ".path"); + QString devicePathWithoutDrive = devicePath; + + bool devicePathHasDriveLetter = false; + if (devicePath.size() > 1) { + devicePathHasDriveLetter = devicePath.at(1) == QLatin1Char(':'); + } + + // Sometimes devicePath can contain disk but APP_RESOURCE_DIR does not, + // so remove the drive letter for comparison purposes. + if (devicePathHasDriveLetter) + { + devicePathWithoutDrive.remove(0,2); + } if (!deployBinaries - && !devicePath.isEmpty() - && (0 == devicePath.compare(project->values("APP_RESOURCE_DIR").join(""), Qt::CaseInsensitive) - || 0 == devicePath.compare(project->values("REG_RESOURCE_IMPORT_DIR").join(""), Qt::CaseInsensitive))) { + && !devicePathWithoutDrive.isEmpty() + && (0 == devicePathWithoutDrive.compare(project->values("APP_RESOURCE_DIR").join(""), Qt::CaseInsensitive) + || 0 == devicePathWithoutDrive.compare(project->values("REG_RESOURCE_IMPORT_DIR").join(""), Qt::CaseInsensitive))) { // Do not deploy resources in emulator builds, as that seems to cause conflicts // If there is ever a real need to deploy pre-built resources for emulator, // BLD_INF_RULES.prj_exports can be used as a workaround. continue; } - bool devicePathHasDriveLetter = false; - if (devicePath.size() > 1) { - devicePathHasDriveLetter = devicePath.at(1) == QLatin1Char(':'); - } - if (devicePath.isEmpty() || devicePath == QLatin1String(".")) { devicePath = targetPath; } @@ -190,24 +204,35 @@ void initProjectDeploySymbian(QMakeProject* project, else if (!(devicePath.at(0) == QLatin1Char('/') || devicePath.at(0) == QLatin1Char('\\') || devicePathHasDriveLetter)) { - // create output path - devicePath = Option::fixPathToLocalOS(QDir::cleanPath(targetPath + QLatin1Char('\\') + devicePath)); + // Create output path + devicePath = Option::fixPathToLocalOS(QDir::cleanPath(targetPath + QLatin1Char('/') + devicePath)); } else { - if (0 == platform.compare(QLatin1String("winscw"), Qt::CaseInsensitive)) { + if (!platform.compare(QLatin1String(EMULATOR_DEPLOYMENT_PLATFORM))) { if (devicePathHasDriveLetter) { - devicePath = epocRoot() + "epoc32\\winscw\\" + devicePath.remove(1, 1); + devicePath = epocRoot() + "epoc32/winscw/" + devicePath.remove(1, 1); } else { - devicePath = epocRoot() + "epoc32\\winscw\\c" + devicePath; + devicePath = epocRoot() + "epoc32/winscw/c" + devicePath; } } else { - // Drive letter needed if targetpath contains one and it is not already in - if (targetPathHasDriveLetter && !devicePathHasDriveLetter) { - devicePath = deploymentDrive + devicePath; + if (!devicePathHasDriveLetter) { + if (!platform.compare(QLatin1String(ROM_DEPLOYMENT_PLATFORM))) { + //For plugin deployment under ARM no needed drive letter + devicePath = epocRoot() + "epoc32/data/z" + devicePath; + } else if (targetPathHasDriveLetter) { + // Drive letter needed if targetpath contains one and it is not already in + devicePath = deploymentDrive + devicePath; + } + } else { + //it is necessary to delete drive letter for ARM deployment + if (!platform.compare(QLatin1String(ROM_DEPLOYMENT_PLATFORM))) { + devicePath.remove(0,2); + devicePath = epocRoot() + "epoc32/data/z" + devicePath; + } } } } - devicePath.replace(QLatin1String("/"), QLatin1String("\\")); + devicePath.replace(QLatin1String("\\"), QLatin1String("/")); if (!deployBinaries && 0 == devicePath.right(8).compare(QLatin1String(SYSBIN_DIR), Qt::CaseInsensitive)) { @@ -231,7 +256,7 @@ void initProjectDeploySymbian(QMakeProject* project, dirSearch = true; } else { if (info.exists() || source.indexOf('*') != -1) { - nameFilter = source.split('\\').last(); + nameFilter = source.split(QDir::separator()).last(); searchPath = info.absolutePath(); } else { // Entry was not found. That is ok if it is a binary, since those do not necessarily yet exist. @@ -239,13 +264,19 @@ void initProjectDeploySymbian(QMakeProject* project, if (isBinary(info)) { if (deployBinaries) { // Executables and libraries are deployed to \sys\bin - QFileInfo releasePath(epocRoot() + QDir::toNativeSeparators("epoc32/release/" + platform + "/" + build + "/")); + QFileInfo targetPath(epocRoot() + "epoc32/release/" + platform + "/" + build + "/"); if(devicePathHasDriveLetter) { - deploymentList.append(CopyItem(Option::fixPathToLocalOS(QDir(releasePath.absolutePath()).filePath(info.fileName()), false, true), - Option::fixPathToLocalOS(devicePath.left(2) + QLatin1String(SYSBIN_DIR "\\") + info.fileName()))); + deploymentList.append(CopyItem( + Option::fixPathToLocalOS(targetPath.absolutePath() + "/" + info.fileName(), + false, true), + fixPathToEpocOS(devicePath.left(2) + QLatin1String(SYSBIN_DIR "/") + + info.fileName()))); } else { - deploymentList.append(CopyItem(Option::fixPathToLocalOS(QDir(releasePath.absolutePath()).filePath(info.fileName()), false, true), - Option::fixPathToLocalOS(deploymentDrive + QLatin1String(SYSBIN_DIR "\\") + info.fileName()))); + deploymentList.append(CopyItem( + Option::fixPathToLocalOS(targetPath.absolutePath() + "/" + info.fileName(), + false, true), + fixPathToEpocOS(deploymentDrive + QLatin1String(SYSBIN_DIR "/") + + info.fileName()))); } } if (isPlugin(info, devicePath)) { @@ -256,7 +287,7 @@ void initProjectDeploySymbian(QMakeProject* project, // Generate deployment even if file doesn't exist, as this may be the case // when generating .pkg files. deploymentList.append(CopyItem(Option::fixPathToLocalOS(info.absoluteFilePath()), - Option::fixPathToLocalOS(devicePath + "\\" + info.fileName()))); + fixPathToEpocOS(devicePath + "/" + info.fileName()))); continue; } } @@ -278,14 +309,26 @@ void initProjectDeploySymbian(QMakeProject* project, // This deploys pre-built plugins. Other pre-built binaries will deploy normally, // as they have SYSBIN_DIR target path. if (deployBinaries) { - deploymentList.append(CopyItem(Option::fixPathToLocalOS(absoluteItemPath + "\\" + iterator.fileName()), - Option::fixPathToLocalOS(deploymentDrive + QLatin1String(SYSBIN_DIR "\\") + iterator.fileName()))); + if (devicePathHasDriveLetter) { + deploymentList.append(CopyItem( + Option::fixPathToLocalOS(absoluteItemPath + "/" + iterator.fileName()), + fixPathToEpocOS(devicePath.left(2) + QLatin1String(SYSBIN_DIR "/") + + iterator.fileName()))); + } else { + deploymentList.append(CopyItem( + Option::fixPathToLocalOS(absoluteItemPath + "/" + iterator.fileName()), + fixPathToEpocOS(deploymentDrive + QLatin1String(SYSBIN_DIR "/") + + iterator.fileName()))); + } } - createPluginStub(info, devicePath + "\\" + absoluteItemPath.right(diffSize), deploymentList, generatedDirs, generatedFiles); + createPluginStub(info, devicePath + "/" + absoluteItemPath.right(diffSize), + deploymentList, generatedDirs, generatedFiles); continue; } else { - deploymentList.append(CopyItem(Option::fixPathToLocalOS(absoluteItemPath + "\\" + iterator.fileName()), - Option::fixPathToLocalOS(devicePath + "\\" + absoluteItemPath.right(diffSize) + "\\" + iterator.fileName()))); + deploymentList.append(CopyItem( + Option::fixPathToLocalOS(absoluteItemPath + "/" + iterator.fileName()), + fixPathToEpocOS(devicePath + "/" + absoluteItemPath.right(diffSize) + + "/" + iterator.fileName()))); } } } diff --git a/qmake/generators/symbian/initprojectdeploy_symbian.h b/qmake/generators/symbian/initprojectdeploy_symbian.h index b409225..c621915 100644 --- a/qmake/generators/symbian/initprojectdeploy_symbian.h +++ b/qmake/generators/symbian/initprojectdeploy_symbian.h @@ -51,6 +51,8 @@ #include <stdlib.h> #define PLUGIN_STUB_DIR "qmakepluginstubs" +#define ROM_DEPLOYMENT_PLATFORM "rom" +#define EMULATOR_DEPLOYMENT_PLATFORM "emulator" struct CopyItem { diff --git a/qmake/generators/symbian/symmake.cpp b/qmake/generators/symbian/symmake.cpp index ac4bca3..214f95c 100644 --- a/qmake/generators/symbian/symmake.cpp +++ b/qmake/generators/symbian/symmake.cpp @@ -64,7 +64,7 @@ #define BLD_INF_TAG_MMPFILES "prj_mmpfiles" #define BLD_INF_TAG_TESTMMPFILES "prj_testmmpfiles" #define BLD_INF_TAG_EXTENSIONS "prj_extensions" -#define BLD_INF_TAG_EXPORTS "prj_exports" +#define BLD_INF_TAG_TESTEXTENSIONS "prj_testextensions" #define RSS_RULES "RSS_RULES" #define RSS_RULES_BASE "RSS_RULES." @@ -101,11 +101,13 @@ QString SymbianMakefileGenerator::fixPathForMmp(const QString& origPath, const Q { static QString epocRootStr; if (epocRootStr.isEmpty()) { - QFileInfo efi(epocRoot()); - epocRootStr = efi.canonicalFilePath(); - if (epocRootStr.isEmpty()) { + epocRootStr = epocRoot(); + QFileInfo efi(epocRootStr); + if (!efi.exists() || epocRootStr.isEmpty()) { fprintf(stderr, "Unable to resolve epocRoot '%s' to real dir on current drive, defaulting to '/' for mmp paths\n", qPrintable(epocRoot())); epocRootStr = "/"; + } else { + epocRootStr = efi.absoluteFilePath(); } if (!epocRootStr.endsWith("/")) epocRootStr += "/"; @@ -129,33 +131,26 @@ QString SymbianMakefileGenerator::fixPathForMmp(const QString& origPath, const Q return resultPath; } -QString SymbianMakefileGenerator::canonizePath(const QString& origPath) +QString SymbianMakefileGenerator::absolutizePath(const QString& origPath) { - // Since current path gets appended almost always anyway, use it as default - // for nonexisting paths. - static QString defaultPath; - if (defaultPath.isEmpty()) { - QFileInfo fi("."); - defaultPath = fi.canonicalFilePath(); - } - // Prepend epocroot to any paths beginning with "/epoc32/" QString resultPath = QDir::fromNativeSeparators(origPath); if (resultPath.startsWith("/epoc32/", Qt::CaseInsensitive)) resultPath = QDir::fromNativeSeparators(epocRoot()) + resultPath.mid(1); QFileInfo fi(fileInfo(resultPath)); - if (fi.isDir()) { - resultPath = fi.canonicalFilePath(); + + // Since origPath can be something given in HEADERS, we need to check if we are dealing + // with a file or a directory. In case the origPath doesn't yet exist, isFile() returns + // false and we default to assuming it is a dir. + if (fi.isFile()) { + resultPath = fi.absolutePath(); } else { - resultPath = fi.canonicalPath(); + resultPath = fi.absoluteFilePath(); } resultPath = QDir::cleanPath(resultPath); - if (resultPath.isEmpty()) - resultPath = defaultPath; - return resultPath; } @@ -687,7 +682,7 @@ void SymbianMakefileGenerator::initMmpVariables() srcpaths << project->values("UI_DIR"); QDir current = QDir::current(); - QString canonizedCurrent = canonizePath("."); + QString absolutizedCurrent = absolutizePath("."); for (int j = 0; j < srcpaths.size(); ++j) { QFileInfo fi(fileInfo(srcpaths.at(j))); @@ -695,10 +690,10 @@ void SymbianMakefileGenerator::initMmpVariables() if (fi.suffix().startsWith("c")) { if (fi.filePath().length() > fi.fileName().length()) { appendIfnotExist(srcincpaths, fi.path()); - sources[canonizePath(fi.path())] += fi.fileName(); + sources[absolutizePath(fi.path())] += fi.fileName(); } else { - sources[canonizedCurrent] += fi.fileName(); - appendIfnotExist(srcincpaths, canonizedCurrent); + sources[absolutizedCurrent] += fi.fileName(); + appendIfnotExist(srcincpaths, absolutizedCurrent); } } } @@ -712,7 +707,7 @@ void SymbianMakefileGenerator::initMmpVariables() incpaths << project->values("UI_DIR"); for (int j = 0; j < incpaths.size(); ++j) { - QString includepath = canonizePath(incpaths.at(j)); + QString includepath = absolutizePath(incpaths.at(j)); appendIfnotExist(sysincspaths, includepath); appendAbldTempDirs(sysincspaths, includepath); } @@ -754,15 +749,14 @@ void SymbianMakefileGenerator::initMmpVariables() QStringList restrictedMmpKeywords; bool inResourceBlock = false; - overridableMmpKeywords << QLatin1String(MMP_TARGETTYPE); + overridableMmpKeywords << QLatin1String(MMP_TARGETTYPE) << QLatin1String(MMP_EPOCHEAPSIZE); restrictableMmpKeywords << QLatin1String(MMP_TARGET) << QLatin1String(MMP_SECUREID) << QLatin1String(MMP_OPTION_CW) << QLatin1String(MMP_OPTION_ARMCC) << QLatin1String(MMP_OPTION_GCCE) << QLatin1String(MMP_LINKEROPTION_CW) << QLatin1String(MMP_LINKEROPTION_ARMCC) << QLatin1String(MMP_LINKEROPTION_GCCE) << QLatin1String(MMP_CAPABILITY) << QLatin1String(MMP_EPOCALLOWDLLDATA) - << QLatin1String(MMP_EPOCHEAPSIZE) << QLatin1String(MMP_EPOCSTACKSIZE) - << QLatin1String(MMP_UID) << QLatin1String(MMP_VENDORID) - << QLatin1String(MMP_VERSION); + << QLatin1String(MMP_EPOCSTACKSIZE) << QLatin1String(MMP_UID) + << QLatin1String(MMP_VENDORID) << QLatin1String(MMP_VERSION); foreach (QString item, project->values("MMP_RULES")) { if (project->values(item).isEmpty()) { @@ -932,6 +926,7 @@ void SymbianMakefileGenerator::addMacro(QTextStream& t, const QString& value) void SymbianMakefileGenerator::writeMmpFileTargetPart(QTextStream& t) { bool skipTargetType = overriddenMmpKeywords.contains(MMP_TARGETTYPE); + bool skipEpocHeapSize = overriddenMmpKeywords.contains(MMP_EPOCHEAPSIZE); if (targetType == TypeExe) { t << MMP_TARGET "\t\t" << fixedTarget << ".exe" << endl; @@ -983,7 +978,7 @@ void SymbianMakefileGenerator::writeMmpFileTargetPart(QTextStream& t) if (0 != project->first("TARGET.EPOCSTACKSIZE").size()) t << MMP_EPOCSTACKSIZE "\t\t" << project->first("TARGET.EPOCSTACKSIZE") << endl; - if (0 != project->values("TARGET.EPOCHEAPSIZE").size()) + if (!skipEpocHeapSize && 0 != project->values("TARGET.EPOCHEAPSIZE").size()) t << MMP_EPOCHEAPSIZE "\t\t" << project->values("TARGET.EPOCHEAPSIZE").join(" ") << endl; if (0 != project->values("TARGET.EPOCALLOWDLLDATA").size()) t << MMP_EPOCALLOWDLLDATA << endl; @@ -1362,7 +1357,7 @@ void SymbianMakefileGenerator::writeBldInfContent(QTextStream &t, bool addDeploy // Add project mmps and old style extension makefiles QString mmpTag; - if (project->isActiveConfig("symbian_test")) + if (project->isActiveConfig(SYMBIAN_TEST_CONFIG)) mmpTag = QLatin1String(BLD_INF_TAG_TESTMMPFILES); else mmpTag = QLatin1String(BLD_INF_TAG_MMPFILES); @@ -1385,35 +1380,22 @@ void SymbianMakefileGenerator::writeBldInfContent(QTextStream &t, bool addDeploy t << item << endl; userBldInfRules.remove(mmpTag); - t << endl << BLD_INF_TAG_EXTENSIONS << endl << endl; + QString extensionTag; + if (project->isActiveConfig(SYMBIAN_TEST_CONFIG)) + extensionTag = QLatin1String(BLD_INF_TAG_TESTEXTENSIONS); + else + extensionTag = QLatin1String(BLD_INF_TAG_EXTENSIONS); + + t << endl << extensionTag << endl << endl; // Generate extension rules writeBldInfExtensionRulesPart(t, iconFile); - userItems = userBldInfRules.value(BLD_INF_TAG_EXTENSIONS); - foreach(QString item, userItems) - t << item << endl; - userBldInfRules.remove(BLD_INF_TAG_EXTENSIONS); - - t << endl << BLD_INF_TAG_EXPORTS << endl << endl; - - // Generate export rules - - // Export any deployed plugin stubs under /epoc32/data/z to support ROM builds - for (int i = 0; i < depList.size(); ++i) { - int index = depList.at(i).from.indexOf(PLUGIN_STUB_DIR); - if (index != -1) { - t << QString("%1 /epoc32/data/z%2") - .arg(QString(depList.at(i).from).mid(index).replace('\\','/')) - .arg(QString(depList.at(i).to).mid(2).replace('\\','/')) << endl; - } - } - - userItems = userBldInfRules.value(BLD_INF_TAG_EXPORTS); + userItems = userBldInfRules.value(extensionTag); foreach(QString item, userItems) t << item << endl; - userBldInfRules.remove(BLD_INF_TAG_EXPORTS); + userBldInfRules.remove(extensionTag); // Add rest of the user defined content diff --git a/qmake/generators/symbian/symmake.h b/qmake/generators/symbian/symmake.h index 76fd98b..fa55ae7 100644 --- a/qmake/generators/symbian/symmake.h +++ b/qmake/generators/symbian/symmake.h @@ -49,9 +49,9 @@ QT_BEGIN_NAMESPACE #define BLD_INF_FILENAME "bld.inf" #define MAKEFILE_DEPENDENCY_SEPARATOR " \\\n\t" - #define QT_EXTRA_INCLUDE_DIR "tmp" #define MAKE_CACHE_NAME ".make.cache" +#define SYMBIAN_TEST_CONFIG "symbian_test" class SymbianMakefileGenerator : public MakefileGenerator { @@ -84,7 +84,7 @@ protected: void removeSpecialCharacters(QString& str); QString fixPathForMmp(const QString& origPath, const QDir& parentDir); - QString canonizePath(const QString& origPath); + QString absolutizePath(const QString& origPath); virtual bool writeMakefile(QTextStream &t); void generatePkgFile(const QString &iconFile, DeploymentList &depList); diff --git a/qmake/generators/symbian/symmake_abld.cpp b/qmake/generators/symbian/symmake_abld.cpp index 81165f5..42031b9 100644 --- a/qmake/generators/symbian/symmake_abld.cpp +++ b/qmake/generators/symbian/symmake_abld.cpp @@ -59,6 +59,8 @@ #define FINALIZE_TARGET "finalize" #define GENERATED_SOURCES_TARGET "generated_sources" #define ALL_SOURCE_DEPS_TARGET "all_source_deps" +#define DEPLOYMENT_TARGET "deployment" +#define DEPLOYMENT_CLEAN_TARGET "deployment_clean" #define WINSCW_DEPLOYMENT_TARGET "winscw_deployment" #define WINSCW_DEPLOYMENT_CLEAN_TARGET "winscw_deployment_clean" #define STORE_BUILD_TARGET "store_build" @@ -112,25 +114,29 @@ void SymbianAbldMakefileGenerator::writeMkFile(const QString& wrapperFileName, b QStringList wrapperTargets; if (deploymentOnly) { buildDeps.append(STORE_BUILD_TARGET); - cleanDeps.append(DO_NOTHING_TARGET); - cleanDepsWinscw.append(WINSCW_DEPLOYMENT_CLEAN_TARGET); - finalDeps.append(DO_NOTHING_TARGET); - finalDepsWinscw.append(WINSCW_DEPLOYMENT_TARGET); + cleanDeps.append(DEPLOYMENT_CLEAN_TARGET); + cleanDepsWinscw.append(WINSCW_DEPLOYMENT_CLEAN_TARGET " " DEPLOYMENT_CLEAN_TARGET); + finalDeps.append(DEPLOYMENT_TARGET); + finalDepsWinscw.append(WINSCW_DEPLOYMENT_TARGET " " DEPLOYMENT_TARGET); wrapperTargets << WINSCW_DEPLOYMENT_TARGET << WINSCW_DEPLOYMENT_CLEAN_TARGET + << DEPLOYMENT_TARGET + << DEPLOYMENT_CLEAN_TARGET << STORE_BUILD_TARGET; } else { buildDeps.append(CREATE_TEMPS_TARGET " " PRE_TARGETDEPS_TARGET " " STORE_BUILD_TARGET); - cleanDeps.append(EXTENSION_CLEAN); - cleanDepsWinscw.append(EXTENSION_CLEAN " " WINSCW_DEPLOYMENT_CLEAN_TARGET); - finalDeps.append(FINALIZE_TARGET); - finalDepsWinscw.append(FINALIZE_TARGET " " WINSCW_DEPLOYMENT_TARGET); + cleanDeps.append(EXTENSION_CLEAN " " DEPLOYMENT_CLEAN_TARGET); + cleanDepsWinscw.append(EXTENSION_CLEAN " " WINSCW_DEPLOYMENT_CLEAN_TARGET " " DEPLOYMENT_CLEAN_TARGET); + finalDeps.append(FINALIZE_TARGET " " DEPLOYMENT_TARGET); + finalDepsWinscw.append(FINALIZE_TARGET " " WINSCW_DEPLOYMENT_TARGET " " DEPLOYMENT_TARGET); wrapperTargets << PRE_TARGETDEPS_TARGET << CREATE_TEMPS_TARGET << EXTENSION_CLEAN << FINALIZE_TARGET << WINSCW_DEPLOYMENT_CLEAN_TARGET << WINSCW_DEPLOYMENT_TARGET + << DEPLOYMENT_CLEAN_TARGET + << DEPLOYMENT_TARGET << STORE_BUILD_TARGET; } @@ -175,7 +181,7 @@ void SymbianAbldMakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, bool releasePlatforms.removeAll("winscw"); // No release for emulator QString testClause; - if (project->isActiveConfig("symbian_test")) + if (project->isActiveConfig(SYMBIAN_TEST_CONFIG)) testClause = QLatin1String(" test"); else testClause = QLatin1String(""); @@ -369,7 +375,9 @@ void SymbianAbldMakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, bool qDeleteAll(subtargets); } - writeDeploymentTargets(t); + // Deploymend targets for both emulator and rom deployment + writeDeploymentTargets(t, false); + writeDeploymentTargets(t, true); generateDistcleanTargets(t); @@ -410,13 +418,21 @@ void SymbianAbldMakefileGenerator::writeBldInfExtensionRulesPart(QTextStream& t, Q_UNUSED(iconTargetFile); } -bool SymbianAbldMakefileGenerator::writeDeploymentTargets(QTextStream &t) +bool SymbianAbldMakefileGenerator::writeDeploymentTargets(QTextStream &t, bool isRom) { - t << WINSCW_DEPLOYMENT_TARGET ":" << endl; + if (isRom) + t << DEPLOYMENT_TARGET ":" << endl; + else + t << WINSCW_DEPLOYMENT_TARGET ":" << endl; - QString remoteTestPath = epocRoot() + QLatin1String("epoc32\\winscw\\c\\private\\") + privateDirUid; // default 4 OpenC; 4 all Symbian too + QString remoteTestPath = epocRoot() + + QLatin1String(isRom ? "epoc32\\data\\z\\private\\" : "epoc32\\winscw\\c\\private\\") + + privateDirUid; DeploymentList depList; - initProjectDeploySymbian(project, depList, remoteTestPath, false, QLatin1String("winscw"), QLatin1String("udeb"), generatedDirs, generatedFiles); + + initProjectDeploySymbian(project, depList, remoteTestPath, false, + QLatin1String(isRom ? ROM_DEPLOYMENT_PLATFORM : EMULATOR_DEPLOYMENT_PLATFORM), + QString(), generatedDirs, generatedFiles); if (depList.size()) t << "\t-echo Deploying changed files..." << endl; @@ -425,12 +441,17 @@ bool SymbianAbldMakefileGenerator::writeDeploymentTargets(QTextStream &t) // Xcopy prompts for selecting file or directory if target doesn't exist, // and doesn't provide switch to force file selection. It does provide dir forcing, though, // so strip the last part of the destination. - t << "\t-$(XCOPY) \"" << depList.at(i).from << "\" \"" << depList.at(i).to.left(depList.at(i).to.lastIndexOf("\\") + 1) << "\"" << endl; + t << "\t-$(XCOPY) \"" << depList.at(i).from << "\" \"" + << depList.at(i).to.left(depList.at(i).to.lastIndexOf("\\") + 1) << "\"" << endl; } t << endl; - t << WINSCW_DEPLOYMENT_CLEAN_TARGET ":" << endl; + if (isRom) + t << DEPLOYMENT_CLEAN_TARGET ":" << endl; + else + t << WINSCW_DEPLOYMENT_CLEAN_TARGET ":" << endl; + QStringList cleanList; for (int i = 0; i < depList.size(); ++i) { cleanList.append(depList.at(i).to); diff --git a/qmake/generators/symbian/symmake_abld.h b/qmake/generators/symbian/symmake_abld.h index d0f38b0..f998b28 100644 --- a/qmake/generators/symbian/symmake_abld.h +++ b/qmake/generators/symbian/symmake_abld.h @@ -57,7 +57,7 @@ protected: virtual void writeWrapperMakefile(QFile& wrapperFile, bool isPrimaryMakefile); virtual void appendAbldTempDirs(QStringList& sysincspaths, QString includepath); - bool writeDeploymentTargets(QTextStream &t); + bool writeDeploymentTargets(QTextStream &t, bool isRom); public: diff --git a/qmake/generators/symbian/symmake_sbsv2.cpp b/qmake/generators/symbian/symmake_sbsv2.cpp index 4366f0e..4391a64 100644 --- a/qmake/generators/symbian/symmake_sbsv2.cpp +++ b/qmake/generators/symbian/symmake_sbsv2.cpp @@ -90,6 +90,23 @@ void SymbianSbsv2MakefileGenerator::exportFlm() } } +void SymbianSbsv2MakefileGenerator::writeSbsDeploymentList(const DeploymentList& depList, QTextStream& t) +{ + for (int i = 0; i < depList.size(); ++i) { + t << "START EXTENSION qt/qmake_emulator_deployment" << endl; + QString fromItem = depList.at(i).from; + QString toItem = depList.at(i).to; + fromItem.replace("\\", "/"); + toItem.replace("\\", "/"); +#if defined(Q_OS_WIN) + toItem.prepend(QDir::current().absolutePath().left(2)); // add drive +#endif + t << "OPTION DEPLOY_SOURCE " << fromItem << endl; + t << "OPTION DEPLOY_TARGET " << toItem << endl; + t << "END" << endl; + } +} + void SymbianSbsv2MakefileGenerator::writeMkFile(const QString& wrapperFileName, bool deploymentOnly) { // Can't use extension makefile with sbsv2 @@ -109,7 +126,7 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo releasePlatforms.removeAll("winscw"); // No release for emulator QString testClause; - if (project->isActiveConfig("symbian_test")) + if (project->isActiveConfig(SYMBIAN_TEST_CONFIG)) testClause = QLatin1String(".test"); else testClause = QLatin1String(""); @@ -343,7 +360,7 @@ void SymbianSbsv2MakefileGenerator::writeBldInfExtensionRulesPart(QTextStream& t } } - t << "START EXTENSION qt/qmake_extra_pre_targetdep" << endl; + t << "START EXTENSION qt/qmake_extra_pre_targetdep.export" << endl; t << "OPTION PREDEP_TARGET " << absoluteTarget << endl; t << "OPTION DEPS " << absoluteDeps << endl; @@ -363,27 +380,23 @@ void SymbianSbsv2MakefileGenerator::writeBldInfExtensionRulesPart(QTextStream& t t << endl; - // Write winscw deployment rules + // Write deployment rules QString remoteTestPath = epocRoot() + QLatin1String("epoc32/winscw/c/private/") + privateDirUid; DeploymentList depList; - initProjectDeploySymbian(project, depList, remoteTestPath, false, QLatin1String("winscw"), QLatin1String("udeb"), generatedDirs, generatedFiles); + //write emulator deployment t << "#if defined(WINSCW)" << endl; - for (int i = 0; i < depList.size(); ++i) { - t << "START EXTENSION qt/qmake_emulator_deployment" << endl; - QString fromItem = depList.at(i).from; - QString toItem = depList.at(i).to; - fromItem.replace("\\", "/"); - toItem.replace("\\", "/"); -#if defined(Q_OS_WIN) - toItem.prepend(QDir::current().absolutePath().left(2)); // add drive -#endif - t << "OPTION DEPLOY_SOURCE " << fromItem << endl; - t << "OPTION DEPLOY_TARGET " << toItem << endl; - t << "END" << endl; - } + initProjectDeploySymbian(project, depList, remoteTestPath, false, + QLatin1String(EMULATOR_DEPLOYMENT_PLATFORM), QString(), generatedDirs, generatedFiles); + writeSbsDeploymentList(depList, t); t << "#endif" << endl; + //write ROM deployment + remoteTestPath = epocRoot() + QLatin1String("epoc32/data/z/private/") + privateDirUid; + depList.clear(); + initProjectDeploySymbian(project, depList, remoteTestPath, false, + QLatin1String(ROM_DEPLOYMENT_PLATFORM), QString(), generatedDirs, generatedFiles); + writeSbsDeploymentList(depList, t); t << endl; // Write post link rules diff --git a/qmake/generators/symbian/symmake_sbsv2.h b/qmake/generators/symbian/symmake_sbsv2.h index 5c31249..286c91c 100644 --- a/qmake/generators/symbian/symmake_sbsv2.h +++ b/qmake/generators/symbian/symmake_sbsv2.h @@ -56,6 +56,7 @@ protected: virtual void writeMkFile(const QString& wrapperFileName, bool deploymentOnly); virtual void writeWrapperMakefile(QFile& wrapperFile, bool isPrimaryMakefile); virtual void appendAbldTempDirs(QStringList& sysincspaths, QString includepath); + virtual bool isForSymbianSbsv2() const { return true; } // FIXME: killme - i'm ugly! public: @@ -64,6 +65,7 @@ public: private: void exportFlm(); + void writeSbsDeploymentList(const DeploymentList& depList, QTextStream& t); QString extraTargetsCache; QString extraCompilersCache; diff --git a/qmake/generators/win32/winmakefile.cpp b/qmake/generators/win32/winmakefile.cpp index 9d3b4c6..9998c1f 100644 --- a/qmake/generators/win32/winmakefile.cpp +++ b/qmake/generators/win32/winmakefile.cpp @@ -764,6 +764,11 @@ QString Win32MakefileGenerator::getLibTarget() return QString(project->first("TARGET") + project->first("TARGET_VERSION_EXT") + ".lib"); } +QString Win32MakefileGenerator::getPdbTarget() +{ + return QString(project->first("TARGET") + project->first("TARGET_VERSION_EXT") + ".pdb"); +} + QString Win32MakefileGenerator::defaultInstall(const QString &t) { if((t != "target" && t != "dlltarget") || @@ -804,6 +809,18 @@ QString Win32MakefileGenerator::defaultInstall(const QString &t) uninst.append("\n\t"); uninst.append("-$(DEL_FILE) \"" + dst_targ + "\""); } + if(project->isActiveConfig("shared") && project->isActiveConfig("debug")) { + QString pdb_target = getPdbTarget(); + pdb_target.remove('"'); + QString src_targ = (project->isEmpty("DESTDIR") ? QString("$(DESTDIR)") : project->first("DESTDIR")) + pdb_target; + QString dst_targ = filePrefixRoot(root, fileFixify(targetdir + pdb_target, FileFixifyAbsolute)); + if(!ret.isEmpty()) + ret += "\n\t"; + ret += QString("-$(INSTALL_FILE)") + " \"" + src_targ + "\" \"" + dst_targ + "\""; + if(!uninst.isEmpty()) + uninst.append("\n\t"); + uninst.append("-$(DEL_FILE) \"" + dst_targ + "\""); + } } if(t == "dlltarget" || project->values(t + ".CONFIG").indexOf("no_dll") == -1) { diff --git a/qmake/generators/win32/winmakefile.h b/qmake/generators/win32/winmakefile.h index 5437524..3a2e3a1 100644 --- a/qmake/generators/win32/winmakefile.h +++ b/qmake/generators/win32/winmakefile.h @@ -83,6 +83,7 @@ protected: virtual void processRcFileVar(); virtual void processFileTagsVar(); virtual QString getLibTarget(); + virtual QString getPdbTarget(); }; inline Win32MakefileGenerator::~Win32MakefileGenerator() diff --git a/qmake/main.cpp b/qmake/main.cpp index 50f9272..42679a2 100644 --- a/qmake/main.cpp +++ b/qmake/main.cpp @@ -149,7 +149,7 @@ int runQMake(int argc, char **argv) //setup pwd properly debug_msg(1, "Resetting dir to: %s", oldpwd.toLatin1().constData()); qmake_setpwd(oldpwd); //reset the old pwd - int di = fn.lastIndexOf(Option::dir_sep); + int di = fn.lastIndexOf(QDir::separator()); if(di != -1) { debug_msg(1, "Changing dir to: %s", fn.left(di).toLatin1().constData()); if(!qmake_setpwd(fn.left(di))) diff --git a/qmake/option.cpp b/qmake/option.cpp index 18f0541..6f0f46b 100644 --- a/qmake/option.cpp +++ b/qmake/option.cpp @@ -88,7 +88,7 @@ int Option::warn_level = WarnLogic; int Option::debug_level = 0; QFile Option::output; QString Option::output_dir; -bool Option::recursive = false; +Option::QMAKE_RECURSIVE Option::recursive = Option::QMAKE_RECURSIVE_DEFAULT; QStringList Option::before_user_vars; QStringList Option::after_user_vars; QStringList Option::user_configs; @@ -96,13 +96,9 @@ QStringList Option::after_user_configs; QString Option::user_template; QString Option::user_template_prefix; QStringList Option::shellPath; -#if defined(Q_OS_WIN32) -Option::TARG_MODE Option::target_mode = Option::TARG_WIN_MODE; -#elif defined(Q_OS_MAC) -Option::TARG_MODE Option::target_mode = Option::TARG_MACX_MODE; -#else -Option::TARG_MODE Option::target_mode = Option::TARG_UNIX_MODE; -#endif +Option::HOST_MODE Option::host_mode = Option::HOST_UNKNOWN_MODE; +Option::TARG_MODE Option::target_mode = Option::TARG_UNKNOWN_MODE; +bool Option::target_mode_overridden = false; //QMAKE_*_PROPERTY stuff QStringList Option::prop::properties; @@ -126,7 +122,7 @@ QString Option::mkfile::qmakespec_commandline; static Option::QMAKE_MODE default_mode(QString progname) { - int s = progname.lastIndexOf(Option::dir_sep); + int s = progname.lastIndexOf(QDir::separator()); if(s != -1) progname = progname.right(progname.length() - (s + 1)); if(progname == "qmakegen") @@ -184,9 +180,6 @@ bool usage(const char *a0) " * processed as if it was in [files]. These assignments will be parsed *\n" " * before [files]. *\n" " -o file Write output to file\n" - " -unix Run in unix mode\n" - " -win32 Run in win32 mode\n" - " -macx Run in Mac OS X mode\n" " -d Increase debug level\n" " -t templ Overrides TEMPLATE as templ\n" " -tp prefix Overrides TEMPLATE so that prefix is prefixed into the value\n" @@ -223,7 +216,7 @@ Option::parseCommandLine(int argc, char **argv, int skip) if(x == 1) { bool specified = true; if(opt == "project") { - Option::recursive = true; + Option::recursive = Option::QMAKE_RECURSIVE_YES; Option::qmake_mode = Option::QMAKE_GENERATE_PROJECT; } else if(opt == "prl") { Option::mkfile::do_deps = false; @@ -251,11 +244,20 @@ Option::parseCommandLine(int argc, char **argv, int skip) } else if(opt == "tp" || opt == "template_prefix") { Option::user_template_prefix = argv[++x]; } else if(opt == "macx") { + fprintf(stderr, "-macx is deprecated.\n"); + Option::host_mode = HOST_MACX_MODE; Option::target_mode = TARG_MACX_MODE; + Option::target_mode_overridden = true; } else if(opt == "unix") { + fprintf(stderr, "-unix is deprecated.\n"); + Option::host_mode = HOST_UNIX_MODE; Option::target_mode = TARG_UNIX_MODE; + Option::target_mode_overridden = true; } else if(opt == "win32") { + fprintf(stderr, "-win32 is deprecated.\n"); + Option::host_mode = HOST_WIN_MODE; Option::target_mode = TARG_WIN_MODE; + Option::target_mode_overridden = true; } else if(opt == "d") { Option::debug_level++; } else if(opt == "version" || opt == "v" || opt == "-version") { @@ -279,9 +281,9 @@ Option::parseCommandLine(int argc, char **argv, int skip) } else if(opt == "Wnone") { Option::warn_level = WarnNone; } else if(opt == "r" || opt == "recursive") { - Option::recursive = true; - } else if(opt == "norecursive") { - Option::recursive = false; + Option::recursive = Option::QMAKE_RECURSIVE_YES; + } else if(opt == "nr" || opt == "norecursive") { + Option::recursive = Option::QMAKE_RECURSIVE_NO; } else if(opt == "config") { Option::user_configs += argv[++x]; } else { @@ -405,6 +407,7 @@ Option::init(int argc, char **argv) #ifdef Q_OS_WIN Option::dirlist_sep = ";"; Option::shellPath = detectShellPath(); + Option::res_ext = ".res"; #else Option::dirlist_sep = ":"; #endif @@ -525,18 +528,23 @@ Option::init(int argc, char **argv) } //defaults for globals - if(Option::target_mode == Option::TARG_WIN_MODE) { - Option::dir_sep = "\\"; - Option::obj_ext = ".obj"; - Option::res_ext = ".res"; - } else { - Option::dir_sep = "/"; - Option::obj_ext = ".o"; - } - Option::qmake_abslocation = Option::fixPathToTargetOS(Option::qmake_abslocation); + if (Option::host_mode != Option::HOST_UNKNOWN_MODE) + applyHostMode(); return QMAKE_CMDLINE_SUCCESS; } +void Option::applyHostMode() +{ + if (Option::host_mode == Option::HOST_WIN_MODE) { + Option::dir_sep = "\\"; + Option::obj_ext = ".obj"; + } else { + Option::dir_sep = "/"; + Option::obj_ext = ".o"; + } + Option::qmake_abslocation = Option::fixPathToTargetOS(Option::qmake_abslocation); +} + bool Option::postProcessProject(QMakeProject *project) { Option::cpp_ext = project->variables()["QMAKE_EXT_CPP"]; diff --git a/qmake/option.h b/qmake/option.h index a2ca676..9bfdaed 100644 --- a/qmake/option.h +++ b/qmake/option.h @@ -106,6 +106,7 @@ struct Option //both of these must be called.. static int init(int argc=0, char **argv=0); //parse cmdline + static void applyHostMode(); static bool postProcessProject(QMakeProject *); enum StringFixFlags { @@ -148,10 +149,15 @@ struct Option static QString output_dir; static int debug_level; static int warn_level; - static bool recursive; + enum QMAKE_RECURSIVE { QMAKE_RECURSIVE_DEFAULT, QMAKE_RECURSIVE_YES, QMAKE_RECURSIVE_NO }; + static QMAKE_RECURSIVE recursive; static QStringList before_user_vars, after_user_vars, user_configs, after_user_configs; - enum TARG_MODE { TARG_UNIX_MODE, TARG_WIN_MODE, TARG_MACX_MODE }; + enum HOST_MODE { HOST_UNKNOWN_MODE, HOST_UNIX_MODE, HOST_WIN_MODE, HOST_MACX_MODE }; + static HOST_MODE host_mode; + enum TARG_MODE { TARG_UNKNOWN_MODE, TARG_UNIX_MODE, TARG_WIN_MODE, TARG_MACX_MODE, + TARG_SYMBIAN_MODE }; static TARG_MODE target_mode; + static bool target_mode_overridden; static QString user_template, user_template_prefix; static QStringList shellPath; diff --git a/qmake/project.cpp b/qmake/project.cpp index 4193163..951ca33 100644 --- a/qmake/project.cpp +++ b/qmake/project.cpp @@ -43,6 +43,7 @@ #include "property.h" #include "option.h" #include "cachekeys.h" +#include "generators/metamakefile.h" #include <qdatetime.h> #include <qfile.h> @@ -121,7 +122,7 @@ enum TestFunc { T_REQUIRES=1, T_GREATERTHAN, T_LESSTHAN, T_EQUALS, T_EXISTS, T_EXPORT, T_CLEAR, T_UNSET, T_EVAL, T_CONFIG, T_SYSTEM, T_RETURN, T_BREAK, T_NEXT, T_DEFINED, T_CONTAINS, T_INFILE, T_COUNT, T_ISEMPTY, T_INCLUDE, T_LOAD, T_DEBUG, T_ERROR, - T_MESSAGE, T_WARNING, T_IF }; + T_MESSAGE, T_WARNING, T_IF, T_OPTION }; QMap<QString, TestFunc> qmake_testFunctions() { static QMap<QString, TestFunc> *qmake_test_functions = 0; @@ -155,6 +156,7 @@ QMap<QString, TestFunc> qmake_testFunctions() qmake_test_functions->insert("error", T_ERROR); qmake_test_functions->insert("message", T_MESSAGE); qmake_test_functions->insert("warning", T_WARNING); + qmake_test_functions->insert("option", T_OPTION); } return *qmake_test_functions; } @@ -507,69 +509,6 @@ static void qmake_error_msg(const QString &msg) msg.toLatin1().constData()); } -enum isForSymbian_enum { - isForSymbian_NOT_SET = -1, - isForSymbian_FALSE = 0, - isForSymbian_ABLD = 1, - isForSymbian_SBSV2 = 2, -}; - -static isForSymbian_enum isForSymbian_value = isForSymbian_NOT_SET; - -// Checking for symbian build is primarily determined from the qmake spec, -// but if that is not specified, detect if symbian is the default spec -// by checking the MAKEFILE_GENERATOR variable value. -static void init_symbian(const QMap<QString, QStringList>& vars) -{ - if (isForSymbian_value != isForSymbian_NOT_SET) - return; - - QString spec = QFileInfo(Option::mkfile::qmakespec).fileName(); - if (spec.startsWith("symbian-abld", Qt::CaseInsensitive)) { - isForSymbian_value = isForSymbian_ABLD; - } else if (spec.startsWith("symbian-sbsv2", Qt::CaseInsensitive)) { - isForSymbian_value = isForSymbian_SBSV2; - } else { - QStringList generatorList = vars["MAKEFILE_GENERATOR"]; - - if (!generatorList.isEmpty()) { - QString generator = generatorList.first(); - if (generator.startsWith("SYMBIAN_ABLD")) - isForSymbian_value = isForSymbian_ABLD; - else if (generator.startsWith("SYMBIAN_SBSV2")) - isForSymbian_value = isForSymbian_SBSV2; - else - isForSymbian_value = isForSymbian_FALSE; - } else { - isForSymbian_value = isForSymbian_FALSE; - } - } - - // Force recursive on Symbian, as non-recursive is not really a viable option there - if (isForSymbian_value != isForSymbian_FALSE) - Option::recursive = true; -} - -bool isForSymbian() -{ - // If isForSymbian_value has not been initialized explicitly yet, - // call initializer with dummy map to check qmake spec. - if (isForSymbian_value == isForSymbian_NOT_SET) - init_symbian(QMap<QString, QStringList>()); - - return (isForSymbian_value != isForSymbian_FALSE); -} - -bool isForSymbianSbsv2() -{ - // If isForSymbian_value has not been initialized explicitly yet, - // call initializer with dummy map to check qmake spec. - if (isForSymbian_value == isForSymbian_NOT_SET) - init_symbian(QMap<QString, QStringList>()); - - return (isForSymbian_value == isForSymbian_SBSV2); -} - /* 1) environment variable QMAKEFEATURES (as separated by colons) 2) property variable QMAKEFEATURES (as separated by colons) @@ -595,22 +534,16 @@ QStringList qmake_feature_paths(QMakeProperty *prop=0) concat << base_concat + QDir::separator() + "macx"; concat << base_concat + QDir::separator() + "unix"; break; + default: // Can't happen, just make the compiler shut up case Option::TARG_UNIX_MODE: - { - if (isForSymbian()) - concat << base_concat + QDir::separator() + "symbian"; - else - concat << base_concat + QDir::separator() + "unix"; - break; - } + concat << base_concat + QDir::separator() + "unix"; + break; case Option::TARG_WIN_MODE: - { - if (isForSymbian()) - concat << base_concat + QDir::separator() + "symbian"; - else - concat << base_concat + QDir::separator() + "win32"; - break; - } + concat << base_concat + QDir::separator() + "win32"; + break; + case Option::TARG_SYMBIAN_MODE: + concat << base_concat + QDir::separator() + "symbian"; + break; } concat << base_concat; } @@ -623,7 +556,7 @@ QStringList qmake_feature_paths(QMakeProperty *prop=0) feature_roots += splitPathList(prop->value("QMAKEFEATURES")); if(!Option::mkfile::cachefile.isEmpty()) { QString path; - int last_slash = Option::mkfile::cachefile.lastIndexOf(Option::dir_sep); + int last_slash = Option::mkfile::cachefile.lastIndexOf(QDir::separator()); if(last_slash != -1) path = Option::fixPathToLocalOS(Option::mkfile::cachefile.left(last_slash)); for(QStringList::Iterator concat_it = concat.begin(); @@ -766,6 +699,7 @@ QMakeProject::reset() scope_blocks.push(ScopeBlock()); iterator = 0; function = 0; + recursive = false; } bool @@ -1356,16 +1290,7 @@ bool QMakeProject::read(uchar cmd) { if(cfile.isEmpty()) { - //find out where qmake (myself) lives - if (!base_vars.contains("QMAKE_QMAKE")) { - if (!Option::qmake_abslocation.isNull()) - base_vars["QMAKE_QMAKE"] = QStringList(Option::qmake_abslocation); - else - base_vars["QMAKE_QMAKE"] = QStringList("qmake"); - } - // hack to get the Option stuff in there - base_vars["QMAKE_EXT_OBJ"] = QStringList(Option::obj_ext); base_vars["QMAKE_EXT_CPP"] = Option::cpp_ext; base_vars["QMAKE_EXT_C"] = Option::c_ext; base_vars["QMAKE_EXT_H"] = Option::h_ext; @@ -1456,8 +1381,7 @@ QMakeProject::read(uchar cmd) fprintf(stderr, "Failure to read QMAKESPEC conf file %s.\n", spec.toLatin1().constData()); return false; } - - init_symbian(base_vars); + validateModes(); if(Option::mkfile::do_cache && !Option::mkfile::cachefile.isEmpty()) { debug_msg(1, "QMAKECACHE file: reading %s", Option::mkfile::cachefile.toLatin1().constData()); @@ -1581,6 +1505,46 @@ QMakeProject::read(uchar cmd) return true; } +void QMakeProject::validateModes() +{ + if (Option::host_mode == Option::HOST_UNKNOWN_MODE + || Option::target_mode == Option::TARG_UNKNOWN_MODE) { + Option::HOST_MODE host_mode; + Option::TARG_MODE target_mode; + const QStringList &gen = base_vars.value("MAKEFILE_GENERATOR"); + if (gen.isEmpty()) { + fprintf(stderr, "%s:%d: Using OS scope before setting MAKEFILE_GENERATOR\n", + parser.file.toLatin1().constData(), parser.line_no); + } else if (MetaMakefileGenerator::modesForGenerator(gen.first(), + &host_mode, &target_mode)) { + if (Option::host_mode == Option::HOST_UNKNOWN_MODE) { + Option::host_mode = host_mode; + Option::applyHostMode(); + } + + if (Option::target_mode == Option::TARG_UNKNOWN_MODE) { + const QStringList &tgt = base_vars.value("TARGET_PLATFORM"); + if (!tgt.isEmpty()) { + const QString &os = tgt.first(); + if (os == "unix") + Option::target_mode = Option::TARG_UNIX_MODE; + else if (os == "macx") + Option::target_mode = Option::TARG_MACX_MODE; + else if (os == "symbian") + Option::target_mode = Option::TARG_SYMBIAN_MODE; + else if (os == "win32") + Option::target_mode = Option::TARG_WIN_MODE; + else + fprintf(stderr, "Unknown target platform specified: %s\n", + os.toLatin1().constData()); + } else { + Option::target_mode = target_mode; + } + } + } + } +} + bool QMakeProject::isActiveConfig(const QString &x, bool regex, QMap<QString, QStringList> *place) { @@ -1593,26 +1557,26 @@ QMakeProject::isActiveConfig(const QString &x, bool regex, QMap<QString, QString else if(x == "false") return false; + if (x == "unix") { + validateModes(); + return Option::target_mode == Option::TARG_UNIX_MODE + || Option::target_mode == Option::TARG_MACX_MODE + || Option::target_mode == Option::TARG_SYMBIAN_MODE; + } else if (x == "macx" || x == "mac") { + validateModes(); + return Option::target_mode == Option::TARG_MACX_MODE; + } else if (x == "symbian") { + validateModes(); + return Option::target_mode == Option::TARG_SYMBIAN_MODE; + } else if (x == "win32") { + validateModes(); + return Option::target_mode == Option::TARG_WIN_MODE; + } + + //mkspecs static QString spec; if(spec.isEmpty()) spec = QFileInfo(Option::mkfile::qmakespec).fileName(); - - // Symbian is an exception to how scopes are resolved. Since we do not - // have a separate target mode for Symbian, but we expect the scope to resolve - // on other platforms we base it entirely on the mkspec. This means that - // using a mkspec starting with 'symbian*' will resolve both the 'symbian' - // and the 'unix' (because of Open C) scopes to true. - if(isForSymbian() && (x == "symbian" || x == "unix")) - return true; - - //mkspecs - if((Option::target_mode == Option::TARG_MACX_MODE || - Option::target_mode == Option::TARG_UNIX_MODE) && x == "unix") - return !isForSymbian(); - else if(Option::target_mode == Option::TARG_MACX_MODE && (x == "macx" || x == "mac")) - return !isForSymbian(); - else if(Option::target_mode == Option::TARG_WIN_MODE && x == "win32") - return !isForSymbian(); QRegExp re(x, Qt::CaseSensitive, QRegExp::Wildcard); if((regex && re.exactMatch(spec)) || (!regex && spec == x)) return true; @@ -1704,7 +1668,7 @@ QMakeProject::doProjectInclude(QString file, uchar flags, QMap<QString, QStringL if(file.indexOf(Option::dir_sep) == -1 || !QFile::exists(file)) { static QStringList *feature_roots = 0; if(!feature_roots) { - init_symbian(base_vars); + validateModes(); feature_roots = new QStringList(qmake_feature_paths(prop)); qmakeAddCacheClear(qmakeDeleteCacheClear_QStringList, (void**)&feature_roots); } @@ -2768,6 +2732,21 @@ QMakeProject::doProjectTest(QString func, QList<QStringList> args_list, QMap<QSt exit(2); #endif return true; } + case T_OPTION: + if (args.count() != 1) { + fprintf(stderr, "%s:%d: option() requires one argument.\n", + parser.file.toLatin1().constData(), parser.line_no); + return false; + } + if (args.first() == "recursive") { + recursive = true; + } else { + fprintf(stderr, "%s:%d: unrecognized option() argument '%s'.\n", + parser.file.toLatin1().constData(), parser.line_no, + args.first().toLatin1().constData()); + return false; + } + return true; default: fprintf(stderr, "%s:%d: Unknown test function: %s\n", parser.file.toLatin1().constData(), parser.line_no, func.toLatin1().constData()); @@ -3150,6 +3129,19 @@ QStringList &QMakeProject::values(const QString &_var, QMap<QString, QStringList } else if (var == QLatin1String("QMAKE_DIR_SEP")) { if (place[var].isEmpty()) return values("DIR_SEPARATOR", place); + } else if (var == QLatin1String("QMAKE_EXT_OBJ")) { + if (place[var].isEmpty()) { + var = ".BUILTIN." + var; + place[var] = QStringList(Option::obj_ext); + } + } else if (var == QLatin1String("QMAKE_QMAKE")) { + if (place[var].isEmpty()) { + var = ".BUILTIN." + var; + if (!Option::qmake_abslocation.isNull()) + place[var] = QStringList(Option::qmake_abslocation); + else + place[var] = QStringList("qmake"); + } } else if (var == QLatin1String("EPOCROOT")) { if (place[var].isEmpty()) place[var] = QStringList(epocRoot()); diff --git a/qmake/project.h b/qmake/project.h index 1f53bf2..bfebed0 100644 --- a/qmake/project.h +++ b/qmake/project.h @@ -78,6 +78,7 @@ class QMakeProject FunctionBlock *function; QMap<QString, FunctionBlock*> testFunctions, replaceFunctions; + bool recursive; bool own_prop; QString pfile, cfile; QMakeProperty *prop; @@ -105,6 +106,7 @@ class QMakeProject QStringList doVariableReplaceExpand(const QString &str, QMap<QString, QStringList> &place, bool *ok=0); void init(QMakeProperty *, const QMap<QString, QStringList> *); QStringList &values(const QString &v, QMap<QString, QStringList> &place); + void validateModes(); public: QMakeProject() { init(0, 0); } @@ -154,6 +156,8 @@ public: QString first(const QString &v); QMap<QString, QStringList> &variables(); + bool isRecursive() const { return recursive; } + protected: friend class MakefileGenerator; bool read(const QString &file, QMap<QString, QStringList> &place); @@ -192,10 +196,6 @@ inline QString QMakeProject::first(const QString &v) inline QMap<QString, QStringList> &QMakeProject::variables() { return vars; } -// Helper functions needed for Symbian -bool isForSymbian(); -bool isForSymbianSbsv2(); - QT_END_NAMESPACE #endif // PROJECT_H diff --git a/src/3rdparty/libtiff/libtiff/tif_wince.c b/src/3rdparty/libtiff/libtiff/tif_wince.c new file mode 100644 index 0000000..4e283da --- /dev/null +++ b/src/3rdparty/libtiff/libtiff/tif_wince.c @@ -0,0 +1,281 @@ +/* $Id: tif_wince.c,v 1.1 2007-01-15 18:40:39 mloskot Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the names of + * Sam Leffler and Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Sam Leffler and Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +/* + * Windows CE-specific routines for TIFF Library. + * Adapted from tif_win32.c 01/10/2006 by Mateusz Loskot (mateusz@loskot.net) + */ + +#ifndef _WIN32_WCE +# error "Only Windows CE target is supported!" +#endif + +#include "tiffiop.h" +#include <windows.h> + +/* Turn off console support on Windows CE. */ +#undef TIF_PLATFORM_CONSOLE + + +/* + * Open a TIFF file for read/writing. + */ +TIFF* +TIFFOpen(const char* name, const char* mode) +{ + static const char module[] = "TIFFOpen"; + thandle_t fd; + int m; + DWORD dwMode; + TIFF* tif; + size_t nLen; + size_t nWideLen; + wchar_t* wchName; + + m = _TIFFgetMode(mode, module); + + switch(m) + { + case O_RDONLY: + dwMode = OPEN_EXISTING; + break; + case O_RDWR: + dwMode = OPEN_ALWAYS; + break; + case O_RDWR|O_CREAT: + dwMode = OPEN_ALWAYS; + break; + case O_RDWR|O_TRUNC: + dwMode = CREATE_ALWAYS; + break; + case O_RDWR|O_CREAT|O_TRUNC: + dwMode = CREATE_ALWAYS; + break; + default: + return ((TIFF*)0); + } + + /* On Windows CE, CreateFile is mapped to CreateFileW, + * but file path is passed as char-based string, + * so the path has to be converted to wchar_t. + */ + + nWideLen = 0; + wchName = NULL; + nLen = strlen(name) + 1; + + nWideLen = MultiByteToWideChar(CP_ACP, 0, name, nLen, NULL, 0); + wchName = (wchar_t*)malloc(sizeof(wchar_t) * nWideLen); + if (NULL == wchName) + { + TIFFErrorExt(0, module, "Memory allocation error!"); + return ((TIFF *)0); + } + memset(wchName, 0, sizeof(wchar_t) * nWideLen); + MultiByteToWideChar(CP_ACP, 0, name, nLen, wchName, nWideLen); + + fd = (thandle_t)CreateFile(wchName, + (m == O_RDONLY)?GENERIC_READ:(GENERIC_READ | GENERIC_WRITE), + FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, dwMode, + (m == O_RDONLY)?FILE_ATTRIBUTE_READONLY:FILE_ATTRIBUTE_NORMAL, + NULL); + + free(wchName); + + if (fd == INVALID_HANDLE_VALUE) { + TIFFErrorExt(0, module, "%s: Cannot open", name); + return ((TIFF *)0); + } + + /* TODO - mloskot: change to TIFFdOpenW and pass wchar path */ + + tif = TIFFFdOpen((int)fd, name, mode); + if(!tif) + CloseHandle(fd); + return tif; +} + +/* + * Open a TIFF file with a Unicode filename, for read/writing. + */ +TIFF* +TIFFOpenW(const wchar_t* name, const char* mode) +{ + static const char module[] = "TIFFOpenW"; + thandle_t fd; + int m; + DWORD dwMode; + int mbsize; + char *mbname; + TIFF *tif; + + m = _TIFFgetMode(mode, module); + + switch(m) { + case O_RDONLY: dwMode = OPEN_EXISTING; break; + case O_RDWR: dwMode = OPEN_ALWAYS; break; + case O_RDWR|O_CREAT: dwMode = OPEN_ALWAYS; break; + case O_RDWR|O_TRUNC: dwMode = CREATE_ALWAYS; break; + case O_RDWR|O_CREAT|O_TRUNC: dwMode = CREATE_ALWAYS; break; + default: return ((TIFF*)0); + } + + /* On Windows CE, CreateFile is mapped to CreateFileW, + * so no conversion of wchar_t to char is required. + */ + + fd = (thandle_t)CreateFile(name, + (m == O_RDONLY)?GENERIC_READ:(GENERIC_READ|GENERIC_WRITE), + FILE_SHARE_READ, NULL, dwMode, + (m == O_RDONLY)?FILE_ATTRIBUTE_READONLY:FILE_ATTRIBUTE_NORMAL, + NULL); + if (fd == INVALID_HANDLE_VALUE) { + TIFFErrorExt(0, module, "%S: Cannot open", name); + return ((TIFF *)0); + } + + mbname = NULL; + mbsize = WideCharToMultiByte(CP_ACP, 0, name, -1, NULL, 0, NULL, NULL); + if (mbsize > 0) { + mbname = (char *)_TIFFmalloc(mbsize); + if (!mbname) { + TIFFErrorExt(0, module, + "Can't allocate space for filename conversion buffer"); + return ((TIFF*)0); + } + + WideCharToMultiByte(CP_ACP, 0, name, -1, mbname, mbsize, + NULL, NULL); + } + + tif = TIFFFdOpen((int)fd, + (mbname != NULL) ? mbname : "<unknown>", mode); + if(!tif) + CloseHandle(fd); + + _TIFFfree(mbname); + + return tif; +} + +static void +Win32WarningHandler(const char* module, const char* fmt, va_list ap) +{ + /* On Windows CE, MessageBox is mapped to wide-char based MessageBoxW. */ + + size_t nWideLen = 0; + LPTSTR szWideTitle = NULL; + LPTSTR szWideMsg = NULL; + + LPSTR szTitle; + LPSTR szTmp; + LPCSTR szTitleText = "%s Warning"; + LPCSTR szDefaultModule = "LIBTIFF"; + LPCSTR szTmpModule; + + szTmpModule = (module == NULL) ? szDefaultModule : module; + if ((szTitle = (LPSTR)LocalAlloc(LMEM_FIXED, + (strlen(szTmpModule) + strlen(szTitleText) + + strlen(fmt) + 128) * sizeof(char))) == NULL) + return; + + sprintf(szTitle, szTitleText, szTmpModule); + szTmp = szTitle + (strlen(szTitle) + 2) * sizeof(char); + vsprintf(szTmp, fmt, ap); + + /* Convert error message to Unicode. */ + + nWideLen = MultiByteToWideChar(CP_ACP, 0, szTitle, -1, NULL, 0); + szWideTitle = (wchar_t*)malloc(sizeof(wchar_t) * nWideLen); + MultiByteToWideChar(CP_ACP, 0, szTitle, -1, szWideTitle, nWideLen); + + nWideLen = MultiByteToWideChar(CP_ACP, 0, szTmp, -1, NULL, 0); + szWideMsg = (wchar_t*)malloc(sizeof(wchar_t) * nWideLen); + MultiByteToWideChar(CP_ACP, 0, szTmp, -1, szWideMsg, nWideLen); + + /* Display message */ + + MessageBox(GetFocus(), szWideMsg, szWideTitle, MB_OK | MB_ICONEXCLAMATION); + + /* Free resources */ + + LocalFree(szTitle); + free(szWideMsg); + free(szWideTitle); +} + +TIFFErrorHandler _TIFFwarningHandler = Win32WarningHandler; + +static void +Win32ErrorHandler(const char* module, const char* fmt, va_list ap) +{ + /* On Windows CE, MessageBox is mapped to wide-char based MessageBoxW. */ + + size_t nWideLen = 0; + LPTSTR szWideTitle = NULL; + LPTSTR szWideMsg = NULL; + + LPSTR szTitle; + LPSTR szTmp; + LPCSTR szTitleText = "%s Error"; + LPCSTR szDefaultModule = "LIBTIFF"; + LPCSTR szTmpModule; + + szTmpModule = (module == NULL) ? szDefaultModule : module; + if ((szTitle = (LPSTR)LocalAlloc(LMEM_FIXED, + (strlen(szTmpModule) + strlen(szTitleText) + + strlen(fmt) + 128) * sizeof(char))) == NULL) + return; + + sprintf(szTitle, szTitleText, szTmpModule); + szTmp = szTitle + (strlen(szTitle) + 2) * sizeof(char); + vsprintf(szTmp, fmt, ap); + + /* Convert error message to Unicode. */ + + nWideLen = MultiByteToWideChar(CP_ACP, 0, szTitle, -1, NULL, 0); + szWideTitle = (wchar_t*)malloc(sizeof(wchar_t) * nWideLen); + MultiByteToWideChar(CP_ACP, 0, szTitle, -1, szWideTitle, nWideLen); + + nWideLen = MultiByteToWideChar(CP_ACP, 0, szTmp, -1, NULL, 0); + szWideMsg = (wchar_t*)malloc(sizeof(wchar_t) * nWideLen); + MultiByteToWideChar(CP_ACP, 0, szTmp, -1, szWideMsg, nWideLen); + + /* Display message */ + + MessageBox(GetFocus(), szWideMsg, szWideTitle, MB_OK | MB_ICONEXCLAMATION); + + /* Free resources */ + + LocalFree(szTitle); + free(szWideMsg); + free(szWideTitle); +} + +TIFFErrorHandler _TIFFerrorHandler = Win32ErrorHandler; + + +/* vim: set ts=8 sts=8 sw=8 noet: */ diff --git a/src/corelib/concurrent/qfuturewatcher.cpp b/src/corelib/concurrent/qfuturewatcher.cpp index 3065205..3b808b8 100644 --- a/src/corelib/concurrent/qfuturewatcher.cpp +++ b/src/corelib/concurrent/qfuturewatcher.cpp @@ -499,6 +499,13 @@ void QFutureWatcherBasePrivate::sendCallOutEvent(QFutureCallOutEvent *event) /*! \fn void QFutureWatcher::setFuture(const QFuture<T> &future) Starts watching the given \a future. + + One of the signals might be emitted for the current state of the + \a future. For example, if the future is already stopped, the + finished signal will be emitted. + + To avoid a race condition, it is important to call this function + \i after doing the connections. */ /*! \fn QFuture<T> QFutureWatcher::future() const diff --git a/src/corelib/corelib.pro b/src/corelib/corelib.pro index efee610..df9a463 100644 --- a/src/corelib/corelib.pro +++ b/src/corelib/corelib.pro @@ -52,3 +52,25 @@ symbian: { partial_upgrade.path = c:/sys/bin DEPLOYMENT = partial_upgrade $$DEPLOYMENT } + +mmx { + DEFINES += QT_HAVE_MMX +} +3dnow { + DEFINES += QT_HAVE_3DNOW +} +sse { + DEFINES += QT_HAVE_SSE + DEFINES += QT_HAVE_MMXEXT +} +sse2 { + DEFINES += QT_HAVE_SSE2 +} +iwmmxt { + DEFINES += QT_HAVE_IWMMXT +} +neon { + DEFINES += QT_HAVE_NEON + QMAKE_CXXFLAGS *= -mfpu=neon +} + diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 7e7d7d8..4d48b60 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -814,7 +814,7 @@ namespace QT_NAMESPACE {} # define Q_WS_MAC32 # endif # elif defined(Q_OS_SYMBIAN) -# if (defined(__SERIES60_31__) || defined(__S60_32__) || defined(__S60_50__)) && !defined(QT_NO_S60) +# if !defined(QT_NO_S60) # define Q_WS_S60 # endif # elif !defined(Q_WS_QWS) @@ -2414,10 +2414,11 @@ QT3_SUPPORT Q_CORE_EXPORT const char *qInstallPathSysconf(); #if defined(Q_OS_SYMBIAN) -#ifdef SYMBIAN_GRAPHICS_USE_GCE +#ifdef SYMBIAN_BUILD_GCE //RWsPointerCursor is fixed, so don't use low performance sprites #define Q_SYMBIAN_FIXED_POINTER_CURSORS #define Q_SYMBIAN_HAS_EXTENDED_BITMAP_TYPE +#define Q_SYMBIAN_WINDOW_SIZE_CACHE //enabling new graphics resources #define QT_SYMBIAN_SUPPORTS_SGIMAGE #define QT_SYMBIAN_SUPPORTS_ADVANCED_POINTER diff --git a/src/corelib/io/qdatastream.cpp b/src/corelib/io/qdatastream.cpp index fc35bfa..2731ae1 100644 --- a/src/corelib/io/qdatastream.cpp +++ b/src/corelib/io/qdatastream.cpp @@ -159,10 +159,9 @@ QT_BEGIN_NAMESPACE \section1 Reading and writing Qt collection classes - The Qt collection classes can also be serialized to a QDataStream. + The Qt container classes can also be serialized to a QDataStream. These include QList, QLinkedList, QVector, QSet, QHash, and QMap. - These classes have have stream operators declared as non-member of - the class. + The stream operators are declared as non-members of the classes. \target Serializing Qt Classes \section1 Reading and writing other Qt classes. diff --git a/src/corelib/io/qdir.cpp b/src/corelib/io/qdir.cpp index 7cfdddf..505889e 100644 --- a/src/corelib/io/qdir.cpp +++ b/src/corelib/io/qdir.cpp @@ -960,13 +960,14 @@ void QDir::setNameFilters(const QStringList &nameFilters) /*! \obsolete + + Use QDir::addSearchPath() with a prefix instead. + Adds \a path to the search paths searched in to find resources that are not specified with an absolute path. The default search path is to search only in the root (\c{:/}). - Use QDir::addSearchPath() with a prefix instead. - - \sa {The Qt Resource System}, QResource::addSearchPath() + \sa {The Qt Resource System} */ void QDir::addResourceSearchPath(const QString &path) { diff --git a/src/corelib/io/qfilesystemwatcher_fsevents.cpp b/src/corelib/io/qfilesystemwatcher_fsevents.cpp index 54ae24e..efbc290 100644 --- a/src/corelib/io/qfilesystemwatcher_fsevents.cpp +++ b/src/corelib/io/qfilesystemwatcher_fsevents.cpp @@ -445,7 +445,16 @@ void QFSEventsFileSystemWatcherEngine::updateFiles() updateHash(dirPathInfoHash); if (filePathInfoHash.isEmpty() && dirPathInfoHash.isEmpty()) { // Everything disappeared before we got to start, don't bother. - stop(); +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 + // Code duplicated from stop(), with the exception that we + // don't wait on waitForStop here. Doing this will lead to + // a deadlock since this function is called from the worker + // thread. (waitForStop.wakeAll() is only called from the + // end of run()). + stopFSStream(fsStream); + if (threadsRunLoop) + CFRunLoopStop(threadsRunLoop); +#endif cleanupFSStream(fsStream); } waitCondition.wakeAll(); diff --git a/src/corelib/io/qfsfileengine_unix.cpp b/src/corelib/io/qfsfileengine_unix.cpp index 9179485..d2fa744 100644 --- a/src/corelib/io/qfsfileengine_unix.cpp +++ b/src/corelib/io/qfsfileengine_unix.cpp @@ -1270,7 +1270,7 @@ uchar *QFSFileEnginePrivate::map(qint64 offset, qint64 size, QFile::MemoryMapFla int pageSize = getpagesize(); int extra = offset % pageSize; - if (size + extra > (size_t)-1) { + if (quint64(size + extra) > quint64((size_t)-1)) { q->setError(QFile::UnspecifiedError, qt_error_string(int(EINVAL))); return 0; } diff --git a/src/corelib/io/qiodevice.cpp b/src/corelib/io/qiodevice.cpp index 4e14ba8..662100a 100644 --- a/src/corelib/io/qiodevice.cpp +++ b/src/corelib/io/qiodevice.cpp @@ -1003,8 +1003,8 @@ QByteArray QIODevice::readAll() to a maximum of \a maxSize - 1 bytes, stores the characters in \a data, and returns the number of bytes read. If a line could not be read but no error ocurred, this function returns 0. If an error - occurs, this function returns what it could the length of what - could be read, or -1 if nothing was read. + occurs, this function returns the length of what could be read, or + -1 if nothing was read. A terminating '\0' byte is always appended to \a data, so \a maxSize must be larger than 1. diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp index adfbb15..6d33c8b 100644 --- a/src/corelib/io/qresource.cpp +++ b/src/corelib/io/qresource.cpp @@ -555,16 +555,15 @@ QStringList QResource::children() const /*! \obsolete + Use QDir::addSearchPath() with a prefix instead. + Adds \a path to the search paths searched in to find resources that are not specified with an absolute path. The \a path must be an absolute path (start with \c{/}). The default search path is to search only in the root (\c{:/}). The last path added will be consulted first upon next QResource creation. - - Use QDir::addSearchPath() with a prefix instead. */ - void QResource::addSearchPath(const QString &path) { @@ -578,6 +577,10 @@ QResource::addSearchPath(const QString &path) } /*! + \obsolete + + Use QDir::searchPaths() instead. + Returns the current search path list. This list is consulted when creating a relative resource. diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp index 0290fb8..626bd3f 100644 --- a/src/corelib/io/qurl.cpp +++ b/src/corelib/io/qurl.cpp @@ -167,6 +167,13 @@ regardless of the Qt::FormattingOptions used. */ +/*! + \fn uint qHash(const QUrl &url) + \since 4.7 + \relates QUrl + + Computes a hash key from the normalized version of \a url. + */ #include "qplatformdefs.h" #include "qurl.h" #include "private/qunicodetables_p.h" @@ -437,17 +444,19 @@ static bool QT_FASTCALL _unreserved(const char **ptr) } // scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ) -static void QT_FASTCALL _scheme(const char **ptr, QUrlParseData *parseData) +static bool QT_FASTCALL _scheme(const char **ptr, QUrlParseData *parseData) { bool first = true; + bool isSchemeValid = true; parseData->scheme = *ptr; for (;;) { char ch = **ptr; if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) { ; - } else if (!first && ((ch >= '0' && ch <= '9') || ch == '+' || ch == '-' || ch == '.')) { - ; + } else if ((ch >= '0' && ch <= '9') || ch == '+' || ch == '-' || ch == '.') { + if (first) + isSchemeValid = false; } else { break; } @@ -457,11 +466,14 @@ static void QT_FASTCALL _scheme(const char **ptr, QUrlParseData *parseData) } if (**ptr != ':') { + isSchemeValid = true; *ptr = parseData->scheme; } else { parseData->schemeLength = *ptr - parseData->scheme; ++(*ptr); // skip ':' } + + return isSchemeValid; } // IPvFuture = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" ) @@ -3743,7 +3755,19 @@ void QUrlPrivate::parse(ParseOptions parseOptions) const #endif // optional scheme - _scheme(ptr, &parseData); + bool isSchemeValid = _scheme(ptr, &parseData); + + if (isSchemeValid == false) { + that->isValid = false; + char ch = *((*ptr)++); + that->errorInfo.setParams(*ptr, QT_TRANSLATE_NOOP(QUrl, "unexpected URL scheme"), + 0, ch); + QURL_SETFLAG(that->stateFlags, Validated | Parsed); +#if defined (QURL_DEBUG) + qDebug("QUrlPrivate::parse(), unrecognized: %c%s", ch, *ptr); +#endif + return; + } // hierpart _hierPart(ptr, &parseData); diff --git a/src/corelib/io/qurl.h b/src/corelib/io/qurl.h index 906979c..6f8331a 100644 --- a/src/corelib/io/qurl.h +++ b/src/corelib/io/qurl.h @@ -270,9 +270,9 @@ public: inline DataPtr &data_ptr() { return d; } }; -inline uint qHash(const QUrl &uri) +inline uint qHash(const QUrl &url) { - return qHash(uri.toEncoded(QUrl::FormattingOption(0x100))); + return qHash(url.toEncoded(QUrl::FormattingOption(0x100))); } Q_DECLARE_TYPEINFO(QUrl, Q_MOVABLE_TYPE); diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp index 9e187d4..779b69b 100644 --- a/src/corelib/kernel/qmetatype.cpp +++ b/src/corelib/kernel/qmetatype.cpp @@ -225,101 +225,104 @@ QT_BEGIN_NAMESPACE \sa Q_DECLARE_METATYPE(), QVariant::setValue(), QVariant::value(), QVariant::fromValue() */ +#define QT_ADD_STATIC_METATYPE(STR, TP) \ + { STR, sizeof(STR) - 1, TP } + /* Note: these MUST be in the order of the enums */ -static const struct { const char * typeName; int type; } types[] = { +static const struct { const char * typeName; int typeNameLength; int type; } types[] = { /* All Core types */ - {"void", QMetaType::Void}, - {"bool", QMetaType::Bool}, - {"int", QMetaType::Int}, - {"uint", QMetaType::UInt}, - {"qlonglong", QMetaType::LongLong}, - {"qulonglong", QMetaType::ULongLong}, - {"double", QMetaType::Double}, - {"QChar", QMetaType::QChar}, - {"QVariantMap", QMetaType::QVariantMap}, - {"QVariantList", QMetaType::QVariantList}, - {"QString", QMetaType::QString}, - {"QStringList", QMetaType::QStringList}, - {"QByteArray", QMetaType::QByteArray}, - {"QBitArray", QMetaType::QBitArray}, - {"QDate", QMetaType::QDate}, - {"QTime", QMetaType::QTime}, - {"QDateTime", QMetaType::QDateTime}, - {"QUrl", QMetaType::QUrl}, - {"QLocale", QMetaType::QLocale}, - {"QRect", QMetaType::QRect}, - {"QRectF", QMetaType::QRectF}, - {"QSize", QMetaType::QSize}, - {"QSizeF", QMetaType::QSizeF}, - {"QLine", QMetaType::QLine}, - {"QLineF", QMetaType::QLineF}, - {"QPoint", QMetaType::QPoint}, - {"QPointF", QMetaType::QPointF}, - {"QRegExp", QMetaType::QRegExp}, - {"QVariantHash", QMetaType::QVariantHash}, - {"QEasingCurve", QMetaType::QEasingCurve}, + QT_ADD_STATIC_METATYPE("void", QMetaType::Void), + QT_ADD_STATIC_METATYPE("bool", QMetaType::Bool), + QT_ADD_STATIC_METATYPE("int", QMetaType::Int), + QT_ADD_STATIC_METATYPE("uint", QMetaType::UInt), + QT_ADD_STATIC_METATYPE("qlonglong", QMetaType::LongLong), + QT_ADD_STATIC_METATYPE("qulonglong", QMetaType::ULongLong), + QT_ADD_STATIC_METATYPE("double", QMetaType::Double), + QT_ADD_STATIC_METATYPE("QChar", QMetaType::QChar), + QT_ADD_STATIC_METATYPE("QVariantMap", QMetaType::QVariantMap), + QT_ADD_STATIC_METATYPE("QVariantList", QMetaType::QVariantList), + QT_ADD_STATIC_METATYPE("QString", QMetaType::QString), + QT_ADD_STATIC_METATYPE("QStringList", QMetaType::QStringList), + QT_ADD_STATIC_METATYPE("QByteArray", QMetaType::QByteArray), + QT_ADD_STATIC_METATYPE("QBitArray", QMetaType::QBitArray), + QT_ADD_STATIC_METATYPE("QDate", QMetaType::QDate), + QT_ADD_STATIC_METATYPE("QTime", QMetaType::QTime), + QT_ADD_STATIC_METATYPE("QDateTime", QMetaType::QDateTime), + QT_ADD_STATIC_METATYPE("QUrl", QMetaType::QUrl), + QT_ADD_STATIC_METATYPE("QLocale", QMetaType::QLocale), + QT_ADD_STATIC_METATYPE("QRect", QMetaType::QRect), + QT_ADD_STATIC_METATYPE("QRectF", QMetaType::QRectF), + QT_ADD_STATIC_METATYPE("QSize", QMetaType::QSize), + QT_ADD_STATIC_METATYPE("QSizeF", QMetaType::QSizeF), + QT_ADD_STATIC_METATYPE("QLine", QMetaType::QLine), + QT_ADD_STATIC_METATYPE("QLineF", QMetaType::QLineF), + QT_ADD_STATIC_METATYPE("QPoint", QMetaType::QPoint), + QT_ADD_STATIC_METATYPE("QPointF", QMetaType::QPointF), + QT_ADD_STATIC_METATYPE("QRegExp", QMetaType::QRegExp), + QT_ADD_STATIC_METATYPE("QVariantHash", QMetaType::QVariantHash), + QT_ADD_STATIC_METATYPE("QEasingCurve", QMetaType::QEasingCurve), /* All GUI types */ - {"QColorGroup", 63}, - {"QFont", QMetaType::QFont}, - {"QPixmap", QMetaType::QPixmap}, - {"QBrush", QMetaType::QBrush}, - {"QColor", QMetaType::QColor}, - {"QPalette", QMetaType::QPalette}, - {"QIcon", QMetaType::QIcon}, - {"QImage", QMetaType::QImage}, - {"QPolygon", QMetaType::QPolygon}, - {"QRegion", QMetaType::QRegion}, - {"QBitmap", QMetaType::QBitmap}, - {"QCursor", QMetaType::QCursor}, - {"QSizePolicy", QMetaType::QSizePolicy}, - {"QKeySequence", QMetaType::QKeySequence}, - {"QPen", QMetaType::QPen}, - {"QTextLength", QMetaType::QTextLength}, - {"QTextFormat", QMetaType::QTextFormat}, - {"QMatrix", QMetaType::QMatrix}, - {"QTransform", QMetaType::QTransform}, - {"QMatrix4x4", QMetaType::QMatrix4x4}, - {"QVector2D", QMetaType::QVector2D}, - {"QVector3D", QMetaType::QVector3D}, - {"QVector4D", QMetaType::QVector4D}, - {"QQuaternion", QMetaType::QQuaternion}, + QT_ADD_STATIC_METATYPE("QColorGroup", 63), + QT_ADD_STATIC_METATYPE("QFont", QMetaType::QFont), + QT_ADD_STATIC_METATYPE("QPixmap", QMetaType::QPixmap), + QT_ADD_STATIC_METATYPE("QBrush", QMetaType::QBrush), + QT_ADD_STATIC_METATYPE("QColor", QMetaType::QColor), + QT_ADD_STATIC_METATYPE("QPalette", QMetaType::QPalette), + QT_ADD_STATIC_METATYPE("QIcon", QMetaType::QIcon), + QT_ADD_STATIC_METATYPE("QImage", QMetaType::QImage), + QT_ADD_STATIC_METATYPE("QPolygon", QMetaType::QPolygon), + QT_ADD_STATIC_METATYPE("QRegion", QMetaType::QRegion), + QT_ADD_STATIC_METATYPE("QBitmap", QMetaType::QBitmap), + QT_ADD_STATIC_METATYPE("QCursor", QMetaType::QCursor), + QT_ADD_STATIC_METATYPE("QSizePolicy", QMetaType::QSizePolicy), + QT_ADD_STATIC_METATYPE("QKeySequence", QMetaType::QKeySequence), + QT_ADD_STATIC_METATYPE("QPen", QMetaType::QPen), + QT_ADD_STATIC_METATYPE("QTextLength", QMetaType::QTextLength), + QT_ADD_STATIC_METATYPE("QTextFormat", QMetaType::QTextFormat), + QT_ADD_STATIC_METATYPE("QMatrix", QMetaType::QMatrix), + QT_ADD_STATIC_METATYPE("QTransform", QMetaType::QTransform), + QT_ADD_STATIC_METATYPE("QMatrix4x4", QMetaType::QMatrix4x4), + QT_ADD_STATIC_METATYPE("QVector2D", QMetaType::QVector2D), + QT_ADD_STATIC_METATYPE("QVector3D", QMetaType::QVector3D), + QT_ADD_STATIC_METATYPE("QVector4D", QMetaType::QVector4D), + QT_ADD_STATIC_METATYPE("QQuaternion", QMetaType::QQuaternion), /* All Metatype builtins */ - {"void*", QMetaType::VoidStar}, - {"long", QMetaType::Long}, - {"short", QMetaType::Short}, - {"char", QMetaType::Char}, - {"ulong", QMetaType::ULong}, - {"ushort", QMetaType::UShort}, - {"uchar", QMetaType::UChar}, - {"float", QMetaType::Float}, - {"QObject*", QMetaType::QObjectStar}, - {"QWidget*", QMetaType::QWidgetStar}, + QT_ADD_STATIC_METATYPE("void*", QMetaType::VoidStar), + QT_ADD_STATIC_METATYPE("long", QMetaType::Long), + QT_ADD_STATIC_METATYPE("short", QMetaType::Short), + QT_ADD_STATIC_METATYPE("char", QMetaType::Char), + QT_ADD_STATIC_METATYPE("ulong", QMetaType::ULong), + QT_ADD_STATIC_METATYPE("ushort", QMetaType::UShort), + QT_ADD_STATIC_METATYPE("uchar", QMetaType::UChar), + QT_ADD_STATIC_METATYPE("float", QMetaType::Float), + QT_ADD_STATIC_METATYPE("QObject*", QMetaType::QObjectStar), + QT_ADD_STATIC_METATYPE("QWidget*", QMetaType::QWidgetStar), /* Type aliases - order doesn't matter */ - {"unsigned long", QMetaType::ULong}, - {"unsigned int", QMetaType::UInt}, - {"unsigned short", QMetaType::UShort}, - {"unsigned char", QMetaType::UChar}, - {"long long", QMetaType::LongLong}, - {"unsigned long long", QMetaType::ULongLong}, - {"qint8", QMetaType::Char}, - {"quint8", QMetaType::UChar}, - {"qint16", QMetaType::Short}, - {"quint16", QMetaType::UShort}, - {"qint32", QMetaType::Int}, - {"quint32", QMetaType::UInt}, - {"qint64", QMetaType::LongLong}, - {"quint64", QMetaType::ULongLong}, - {"QList<QVariant>", QMetaType::QVariantList}, - {"QMap<QString,QVariant>", QMetaType::QVariantMap}, - {"QHash<QString,QVariant>", QMetaType::QVariantHash}, + QT_ADD_STATIC_METATYPE("unsigned long", QMetaType::ULong), + QT_ADD_STATIC_METATYPE("unsigned int", QMetaType::UInt), + QT_ADD_STATIC_METATYPE("unsigned short", QMetaType::UShort), + QT_ADD_STATIC_METATYPE("unsigned char", QMetaType::UChar), + QT_ADD_STATIC_METATYPE("long long", QMetaType::LongLong), + QT_ADD_STATIC_METATYPE("unsigned long long", QMetaType::ULongLong), + QT_ADD_STATIC_METATYPE("qint8", QMetaType::Char), + QT_ADD_STATIC_METATYPE("quint8", QMetaType::UChar), + QT_ADD_STATIC_METATYPE("qint16", QMetaType::Short), + QT_ADD_STATIC_METATYPE("quint16", QMetaType::UShort), + QT_ADD_STATIC_METATYPE("qint32", QMetaType::Int), + QT_ADD_STATIC_METATYPE("quint32", QMetaType::UInt), + QT_ADD_STATIC_METATYPE("qint64", QMetaType::LongLong), + QT_ADD_STATIC_METATYPE("quint64", QMetaType::ULongLong), + QT_ADD_STATIC_METATYPE("QList<QVariant>", QMetaType::QVariantList), + QT_ADD_STATIC_METATYPE("QMap<QString,QVariant>", QMetaType::QVariantMap), + QT_ADD_STATIC_METATYPE("QHash<QString,QVariant>", QMetaType::QVariantHash), // let QMetaTypeId2 figure out the type at compile time - {"qreal", QMetaTypeId2<qreal>::MetaType}, + QT_ADD_STATIC_METATYPE("qreal", QMetaTypeId2<qreal>::MetaType), - {0, QMetaType::Void} + {0, 0, QMetaType::Void} }; struct QMetaTypeGuiHelper @@ -410,24 +413,35 @@ const char *QMetaType::typeName(int type) } /*! \internal - Same as QMetaType::type(), but doesn't lock the mutex. + Similar to QMetaType::type(), but only looks in the static set of types. */ -static int qMetaTypeType_unlocked(const QByteArray &typeName) +static inline int qMetaTypeStaticType(const char *typeName, int length) { int i = 0; - while (types[i].typeName && strcmp(typeName.constData(), types[i].typeName)) + while (types[i].typeName && ((length != types[i].typeNameLength) + || strcmp(typeName, types[i].typeName))) { ++i; - if (!types[i].type) { - const QVector<QCustomTypeInfo> * const ct = customTypes(); - if (!ct) - return 0; + } + return types[i].type; +} + +/*! \internal + Similar to QMetaType::type(), but only looks in the custom set of + types, and doesn't lock the mutex. +*/ +static int qMetaTypeCustomType_unlocked(const char *typeName, int length) +{ + const QVector<QCustomTypeInfo> * const ct = customTypes(); + if (!ct) + return 0; - for (int v = 0; v < ct->count(); ++v) { - if (ct->at(v).typeName == typeName) - return v + QMetaType::User; + for (int v = 0; v < ct->count(); ++v) { + if ((length == ct->at(v).typeName.size()) + && !strcmp(typeName, ct->at(v).typeName.constData())) { + return v + QMetaType::User; } } - return types[i].type; + return 0; } /*! \internal @@ -449,16 +463,21 @@ int QMetaType::registerType(const char *typeName, Destructor destructor, NS(QByteArray) normalizedTypeName = QMetaObject::normalizedType(typeName); #endif - QWriteLocker locker(customTypesLock()); - int idx = qMetaTypeType_unlocked(normalizedTypeName); + int idx = qMetaTypeStaticType(normalizedTypeName.constData(), + normalizedTypeName.size()); if (!idx) { - QCustomTypeInfo inf; - inf.typeName = normalizedTypeName; - inf.constr = constructor; - inf.destr = destructor; - idx = ct->size() + User; - ct->append(inf); + QWriteLocker locker(customTypesLock()); + idx = qMetaTypeCustomType_unlocked(normalizedTypeName.constData(), + normalizedTypeName.size()); + if (!idx) { + QCustomTypeInfo inf; + inf.typeName = normalizedTypeName; + inf.constr = constructor; + inf.destr = destructor; + idx = ct->size() + User; + ct->append(inf); + } } return idx; } @@ -517,14 +536,24 @@ bool QMetaType::isRegistered(int type) */ int QMetaType::type(const char *typeName) { -#ifdef QT_NO_QOBJECT - const NS(QByteArray) normalizedTypeName = typeName; -#else - const NS(QByteArray) normalizedTypeName = QMetaObject::normalizedType(typeName); + int length = qstrlen(typeName); + int type = qMetaTypeStaticType(typeName, length); + if (!type) { + QReadLocker locker(customTypesLock()); + type = qMetaTypeCustomType_unlocked(typeName, length); +#ifndef QT_NO_QOBJECT + if (!type) { + const NS(QByteArray) normalizedTypeName = QMetaObject::normalizedType(typeName); + type = qMetaTypeStaticType(normalizedTypeName.constData(), + normalizedTypeName.size()); + if (!type) { + type = qMetaTypeCustomType_unlocked(normalizedTypeName.constData(), + normalizedTypeName.size()); + } + } #endif - - QReadLocker locker(customTypesLock()); - return qMetaTypeType_unlocked(normalizedTypeName); + } + return type; } #ifndef QT_NO_DATASTREAM diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp index 384a3cd..227a60d 100644 --- a/src/corelib/kernel/qvariant.cpp +++ b/src/corelib/kernel/qvariant.cpp @@ -1936,13 +1936,13 @@ static const ushort map_from_three[MapFromThreeCount] = QVariant::Date, QVariant::Time, QVariant::DateTime, - QVariant::EasingCurve, QVariant::ByteArray, QVariant::BitArray, QVariant::KeySequence, QVariant::Pen, QVariant::LongLong, - QVariant::ULongLong + QVariant::ULongLong, + QVariant::EasingCurve }; /*! diff --git a/src/corelib/tools/qeasingcurve.cpp b/src/corelib/tools/qeasingcurve.cpp index 64b4dca..d4b2c27 100644 --- a/src/corelib/tools/qeasingcurve.cpp +++ b/src/corelib/tools/qeasingcurve.cpp @@ -860,7 +860,7 @@ QDebug operator<<(QDebug debug, const QEasingCurve &item) QDataStream &operator<<(QDataStream &stream, const QEasingCurve &easing) { - stream << easing.d_ptr->type; + stream << quint8(easing.d_ptr->type); stream << quint64(quintptr(easing.d_ptr->func)); bool hasConfig = easing.d_ptr->config; @@ -886,7 +886,7 @@ QDataStream &operator<<(QDataStream &stream, const QEasingCurve &easing) QDataStream &operator>>(QDataStream &stream, QEasingCurve &easing) { QEasingCurve::Type type; - int int_type; + quint8 int_type; stream >> int_type; type = static_cast<QEasingCurve::Type>(int_type); easing.setType(type); diff --git a/src/corelib/tools/qhash.h b/src/corelib/tools/qhash.h index f1030ae..3374c80 100644 --- a/src/corelib/tools/qhash.h +++ b/src/corelib/tools/qhash.h @@ -625,6 +625,7 @@ template <class Key, class T> Q_OUTOFLINE_TEMPLATE QList<Key> QHash<Key, T>::uniqueKeys() const { QList<Key> res; + res.reserve(size()); // May be too much, but assume short lifetime const_iterator i = begin(); if (i != end()) { for (;;) { @@ -644,6 +645,7 @@ template <class Key, class T> Q_OUTOFLINE_TEMPLATE QList<Key> QHash<Key, T>::keys() const { QList<Key> res; + res.reserve(size()); const_iterator i = begin(); while (i != end()) { res.append(i.key()); @@ -688,6 +690,7 @@ template <class Key, class T> Q_OUTOFLINE_TEMPLATE QList<T> QHash<Key, T>::values() const { QList<T> res; + res.reserve(size()); const_iterator i = begin(); while (i != end()) { res.append(i.value()); diff --git a/src/corelib/tools/qlist.h b/src/corelib/tools/qlist.h index 3a29e13..c6dd106 100644 --- a/src/corelib/tools/qlist.h +++ b/src/corelib/tools/qlist.h @@ -525,7 +525,8 @@ Q_OUTOFLINE_TEMPLATE void QList<T>::append(const T &t) PodNode cpy = *reinterpret_cast<const PodNode *>(&t); Node *n = reinterpret_cast<Node *>(p.append()); QT_TRY { - node_construct(n, *reinterpret_cast<const T *>(&cpy)); + void *ptr = &cpy; + node_construct(n, *reinterpret_cast<T *>(ptr)); } QT_CATCH(...) { --d->end; QT_RETHROW; @@ -559,7 +560,8 @@ inline void QList<T>::prepend(const T &t) PodNode cpy = *reinterpret_cast<const PodNode *>(&t); Node *n = reinterpret_cast<Node *>(p.prepend()); QT_TRY { - node_construct(n, *reinterpret_cast<const T *>(&cpy)); + void *ptr = &cpy; + node_construct(n, *reinterpret_cast<T *>(ptr)); } QT_CATCH(...) { ++d->begin; QT_RETHROW; @@ -593,7 +595,8 @@ inline void QList<T>::insert(int i, const T &t) PodNode cpy = *reinterpret_cast<const PodNode *>(&t); Node *n = reinterpret_cast<Node *>(p.insert(i)); QT_TRY { - node_construct(n, *reinterpret_cast<const T *>(&cpy)); + void *ptr = &cpy; + node_construct(n, *reinterpret_cast<T *>(ptr)); } QT_CATCH(...) { p.remove(i); QT_RETHROW; @@ -808,15 +811,22 @@ Q_OUTOFLINE_TEMPLATE typename QList<T>::iterator QList<T>::erase(typename QList< template <typename T> Q_OUTOFLINE_TEMPLATE QList<T> &QList<T>::operator+=(const QList<T> &l) { - Node *n = (d->ref != 1) - ? detach_helper_grow(INT_MAX, l.size()) - : reinterpret_cast<Node *>(p.append2(l.p)); - QT_TRY{ - node_copy(n, reinterpret_cast<Node *>(p.end()), reinterpret_cast<Node *>(l.p.begin())); - } QT_CATCH(...) { - // restore the old end - d->end -= int(reinterpret_cast<Node *>(p.end()) - n); - QT_RETHROW; + if (!l.isEmpty()) { + if (isEmpty()) { + *this = l; + } else { + Node *n = (d->ref != 1) + ? detach_helper_grow(INT_MAX, l.size()) + : reinterpret_cast<Node *>(p.append2(l.p)); + QT_TRY { + node_copy(n, reinterpret_cast<Node *>(p.end()), + reinterpret_cast<Node *>(l.p.begin())); + } QT_CATCH(...) { + // restore the old end + d->end -= int(reinterpret_cast<Node *>(p.end()) - n); + QT_RETHROW; + } + } } return *this; } diff --git a/src/corelib/tools/qmap.h b/src/corelib/tools/qmap.h index 2e21547..df0ae46 100644 --- a/src/corelib/tools/qmap.h +++ b/src/corelib/tools/qmap.h @@ -773,6 +773,7 @@ template <class Key, class T> Q_OUTOFLINE_TEMPLATE QList<Key> QMap<Key, T>::uniqueKeys() const { QList<Key> res; + res.reserve(size()); // May be too much, but assume short lifetime const_iterator i = begin(); if (i != end()) { for (;;) { @@ -792,6 +793,7 @@ template <class Key, class T> Q_OUTOFLINE_TEMPLATE QList<Key> QMap<Key, T>::keys() const { QList<Key> res; + res.reserve(size()); const_iterator i = begin(); while (i != end()) { res.append(i.key()); @@ -836,6 +838,7 @@ template <class Key, class T> Q_OUTOFLINE_TEMPLATE QList<T> QMap<Key, T>::values() const { QList<T> res; + res.reserve(size()); const_iterator i = begin(); while (i != end()) { res.append(i.value()); diff --git a/src/corelib/tools/qregexp.cpp b/src/corelib/tools/qregexp.cpp index 25255f9..20ad444 100644 --- a/src/corelib/tools/qregexp.cpp +++ b/src/corelib/tools/qregexp.cpp @@ -1466,9 +1466,14 @@ void QRegExpMatchState::match(const QChar *str0, int len0, int pos0, #ifndef QT_NO_REGEXP_CAPTURE for (int i = 0; i < numCaptures; ++i) { int j = eng->captureForOfficialCapture.at(i); - int len = capEnd[j] - capBegin[j]; - *c++ = (len > 0) ? pos + capBegin[j] : 0; - *c++ = len; + if (capBegin[j] != EmptyCapture) { + int len = capEnd[j] - capBegin[j]; + *c++ = (len > 0) ? pos + capBegin[j] : 0; + *c++ = len; + } else { + *c++ = -1; + *c++ = -1; + } } #endif } else { diff --git a/src/corelib/tools/qscopedpointer.cpp b/src/corelib/tools/qscopedpointer.cpp index 12badf0..e7dd769 100644 --- a/src/corelib/tools/qscopedpointer.cpp +++ b/src/corelib/tools/qscopedpointer.cpp @@ -225,4 +225,59 @@ QT_BEGIN_NAMESPACE Swap this pointer with \a other. */ +/*! + \class QScopedArrayPointer + + \brief The QScopedArrayPointer class stores a pointer to a + dynamically allocated array of objects, and deletes it upon + destruction. + + \since 4.6 + \reentrant + \ingroup misc + + A QScopedArrayPointer is a QScopedPointer that defaults to + deleting the object it is pointing to with the delete[] operator. It + also features operator[] for convenience, so we can write: + + \code + void foo() + { + QScopedArrayPointer<int> i(new int[10]); + i[2] = 42; + ... + return; // our integer array is now deleted using delete[] + } + \endcode +*/ + +/*! + \fn QScopedArrayPointer::QScopedArrayPointer(T *p = 0) + + Constructs this QScopedArrayPointer instance and sets its pointer + to \a p. +*/ + +/*! + \fn T *QScopedArrayPointer::operator[](int i) + + Provides access to entry \a i of the scoped pointer's array of + objects. + + If the contained pointer is \c null, behavior is undefined. + + \sa isNull() +*/ + +/*! + \fn T *QScopedArrayPointer::operator[](int i) const + + Provides access to entry \a i of the scoped pointer's array of + objects. + + If the contained pointer is \c null, behavior is undefined. + + \sa isNull() +*/ + QT_END_NAMESPACE diff --git a/src/corelib/tools/qsharedpointer_impl.h b/src/corelib/tools/qsharedpointer_impl.h index d85c248..bfc65bc 100644 --- a/src/corelib/tools/qsharedpointer_impl.h +++ b/src/corelib/tools/qsharedpointer_impl.h @@ -209,6 +209,7 @@ namespace QtSharedPointer { inline bool destroy() { destroyer(this); return true; } inline void operator delete(void *ptr) { ::operator delete(ptr); } + inline void operator delete(void *, void *) { } }; // sizeof(ExternalRefCountWithDestroyFn) = 16 (32-bit) / 24 (64-bit) diff --git a/src/corelib/tools/qsimd.cpp b/src/corelib/tools/qsimd.cpp new file mode 100644 index 0000000..52d2cea --- /dev/null +++ b/src/corelib/tools/qsimd.cpp @@ -0,0 +1,246 @@ +/**************************************************************************** +** +** 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 QtCore module 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 "qsimd_p.h" +#include <QByteArray> + +QT_BEGIN_NAMESPACE + +uint qDetectCPUFeatures() +{ + static uint features = 0xffffffff; + if (features != 0xffffffff) + return features; + +#if defined (Q_OS_WINCE) +#if defined (ARM) + if (IsProcessorFeaturePresent(PF_ARM_INTEL_WMMX)) { + features = IWMMXT; + return features; + } +#elif defined(_X86_) + features = 0; +#if defined QT_HAVE_MMX + if (IsProcessorFeaturePresent(PF_MMX_INSTRUCTIONS_AVAILABLE)) + features |= MMX; +#endif +#if defined QT_HAVE_3DNOW + if (IsProcessorFeaturePresent(PF_3DNOW_INSTRUCTIONS_AVAILABLE)) + features |= MMX3DNOW; +#endif + return features; +#endif + features = 0; + return features; +#elif defined(QT_HAVE_IWMMXT) + // runtime detection only available when running as a previlegied process + static const bool doIWMMXT = !qgetenv("QT_NO_IWMMXT").toInt(); + features = doIWMMXT ? IWMMXT : 0; + return features; +#elif defined(QT_HAVE_NEON) + static const bool doNEON = !qgetenv("QT_NO_NEON").toInt(); + features = doNEON ? NEON : 0; + return features; +#else + features = 0; +#if defined(__x86_64__) || defined(Q_OS_WIN64) + features = MMX|SSE|SSE2|CMOV; +#elif defined(__ia64__) + features = MMX|SSE|SSE2; +#elif defined(__i386__) || defined(_M_IX86) + unsigned int extended_result = 0; + uint result = 0; + /* see p. 118 of amd64 instruction set manual Vol3 */ +#if defined(Q_CC_GNU) + asm ("push %%ebx\n" + "pushf\n" + "pop %%eax\n" + "mov %%eax, %%ebx\n" + "xor $0x00200000, %%eax\n" + "push %%eax\n" + "popf\n" + "pushf\n" + "pop %%eax\n" + "xor %%edx, %%edx\n" + "xor %%ebx, %%eax\n" + "jz 1f\n" + + "mov $0x00000001, %%eax\n" + "cpuid\n" + "1:\n" + "pop %%ebx\n" + "mov %%edx, %0\n" + : "=r" (result) + : + : "%eax", "%ecx", "%edx" + ); + + asm ("push %%ebx\n" + "pushf\n" + "pop %%eax\n" + "mov %%eax, %%ebx\n" + "xor $0x00200000, %%eax\n" + "push %%eax\n" + "popf\n" + "pushf\n" + "pop %%eax\n" + "xor %%edx, %%edx\n" + "xor %%ebx, %%eax\n" + "jz 2f\n" + + "mov $0x80000000, %%eax\n" + "cpuid\n" + "cmp $0x80000000, %%eax\n" + "jbe 2f\n" + "mov $0x80000001, %%eax\n" + "cpuid\n" + "2:\n" + "pop %%ebx\n" + "mov %%edx, %0\n" + : "=r" (extended_result) + : + : "%eax", "%ecx", "%edx" + ); +#elif defined (Q_OS_WIN) + _asm { + push eax + push ebx + push ecx + push edx + pushfd + pop eax + mov ebx, eax + xor eax, 00200000h + push eax + popfd + pushfd + pop eax + mov edx, 0 + xor eax, ebx + jz skip + + mov eax, 1 + cpuid + mov result, edx + skip: + pop edx + pop ecx + pop ebx + pop eax + } + + _asm { + push eax + push ebx + push ecx + push edx + pushfd + pop eax + mov ebx, eax + xor eax, 00200000h + push eax + popfd + pushfd + pop eax + mov edx, 0 + xor eax, ebx + jz skip2 + + mov eax, 80000000h + cpuid + cmp eax, 80000000h + jbe skip2 + mov eax, 80000001h + cpuid + mov extended_result, edx + skip2: + pop edx + pop ecx + pop ebx + pop eax + } +#endif + + // result now contains the standard feature bits + if (result & (1u << 15)) + features |= CMOV; + if (result & (1u << 23)) + features |= MMX; + if (extended_result & (1u << 22)) + features |= MMXEXT; + if (extended_result & (1u << 31)) + features |= MMX3DNOW; + if (extended_result & (1u << 30)) + features |= MMX3DNOWEXT; + if (result & (1u << 25)) + features |= SSE; + if (result & (1u << 26)) + features |= SSE2; +#endif // i386 + +#if defined(QT_HAVE_MMX) + if (qgetenv("QT_NO_MMX").toInt()) + features ^= MMX; +#endif + if (qgetenv("QT_NO_MMXEXT").toInt()) + features ^= MMXEXT; + +#if defined(QT_HAVE_3DNOW) + if (qgetenv("QT_NO_3DNOW").toInt()) + features ^= MMX3DNOW; +#endif + if (qgetenv("QT_NO_3DNOWEXT").toInt()) + features ^= MMX3DNOWEXT; + +#if defined(QT_HAVE_SSE) + if (qgetenv("QT_NO_SSE").toInt()) + features ^= SSE; +#endif +#if defined(QT_HAVE_SSE2) + if (qgetenv("QT_NO_SSE2").toInt()) + features ^= SSE2; +#endif + + return features; +#endif +} + +QT_END_NAMESPACE diff --git a/src/corelib/tools/qsimd_p.h b/src/corelib/tools/qsimd_p.h new file mode 100644 index 0000000..44c1798 --- /dev/null +++ b/src/corelib/tools/qsimd_p.h @@ -0,0 +1,126 @@ +/**************************************************************************** +** +** 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 QtCore module 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$ +** +****************************************************************************/ + +#ifndef QSIMD_P_H +#define QSIMD_P_H + +#include <qglobal.h> + + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Core) + +#if defined(QT_NO_MAC_XARCH) || (defined(Q_OS_DARWIN) && (defined(__ppc__) || defined(__ppc64__))) +// Disable MMX and SSE on Mac/PPC builds, or if the compiler +// does not support -Xarch argument passing +#undef QT_HAVE_SSE2 +#undef QT_HAVE_SSE +#undef QT_HAVE_3DNOW +#undef QT_HAVE_MMX +#endif + +// SSE intrinsics +#if defined(__SSE2__) && defined(QT_HAVE_SSE2) && !defined(QT_BOOTSTRAPPED) +#if defined(QT_LINUXBASE) +/// this is an evil hack - the posix_memalign declaration in LSB +/// is wrong - see http://bugs.linuxbase.org/show_bug.cgi?id=2431 +# define posix_memalign _lsb_hack_posix_memalign +# include <emmintrin.h> +# undef posix_memalign +#else +# include <emmintrin.h> +#endif + +#define QT_ALWAYS_HAVE_SSE2 +#endif + +// NEON intrinsics +#if defined(QT_HAVE_NEON) +#include <arm_neon.h> +#endif + + +// IWMMXT intrinsics +#if defined(QT_HAVE_IWMMXT) +#include <mmintrin.h> +#if defined(Q_OS_WINCE) +# include "qplatformdefs.h" +#endif +#endif + +#if defined(QT_HAVE_IWMMXT) +#if !defined(__IWMMXT__) && !defined(Q_OS_WINCE) +# include <xmmintrin.h> +#elif defined(Q_OS_WINCE_STD) && defined(_X86_) +# pragma warning(disable: 4391) +# include <xmmintrin.h> +#endif +#endif + +// 3D now intrinsics +#if defined(QT_HAVE_3DNOW) +#include <mm3dnow.h> +#endif + +enum CPUFeatures { + None = 0, + MMX = 0x1, + MMXEXT = 0x2, + MMX3DNOW = 0x4, + MMX3DNOWEXT = 0x8, + SSE = 0x10, + SSE2 = 0x20, + CMOV = 0x40, + IWMMXT = 0x80, + NEON = 0x100 +}; + + +QT_END_NAMESPACE + +QT_END_HEADER + +Q_CORE_EXPORT uint qDetectCPUFeatures(); + +#endif // QSIMD_P_H diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp index ac1bee7..e9b7b9a 100644 --- a/src/corelib/tools/qstring.cpp +++ b/src/corelib/tools/qstring.cpp @@ -46,6 +46,7 @@ #include <qtextcodec.h> #endif #include <private/qutfcodec_p.h> +#include "qsimd_p.h" #include <qdatastream.h> #include <qlist.h> #include "qlocale.h" @@ -3479,12 +3480,82 @@ static QByteArray toLatin1_helper(const QChar *data, int length) QByteArray ba; if (length) { ba.resize(length); - const ushort *i = reinterpret_cast<const ushort *>(data); - const ushort *e = i + length; - uchar *s = (uchar*) ba.data(); - while (i != e) { - *s++ = (*i>0xff) ? '?' : (uchar) *i; - ++i; + const ushort *src = reinterpret_cast<const ushort *>(data); + uchar *dst = (uchar*) ba.data(); +#if defined(QT_ALWAYS_HAVE_SSE2) + if (length >= 16) { + const int chunkCount = length >> 4; // divided by 16 + const __m128i questionMark = _mm_set1_epi16('?'); + // SSE has no compare instruction for unsigned comparison. + // The variables must be shiffted + 0x8000 to be compared + const __m128i signedBitOffset = _mm_set1_epi16(0x8000); + const __m128i thresholdMask = _mm_set1_epi16(0xff + 0x8000); + for (int i = 0; i < chunkCount; ++i) { + __m128i chunk1 = _mm_loadu_si128((__m128i*)src); // load + src += 8; + { + // each 16 bit is equal to 0xFF if the source is outside latin 1 (>0xff) + const __m128i signedChunk = _mm_add_epi16(chunk1, signedBitOffset); + const __m128i offLimitMask = _mm_cmpgt_epi16(signedChunk, thresholdMask); + + // offLimitQuestionMark contains '?' for each 16 bits that was off-limit + // the 16 bits that were correct contains zeros + const __m128i offLimitQuestionMark = _mm_and_si128(offLimitMask, questionMark); + + // correctBytes contains the bytes that were in limit + // the 16 bits that were off limits contains zeros + const __m128i correctBytes = _mm_andnot_si128(offLimitMask, chunk1); + + // merge offLimitQuestionMark and correctBytes to have the result + chunk1 = _mm_or_si128(correctBytes, offLimitQuestionMark); + } + + __m128i chunk2 = _mm_loadu_si128((__m128i*)src); // load + src += 8; + { + // exactly the same operations as for the previous chunk of data + const __m128i signedChunk = _mm_add_epi16(chunk2, signedBitOffset); + const __m128i offLimitMask = _mm_cmpgt_epi16(signedChunk, thresholdMask); + const __m128i offLimitQuestionMark = _mm_and_si128(offLimitMask, questionMark); + const __m128i correctBytes = _mm_andnot_si128(offLimitMask, chunk2); + chunk2 = _mm_or_si128(correctBytes, offLimitQuestionMark); + } + + // pack the two vector to 16 x 8bits elements + const __m128i result = _mm_packus_epi16(chunk1, chunk2); + + _mm_storeu_si128((__m128i*)dst, result); // store + dst += 16; + } + length = length % 16; + } +#elif QT_HAVE_NEON + // Refer to the documentation of the SSE2 implementation + // this use eactly the same method as for SSE except: + // 1) neon has unsigned comparison + // 2) packing is done to 64 bits (8 x 8bits component). + if (length >= 16) { + const int chunkCount = length >> 3; // divided by 8 + const uint16x8_t questionMark = vdupq_n_u16('?'); // set + const uint16x8_t thresholdMask = vdupq_n_u16(0xff); // set + for (int i = 0; i < chunkCount; ++i) { + uint16x8_t chunk = vld1q_u16((uint16_t *)src); // load + src += 8; + + const uint16x8_t offLimitMask = vcgtq_u16(chunk, thresholdMask); // chunk > thresholdMask + const uint16x8_t offLimitQuestionMark = vandq_u16(offLimitMask, questionMark); // offLimitMask & questionMark + const uint16x8_t correctBytes = vbicq_u16(chunk, offLimitMask); // !offLimitMask & chunk + chunk = vorrq_u16(correctBytes, offLimitQuestionMark); // correctBytes | offLimitQuestionMark + const uint8x8_t result = vmovn_u16(chunk); // narrowing move->packing + vst1_u8(dst, result); // store + dst += 8; + } + length = length % 8; + } +#endif + while (length--) { + *dst++ = (*src>0xff) ? '?' : (uchar) *src; + ++src; } } return ba; @@ -3647,10 +3718,35 @@ QString::Data *QString::fromLatin1_helper(const char *str, int size) d->alloc = d->size = size; d->clean = d->asciiCache = d->simpletext = d->righttoleft = d->capacity = 0; d->data = d->array; - ushort *i = d->data; d->array[size] = '\0'; + ushort *dst = d->data; + /* SIMD: + * Unpacking with SSE has been shown to improve performance on recent CPUs + * The same method gives no improvement with NEON. + */ +#if defined(QT_ALWAYS_HAVE_SSE2) + if (size >= 16) { + int chunkCount = size >> 4; // divided by 16 + const __m128i nullMask = _mm_set1_epi32(0); + for (int i = 0; i < chunkCount; ++i) { + const __m128i chunk = _mm_loadu_si128((__m128i*)str); // load + str += 16; + + // unpack the first 8 bytes, padding with zeros + const __m128i firstHalf = _mm_unpacklo_epi8(chunk, nullMask); + _mm_storeu_si128((__m128i*)dst, firstHalf); // store + dst += 8; + + // unpack the last 8 bytes, padding with zeros + const __m128i secondHalf = _mm_unpackhi_epi8 (chunk, nullMask); + _mm_storeu_si128((__m128i*)dst, secondHalf); // store + dst += 8; + } + size = size % 16; + } +#endif while (size--) - *i++ = (uchar)*str++; + *dst++ = (uchar)*str++; } return d; } diff --git a/src/corelib/tools/tools.pri b/src/corelib/tools/tools.pri index 3406e41..6d64915 100644 --- a/src/corelib/tools/tools.pri +++ b/src/corelib/tools/tools.pri @@ -33,6 +33,7 @@ HEADERS += \ tools/qsharedpointer.h \ tools/qsharedpointer_impl.h \ tools/qset.h \ + tools/qsimd_p.h \ tools/qsize.h \ tools/qstack.h \ tools/qstring.h \ @@ -68,6 +69,7 @@ SOURCES += \ tools/qregexp.cpp \ tools/qshareddata.cpp \ tools/qsharedpointer.cpp \ + tools/qsimd.cpp \ tools/qsize.cpp \ tools/qstring.cpp \ tools/qstringbuilder.cpp \ diff --git a/src/declarative/QmlChanges.txt b/src/declarative/QmlChanges.txt index cf1080b..34e4834 100644 --- a/src/declarative/QmlChanges.txt +++ b/src/declarative/QmlChanges.txt @@ -1,7 +1,17 @@ ============================================================================= The changes below are pre Qt 4.7.0 alpha +Flickable: renamed viewportWidth -> contentWidth +Flickable: renamed viewportHeight -> contentHeight +Flickable: renamed viewportX -> contentX +Flickable: renamed viewportY -> contentY +Removed Flickable.reportedVelocitySmoothing Renamed MouseRegion -> MouseArea +Connection: syntax and rename: + Connection { sender: a; signal: foo(); script: xxx } + Connection { sender: a; signal: bar(); script: yyy } + becomes: + Connections { target: a; onFoo: xxx; onBar: yyy } QmlView ------- diff --git a/src/declarative/graphicsitems/qdeclarativeeffects.cpp b/src/declarative/graphicsitems/qdeclarativeeffects.cpp index efab24e..ea1f9cc 100644 --- a/src/declarative/graphicsitems/qdeclarativeeffects.cpp +++ b/src/declarative/graphicsitems/qdeclarativeeffects.cpp @@ -45,6 +45,7 @@ /*! \qmlclass Blur QGraphicsBlurEffect + \since 4.7 \brief The Blur object provides a blur effect. A blur effect blurs the source item. This effect is useful for reducing details; @@ -80,6 +81,7 @@ /*! \qmlclass Colorize QGraphicsColorizeEffect + \since 4.7 \brief The Colorize object provides a colorize effect. A colorize effect renders the source item with a tint of its color. @@ -106,6 +108,7 @@ /*! \qmlclass DropShadow QGraphicsDropShadowEffect + \since 4.7 \brief The DropShadow object provides a drop shadow effect. A drop shadow effect renders the source item with a drop shadow. The color of @@ -147,6 +150,7 @@ /*! \qmlclass Opacity QGraphicsOpacityEffect + \since 4.7 \brief The Opacity object provides an opacity effect. An opacity effect renders the source with an opacity. This effect is useful diff --git a/src/declarative/graphicsitems/qdeclarativeevents.cpp b/src/declarative/graphicsitems/qdeclarativeevents.cpp index d2cbb54..8be2f40 100644 --- a/src/declarative/graphicsitems/qdeclarativeevents.cpp +++ b/src/declarative/graphicsitems/qdeclarativeevents.cpp @@ -114,6 +114,7 @@ Item { /*! \qmlclass MouseEvent QDeclarativeMouseEvent + \since 4.7 \brief The MouseEvent object provides information about a mouse event. The position of the mouse can be found via the x and y properties. diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp index 9f19f53..c54ddd0 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp +++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp @@ -128,7 +128,7 @@ QDeclarativeFlickablePrivate::QDeclarativeFlickablePrivate() , vWidth(-1), vHeight(-1), overShoot(true), flicked(false), moving(false), stealMouse(false) , pressed(false), atXEnd(false), atXBeginning(true), atYEnd(false), atYBeginning(true) , interactive(true), deceleration(500), maxVelocity(2000), reportedVelocitySmoothing(100) - , delayedPressEvent(0), delayedPressTarget(0), pressDelay(0), fixupDuration(200) + , delayedPressEvent(0), delayedPressTarget(0), pressDelay(0), fixupDuration(600) , horizontalVelocity(this), verticalVelocity(this), vTime(0), visibleArea(0) , flickDirection(QDeclarativeFlickable::AutoFlickDirection) { @@ -142,12 +142,29 @@ void QDeclarativeFlickablePrivate::init() QObject::connect(&timeline, SIGNAL(completed()), q, SLOT(movementEnding())); q->setAcceptedMouseButtons(Qt::LeftButton); q->setFiltersChildEvents(true); - QObject::connect(viewport, SIGNAL(xChanged()), q, SIGNAL(positionXChanged())); - QObject::connect(viewport, SIGNAL(yChanged()), q, SIGNAL(positionYChanged())); + QObject::connect(viewport, SIGNAL(xChanged()), q, SIGNAL(contentXChanged())); + QObject::connect(viewport, SIGNAL(yChanged()), q, SIGNAL(contentYChanged())); QObject::connect(q, SIGNAL(heightChanged()), q, SLOT(heightChange())); QObject::connect(q, SIGNAL(widthChanged()), q, SLOT(widthChange())); } +/* + Returns the amount to overshoot by given a velocity. + Will be roughly in range 0 - size/4 +*/ +qreal QDeclarativeFlickablePrivate::overShootDistance(qreal velocity, qreal size) +{ + Q_Q(QDeclarativeFlickable); + if (maxVelocity <= 0) + return 0.0; + + velocity = qAbs(velocity); + if (velocity > maxVelocity) + velocity = maxVelocity; + qreal dist = size / 4 * velocity / maxVelocity; + return dist; +} + void QDeclarativeFlickablePrivate::flickX(qreal velocity) { Q_Q(QDeclarativeFlickable); @@ -156,12 +173,12 @@ void QDeclarativeFlickablePrivate::flickX(qreal velocity) if (velocity > 0) { const qreal minX = q->minXExtent(); if (_moveX.value() < minX) - maxDistance = qAbs(minX -_moveX.value() + (overShoot?30:0)); + maxDistance = qAbs(minX -_moveX.value() + (overShoot?overShootDistance(velocity,q->width()):0)); flickTargetX = minX; } else { const qreal maxX = q->maxXExtent(); if (_moveX.value() > maxX) - maxDistance = qAbs(maxX - _moveX.value()) + (overShoot?30:0); + maxDistance = qAbs(maxX - _moveX.value()) + (overShoot?overShootDistance(velocity,q->width()):0); flickTargetX = maxX; } if (maxDistance > 0) { @@ -194,12 +211,12 @@ void QDeclarativeFlickablePrivate::flickY(qreal velocity) if (velocity > 0) { const qreal minY = q->minYExtent(); if (_moveY.value() < minY) - maxDistance = qAbs(minY -_moveY.value() + (overShoot?30:0)); + maxDistance = qAbs(minY -_moveY.value() + (overShoot?overShootDistance(velocity,q->height()):0)); flickTargetY = minY; } else { const qreal maxY = q->maxYExtent(); if (_moveY.value() > maxY) - maxDistance = qAbs(maxY - _moveY.value()) + (overShoot?30:0); + maxDistance = qAbs(maxY - _moveY.value()) + (overShoot?overShootDistance(velocity,q->height()):0); flickTargetY = maxY; } if (maxDistance > 0) { @@ -233,18 +250,24 @@ void QDeclarativeFlickablePrivate::fixupX() if (_moveX.value() > q->minXExtent() || (q->maxXExtent() > q->minXExtent())) { timeline.reset(_moveX); if (_moveX.value() != q->minXExtent()) { - if (fixupDuration) - timeline.move(_moveX, q->minXExtent(), QEasingCurve(QEasingCurve::InOutQuad), fixupDuration); - else - _moveY.setValue(q->minYExtent()); + if (fixupDuration) { + qreal dist = q->minXExtent() - _moveX; + timeline.move(_moveX, q->minXExtent() - dist/2, QEasingCurve(QEasingCurve::InQuad), fixupDuration/4); + timeline.move(_moveX, q->minXExtent(), QEasingCurve(QEasingCurve::OutQuint), 3*fixupDuration/4); + } else { + _moveX.setValue(q->minXExtent()); + } } //emit flickingChanged(); } else if (_moveX.value() < q->maxXExtent()) { timeline.reset(_moveX); - if (fixupDuration) - timeline.move(_moveX, q->maxXExtent(), QEasingCurve(QEasingCurve::InOutQuad), fixupDuration); - else - _moveY.setValue(q->maxYExtent()); + if (fixupDuration) { + qreal dist = q->maxXExtent() - _moveX; + timeline.move(_moveX, q->maxXExtent() - dist/2, QEasingCurve(QEasingCurve::InQuad), fixupDuration/4); + timeline.move(_moveX, q->maxXExtent(), QEasingCurve(QEasingCurve::OutQuint), 3*fixupDuration/4); + } else { + _moveX.setValue(q->maxXExtent()); + } //emit flickingChanged(); } else { flicked = false; @@ -272,18 +295,24 @@ void QDeclarativeFlickablePrivate::fixupY() if (_moveY.value() > q->minYExtent() || (q->maxYExtent() > q->minYExtent())) { timeline.reset(_moveY); if (_moveY.value() != q->minYExtent()) { - if (fixupDuration) - timeline.move(_moveY, q->minYExtent(), QEasingCurve(QEasingCurve::InOutQuad), fixupDuration); - else + if (fixupDuration) { + qreal dist = q->minYExtent() - _moveY; + timeline.move(_moveY, q->minYExtent() - dist/2, QEasingCurve(QEasingCurve::InQuad), fixupDuration/4); + timeline.move(_moveY, q->minYExtent(), QEasingCurve(QEasingCurve::OutQuint), 3*fixupDuration/4); + } else { _moveY.setValue(q->minYExtent()); + } } //emit flickingChanged(); } else if (_moveY.value() < q->maxYExtent()) { timeline.reset(_moveY); - if (fixupDuration) - timeline.move(_moveY, q->maxYExtent(), QEasingCurve(QEasingCurve::InOutQuad), fixupDuration); - else + if (fixupDuration) { + qreal dist = q->maxYExtent() - _moveY; + timeline.move(_moveY, q->maxYExtent() - dist/2, QEasingCurve(QEasingCurve::InQuad), fixupDuration/4); + timeline.move(_moveY, q->maxYExtent(), QEasingCurve(QEasingCurve::OutQuint), 3*fixupDuration/4); + } else { _moveY.setValue(q->maxYExtent()); + } //emit flickingChanged(); } else { flicked = false; @@ -336,6 +365,7 @@ void QDeclarativeFlickablePrivate::updateBeginningEnd() /*! \qmlclass Flickable QDeclarativeFlickable + \since 4.7 \brief The Flickable item provides a surface that can be "flicked". \inherits Item @@ -343,7 +373,7 @@ void QDeclarativeFlickablePrivate::updateBeginningEnd() \code Flickable { - width: 200; height: 200; viewportWidth: image.width; viewportHeight: image.height + width: 200; height: 200; contentWidth: image.width; contentHeight: image.height Image { id: image; source: "bigimage.png" } } \endcode @@ -429,20 +459,20 @@ QDeclarativeFlickable::~QDeclarativeFlickable() } /*! - \qmlproperty int Flickable::viewportX - \qmlproperty int Flickable::viewportY + \qmlproperty int Flickable::contentX + \qmlproperty int Flickable::contentY These properties hold the surface coordinate currently at the top-left corner of the Flickable. For example, if you flick an image up 100 pixels, - \c yPosition will be 100. + \c contentY will be 100. */ -qreal QDeclarativeFlickable::viewportX() const +qreal QDeclarativeFlickable::contentX() const { Q_D(const QDeclarativeFlickable); return -d->_moveX.value(); } -void QDeclarativeFlickable::setViewportX(qreal pos) +void QDeclarativeFlickable::setContentX(qreal pos) { Q_D(QDeclarativeFlickable); pos = qRound(pos); @@ -454,13 +484,13 @@ void QDeclarativeFlickable::setViewportX(qreal pos) } } -qreal QDeclarativeFlickable::viewportY() const +qreal QDeclarativeFlickable::contentY() const { Q_D(const QDeclarativeFlickable); return -d->_moveY.value(); } -void QDeclarativeFlickable::setViewportY(qreal pos) +void QDeclarativeFlickable::setContentY(qreal pos) { Q_D(QDeclarativeFlickable); pos = qRound(pos); @@ -506,12 +536,10 @@ void QDeclarativeFlickable::setInteractive(bool interactive) /*! \qmlproperty real Flickable::horizontalVelocity \qmlproperty real Flickable::verticalVelocity - \qmlproperty real Flickable::reportedVelocitySmoothing The instantaneous velocity of movement along the x and y axes, in pixels/sec. The reported velocity is smoothed to avoid erratic output. - reportedVelocitySmoothing determines how much smoothing is applied. */ qreal QDeclarativeFlickable::horizontalVelocity() const { @@ -584,8 +612,8 @@ QDeclarativeFlickableVisibleArea *QDeclarativeFlickable::visibleArea() \list \o AutoFlickDirection (default) - allows flicking vertically if the - \e viewportHeight is not equal to the \e height of the Flickable. - Allows flicking horizontally if the \e viewportWidth is not equal + \e contentHeight is not equal to the \e height of the Flickable. + Allows flicking horizontally if the \e contentWidth is not equal to the \e width of the Flickable. \o HorizontalFlick - allows flicking horizontally. \o VerticalFlick - allows flicking vertically. @@ -968,10 +996,10 @@ QDeclarativeListProperty<QDeclarativeItem> QDeclarativeFlickable::flickableChild /*! \qmlproperty bool Flickable::overShoot - This property holds the number of pixels the surface may overshoot the + This property holds whether the surface may overshoot the Flickable's boundaries when flicked. - If overShoot is non-zero the contents can be flicked beyond the boundary + If overShoot is true the contents can be flicked beyond the boundary of the Flickable before being moved back to the boundary. This provides the feeling that the edges of the view are soft, rather than a hard physical boundary. @@ -992,26 +1020,26 @@ void QDeclarativeFlickable::setOverShoot(bool o) } /*! - \qmlproperty int Flickable::viewportWidth - \qmlproperty int Flickable::viewportHeight + \qmlproperty int Flickable::contentWidth + \qmlproperty int Flickable::contentHeight - The dimensions of the viewport (the surface controlled by Flickable). Typically this + The dimensions of the content (the surface controlled by Flickable). Typically this should be set to the combined size of the items placed in the Flickable. \code Flickable { - width: 320; height: 480; viewportWidth: image.width; viewportHeight: image.height + width: 320; height: 480; contentWidth: image.width; contentHeight: image.height Image { id: image; source: "bigimage.png" } } \endcode */ -qreal QDeclarativeFlickable::viewportWidth() const +qreal QDeclarativeFlickable::contentWidth() const { Q_D(const QDeclarativeFlickable); return d->vWidth; } -void QDeclarativeFlickable::setViewportWidth(qreal w) +void QDeclarativeFlickable::setContentWidth(qreal w) { Q_D(QDeclarativeFlickable); if (d->vWidth == w) @@ -1024,7 +1052,7 @@ void QDeclarativeFlickable::setViewportWidth(qreal w) // Make sure that we're entirely in view. if (!d->pressed) d->fixupX(); - emit viewportWidthChanged(); + emit contentWidthChanged(); d->updateBeginningEnd(); } @@ -1033,7 +1061,7 @@ void QDeclarativeFlickable::widthChange() Q_D(QDeclarativeFlickable); if (d->vWidth < 0) { d->viewport->setWidth(width()); - emit viewportWidthChanged(); + emit contentWidthChanged(); } d->updateBeginningEnd(); } @@ -1043,18 +1071,18 @@ void QDeclarativeFlickable::heightChange() Q_D(QDeclarativeFlickable); if (d->vHeight < 0) { d->viewport->setHeight(height()); - emit viewportHeightChanged(); + emit contentHeightChanged(); } d->updateBeginningEnd(); } -qreal QDeclarativeFlickable::viewportHeight() const +qreal QDeclarativeFlickable::contentHeight() const { Q_D(const QDeclarativeFlickable); return d->vHeight; } -void QDeclarativeFlickable::setViewportHeight(qreal h) +void QDeclarativeFlickable::setContentHeight(qreal h) { Q_D(QDeclarativeFlickable); if (d->vHeight == h) @@ -1067,7 +1095,7 @@ void QDeclarativeFlickable::setViewportHeight(qreal h) // Make sure that we're entirely in view. if (!d->pressed) d->fixupY(); - emit viewportHeightChanged(); + emit contentHeightChanged(); d->updateBeginningEnd(); } @@ -1259,22 +1287,6 @@ void QDeclarativeFlickable::setPressDelay(int delay) emit pressDelayChanged(); } -qreal QDeclarativeFlickable::reportedVelocitySmoothing() const -{ - Q_D(const QDeclarativeFlickable); - return d->reportedVelocitySmoothing; -} - -void QDeclarativeFlickable::setReportedVelocitySmoothing(qreal reportedVelocitySmoothing) -{ - Q_D(QDeclarativeFlickable); - Q_ASSERT(reportedVelocitySmoothing >= 0); - if (reportedVelocitySmoothing == d->reportedVelocitySmoothing) - return; - d->reportedVelocitySmoothing = reportedVelocitySmoothing; - emit reportedVelocitySmoothingChanged(reportedVelocitySmoothing); -} - /*! \qmlproperty bool Flickable::moving diff --git a/src/declarative/graphicsitems/qdeclarativeflickable_p.h b/src/declarative/graphicsitems/qdeclarativeflickable_p.h index 19fb2a9..4617688 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable_p.h +++ b/src/declarative/graphicsitems/qdeclarativeflickable_p.h @@ -56,14 +56,13 @@ class Q_DECLARATIVE_EXPORT QDeclarativeFlickable : public QDeclarativeItem { Q_OBJECT - Q_PROPERTY(qreal viewportWidth READ viewportWidth WRITE setViewportWidth NOTIFY viewportWidthChanged) - Q_PROPERTY(qreal viewportHeight READ viewportHeight WRITE setViewportHeight NOTIFY viewportHeightChanged) - Q_PROPERTY(qreal viewportX READ viewportX WRITE setViewportX NOTIFY positionXChanged) - Q_PROPERTY(qreal viewportY READ viewportY WRITE setViewportY NOTIFY positionYChanged) + Q_PROPERTY(qreal contentWidth READ contentWidth WRITE setContentWidth NOTIFY contentWidthChanged) + Q_PROPERTY(qreal contentHeight READ contentHeight WRITE setContentHeight NOTIFY contentHeightChanged) + Q_PROPERTY(qreal contentX READ contentX WRITE setContentX NOTIFY contentXChanged) + Q_PROPERTY(qreal contentY READ contentY WRITE setContentY NOTIFY contentYChanged) Q_PROPERTY(qreal horizontalVelocity READ horizontalVelocity NOTIFY horizontalVelocityChanged) Q_PROPERTY(qreal verticalVelocity READ verticalVelocity NOTIFY verticalVelocityChanged) - Q_PROPERTY(qreal reportedVelocitySmoothing READ reportedVelocitySmoothing WRITE setReportedVelocitySmoothing NOTIFY reportedVelocitySmoothingChanged) Q_PROPERTY(bool overShoot READ overShoot WRITE setOverShoot NOTIFY overShootChanged) Q_PROPERTY(qreal maximumFlickVelocity READ maximumFlickVelocity WRITE setMaximumFlickVelocity NOTIFY maximumFlickVelocityChanged) @@ -98,17 +97,17 @@ public: bool overShoot() const; void setOverShoot(bool); - qreal viewportWidth() const; - void setViewportWidth(qreal); + qreal contentWidth() const; + void setContentWidth(qreal); - qreal viewportHeight() const; - void setViewportHeight(qreal); + qreal contentHeight() const; + void setContentHeight(qreal); - qreal viewportX() const; - void setViewportX(qreal pos); + qreal contentX() const; + void setContentX(qreal pos); - qreal viewportY() const; - void setViewportY(qreal pos); + qreal contentY() const; + void setContentY(qreal pos); bool isMoving() const; bool isFlicking() const; @@ -116,9 +115,6 @@ public: int pressDelay() const; void setPressDelay(int delay); - qreal reportedVelocitySmoothing() const; - void setReportedVelocitySmoothing(qreal); - qreal maximumFlickVelocity() const; void setMaximumFlickVelocity(qreal); @@ -143,17 +139,16 @@ public: void setFlickDirection(FlickDirection); Q_SIGNALS: - void viewportWidthChanged(); - void viewportHeightChanged(); - void positionXChanged(); - void positionYChanged(); + void contentWidthChanged(); + void contentHeightChanged(); + void contentXChanged(); + void contentYChanged(); void movingChanged(); void flickingChanged(); void movementStarted(); void movementEnded(); void flickStarted(); void flickEnded(); - void reportedVelocitySmoothingChanged(int); void horizontalVelocityChanged(); void verticalVelocityChanged(); void isAtBoundaryChanged(); diff --git a/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h b/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h index dc3a8a2..1ff4f92 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h @@ -85,6 +85,8 @@ public: void setRoundedViewportX(qreal x); void setRoundedViewportY(qreal y); + qreal overShootDistance(qreal velocity, qreal size); + public: QDeclarativeItem *viewport; QDeclarativeTimeLineValueProxy<QDeclarativeFlickablePrivate> _moveX; diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index ab5022b..b43b30b 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -133,14 +133,14 @@ public: qreal position() const { Q_Q(const QDeclarativeGridView); - return flow == QDeclarativeGridView::LeftToRight ? q->viewportY() : q->viewportX(); + return flow == QDeclarativeGridView::LeftToRight ? q->contentY() : q->contentX(); } void setPosition(qreal pos) { Q_Q(QDeclarativeGridView); if (flow == QDeclarativeGridView::LeftToRight) - q->setViewportY(pos); + q->setContentY(pos); else - q->setViewportX(pos); + q->setContentX(pos); } int size() const { Q_Q(const QDeclarativeGridView); @@ -315,9 +315,9 @@ FxGridItem *QDeclarativeGridViewPrivate::createItem(int modelIndex) if (QDeclarativeItem *item = model->item(modelIndex, false)) { listItem = new FxGridItem(item, q); listItem->index = modelIndex; + listItem->item->setZValue(1); // complete model->completeItem(); - listItem->item->setZValue(1); listItem->item->setParent(q->viewport()); unrequestedItems.remove(listItem->item); } @@ -458,9 +458,9 @@ void QDeclarativeGridViewPrivate::refill(qreal from, qreal to, bool doBuffer) } if (changed) { if (flow == QDeclarativeGridView::LeftToRight) - q->setViewportHeight(endPosition() - startPosition()); + q->setContentHeight(endPosition() - startPosition()); else - q->setViewportWidth(endPosition() - startPosition()); + q->setContentWidth(endPosition() - startPosition()); } else if (!doBuffer && buffer && bufferMode != NoBuffer) { refill(from, to, true); } @@ -473,9 +473,9 @@ void QDeclarativeGridViewPrivate::updateGrid() columns = (int)qMax((flow == QDeclarativeGridView::LeftToRight ? q->width() : q->height()) / colSize(), qreal(1.)); if (isValid()) { if (flow == QDeclarativeGridView::LeftToRight) - q->setViewportHeight(endPosition() - startPosition()); + q->setContentHeight(endPosition() - startPosition()); else - q->setViewportWidth(endPosition() - startPosition()); + q->setContentWidth(endPosition() - startPosition()); } } @@ -516,10 +516,10 @@ void QDeclarativeGridViewPrivate::layout(bool removed) updateHighlight(); moveReason = Other; if (flow == QDeclarativeGridView::LeftToRight) { - q->setViewportHeight(endPosition() - startPosition()); + q->setContentHeight(endPosition() - startPosition()); fixupY(); } else { - q->setViewportWidth(endPosition() - startPosition()); + q->setContentWidth(endPosition() - startPosition()); fixupX(); } updateUnrequestedPositions(); @@ -675,6 +675,7 @@ void QDeclarativeGridViewPrivate::updateCurrent(int modelIndex) /*! \qmlclass GridView QDeclarativeGridView + \since 4.7 \inherits Flickable \brief The GridView item provides a grid view of items provided by a model. @@ -1028,10 +1029,10 @@ void QDeclarativeGridView::setFlow(Flow flow) if (d->flow != flow) { d->flow = flow; if (d->flow == LeftToRight) { - setViewportWidth(-1); + setContentWidth(-1); setFlickDirection(QDeclarativeFlickable::VerticalFlick); } else { - setViewportHeight(-1); + setContentHeight(-1); setFlickDirection(QDeclarativeFlickable::HorizontalFlick); } d->clear(); diff --git a/src/declarative/graphicsitems/qdeclarativeimage.cpp b/src/declarative/graphicsitems/qdeclarativeimage.cpp index 338b086..99ab053 100644 --- a/src/declarative/graphicsitems/qdeclarativeimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeimage.cpp @@ -127,7 +127,7 @@ QT_BEGIN_NAMESPACE QDeclarativeImage::QDeclarativeImage(QDeclarativeItem *parent) : QDeclarativeImageBase(*(new QDeclarativeImagePrivate), parent) { - connect(this, SIGNAL(sourceChanged(QUrl)), this, SLOT(updatePaintedGeometry())); + connect(this, SIGNAL(pixmapChanged()), this, SLOT(updatePaintedGeometry())); } QDeclarativeImage::QDeclarativeImage(QDeclarativeImagePrivate &dd, QDeclarativeItem *parent) @@ -139,12 +139,6 @@ QDeclarativeImage::~QDeclarativeImage() { } -void QDeclarativeImage::setSource(const QUrl &url) -{ - QDeclarativeImageBase::setSource(url); - updatePaintedGeometry(); -} - /*! \qmlproperty QPixmap Image::pixmap @@ -268,10 +262,10 @@ void QDeclarativeImage::updatePaintedGeometry() Q_D(QDeclarativeImage); if (d->fillMode == PreserveAspectFit) { - qreal widthScale = width() / qreal(d->pix.width()); - qreal heightScale = height() / qreal(d->pix.height()); if (!d->pix.width() || !d->pix.height()) return; + qreal widthScale = width() / qreal(d->pix.width()); + qreal heightScale = height() / qreal(d->pix.height()); if (widthScale <= heightScale) { d->paintedWidth = width(); d->paintedHeight = widthScale * qreal(d->pix.height()); diff --git a/src/declarative/graphicsitems/qdeclarativeimage_p.h b/src/declarative/graphicsitems/qdeclarativeimage_p.h index 5b365e7..fb77ac9 100644 --- a/src/declarative/graphicsitems/qdeclarativeimage_p.h +++ b/src/declarative/graphicsitems/qdeclarativeimage_p.h @@ -76,7 +76,6 @@ public: qreal paintedWidth() const; qreal paintedHeight() const; - void setSource(const QUrl &url); void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *); Q_SIGNALS: diff --git a/src/declarative/graphicsitems/qdeclarativeitem_p.h b/src/declarative/graphicsitems/qdeclarativeitem_p.h index 81c5688..4b4917e 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem_p.h +++ b/src/declarative/graphicsitems/qdeclarativeitem_p.h @@ -60,8 +60,8 @@ #include "qdeclarativeitemchangelistener_p.h" #include <private/qpodvector_p.h> -#include "../util/qdeclarativestate_p.h" -#include "../util/qdeclarativenullablevalue_p_p.h" +#include <private/qdeclarativestate_p.h> +#include <private/qdeclarativenullablevalue_p_p.h> #include <qdeclarative.h> #include <qdeclarativecontext.h> diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index e6b6f2a..03303a0 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -203,14 +203,14 @@ public: qreal position() const { Q_Q(const QDeclarativeListView); - return orient == QDeclarativeListView::Vertical ? q->viewportY() : q->viewportX(); + return orient == QDeclarativeListView::Vertical ? q->contentY() : q->contentX(); } void setPosition(qreal pos) { Q_Q(QDeclarativeListView); if (orient == QDeclarativeListView::Vertical) - q->setViewportY(pos); + q->setContentY(pos); else - q->setViewportX(pos); + q->setContentX(pos); } qreal size() const { Q_Q(const QDeclarativeListView); @@ -382,9 +382,9 @@ public: void updateViewport() { Q_Q(QDeclarativeListView); if (orient == QDeclarativeListView::Vertical) { - q->setViewportHeight(endPosition() - startPosition() + 1); + q->setContentHeight(endPosition() - startPosition() + 1); } else { - q->setViewportWidth(endPosition() - startPosition() + 1); + q->setContentWidth(endPosition() - startPosition() + 1); } } @@ -530,9 +530,9 @@ FxListItem *QDeclarativeListViewPrivate::createItem(int modelIndex) listItem->attached->m_prevSection = sectionAt(modelIndex-1); } } + listItem->item->setZValue(1); // complete model->completeItem(); - listItem->item->setZValue(1); listItem->item->setParent(q->viewport()); QDeclarativeItemPrivate *itemPrivate = static_cast<QDeclarativeItemPrivate*>(QGraphicsItemPrivate::get(item)); itemPrivate->addItemChangeListener(this, QDeclarativeItemPrivate::Geometry); @@ -1073,7 +1073,7 @@ void QDeclarativeListViewPrivate::fixupY() qreal pos = currentItem->position() - highlightRangeStart; timeline.reset(_moveY); if (fixupDuration) - timeline.move(_moveY, -pos, QEasingCurve(QEasingCurve::InOutQuad), fixupDuration); + timeline.move(_moveY, -pos, QEasingCurve(QEasingCurve::InOutQuad), fixupDuration/2); else _moveY.setValue(-pos); vTime = timeline.time(); @@ -1085,7 +1085,7 @@ void QDeclarativeListViewPrivate::fixupY() if (dist > 0) { timeline.reset(_moveY); if (fixupDuration) - timeline.move(_moveY, -pos, QEasingCurve(QEasingCurve::InOutQuad), fixupDuration); + timeline.move(_moveY, -pos, QEasingCurve(QEasingCurve::InOutQuad), fixupDuration/2); else _moveY.setValue(-pos); vTime = timeline.time(); @@ -1155,7 +1155,7 @@ void QDeclarativeListViewPrivate::flickX(qreal velocity) if (FxListItem *item = firstVisibleItem()) maxDistance = qAbs(item->position() + _moveX.value()); } else if (_moveX.value() < minX) { - maxDistance = qAbs(minX -_moveX.value() + (overShoot?30:0)); + maxDistance = qAbs(minX -_moveX.value() + (overShoot?overShootDistance(velocity, q->width()):0)); } if (snapMode != QDeclarativeListView::SnapToItem && highlightRange != QDeclarativeListView::StrictlyEnforceRange) flickTargetX = minX; @@ -1164,7 +1164,7 @@ void QDeclarativeListViewPrivate::flickX(qreal velocity) if (FxListItem *item = nextVisibleItem()) maxDistance = qAbs(item->position() + _moveX.value()); } else if (_moveX.value() > maxX) { - maxDistance = qAbs(maxX - _moveX.value()) + (overShoot?30:0); + maxDistance = qAbs(maxX - _moveX.value()) + (overShoot?overShootDistance(velocity, q->width()):0); } if (snapMode != QDeclarativeListView::SnapToItem && highlightRange != QDeclarativeListView::StrictlyEnforceRange) flickTargetX = maxX; @@ -1196,7 +1196,7 @@ void QDeclarativeListViewPrivate::flickX(qreal velocity) overshootDist = 0.0; } else { flickTargetX = velocity > 0 ? minX : maxX; - overshootDist = overShoot ? 30 : 0; + overshootDist = overShoot ? overShootDistance(v, q->width()) : 0; } timeline.reset(_moveX); timeline.accel(_moveX, v, accel, maxDistance + overshootDist); @@ -1253,7 +1253,7 @@ void QDeclarativeListViewPrivate::flickY(qreal velocity) if (FxListItem *item = firstVisibleItem()) maxDistance = qAbs(item->position() + _moveY.value()); } else if (_moveY.value() < minY) { - maxDistance = qAbs(minY -_moveY.value() + (overShoot?30:0)); + maxDistance = qAbs(minY -_moveY.value() + (overShoot?overShootDistance(velocity, q->height()):0)); } if (snapMode != QDeclarativeListView::SnapToItem && highlightRange != QDeclarativeListView::StrictlyEnforceRange) flickTargetY = minY; @@ -1262,7 +1262,7 @@ void QDeclarativeListViewPrivate::flickY(qreal velocity) if (FxListItem *item = nextVisibleItem()) maxDistance = qAbs(item->position() + _moveY.value()); } else if (_moveY.value() > maxY) { - maxDistance = qAbs(maxY - _moveY.value()) + (overShoot?30:0); + maxDistance = qAbs(maxY - _moveY.value()) + (overShoot?overShootDistance(velocity, q->height()):0); } if (snapMode != QDeclarativeListView::SnapToItem && highlightRange != QDeclarativeListView::StrictlyEnforceRange) flickTargetY = maxY; @@ -1294,7 +1294,7 @@ void QDeclarativeListViewPrivate::flickY(qreal velocity) overshootDist = 0.0; } else { flickTargetY = velocity > 0 ? minY : maxY; - overshootDist = overShoot ? 30 : 0; + overshootDist = overShoot ? overShootDistance(v, q->height()) : 0; } timeline.reset(_moveY); timeline.accel(_moveY, v, accel, maxDistance + overshootDist); @@ -1819,10 +1819,10 @@ void QDeclarativeListView::setOrientation(QDeclarativeListView::Orientation orie if (d->orient != orientation) { d->orient = orientation; if (d->orient == QDeclarativeListView::Vertical) { - setViewportWidth(-1); + setContentWidth(-1); setFlickDirection(VerticalFlick); } else { - setViewportHeight(-1); + setContentHeight(-1); setFlickDirection(HorizontalFlick); } d->clear(); @@ -1980,6 +1980,12 @@ void QDeclarativeListView::setHighlightResizeSpeed(qreal speed) visible item at the time the mouse button is released. This mode is particularly useful for moving one page at a time. \endlist + + snapMode does not affect the currentIndex. To update the + currentIndex as the list is moved set \e highlightRangeMode + to \e StrictlyEnforceRange. + + \sa highlightRangeMode */ QDeclarativeListView::SnapMode QDeclarativeListView::snapMode() const { diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp index c131f4c..f1b0213 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview.cpp +++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp @@ -111,7 +111,7 @@ QDeclarativeItem *QDeclarativePathViewPrivate::getItem(int modelIndex) { Q_Q(QDeclarativePathView); requestedIndex = modelIndex; - QDeclarativeItem *item = model->item(modelIndex); + QDeclarativeItem *item = model->item(modelIndex, false); if (item) { if (QObject *obj = QDeclarativePathView::qmlAttachedProperties(item)) static_cast<QDeclarativePathViewAttached *>(obj)->setOnPath(true); @@ -655,6 +655,7 @@ void QDeclarativePathViewPrivate::regenerate() } items.append(item); item->setZValue(i); + model->completeItem(); if (currentIndex == index) item->setFocus(true); } @@ -715,6 +716,7 @@ void QDeclarativePathView::refill() int index = (d->firstIndex + d->items.count())%d->model->count(); QDeclarativeItem *item = d->getItem(index); item->setZValue(wrapIndex); + d->model->completeItem(); if (d->currentIndex == index) item->setFocus(true); d->items << item; @@ -731,6 +733,7 @@ void QDeclarativePathView::refill() d->firstIndex = d->model->count() - 1; QDeclarativeItem *item = d->getItem(d->firstIndex); item->setZValue(d->firstIndex); + d->model->completeItem(); if (d->currentIndex == d->firstIndex) item->setFocus(true); d->items.prepend(item); @@ -757,6 +760,7 @@ void QDeclarativePathView::itemsInserted(int modelIndex, int count) for (int i = 0; i < count; ++i) { QDeclarativeItem *item = d->getItem(modelIndex + i); item->setZValue(modelIndex + i); + d->model->completeItem(); d->items.insert(modelIndex + i, item); } refill(); diff --git a/src/declarative/graphicsitems/qdeclarativepositioners_p.h b/src/declarative/graphicsitems/qdeclarativepositioners_p.h index ff6fc4b..f38847c 100644 --- a/src/declarative/graphicsitems/qdeclarativepositioners_p.h +++ b/src/declarative/graphicsitems/qdeclarativepositioners_p.h @@ -44,7 +44,7 @@ #include "qdeclarativeitem.h" -#include "../util/qdeclarativestate_p.h" +#include <private/qdeclarativestate_p.h> #include <private/qpodvector_p.h> #include <QtCore/QObject> diff --git a/src/declarative/graphicsitems/qdeclarativescalegrid_p_p.h b/src/declarative/graphicsitems/qdeclarativescalegrid_p_p.h index 92b3f91..fbf9040 100644 --- a/src/declarative/graphicsitems/qdeclarativescalegrid_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativescalegrid_p_p.h @@ -44,7 +44,7 @@ #include "qdeclarativeborderimage_p.h" -#include "../util/qdeclarativepixmapcache_p.h" +#include <private/qdeclarativepixmapcache_p.h> #include <qdeclarative.h> #include <QtCore/QString> diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index 9919904..3382628 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -704,6 +704,8 @@ bool QDeclarativeTextInput::event(QEvent* ev) break; default: handled = d->control->processEvent(ev); + if (ev->type() == QEvent::InputMethod) + updateSize(); } if(!handled) return QDeclarativePaintedItem::event(ev); diff --git a/src/declarative/graphicsitems/qdeclarativewebview.cpp b/src/declarative/graphicsitems/qdeclarativewebview.cpp index 61b5b56..a2b16ba 100644 --- a/src/declarative/graphicsitems/qdeclarativewebview.cpp +++ b/src/declarative/graphicsitems/qdeclarativewebview.cpp @@ -177,6 +177,8 @@ void QDeclarativeWebView::init() { Q_D(QDeclarativeWebView); + QWebSettings::enablePersistentStorage(); + setAcceptHoverEvents(true); setAcceptedMouseButtons(Qt::LeftButton); setFlag(QGraphicsItem::ItemHasNoContents, false); @@ -955,6 +957,7 @@ void QDeclarativeWebView::setPage(QWebPage *page) connect(d->page,SIGNAL(repaintRequested(QRect)),this,SLOT(paintPage(QRect))); connect(d->page->mainFrame(),SIGNAL(urlChanged(QUrl)),this,SLOT(pageUrlChanged())); connect(d->page->mainFrame(), SIGNAL(titleChanged(QString)), this, SIGNAL(titleChanged(QString))); + connect(d->page->mainFrame(), SIGNAL(titleChanged(QString)), this, SIGNAL(iconChanged())); connect(d->page->mainFrame(), SIGNAL(iconChanged()), this, SIGNAL(iconChanged())); connect(d->page->mainFrame(), SIGNAL(contentsSizeChanged(QSize)), this, SLOT(noteContentsSizeChanged(QSize))); connect(d->page->mainFrame(), SIGNAL(initialLayoutCompleted()), this, SLOT(initialLayout())); diff --git a/src/declarative/qml/qdeclarativebinding.cpp b/src/declarative/qml/qdeclarativebinding.cpp index cecca65..88ca5cd 100644 --- a/src/declarative/qml/qdeclarativebinding.cpp +++ b/src/declarative/qml/qdeclarativebinding.cpp @@ -130,7 +130,7 @@ void QDeclarativeBinding::update(QDeclarativePropertyPrivate::WriteFlags flags) if (data->property.propertyType() == qMetaTypeId<QDeclarativeBinding *>()) { - int idx = data->property.coreIndex(); + int idx = data->property.index(); Q_ASSERT(idx != -1); @@ -223,7 +223,7 @@ void QDeclarativeBinding::setEnabled(bool e, QDeclarativePropertyPrivate::WriteF int QDeclarativeBinding::propertyIndex() { Q_D(QDeclarativeBinding); - return d->bindingData()->property.coreIndex(); + return d->bindingData()->property.index(); } bool QDeclarativeBinding::enabled() const diff --git a/src/declarative/qml/qdeclarativeboundsignal.cpp b/src/declarative/qml/qdeclarativeboundsignal.cpp index ce396fd..6a5a102 100644 --- a/src/declarative/qml/qdeclarativeboundsignal.cpp +++ b/src/declarative/qml/qdeclarativeboundsignal.cpp @@ -104,7 +104,7 @@ QDeclarativeBoundSignal::QDeclarativeBoundSignal(QObject *scope, const QMetaMeth // is that they both do the work to figure it out. Boo hoo. if (evaluateIdx == -1) evaluateIdx = metaObject()->methodCount(); - QDeclarativeGraphics_setParent_noEvent(this, parent); + QDeclarative_setParent_noEvent(this, parent); QMetaObject::connect(scope, m_signal.methodIndex(), this, evaluateIdx); } @@ -120,7 +120,7 @@ QDeclarativeBoundSignal::QDeclarativeBoundSignal(QDeclarativeContext *ctxt, cons // is that they both do the work to figure it out. Boo hoo. if (evaluateIdx == -1) evaluateIdx = metaObject()->methodCount(); - QDeclarativeGraphics_setParent_noEvent(this, parent); + QDeclarative_setParent_noEvent(this, parent); QMetaObject::connect(scope, m_signal.methodIndex(), this, evaluateIdx); m_expression = new QDeclarativeExpression(ctxt, val, scope); diff --git a/src/declarative/qml/qdeclarativecomponent.cpp b/src/declarative/qml/qdeclarativecomponent.cpp index fe63ad2..6a2d2d1 100644 --- a/src/declarative/qml/qdeclarativecomponent.cpp +++ b/src/declarative/qml/qdeclarativecomponent.cpp @@ -618,7 +618,7 @@ QDeclarativeComponentPrivate::beginCreate(QDeclarativeContext *context, const QB QObject *rv = begin(ctxt, ep, cc, start, count, &state, bindings); if (rv) { - QDeclarativeGraphics_setParent_noEvent(ctxt, rv); + QDeclarative_setParent_noEvent(ctxt, rv); } else { delete ctxt; } diff --git a/src/declarative/qml/qdeclarativeenginedebug_p.h b/src/declarative/qml/qdeclarativeenginedebug_p.h index 89da399..a95449b 100644 --- a/src/declarative/qml/qdeclarativeenginedebug_p.h +++ b/src/declarative/qml/qdeclarativeenginedebug_p.h @@ -53,7 +53,7 @@ // We mean it. // -#include "../debugger/qdeclarativedebugservice_p.h" +#include <private/qdeclarativedebugservice_p.h> #include <QtCore/qurl.h> #include <QtCore/qvariant.h> diff --git a/src/declarative/qml/qdeclarativeglobal_p.h b/src/declarative/qml/qdeclarativeglobal_p.h index bbdc91c..1041992 100644 --- a/src/declarative/qml/qdeclarativeglobal_p.h +++ b/src/declarative/qml/qdeclarativeglobal_p.h @@ -79,7 +79,7 @@ struct QDeclarativeGraphics_DerivedObject : public QObject neither \a parent nor the object's previous parent (if it had one) will receive ChildRemoved or ChildAdded events. */ -inline void QDeclarativeGraphics_setParent_noEvent(QObject *object, QObject *parent) +inline void QDeclarative_setParent_noEvent(QObject *object, QObject *parent) { static_cast<QDeclarativeGraphics_DerivedObject *>(object)->setParent_noEvent(parent); } diff --git a/src/declarative/qml/qdeclarativelist.cpp b/src/declarative/qml/qdeclarativelist.cpp index af720d7..9691f32 100644 --- a/src/declarative/qml/qdeclarativelist.cpp +++ b/src/declarative/qml/qdeclarativelist.cpp @@ -85,18 +85,57 @@ void QDeclarativeListReferencePrivate::release() delete this; } +/*! +\class QDeclarativeListReference +\brief The QDeclarativeListReference class allows the manipulation of QDeclarativeListProperty properties. + +QDeclarativeListReference allows programs to read from, and assign values to a QML list property in a +simple and type safe way. A QDeclarativeListReference can be created by passing an object and property +name or through a QDeclarativeProperty instance. These two are equivalant: + +\code +QDeclarativeListReference ref1(object, "children"); + +QDeclarativeProperty ref2(object, "children"); +QDeclarativeListReference ref2 = qvariant_cast<QDeclarativeListReference>(ref2.read()); +\endcode + +Not all QML list properties support all operations. A set of methods, canAppend(), canAt(), canClear() and +canCount() allow programs to query whether an operation is supported on a given property. + +QML list properties are typesafe. Only QObject's that derive from the correct base class can be assigned to +the list. The listElementType() method can be used to query the QMetaObject of the QObject type supported. +Attempting to add objects of the incorrect type to a list property will fail. + +Like with normal lists, when accessing a list element by index, it is the callers responsibility to ensure +that it does not request an out of range element using the count() method before calling at(). +*/ + +/*! +Constructs an invalid instance. +*/ QDeclarativeListReference::QDeclarativeListReference() : d(0) { } -QDeclarativeListReference::QDeclarativeListReference(QObject *o, const char *property, QDeclarativeEngine *engine) +/*! +Constructs a QDeclarativeListReference for \a object's \a property. If \a property is not a list +property, an invalid QDeclarativeListReference is created. If \a object is destroyed after +the reference is constructed, it will automatically become invalid. That is, it is safe to hold +QDeclarativeListReference instances even after \a object is deleted. + +Passing \a engine is required to access some QML created list properties. If in doubt, and an engine +is available, pass it. +*/ +QDeclarativeListReference::QDeclarativeListReference(QObject *object, const char *property, QDeclarativeEngine *engine) : d(0) { - if (!o || !property) return; + if (!object || !property) return; QDeclarativePropertyCache::Data local; - QDeclarativePropertyCache::Data *data = QDeclarativePropertyCache::property(engine, o, QLatin1String(property), local); + QDeclarativePropertyCache::Data *data = + QDeclarativePropertyCache::property(engine, object, QLatin1String(property), local); if (!data || !(data->flags & QDeclarativePropertyCache::Data::IsQList)) return; @@ -106,20 +145,22 @@ QDeclarativeListReference::QDeclarativeListReference(QObject *o, const char *pro if (listType == -1) return; d = new QDeclarativeListReferencePrivate; - d->object = o; + d->object = object; d->elementType = p?p->rawMetaObjectForType(listType):QDeclarativeMetaType::qmlType(listType)->baseMetaObject(); d->propertyType = data->propType; void *args[] = { &d->property, 0 }; - QMetaObject::metacall(o, QMetaObject::ReadProperty, data->coreIndex, args); + QMetaObject::metacall(object, QMetaObject::ReadProperty, data->coreIndex, args); } +/*! \internal */ QDeclarativeListReference::QDeclarativeListReference(const QDeclarativeListReference &o) : d(o.d) { if (d) d->addref(); } +/*! \internal */ QDeclarativeListReference &QDeclarativeListReference::operator=(const QDeclarativeListReference &o) { if (o.d) o.d->addref(); @@ -128,60 +169,108 @@ QDeclarativeListReference &QDeclarativeListReference::operator=(const QDeclarati return *this; } +/*! \internal */ QDeclarativeListReference::~QDeclarativeListReference() { if (d) d->release(); } +/*! +Returns true if the instance refers to a valid list property, otherwise false. +*/ bool QDeclarativeListReference::isValid() const { return d && d->object; } +/*! +Returns the list property's object. Returns 0 if the reference is invalid. +*/ QObject *QDeclarativeListReference::object() const { if (isValid()) return d->object; else return 0; } +/*! +Returns the QMetaObject for the elements stored in the list property. Returns 0 if the reference +is invalid. + +The QMetaObject can be used ahead of time to determine whether a given instance can be added +to a list. +*/ const QMetaObject *QDeclarativeListReference::listElementType() const { if (isValid()) return d->elementType; else return 0; } +/*! +Returns true if the list property can be appended to, otherwise false. Returns false if the +reference is invalid. + +\sa append() +*/ bool QDeclarativeListReference::canAppend() const { return (isValid() && d->property.append); } +/*! +Returns true if the list property can queried by index, otherwise false. Returns false if the +reference is invalid. + +\sa at() +*/ bool QDeclarativeListReference::canAt() const { return (isValid() && d->property.at); } +/*! +Returns true if the list property can be cleared, otherwise false. Returns false if the +reference is invalid. + +\sa clear() +*/ bool QDeclarativeListReference::canClear() const { return (isValid() && d->property.clear); } +/*! +Returns true if the list property can be queried for its element count, otherwise false. +Returns false if the reference is invalid. + +\sa count() +*/ bool QDeclarativeListReference::canCount() const { return (isValid() && d->property.count); } -bool QDeclarativeListReference::append(QObject *o) const +/*! +Appends \a object to the list. Returns true if the operation succeeded, otherwise false. + +\sa canAppend() +*/ +bool QDeclarativeListReference::append(QObject *object) const { if (!canAppend()) return false; - if (o && !QDeclarativePropertyPrivate::canConvert(o->metaObject(), d->elementType)) + if (object && !QDeclarativePropertyPrivate::canConvert(object->metaObject(), d->elementType)) return false; - d->property.append(&d->property, o); + d->property.append(&d->property, object); return true; } +/*! +Returns the list element at \a index, or 0 if the operation failed. + +\sa canAt() +*/ QObject *QDeclarativeListReference::at(int index) const { if (!canAt()) return 0; @@ -189,6 +278,11 @@ QObject *QDeclarativeListReference::at(int index) const return d->property.at(&d->property, index); } +/*! +Clears the list. Returns true if the operation succeeded, otherwise false. + +\sa canClear() +*/ bool QDeclarativeListReference::clear() const { if (!canClear()) return false; @@ -198,6 +292,9 @@ bool QDeclarativeListReference::clear() const return true; } +/*! +Returns the number of objects in the list, or 0 if the operation failed. +*/ int QDeclarativeListReference::count() const { if (!canCount()) return 0; diff --git a/src/declarative/qml/qdeclarativeproperty.cpp b/src/declarative/qml/qdeclarativeproperty.cpp index 7ead1b5..e1ec2cd 100644 --- a/src/declarative/qml/qdeclarativeproperty.cpp +++ b/src/declarative/qml/qdeclarativeproperty.cpp @@ -63,10 +63,30 @@ QT_BEGIN_NAMESPACE /*! - \class QDeclarativeProperty - \brief The QDeclarativeProperty class abstracts accessing QML properties. - \internal - */ +\class QDeclarativeProperty +\brief The QDeclarativeProperty class abstracts accessing properties on objects created from QML. + +As QML uses Qt's meta-type system all of the existing QMetaObject classes can be used to introspect +and interact with objects created by QML. However, some of the new features provided by QML - such +as type safety and attached properties - are most easily used through the QDeclarativeProperty class +that simplifies some of their natural complexity. + +Unlike QMetaProperty which represents a property on a class type, QDeclarativeProperty encapsulates +a property on a specific object instance. To read a property's value, programmers create a +QDeclarativeProperty instance and call the read() method. Likewise to write a property value the +write() method is used. + +\code + +QObject *object = declarativeComponent.create(); + +QDeclarativeProperty property(object, "font.pixelSize"); +qWarning() << "Current pixel size:" << property.read().toInt(); +property.write(24); +qWarning() << "Pixel size should now be 24:" << property.read().toInt(); + +\endcode +*/ /*! Create an invalid QDeclarativeProperty. @@ -95,7 +115,6 @@ QDeclarativeProperty::QDeclarativeProperty(QObject *obj) } /*! - \internal Creates a QDeclarativeProperty for the default property of \a obj. If there is no default property, an invalid QDeclarativeProperty will be created. */ @@ -104,6 +123,20 @@ QDeclarativeProperty::QDeclarativeProperty(QObject *obj, QDeclarativeContext *ct { d->q = this; d->context = ctxt; + d->engine = ctxt?ctxt->engine():0; + d->initDefault(obj); +} + +/*! + Creates a QDeclarativeProperty for the default property of \a obj. If there is no + default property, an invalid QDeclarativeProperty will be created. + */ +QDeclarativeProperty::QDeclarativeProperty(QObject *obj, QDeclarativeEngine *engine) +: d(new QDeclarativePropertyPrivate) +{ + d->q = this; + d->context = 0; + d->engine = engine; d->initDefault(obj); } @@ -117,10 +150,8 @@ void QDeclarativePropertyPrivate::initDefault(QObject *obj) QMetaProperty p = QDeclarativeMetaType::defaultProperty(obj); core.load(p); - if (core.isValid()) { - isDefaultProperty = true; + if (core.isValid()) object = obj; - } } /*! @@ -135,7 +166,6 @@ QDeclarativeProperty::QDeclarativeProperty(QObject *obj, const QString &name) } /*! - \internal Creates a QDeclarativeProperty for the property \a name of \a obj. */ QDeclarativeProperty::QDeclarativeProperty(QObject *obj, const QString &name, QDeclarativeContext *ctxt) @@ -143,8 +173,22 @@ QDeclarativeProperty::QDeclarativeProperty(QObject *obj, const QString &name, QD { d->q = this; d->context = ctxt; + d->engine = ctxt?ctxt->engine():0; + d->initProperty(obj, name); + if (!isValid()) { d->object = 0; d->context = 0; d->engine = 0; } +} + +/*! + Creates a QDeclarativeProperty for the property \a name of \a obj. + */ +QDeclarativeProperty::QDeclarativeProperty(QObject *obj, const QString &name, QDeclarativeEngine *engine) +: d(new QDeclarativePropertyPrivate) +{ + d->q = this; + d->context = 0; + d->engine = engine; d->initProperty(obj, name); - if (!isValid()) { d->object = 0; d->context = 0; } + if (!isValid()) { d->object = 0; d->context = 0; d->engine = 0; } } Q_GLOBAL_STATIC(QDeclarativeValueTypeFactory, qmlValueTypes); @@ -153,7 +197,6 @@ void QDeclarativePropertyPrivate::initProperty(QObject *obj, const QString &name { if (!obj) return; - QDeclarativeEngine *engine = context?context->engine():0; QDeclarativeTypeNameCache *typeNameCache = context?QDeclarativeContextPrivate::get(context)->imports:0; QStringList path = name.split(QLatin1Char('.')); @@ -247,7 +290,7 @@ void QDeclarativePropertyPrivate::initProperty(QObject *obj, const QString &name // Property QDeclarativePropertyCache::Data local; QDeclarativePropertyCache::Data *property = - QDeclarativePropertyCache::property(context?context->engine():0, currentObject, terminal, local); + QDeclarativePropertyCache::property(engine, currentObject, terminal, local); if (property && !(property->flags & QDeclarativePropertyCache::Data::IsFunction)) { object = currentObject; core = *property; @@ -268,10 +311,10 @@ QDeclarativeProperty::QDeclarativeProperty(const QDeclarativeProperty &other) This enum specifies a category of QML property. - \value InvalidCategory The property is invalid. - \value List The property is a QList pointer + \value InvalidCategory The property is invalid, or is a signal property. + \value List The property is a QDeclarativeListProperty list property \value Object The property is a QObject derived type pointer - \value Normal The property is none of the above. + \value Normal The property is a normal value property. */ /*! @@ -282,7 +325,6 @@ QDeclarativeProperty::QDeclarativeProperty(const QDeclarativeProperty &other) \value Invalid The property is invalid. \value Property The property is a regular Qt property. \value SignalProperty The property is a signal property. - \value Default The property is the default property. */ /*! @@ -298,7 +340,7 @@ QDeclarativePropertyPrivate::propertyTypeCategory() const { uint type = q->type(); - if (type & QDeclarativeProperty::ValueTypeProperty) { + if (isValueType()) { return QDeclarativeProperty::Normal; } else if (type & QDeclarativeProperty::Property) { int type = propertyType(); @@ -323,7 +365,7 @@ QDeclarativePropertyPrivate::propertyTypeCategory() const */ const char *QDeclarativeProperty::propertyTypeName() const { - if (type() & ValueTypeProperty) { + if (d->isValueType()) { QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(d->context); QDeclarativeValueType *valueType = 0; @@ -365,10 +407,15 @@ int QDeclarativeProperty::propertyType() const return d->propertyType(); } +bool QDeclarativePropertyPrivate::isValueType() const +{ + return valueType.valueTypeCoreIdx != -1; +} + int QDeclarativePropertyPrivate::propertyType() const { uint type = q->type(); - if (type & QDeclarativeProperty::ValueTypeProperty) { + if (isValueType()) { return valueType.valueTypePropType; } else if (type & QDeclarativeProperty::Property) { if (core.propType == (int)QVariant::LastType) @@ -387,10 +434,8 @@ QDeclarativeProperty::Type QDeclarativeProperty::type() const { if (d->core.flags & QDeclarativePropertyCache::Data::IsFunction) return SignalProperty; - else if (d->valueType.valueTypeCoreIdx != -1) - return (Type)(Property | ValueTypeProperty); else if (d->core.isValid()) - return (Type)(Property | ((d->isDefaultProperty)?Default:0)); + return Property; else return Invalid; } @@ -404,11 +449,11 @@ bool QDeclarativeProperty::isProperty() const } /*! - Returns true if this QDeclarativeProperty represents a default property. + Returns true if this QDeclarativeProperty represents a QML signal property. */ -bool QDeclarativeProperty::isDefault() const +bool QDeclarativeProperty::isSignalProperty() const { - return type() & Default; + return type() & SignalProperty; } /*! @@ -425,9 +470,9 @@ QObject *QDeclarativeProperty::object() const QDeclarativeProperty &QDeclarativeProperty::operator=(const QDeclarativeProperty &other) { d->context = other.d->context; + d->engine = other.d->engine; d->object = other.d->object; - d->isDefaultProperty = other.d->isDefaultProperty; d->isNameCached = other.d->isNameCached; d->core = other.d->core; d->nameCache = other.d->nameCache; @@ -495,10 +540,10 @@ QString QDeclarativeProperty::name() const if (!d->isNameCached) { // ### if (!d->object) { - } else if (type() & ValueTypeProperty) { + } else if (d->isValueType()) { QString rv = d->core.name(d->object) + QLatin1Char('.'); - QDeclarativeEnginePrivate *ep = d->context?QDeclarativeEnginePrivate::get(d->context->engine()):0; + QDeclarativeEnginePrivate *ep = d->engine?QDeclarativeEnginePrivate::get(d->engine):0; QDeclarativeValueType *valueType = 0; if (ep) valueType = ep->valueTypes[d->core.propType]; else valueType = QDeclarativeValueTypeFactory::valueType(d->core.propType); @@ -646,7 +691,7 @@ QDeclarativePropertyPrivate::signalExpression(const QDeclarativeProperty &that) QObject *child = children.at(ii); QDeclarativeBoundSignal *signal = QDeclarativeBoundSignal::cast(child); - if (signal && signal->index() == that.coreIndex()) + if (signal && signal->index() == that.index()) return signal->expression(); } @@ -675,7 +720,7 @@ QDeclarativePropertyPrivate::setSignalExpression(const QDeclarativeProperty &tha QObject *child = children.at(ii); QDeclarativeBoundSignal *signal = QDeclarativeBoundSignal::cast(child); - if (signal && signal->index() == that.coreIndex()) + if (signal && signal->index() == that.index()) return signal->setExpression(expr); } @@ -707,10 +752,48 @@ QVariant QDeclarativeProperty::read() const return QVariant(); } +/*! +Return the \a name property value of \a object. This method is equivalent to: +\code + QDeclarativeProperty p(object, name); + p.read(); +\endcode +*/ +QVariant QDeclarativeProperty::read(QObject *object, const QString &name) +{ + QDeclarativeProperty p(object, name); + return p.read(); +} + +/*! +Return the \a name property value of \a object. This method is equivalent to: +\code + QDeclarativeProperty p(object, name, context); + p.read(); +\endcode +*/ +QVariant QDeclarativeProperty::read(QObject *object, const QString &name, QDeclarativeContext *ctxt) +{ + QDeclarativeProperty p(object, name, ctxt); + return p.read(); +} + +/*! +Return the \a name property value of \a object. This method is equivalent to: +\code + QDeclarativeProperty p(object, name, engine); + p.read(); +\endcode +*/ +QVariant QDeclarativeProperty::read(QObject *object, const QString &name, QDeclarativeEngine *engine) +{ + QDeclarativeProperty p(object, name, engine); + return p.read(); +} + QVariant QDeclarativePropertyPrivate::readValueProperty() { - uint type = q->type(); - if(type & QDeclarativeProperty::ValueTypeProperty) { + if(isValueType()) { QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(context); QDeclarativeValueType *valueType = 0; @@ -731,7 +814,7 @@ QVariant QDeclarativePropertyPrivate::readValueProperty() QDeclarativeListProperty<QObject> prop; void *args[] = { &prop, 0 }; QMetaObject::metacall(object, QMetaObject::ReadProperty, core.coreIndex, args); - return QVariant::fromValue(QDeclarativeListReferencePrivate::init(prop, core.propType, context?context->engine():0)); + return QVariant::fromValue(QDeclarativeListReferencePrivate::init(prop, core.propType, engine)); } else { @@ -740,9 +823,7 @@ QVariant QDeclarativePropertyPrivate::readValueProperty() } } -//### //writeEnumProperty MIRRORS the relelvant bit of QMetaProperty::write AND MUST BE KEPT IN SYNC! -//### bool QDeclarativePropertyPrivate::writeEnumProperty(const QMetaProperty &prop, int idx, QObject *object, const QVariant &value, int flags) { if (!object || !prop.isWritable()) @@ -789,8 +870,7 @@ bool QDeclarativePropertyPrivate::writeValueProperty(const QVariant &value, Writ } bool rv = false; - uint type = q->type(); - if (type & QDeclarativeProperty::ValueTypeProperty) { + if (isValueType()) { QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(context); QDeclarativeValueType *writeBack = 0; @@ -931,13 +1011,13 @@ bool QDeclarativePropertyPrivate::write(QObject *object, const QDeclarativePrope for (int ii = 0; ii < list.count(); ++ii) { QObject *o = list.at(ii); - if (!canConvert(o->metaObject(), listType)) + if (o && !canConvert(o->metaObject(), listType)) o = 0; prop.append(&prop, (void *)o); } } else { QObject *o = enginePriv?enginePriv->toQObject(value):QDeclarativeMetaType::toQObject(value); - if (!canConvert(o->metaObject(), listType)) + if (o && !canConvert(o->metaObject(), listType)) o = 0; prop.append(&prop, (void *)o); } @@ -994,6 +1074,47 @@ bool QDeclarativeProperty::write(const QVariant &value) const } /*! +Writes \a value to the \a name property of \a object. This method is equivalent to: +\code + QDeclarativeProperty p(object, name); + p.write(value); +\endcode +*/ +bool QDeclarativeProperty::write(QObject *object, const QString &name, const QVariant &value) +{ + QDeclarativeProperty p(object, name); + return p.write(value); +} + +/*! +Writes \a value to the \a name property of \a object. This method is equivalent to: +\code + QDeclarativeProperty p(object, name, ctxt); + p.write(value); +\endcode +*/ +bool QDeclarativeProperty::write(QObject *object, const QString &name, const QVariant &value, + QDeclarativeContext *ctxt) +{ + QDeclarativeProperty p(object, name, ctxt); + return p.write(value); +} + +/*! +Writes \a value to the \a name property of \a object. This method is equivalent to: +\code + QDeclarativeProperty p(object, name, engine); + p.write(value); +\endcode +*/ +bool QDeclarativeProperty::write(QObject *object, const QString &name, const QVariant &value, + QDeclarativeEngine *engine) +{ + QDeclarativeProperty p(object, name, engine); + return p.write(value); +} + +/*! Resets the property value. */ bool QDeclarativeProperty::reset() const @@ -1020,7 +1141,7 @@ bool QDeclarativePropertyPrivate::write(const QDeclarativeProperty &that, /*! Returns true if the property has a change notifier signal, otherwise false. */ -bool QDeclarativeProperty::hasChangedNotifier() const +bool QDeclarativeProperty::hasNotifySignal() const { if (type() & Property && d->object) { return d->object->metaObject()->property(d->core.coreIndex).hasNotifySignal(); @@ -1035,7 +1156,7 @@ bool QDeclarativeProperty::hasChangedNotifier() const Some properties, such as attached properties or those whose value never changes, do not require a change notifier. */ -bool QDeclarativeProperty::needsChangedNotifier() const +bool QDeclarativeProperty::needsNotifySignal() const { return type() & Property && !property().isConstant(); } @@ -1048,7 +1169,7 @@ bool QDeclarativeProperty::needsChangedNotifier() const change notifier signal, or if the \a dest object does not have the specified \a method. */ -bool QDeclarativeProperty::connectNotifier(QObject *dest, int method) const +bool QDeclarativeProperty::connectNotifySignal(QObject *dest, int method) const { if (!(type() & Property) || !d->object) return false; @@ -1069,7 +1190,7 @@ bool QDeclarativeProperty::connectNotifier(QObject *dest, int method) const change notifier signal, or if the \a dest object does not have the specified \a slot. */ -bool QDeclarativeProperty::connectNotifier(QObject *dest, const char *slot) const +bool QDeclarativeProperty::connectNotifySignal(QObject *dest, const char *slot) const { if (!(type() & Property) || !d->object) return false; @@ -1086,7 +1207,7 @@ bool QDeclarativeProperty::connectNotifier(QObject *dest, const char *slot) cons /*! Return the Qt metaobject index of the property. */ -int QDeclarativeProperty::coreIndex() const +int QDeclarativeProperty::index() const { return d->core.coreIndex; } @@ -1097,7 +1218,7 @@ int QDeclarativePropertyPrivate::valueTypeCoreIndex(const QDeclarativeProperty & } struct SerializedData { - QDeclarativeProperty::Type type; + bool isValueType; QDeclarativePropertyCache::Data core; }; @@ -1112,7 +1233,7 @@ QByteArray QDeclarativePropertyPrivate::saveValueType(const QMetaObject *metaObj QMetaProperty subProp = subObject->property(subIndex); ValueTypeSerializedData sd; - sd.type = QDeclarativeProperty::ValueTypeProperty; + sd.isValueType = true; sd.core.load(metaObject->property(index)); sd.valueType.flags = QDeclarativePropertyCache::Data::flagsForProperty(subProp); sd.valueType.valueTypeCoreIdx = subIndex; @@ -1126,7 +1247,7 @@ QByteArray QDeclarativePropertyPrivate::saveValueType(const QMetaObject *metaObj QByteArray QDeclarativePropertyPrivate::saveProperty(const QMetaObject *metaObject, int index) { SerializedData sd; - sd.type = QDeclarativeProperty::Property; + sd.isValueType = false; sd.core.load(metaObject->property(index)); QByteArray rv((const char *)&sd, sizeof(sd)); @@ -1143,14 +1264,15 @@ QDeclarativePropertyPrivate::restore(const QByteArray &data, QObject *object, QD prop.d->object = object; prop.d->context = ctxt; + prop.d->engine = ctxt?ctxt->engine():0; const SerializedData *sd = (const SerializedData *)data.constData(); - if (sd->type == QDeclarativeProperty::Property) { - prop.d->core = sd->core; - } else if(sd->type == QDeclarativeProperty::ValueTypeProperty) { + if (sd->isValueType) { const ValueTypeSerializedData *vt = (const ValueTypeSerializedData *)sd; prop.d->core = vt->core; prop.d->valueType = vt->valueType; + } else { + prop.d->core = sd->core; } return prop; diff --git a/src/declarative/qml/qdeclarativeproperty.h b/src/declarative/qml/qdeclarativeproperty.h index be1065e..73bccf3 100644 --- a/src/declarative/qml/qdeclarativeproperty.h +++ b/src/declarative/qml/qdeclarativeproperty.h @@ -51,11 +51,7 @@ QT_BEGIN_NAMESPACE QT_MODULE(Declarative) class QObject; -class QDeclarativeAbstractBinding; -class QDeclarativeExpression; -class QStringList; class QVariant; -struct QMetaObject; class QDeclarativeContext; class QDeclarativeEngine; @@ -70,11 +66,10 @@ public: Normal }; - enum Type { Invalid = 0x00, - Property = 0x01, - SignalProperty = 0x02, - Default = 0x08, - ValueTypeProperty = 0x10 + enum Type { + Invalid, + Property, + SignalProperty }; QDeclarativeProperty(); @@ -82,45 +77,55 @@ public: QDeclarativeProperty(QObject *); QDeclarativeProperty(QObject *, QDeclarativeContext *); + QDeclarativeProperty(QObject *, QDeclarativeEngine *); QDeclarativeProperty(QObject *, const QString &); QDeclarativeProperty(QObject *, const QString &, QDeclarativeContext *); + QDeclarativeProperty(QObject *, const QString &, QDeclarativeEngine *); QDeclarativeProperty(const QDeclarativeProperty &); QDeclarativeProperty &operator=(const QDeclarativeProperty &); + bool operator==(const QDeclarativeProperty &) const; + + Type type() const; + bool isValid() const; + bool isProperty() const; + bool isSignalProperty() const; + + int propertyType() const; + PropertyTypeCategory propertyTypeCategory() const; + const char *propertyTypeName() const; + QString name() const; QVariant read() const; + static QVariant read(QObject *, const QString &); + static QVariant read(QObject *, const QString &, QDeclarativeContext *); + static QVariant read(QObject *, const QString &, QDeclarativeEngine *); + bool write(const QVariant &) const; + static bool write(QObject *, const QString &, const QVariant &); + static bool write(QObject *, const QString &, const QVariant &, QDeclarativeContext *); + static bool write(QObject *, const QString &, const QVariant &, QDeclarativeEngine *); + bool reset() const; - bool hasChangedNotifier() const; - bool needsChangedNotifier() const; - bool connectNotifier(QObject *dest, const char *slot) const; - bool connectNotifier(QObject *dest, int method) const; + bool hasNotifySignal() const; + bool needsNotifySignal() const; + bool connectNotifySignal(QObject *dest, const char *slot) const; + bool connectNotifySignal(QObject *dest, int method) const; - Type type() const; - bool isProperty() const; - bool isDefault() const; bool isWritable() const; bool isDesignable() const; bool isResettable() const; - bool isValid() const; QObject *object() const; - int propertyType() const; - PropertyTypeCategory propertyTypeCategory() const; - const char *propertyTypeName() const; - - bool operator==(const QDeclarativeProperty &) const; - - int coreIndex() const; + int index() const; QMetaProperty property() const; QMetaMethod method() const; private: - friend class QDeclarativeEnginePrivate; friend class QDeclarativePropertyPrivate; QDeclarativePropertyPrivate *d; }; diff --git a/src/declarative/qml/qdeclarativeproperty_p.h b/src/declarative/qml/qdeclarativeproperty_p.h index d0ad09c..1fda7f4 100644 --- a/src/declarative/qml/qdeclarativeproperty_p.h +++ b/src/declarative/qml/qdeclarativeproperty_p.h @@ -64,6 +64,7 @@ QT_BEGIN_NAMESPACE class QDeclarativeContext; class QDeclarativeEnginePrivate; +class QDeclarativeExpression; class Q_AUTOTEST_EXPORT QDeclarativePropertyPrivate { public: @@ -71,20 +72,20 @@ public: Q_DECLARE_FLAGS(WriteFlags, WriteFlag) QDeclarativePropertyPrivate() - : q(0), context(0), object(0), isDefaultProperty(false), isNameCached(false) {} + : q(0), context(0), engine(0), object(0), isNameCached(false) {} QDeclarativePropertyPrivate(const QDeclarativePropertyPrivate &other) - : q(0), context(other.context), object(other.object), - isDefaultProperty(other.isDefaultProperty), isNameCached(other.isNameCached), + : q(0), context(other.context), engine(other.engine), object(other.object), + isNameCached(other.isNameCached), core(other.core), nameCache(other.nameCache), valueType(other.valueType) {} QDeclarativeProperty *q; QDeclarativeContext *context; + QDeclarativeEngine *engine; QDeclarativeGuard<QObject> object; - bool isDefaultProperty:1; bool isNameCached:1; QDeclarativePropertyCache::Data core; QString nameCache; @@ -97,6 +98,7 @@ public: QMetaMethod findSignal(QObject *, const QString &); + bool isValueType() const; int propertyType() const; QDeclarativeProperty::PropertyTypeCategory propertyTypeCategory() const; diff --git a/src/declarative/qml/qdeclarativescript.cpp b/src/declarative/qml/qdeclarativescript.cpp index acfb9e1..ac4b2c1 100644 --- a/src/declarative/qml/qdeclarativescript.cpp +++ b/src/declarative/qml/qdeclarativescript.cpp @@ -43,6 +43,7 @@ /*! \qmlclass Script QDeclarativeScript + \since 4.7 \brief The Script element provides a way to add JavaScript code snippets in QML. \ingroup group_utility diff --git a/src/declarative/qml/qdeclarativevme.cpp b/src/declarative/qml/qdeclarativevme.cpp index baa98bd..fc3722d 100644 --- a/src/declarative/qml/qdeclarativevme.cpp +++ b/src/declarative/qml/qdeclarativevme.cpp @@ -217,7 +217,7 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, QDeclarati // TODO: parent might be a layout } } else { - QDeclarativeGraphics_setParent_noEvent(o, parent); + QDeclarative_setParent_noEvent(o, parent); // o->setParent(parent); } } @@ -525,7 +525,7 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, QDeclarati if (!QMetaObject::checkConnectArgs(prop.method().signature(), method.signature())) VME_EXCEPTION(QCoreApplication::translate("QDeclarativeVME","Cannot connect mismatched signal/slot %1 %vs. %2").arg(QString::fromLatin1(method.signature())).arg(QString::fromLatin1(prop.method().signature()))); - QMetaObject::connect(target, prop.coreIndex(), assign, method.methodIndex()); + QMetaObject::connect(target, prop.index(), assign, method.methodIndex()); } else { VME_EXCEPTION(QCoreApplication::translate("QDeclarativeVME","Cannot assign an object to signal property %1").arg(QString::fromUtf8(pr))); @@ -593,7 +593,7 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, QDeclarati QDeclarativeProperty mp = QDeclarativePropertyPrivate::restore(datas.at(instr.assignBinding.property), target, ctxt); - int coreIndex = mp.coreIndex(); + int coreIndex = mp.index(); if (stack.count() == 1 && bindingSkipList.testBit(coreIndex)) break; @@ -648,7 +648,7 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, QDeclarati obj->setParent(target); vi->setTarget(prop); QDeclarativeVMEMetaObject *mo = static_cast<QDeclarativeVMEMetaObject *>((QMetaObject*)target->metaObject()); - mo->registerInterceptor(prop.coreIndex(), QDeclarativePropertyPrivate::valueTypeCoreIndex(prop), vi); + mo->registerInterceptor(prop.index(), QDeclarativePropertyPrivate::valueTypeCoreIndex(prop), vi); } break; diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp index 264b88c..10230d3 100644 --- a/src/declarative/util/qdeclarativeanimation.cpp +++ b/src/declarative/util/qdeclarativeanimation.cpp @@ -63,6 +63,7 @@ #include <QtCore/qrect.h> #include <QtCore/qpoint.h> #include <QtCore/qsize.h> +#include <QtCore/qmath.h> #include <private/qvariantanimation_p.h> @@ -70,7 +71,7 @@ QT_BEGIN_NAMESPACE /*! \qmlclass Animation QDeclarativeAbstractAnimation - \since 4.7 + \since 4.7 \brief The Animation element is the base of all QML animations. The Animation element cannot be used directly in a QML file. It exists @@ -360,9 +361,6 @@ void QDeclarativeAbstractAnimation::setGroup(QDeclarativeAnimationGroup *g) if (d->group && !static_cast<QDeclarativeAnimationGroupPrivate *>(d->group->d_func())->animations.contains(this)) static_cast<QDeclarativeAnimationGroupPrivate *>(d->group->d_func())->animations.append(this); - if (d->group) - ((QAnimationGroup*)d->group->qtAnimation())->addAnimation(qtAnimation()); - //if (g) //if removed from a group, then the group should no longer be the parent setParent(g); } @@ -517,7 +515,7 @@ void QDeclarativeAbstractAnimation::timelineComplete() /*! \qmlclass PauseAnimation QDeclarativePauseAnimation - \since 4.7 + \since 4.7 \inherits Animation \brief The PauseAnimation element provides a pause for an animation. @@ -554,7 +552,7 @@ void QDeclarativePauseAnimationPrivate::init() { Q_Q(QDeclarativePauseAnimation); pa = new QPauseAnimation; - QDeclarativeGraphics_setParent_noEvent(pa, q); + QDeclarative_setParent_noEvent(pa, q); } /*! @@ -591,7 +589,7 @@ QAbstractAnimation *QDeclarativePauseAnimation::qtAnimation() /*! \qmlclass ColorAnimation QDeclarativeColorAnimation - \since 4.7 + \since 4.7 \inherits PropertyAnimation \brief The ColorAnimation element allows you to animate color changes. @@ -655,7 +653,7 @@ void QDeclarativeColorAnimation::setTo(const QColor &t) /*! \qmlclass ScriptAction QDeclarativeScriptAction - \since 4.7 + \since 4.7 \inherits Animation \brief The ScriptAction element allows scripts to be run during an animation. @@ -679,7 +677,7 @@ void QDeclarativeScriptActionPrivate::init() { Q_Q(QDeclarativeScriptAction); rsa = new QActionAnimation(&proxy); - QDeclarativeGraphics_setParent_noEvent(rsa, q); + QDeclarative_setParent_noEvent(rsa, q); } /*! @@ -761,7 +759,7 @@ QAbstractAnimation *QDeclarativeScriptAction::qtAnimation() /*! \qmlclass PropertyAction QDeclarativePropertyAction - \since 4.7 + \since 4.7 \inherits Animation \brief The PropertyAction element allows immediate property changes during animation. @@ -797,7 +795,7 @@ void QDeclarativePropertyActionPrivate::init() { Q_Q(QDeclarativePropertyAction); spa = new QActionAnimation; - QDeclarativeGraphics_setParent_noEvent(spa, q); + QDeclarative_setParent_noEvent(spa, q); } /*! @@ -1010,7 +1008,7 @@ void QDeclarativePropertyAction::transition(QDeclarativeStateActions &actions, /*! \qmlclass ParentAction QDeclarativeParentAction - \since 4.7 + \since 4.7 \inherits Animation \brief The ParentAction element allows parent changes during animation. @@ -1058,7 +1056,7 @@ void QDeclarativeParentActionPrivate::init() { Q_Q(QDeclarativeParentAction); cpa = new QActionAnimation; - QDeclarativeGraphics_setParent_noEvent(cpa, q); + QDeclarative_setParent_noEvent(cpa, q); } /*! @@ -1214,7 +1212,7 @@ void QDeclarativeParentAction::transition(QDeclarativeStateActions &actions, /*! \qmlclass NumberAnimation QDeclarativeNumberAnimation - \since 4.7 + \since 4.7 \inherits PropertyAnimation \brief The NumberAnimation element allows you to animate changes in properties of type qreal. @@ -1278,7 +1276,7 @@ void QDeclarativeNumberAnimation::setTo(qreal t) /*! \qmlclass Vector3dAnimation QDeclarativeVector3dAnimation - \since 4.7 + \since 4.7 \inherits PropertyAnimation \brief The Vector3dAnimation element allows you to animate changes in properties of type QVector3d. */ @@ -1337,6 +1335,7 @@ void QDeclarativeVector3dAnimation::setTo(QVector3D t) /*! \qmlclass RotationAnimation QDeclarativeRotationAnimation + \since 4.7 \inherits PropertyAnimation \brief The RotationAnimation element allows you to animate rotations. @@ -1511,12 +1510,18 @@ QDeclarativeAnimationGroup::QDeclarativeAnimationGroup(QObject *parent) { } +QDeclarativeAnimationGroup::QDeclarativeAnimationGroup(QDeclarativeAnimationGroupPrivate &dd, QObject *parent) + : QDeclarativeAbstractAnimation(dd, parent) +{ +} + void QDeclarativeAnimationGroupPrivate::append_animation(QDeclarativeListProperty<QDeclarativeAbstractAnimation> *list, QDeclarativeAbstractAnimation *a) { QDeclarativeAnimationGroup *q = qobject_cast<QDeclarativeAnimationGroup *>(list->object); if (q) { q->d_func()->animations.append(a); a->setGroup(q); + q->d_func()->ag->addAnimation(a->qtAnimation()); } } @@ -1545,7 +1550,7 @@ QDeclarativeListProperty<QDeclarativeAbstractAnimation> QDeclarativeAnimationGro /*! \qmlclass SequentialAnimation QDeclarativeSequentialAnimation - \since 4.7 + \since 4.7 \inherits Animation \brief The SequentialAnimation element allows you to run animations sequentially. @@ -1606,7 +1611,7 @@ void QDeclarativeSequentialAnimation::transition(QDeclarativeStateActions &actio /*! \qmlclass ParallelAnimation QDeclarativeParallelAnimation - \since 4.7 + \since 4.7 \inherits Animation \brief The ParallelAnimation element allows you to run animations in parallel. @@ -1715,7 +1720,7 @@ void QDeclarativePropertyAnimationPrivate::convertVariant(QVariant &variant, int /*! \qmlclass PropertyAnimation QDeclarativePropertyAnimation - \since 4.7 + \since 4.7 \inherits Animation \brief The PropertyAnimation element allows you to animate property changes. @@ -1793,7 +1798,7 @@ void QDeclarativePropertyAnimationPrivate::init() { Q_Q(QDeclarativePropertyAnimation); va = new QDeclarativeTimeLineValueAnimator; - QDeclarativeGraphics_setParent_noEvent(va, q); + QDeclarative_setParent_noEvent(va, q); } /*! @@ -2366,6 +2371,241 @@ void QDeclarativePropertyAnimation::transition(QDeclarativeStateActions &actions } } +QDeclarativeParentAnimation::QDeclarativeParentAnimation(QObject *parent) + : QDeclarativeAnimationGroup(*(new QDeclarativeParentAnimationPrivate), parent) +{ + Q_D(QDeclarativeParentAnimation); + d->topLevelGroup = new QSequentialAnimationGroup; + QDeclarative_setParent_noEvent(d->topLevelGroup, this); + + d->startAction = new QActionAnimation; + d->topLevelGroup->addAnimation(d->startAction); + + d->ag = new QParallelAnimationGroup; + d->topLevelGroup->addAnimation(d->ag); + + d->endAction = new QActionAnimation; + d->topLevelGroup->addAnimation(d->endAction); +} + +QDeclarativeParentAnimation::~QDeclarativeParentAnimation() +{ +} + +QDeclarativeItem *QDeclarativeParentAnimation::target() const +{ + Q_D(const QDeclarativeParentAnimation); + return d->target; +} + +void QDeclarativeParentAnimation::setTarget(QDeclarativeItem *target) +{ + Q_D(QDeclarativeParentAnimation); + d->target = target; +} + +QDeclarativeItem *QDeclarativeParentAnimation::newParent() const +{ + Q_D(const QDeclarativeParentAnimation); + return d->newParent; +} + +void QDeclarativeParentAnimation::setNewParent(QDeclarativeItem *newParent) +{ + Q_D(QDeclarativeParentAnimation); + d->newParent = newParent; +} + +QDeclarativeItem *QDeclarativeParentAnimation::via() const +{ + Q_D(const QDeclarativeParentAnimation); + return d->via; +} + +void QDeclarativeParentAnimation::setVia(QDeclarativeItem *via) +{ + Q_D(QDeclarativeParentAnimation); + d->via = via; +} + +//### mirrors same-named function in QDeclarativeItem +QPointF QDeclarativeParentAnimationPrivate::computeTransformOrigin(QDeclarativeItem::TransformOrigin origin, qreal width, qreal height) const +{ + switch(origin) { + default: + case QDeclarativeItem::TopLeft: + return QPointF(0, 0); + case QDeclarativeItem::Top: + return QPointF(width / 2., 0); + case QDeclarativeItem::TopRight: + return QPointF(width, 0); + case QDeclarativeItem::Left: + return QPointF(0, height / 2.); + case QDeclarativeItem::Center: + return QPointF(width / 2., height / 2.); + case QDeclarativeItem::Right: + return QPointF(width, height / 2.); + case QDeclarativeItem::BottomLeft: + return QPointF(0, height); + case QDeclarativeItem::Bottom: + return QPointF(width / 2., height); + case QDeclarativeItem::BottomRight: + return QPointF(width, height); + } +} + +void QDeclarativeParentAnimation::transition(QDeclarativeStateActions &actions, + QDeclarativeProperties &modified, + TransitionDirection direction) +{ + Q_D(QDeclarativeParentAnimation); + + struct QDeclarativeParentActionData : public QAbstractAnimationAction + { + QDeclarativeParentActionData(): pc(0) {} + ~QDeclarativeParentActionData() { delete pc; } + + QDeclarativeStateActions actions; + bool reverse; + QDeclarativeParentChange *pc; + virtual void doAction() + { + for (int ii = 0; ii < actions.count(); ++ii) { + const QDeclarativeAction &action = actions.at(ii); + if (reverse) + action.event->reverse(); + else + action.event->execute(); + } + } + }; + + QDeclarativeParentActionData *data = new QDeclarativeParentActionData; + QDeclarativeParentActionData *viaData = new QDeclarativeParentActionData; + for (int i = 0; i < actions.size(); ++i) { + QDeclarativeAction &action = actions[i]; + if (action.event && action.event->typeName() == QLatin1String("ParentChange") + && (!d->target || static_cast<QDeclarativeParentChange*>(action.event)->object() == d->target)) { + + QDeclarativeParentChange *pc = static_cast<QDeclarativeParentChange*>(action.event); + QDeclarativeAction myAction = action; + data->reverse = action.reverseEvent; + action.actionDone = true; + data->actions << myAction; + + if (d->via) { + viaData->reverse = false; + QDeclarativeAction myAction; + QDeclarativeParentChange *vpc = new QDeclarativeParentChange; + vpc->setObject(pc->object()); + vpc->setParent(d->via); + myAction.event = vpc; + viaData->pc = vpc; + viaData->actions << myAction; + QDeclarativeAction dummyAction; + QDeclarativeAction &xAction = pc->xIsSet() ? actions[++i] : dummyAction; + QDeclarativeAction &yAction = pc->yIsSet() ? actions[++i] : dummyAction; + QDeclarativeAction &sAction = pc->scaleIsSet() ? actions[++i] : dummyAction; + QDeclarativeAction &rAction = pc->rotationIsSet() ? actions[++i] : dummyAction; + bool forward = (direction == QDeclarativeAbstractAnimation::Forward); + QDeclarativeItem *target = pc->object(); + QDeclarativeItem *targetParent = forward ? pc->parent() : pc->originalParent(); + + //### this mirrors the logic in QDeclarativeParentChange. + bool ok; + const QTransform &transform = targetParent->itemTransform(d->via, &ok); + if (transform.type() >= QTransform::TxShear || !ok) { + qmlInfo(this) << QDeclarativeParentAnimation::tr("Unable to preserve appearance under complex transform"); + ok = false; + } + + qreal scale = 1; + qreal rotation = 0; + if (ok && transform.type() != QTransform::TxRotate) { + if (transform.m11() == transform.m22()) + scale = transform.m11(); + else { + qmlInfo(this) << QDeclarativeParentAnimation::tr("Unable to preserve appearance under non-uniform scale"); + ok = false; + } + } else if (ok && transform.type() == QTransform::TxRotate) { + if (transform.m11() == transform.m22()) + scale = qSqrt(transform.m11()*transform.m11() + transform.m12()*transform.m12()); + else { + qmlInfo(this) << QDeclarativeParentAnimation::tr("Unable to preserve appearance under non-uniform scale"); + ok = false; + } + + if (scale != 0) + rotation = atan2(transform.m12()/scale, transform.m11()/scale) * 180/M_PI; + else { + qmlInfo(this) << QDeclarativeParentAnimation::tr("Unable to preserve appearance under scale of 0"); + ok = false; + } + } + + const QPointF &point = transform.map(QPointF(xAction.toValue.toReal(),yAction.toValue.toReal())); + qreal x = point.x(); + qreal y = point.y(); + if (ok && target->transformOrigin() != QDeclarativeItem::TopLeft) { + qreal w = target->width(); + qreal h = target->height(); + if (pc->widthIsSet()) + w = actions[++i].toValue.toReal(); + if (pc->heightIsSet()) + h = actions[++i].toValue.toReal(); + const QPointF &transformOrigin + = d->computeTransformOrigin(target->transformOrigin(), w,h); + qreal tempxt = transformOrigin.x(); + qreal tempyt = transformOrigin.y(); + QTransform t; + t.translate(-tempxt, -tempyt); + t.rotate(rotation); + t.scale(scale, scale); + t.translate(tempxt, tempyt); + const QPointF &offset = t.map(QPointF(0,0)); + x += offset.x(); + y += offset.y(); + } + + if (ok) { + //qDebug() << x << y << rotation << scale; + xAction.toValue = x; + yAction.toValue = y; + sAction.toValue = sAction.toValue.toReal() * scale; + rAction.toValue = rAction.toValue.toReal() + rotation; + } + } + } + } + + if (data->actions.count()) { + if (direction == QDeclarativeAbstractAnimation::Forward) { + d->startAction->setAnimAction(d->via ? viaData : data, QActionAnimation::DeleteWhenStopped); + d->endAction->setAnimAction(d->via ? data : 0, QActionAnimation::DeleteWhenStopped); + } else { + d->endAction->setAnimAction(d->via ? viaData : data, QActionAnimation::DeleteWhenStopped); + d->startAction->setAnimAction(d->via ? data : 0, QActionAnimation::DeleteWhenStopped); + } + } else { + delete data; + delete viaData; + } + + //take care of any child animations + bool valid = d->defaultProperty.isValid(); + for (int ii = 0; ii < d->animations.count(); ++ii) { + if (valid) + d->animations.at(ii)->setDefaultTarget(d->defaultProperty); + d->animations.at(ii)->transition(actions, modified, direction); + } + +} +QAbstractAnimation *QDeclarativeParentAnimation::qtAnimation() +{ + Q_D(QDeclarativeParentAnimation); + return d->topLevelGroup; +} QT_END_NAMESPACE diff --git a/src/declarative/util/qdeclarativeanimation_p.h b/src/declarative/util/qdeclarativeanimation_p.h index 53afbb5..0f23f5c 100644 --- a/src/declarative/util/qdeclarativeanimation_p.h +++ b/src/declarative/util/qdeclarativeanimation_p.h @@ -413,6 +413,9 @@ public: QDeclarativeListProperty<QDeclarativeAbstractAnimation> animations(); friend class QDeclarativeAbstractAnimation; + +protected: + QDeclarativeAnimationGroup(QDeclarativeAnimationGroupPrivate &dd, QObject *parent); }; class QDeclarativeSequentialAnimation : public QDeclarativeAnimationGroup @@ -447,6 +450,36 @@ protected: virtual QAbstractAnimation *qtAnimation(); }; +class QDeclarativeParentAnimationPrivate; +class QDeclarativeParentAnimation : public QDeclarativeAnimationGroup +{ + Q_OBJECT + Q_DECLARE_PRIVATE(QDeclarativeParentAnimation) + + Q_PROPERTY(QDeclarativeItem *target READ target WRITE setTarget) + //Q_PROPERTY(QDeclarativeItem *newParent READ newParent WRITE setNewParent) + Q_PROPERTY(QDeclarativeItem *via READ via WRITE setVia) + +public: + QDeclarativeParentAnimation(QObject *parent=0); + virtual ~QDeclarativeParentAnimation(); + + QDeclarativeItem *target() const; + void setTarget(QDeclarativeItem *); + + QDeclarativeItem *newParent() const; + void setNewParent(QDeclarativeItem *); + + QDeclarativeItem *via() const; + void setVia(QDeclarativeItem *); + +protected: + virtual void transition(QDeclarativeStateActions &actions, + QDeclarativeProperties &modified, + TransitionDirection direction); + virtual QAbstractAnimation *qtAnimation(); +}; + QT_END_NAMESPACE QML_DECLARE_TYPE(QDeclarativeAbstractAnimation) @@ -461,6 +494,7 @@ QML_DECLARE_TYPE(QDeclarativeSequentialAnimation) QML_DECLARE_TYPE(QDeclarativeParallelAnimation) QML_DECLARE_TYPE(QDeclarativeVector3dAnimation) QML_DECLARE_TYPE(QDeclarativeRotationAnimation) +QML_DECLARE_TYPE(QDeclarativeParentAnimation) QT_END_HEADER diff --git a/src/declarative/util/qdeclarativeanimation_p_p.h b/src/declarative/util/qdeclarativeanimation_p_p.h index fc4e6e6..e582066 100644 --- a/src/declarative/util/qdeclarativeanimation_p_p.h +++ b/src/declarative/util/qdeclarativeanimation_p_p.h @@ -59,6 +59,7 @@ #include "qdeclarativetimeline_p_p.h" #include <qdeclarative.h> +#include <qdeclarativeitem.h> #include <qdeclarativecontext.h> #include <QtCore/QPauseAnimation> @@ -104,6 +105,12 @@ public: : QAbstractAnimation(parent), animAction(action), policy(KeepWhenStopped), running(false) {} ~QActionAnimation() { if (policy == DeleteWhenStopped) { delete animAction; animAction = 0; } } virtual int duration() const { return 0; } + void clearAnimAction() + { + if (policy == DeleteWhenStopped) + delete animAction; + animAction = 0; + } void setAnimAction(QAbstractAnimationAction *action, DeletionPolicy p) { if (state() == Running) @@ -311,8 +318,6 @@ public: static void append_animation(QDeclarativeListProperty<QDeclarativeAbstractAnimation> *list, QDeclarativeAbstractAnimation *role); static void clear_animation(QDeclarativeListProperty<QDeclarativeAbstractAnimation> *list); - static void removeAt_animation(QDeclarativeListProperty<QDeclarativeAbstractAnimation> *list, int i); - static void insert_animation(QDeclarativeListProperty<QDeclarativeAbstractAnimation> *list, int i, QDeclarativeAbstractAnimation *role); QList<QDeclarativeAbstractAnimation *> animations; QAnimationGroup *ag; }; @@ -362,6 +367,25 @@ public: QDeclarativeRotationAnimation::RotationDirection direction; }; +class QDeclarativeParentAnimationPrivate : public QDeclarativeAnimationGroupPrivate +{ + Q_DECLARE_PUBLIC(QDeclarativeParentAnimation) +public: + QDeclarativeParentAnimationPrivate() + : QDeclarativeAnimationGroupPrivate(), target(0), newParent(0), + via(0), topLevelGroup(0), startAction(0), endAction(0) {} + + QDeclarativeItem *target; + QDeclarativeItem *newParent; + QDeclarativeItem *via; + + QSequentialAnimationGroup *topLevelGroup; + QActionAnimation *startAction; + QActionAnimation *endAction; + + QPointF computeTransformOrigin(QDeclarativeItem::TransformOrigin origin, qreal width, qreal height) const; +}; + QT_END_NAMESPACE #endif // QDECLARATIVEANIMATION_P_H diff --git a/src/declarative/util/qdeclarativebehavior.cpp b/src/declarative/util/qdeclarativebehavior.cpp index e0189dc..5352341 100644 --- a/src/declarative/util/qdeclarativebehavior.cpp +++ b/src/declarative/util/qdeclarativebehavior.cpp @@ -70,6 +70,7 @@ public: /*! \qmlclass Behavior QDeclarativeBehavior + \since 4.7 \brief The Behavior element allows you to specify a default animation for a property change. Behaviors provide one way to specify \l{qdeclarativeanimation.html}{animations} in QML. diff --git a/src/declarative/util/qdeclarativeconnection.cpp b/src/declarative/util/qdeclarativeconnection.cpp deleted file mode 100644 index e9ae74b..0000000 --- a/src/declarative/util/qdeclarativeconnection.cpp +++ /dev/null @@ -1,287 +0,0 @@ -/**************************************************************************** -** -** 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 QtDeclarative module 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 "qdeclarativeconnection_p.h" - -#include <qdeclarativeexpression.h> -#include <qdeclarativeboundsignal_p.h> -#include <qdeclarativecontext.h> - -#include <QtCore/qdebug.h> -#include <QtCore/qstringlist.h> - -#include <private/qobject_p.h> - -QT_BEGIN_NAMESPACE - -class QDeclarativeConnectionPrivate : public QObjectPrivate -{ -public: - QDeclarativeConnectionPrivate() : boundsignal(0), signalSender(0), scriptset(false), componentcomplete(false) {} - - QDeclarativeBoundSignal *boundsignal; - QObject *signalSender; - QDeclarativeScriptString script; - bool scriptset; - QString signal; - bool componentcomplete; -}; - -/*! - \qmlclass Connection QDeclarativeConnection - \since 4.7 - \brief A Connection object describes generalized connections to signals. - - When connecting to signals in QML, the usual way is to create an - "on<Signal>" handler that reacts when a signal is received, like this: - - \qml - MouseArea { - onClicked: { foo(x+123,y+456) } - } - \endqml - - However, in some cases, it is not possible to connect to a signal in this - way. For example, JavaScript-in-HTML style signal properties do not allow: - - \list - \i connecting to signals with the same name but different parameters - \i conformance checking that parameters are correctly named - \i multiple connections to the same signal - \i connections outside the scope of the signal sender - \i signals in classes with coincidentally-named on<Signal> properties - \endlist - - When any of these are needed, the Connection object can be used instead. - - For example, the above code can be changed to use a Connection object, - like this: - - \qml - MouseArea { - Connection { - signal: "clicked(x,y)" - script: { foo(x+123,y+456) } - } - } - \endqml - - More generally, the Connection object can be a child of some other object than - the sender of the signal: - - \qml - MouseArea { - id: mr - } - ... - Connection { - sender: mr - signal: "clicked(x,y)" - script: { foo(x+123,y+456) } - } - \endqml -*/ - -/*! - \internal - \class QDeclarativeConnection - \brief The QDeclarativeConnection class describes generalized connections to signals. - -*/ -QDeclarativeConnection::QDeclarativeConnection(QObject *parent) : - QObject(*(new QDeclarativeConnectionPrivate), parent) -{ -} - -QDeclarativeConnection::~QDeclarativeConnection() -{ - Q_D(QDeclarativeConnection); - delete d->boundsignal; -} - -/*! - \qmlproperty Object Connection::sender - This property holds the object that sends the signal. - - By default, the sender is assumed to be the parent of the Connection. -*/ -QObject *QDeclarativeConnection::signalSender() const -{ - Q_D(const QDeclarativeConnection); - return d->signalSender ? d->signalSender : parent(); -} - -void QDeclarativeConnection::setSignalSender(QObject *obj) -{ - Q_D(QDeclarativeConnection); - if (d->signalSender == obj) - return; - disconnectIfValid(); - d->signalSender = obj; - connectIfValid(); -} - -void QDeclarativeConnection::connectIfValid() -{ - Q_D(QDeclarativeConnection); - if (!d->componentcomplete) - return; - // boundsignal must not exist - if ((d->signalSender || parent()) && !d->signal.isEmpty() && d->scriptset) { - // create - // XXX scope? - int sigIdx = -1; - int lparen = d->signal.indexOf(QLatin1Char('(')); - QList<QByteArray> sigparams; - if (lparen >= 0 && d->signal.length() > lparen+2) { - QStringList l = d->signal.mid(lparen+1,d->signal.length()-lparen-2).split(QLatin1Char(',')); - foreach (const QString &s, l) { - sigparams.append(s.trimmed().toUtf8()); - } - } - QString signalname = d->signal.left(lparen); - QObject *sender = d->signalSender ? d->signalSender : parent(); - const QMetaObject *mo = sender->metaObject(); - int methods = mo->methodCount(); - for (int ii = 0; ii < methods; ++ii) { - QMetaMethod method = mo->method(ii); - QString methodName = QString::fromUtf8(method.signature()); - int idx = methodName.indexOf(QLatin1Char('(')); - methodName = methodName.left(idx); - if (methodName == signalname && (lparen<0 || method.parameterNames() == sigparams)) { - sigIdx = ii; - break; - } - } - if (sigIdx < 0) { - // Cannot usefully warn, since could be in middle of - // changing sender and signal. - // XXX need state change transactions to do better - return; - } - - d->boundsignal = new QDeclarativeBoundSignal(qmlContext(this), d->script.script(), sender, mo->method(sigIdx), this); - } -} - -void QDeclarativeConnection::disconnectIfValid() -{ - Q_D(QDeclarativeConnection); - if (!d->componentcomplete) - return; - if ((d->signalSender || parent()) && !d->signal.isEmpty() && d->scriptset) { - // boundsignal must exist - // destroy - delete d->boundsignal; - d->boundsignal = 0; - } -} - -void QDeclarativeConnection::componentComplete() -{ - Q_D(QDeclarativeConnection); - d->componentcomplete=true; - connectIfValid(); -} - - -/*! - \qmlproperty script Connection::script - This property holds the JavaScript executed whenever the signal is sent. -*/ -QDeclarativeScriptString QDeclarativeConnection::script() const -{ - Q_D(const QDeclarativeConnection); - return d->script; -} - -void QDeclarativeConnection::setScript(const QDeclarativeScriptString& script) -{ - Q_D(QDeclarativeConnection); - if ((d->signalSender || parent()) && !d->signal.isEmpty()) { - if (!d->scriptset) { - // mustn't exist - create - d->scriptset = true; - d->script = script; - connectIfValid(); - } else { - // must exist - update - d->script = script; - d->boundsignal->expression()->setExpression(script.script()); - } - } else { - d->scriptset = true; - d->script = script; - } -} - -/*! - \qmlproperty string Connection::signal - This property holds the signal from the sender to which the script is attached. - - The signal's formal parameter names must be given in parentheses: - - \qml -Connection { - signal: "clicked(x,y)" - script: { ... } -} - \endqml -*/ -QString QDeclarativeConnection::signal() const -{ - Q_D(const QDeclarativeConnection); - return d->signal; -} - -void QDeclarativeConnection::setSignal(const QString& sig) -{ - Q_D(QDeclarativeConnection); - if (d->signal == sig) - return; - disconnectIfValid(); - d->signal = sig; - connectIfValid(); -} - - - -QT_END_NAMESPACE diff --git a/src/declarative/util/qdeclarativeconnections.cpp b/src/declarative/util/qdeclarativeconnections.cpp new file mode 100644 index 0000000..0b9e3ab --- /dev/null +++ b/src/declarative/util/qdeclarativeconnections.cpp @@ -0,0 +1,245 @@ +/**************************************************************************** +** +** 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 QtDeclarative module 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 "qdeclarativeconnections_p.h" + +#include <qdeclarativeexpression.h> +#include <qdeclarativeproperty_p.h> +#include <qdeclarativeboundsignal_p.h> +#include <qdeclarativecontext.h> +#include <qdeclarativeinfo.h> + +#include <QtCore/qdebug.h> +#include <QtCore/qstringlist.h> + +#include <private/qobject_p.h> + +QT_BEGIN_NAMESPACE + +class QDeclarativeConnectionsPrivate : public QObjectPrivate +{ +public: + QDeclarativeConnectionsPrivate() : target(0), componentcomplete(false) {} + + QList<QDeclarativeBoundSignal*> boundsignals; + QObject *target; + + bool componentcomplete; + + QByteArray data; +}; + +/*! + \qmlclass Connections QDeclarativeConnections + \since 4.7 + \brief A Connections object describes generalized connections to signals. + + When connecting to signals in QML, the usual way is to create an + "on<Signal>" handler that reacts when a signal is received, like this: + + \qml + MouseArea { + onClicked: { foo(...) } + } + \endqml + + However, in some cases, it is not possible to connect to a signal in this + way, such as: + + \list + \i multiple connections to the same signal + \i connections outside the scope of the signal sender + \i connections to targets not defined in QML + \endlist + + When any of these are needed, the Connections object can be used instead. + + For example, the above code can be changed to use a Connections object, + like this: + + \qml + MouseArea { + Connections { + onClicked: foo(...) + } + } + \endqml + + More generally, the Connections object can be a child of some other object than + the sender of the signal: + + \qml + MouseArea { + id: area + } + ... + Connections { + target: area + onClicked: foo(...) + } + \endqml +*/ + +/*! + \internal + \class QDeclarativeConnections + \brief The QDeclarativeConnections class describes generalized connections to signals. + +*/ +QDeclarativeConnections::QDeclarativeConnections(QObject *parent) : + QObject(*(new QDeclarativeConnectionsPrivate), parent) +{ +} + +QDeclarativeConnections::~QDeclarativeConnections() +{ +} + +/*! + \qmlproperty Object Connections::target + This property holds the object that sends the signal. + + By default, the target is assumed to be the parent of the Connections. +*/ +QObject *QDeclarativeConnections::target() const +{ + Q_D(const QDeclarativeConnections); + return d->target ? d->target : parent(); +} + +void QDeclarativeConnections::setTarget(QObject *obj) +{ + Q_D(QDeclarativeConnections); + if (d->target == obj) + return; + foreach (QDeclarativeBoundSignal *s, d->boundsignals) + delete s; + d->boundsignals.clear(); + d->target = obj; + connectSignals(); + emit targetChanged(); +} + + +QByteArray +QDeclarativeConnectionsParser::compile(const QList<QDeclarativeCustomParserProperty> &props) +{ + QByteArray rv; + QDataStream ds(&rv, QIODevice::WriteOnly); + + for(int ii = 0; ii < props.count(); ++ii) + { + QString propName = QString::fromUtf8(props.at(ii).name()); + if (!propName.startsWith(QLatin1String("on")) || !propName.at(2).isUpper()) { + error(props.at(ii), QDeclarativeConnections::tr("Cannot assign to non-existent property \"%1\"").arg(propName)); + return QByteArray(); + } + + QList<QVariant> values = props.at(ii).assignedValues(); + + for (int i = 0; i < values.count(); ++i) { + const QVariant &value = values.at(i); + + if (value.userType() == qMetaTypeId<QDeclarativeCustomParserNode>()) { + error(props.at(ii), QDeclarativeConnections::tr("Connections: nested objects not allowed")); + return QByteArray(); + } else if (value.userType() == qMetaTypeId<QDeclarativeCustomParserProperty>()) { + error(props.at(ii), QDeclarativeConnections::tr("Connections: syntax error")); + return QByteArray(); + } else { + QDeclarativeParser::Variant v = qvariant_cast<QDeclarativeParser::Variant>(value); + if (v.isScript()) { + ds << propName; + ds << v.asScript(); + } else { + error(props.at(ii), QDeclarativeConnections::tr("Connections: script expected")); + return QByteArray(); + } + } + } + } + + return rv; +} + +void QDeclarativeConnectionsParser::setCustomData(QObject *object, + const QByteArray &data) +{ + QDeclarativeConnectionsPrivate *p = + static_cast<QDeclarativeConnectionsPrivate *>(QObjectPrivate::get(object)); + p->data = data; +} + + +void QDeclarativeConnections::connectSignals() +{ + Q_D(QDeclarativeConnections); + if (!d->componentcomplete) + return; + + QDataStream ds(d->data); + while (!ds.atEnd()) { + QString propName; + ds >> propName; + QString script; + ds >> script; + QDeclarativeProperty prop(target(), propName); + if (!prop.isValid()) { + qmlInfo(this) << tr("Cannot assign to non-existent property \"%1\"").arg(propName); + } else if (prop.type() & QDeclarativeProperty::SignalProperty) { + QDeclarativeBoundSignal *signal = + new QDeclarativeBoundSignal(target(), prop.method(), this); + signal->setExpression(new QDeclarativeExpression(qmlContext(this), script, 0)); + d->boundsignals += signal; + } else { + qmlInfo(this) << tr("Cannot assign to non-existent property \"%1\"").arg(propName); + } + } +} + +void QDeclarativeConnections::componentComplete() +{ + Q_D(QDeclarativeConnections); + d->componentcomplete=true; + connectSignals(); +} + +QT_END_NAMESPACE diff --git a/src/declarative/util/qdeclarativeconnection_p.h b/src/declarative/util/qdeclarativeconnections_p.h index ae2efe9..3eacf12 100644 --- a/src/declarative/util/qdeclarativeconnection_p.h +++ b/src/declarative/util/qdeclarativeconnections_p.h @@ -39,11 +39,12 @@ ** ****************************************************************************/ -#ifndef QDECLARATIVECONNECTION_H -#define QDECLARATIVECONNECTION_H +#ifndef QDECLARATIVECONNECTIONS_H +#define QDECLARATIVECONNECTIONS_H #include <qdeclarative.h> #include <qdeclarativescriptstring.h> +#include <private/qdeclarativecustomparser_p.h> #include <QtCore/qobject.h> #include <QtCore/qstring.h> @@ -56,37 +57,41 @@ QT_MODULE(Declarative) class QDeclarativeBoundSignal; class QDeclarativeContext; -class QDeclarativeConnectionPrivate; -class Q_DECLARATIVE_EXPORT QDeclarativeConnection : public QObject, public QDeclarativeParserStatus +class QDeclarativeConnectionsPrivate; +class Q_DECLARATIVE_EXPORT QDeclarativeConnections : public QObject, public QDeclarativeParserStatus { Q_OBJECT - Q_DECLARE_PRIVATE(QDeclarativeConnection) + Q_DECLARE_PRIVATE(QDeclarativeConnections) Q_INTERFACES(QDeclarativeParserStatus) - Q_PROPERTY(QObject *sender READ signalSender WRITE setSignalSender) - Q_PROPERTY(QDeclarativeScriptString script READ script WRITE setScript) - Q_PROPERTY(QString signal READ signal WRITE setSignal) + Q_PROPERTY(QObject *target READ target WRITE setTarget NOTIFY targetChanged) public: - QDeclarativeConnection(QObject *parent=0); - ~QDeclarativeConnection(); + QDeclarativeConnections(QObject *parent=0); + ~QDeclarativeConnections(); - QObject *signalSender() const; - void setSignalSender(QObject *); - QDeclarativeScriptString script() const; - void setScript(const QDeclarativeScriptString&); - QString signal() const; - void setSignal(const QString&); + QObject *target() const; + void setTarget(QObject *); + +Q_SIGNALS: + void targetChanged(); private: - void disconnectIfValid(); - void connectIfValid(); + void connectSignals(); void componentComplete(); }; +class QDeclarativeConnectionsParser : public QDeclarativeCustomParser +{ +public: + virtual QByteArray compile(const QList<QDeclarativeCustomParserProperty> &); + virtual void setCustomData(QObject *, const QByteArray &); +}; + + QT_END_NAMESPACE -QML_DECLARE_TYPE(QDeclarativeConnection) +QML_DECLARE_TYPE(QDeclarativeConnections) QT_END_HEADER diff --git a/src/declarative/util/qdeclarativeeasefollow.cpp b/src/declarative/util/qdeclarativeeasefollow.cpp index 232dc90..3fa9866 100644 --- a/src/declarative/util/qdeclarativeeasefollow.cpp +++ b/src/declarative/util/qdeclarativeeasefollow.cpp @@ -251,6 +251,7 @@ void QDeclarativeEaseFollowPrivate::tick(int t) /*! \qmlclass EaseFollow QDeclarativeEaseFollow + \since 4.7 \brief The EaseFollow element allows a property to smoothly track a value. The EaseFollow smoothly animates a property's value to a set target value diff --git a/src/declarative/util/qdeclarativefontloader.cpp b/src/declarative/util/qdeclarativefontloader.cpp index ac30384..4d12ae1 100644 --- a/src/declarative/util/qdeclarativefontloader.cpp +++ b/src/declarative/util/qdeclarativefontloader.cpp @@ -75,6 +75,7 @@ public: /*! \qmlclass FontLoader QDeclarativeFontLoader + \since 4.7 \ingroup group_utility \brief This item allows using fonts by name or url. diff --git a/src/declarative/util/qdeclarativelistmodel.cpp b/src/declarative/util/qdeclarativelistmodel.cpp index e78e0e1..e3f26d7 100644 --- a/src/declarative/util/qdeclarativelistmodel.cpp +++ b/src/declarative/util/qdeclarativelistmodel.cpp @@ -70,6 +70,7 @@ static void dump(ModelNode *node, int ind); /*! \qmlclass ListModel QDeclarativeListModel + \since 4.7 \brief The ListModel element defines a free-form list data source. The ListModel is a simple hierarchy of elements containing data roles. The contents can @@ -936,6 +937,7 @@ bool QDeclarativeListModelParser::definesEmptyList(const QString &s) /*! \qmlclass ListElement + \since 4.7 \brief The ListElement element defines a data item in a ListModel. \sa ListModel diff --git a/src/declarative/util/qdeclarativelistmodel_p.h b/src/declarative/util/qdeclarativelistmodel_p.h index 251a31f..8eb6583 100644 --- a/src/declarative/util/qdeclarativelistmodel_p.h +++ b/src/declarative/util/qdeclarativelistmodel_p.h @@ -50,7 +50,7 @@ #include <QtCore/QHash> #include <QtCore/QList> #include <QtCore/QVariant> -#include "../3rdparty/qlistmodelinterface_p.h" +#include <private/qlistmodelinterface_p.h> #include <QtScript/qscriptvalue.h> QT_BEGIN_HEADER diff --git a/src/declarative/util/qdeclarativepackage.cpp b/src/declarative/util/qdeclarativepackage.cpp index 34ae466..d144777 100644 --- a/src/declarative/util/qdeclarativepackage.cpp +++ b/src/declarative/util/qdeclarativepackage.cpp @@ -42,7 +42,7 @@ #include "qdeclarativepackage_p.h" #include <private/qobject_p.h> -#include "private/qdeclarativeguard_p.h" +#include <private/qdeclarativeguard_p.h> QT_BEGIN_NAMESPACE diff --git a/src/declarative/util/qdeclarativespringfollow.cpp b/src/declarative/util/qdeclarativespringfollow.cpp index 012e6a0..6205ab9 100644 --- a/src/declarative/util/qdeclarativespringfollow.cpp +++ b/src/declarative/util/qdeclarativespringfollow.cpp @@ -213,6 +213,7 @@ void QDeclarativeSpringFollowPrivate::stop() /*! \qmlclass SpringFollow QDeclarativeSpringFollow + \since 4.7 \brief The SpringFollow element allows a property to track a value. In example below, \e rect2 will follow \e rect1 moving with a velocity of up to 200: diff --git a/src/declarative/util/qdeclarativestate_p.h b/src/declarative/util/qdeclarativestate_p.h index abdbec5..0c6e7a3 100644 --- a/src/declarative/util/qdeclarativestate_p.h +++ b/src/declarative/util/qdeclarativestate_p.h @@ -53,7 +53,9 @@ QT_BEGIN_NAMESPACE QT_MODULE(Declarative) class QDeclarativeActionEvent; +class QDeclarativeAbstractBinding; class QDeclarativeBinding; +class QDeclarativeExpression; class Q_DECLARATIVE_EXPORT QDeclarativeAction { public: diff --git a/src/declarative/util/qdeclarativestategroup.cpp b/src/declarative/util/qdeclarativestategroup.cpp index 1a7c256..083e87d 100644 --- a/src/declarative/util/qdeclarativestategroup.cpp +++ b/src/declarative/util/qdeclarativestategroup.cpp @@ -84,6 +84,7 @@ public: /*! \qmlclass StateGroup QDeclarativeStateGroup + \since 4.7 \brief The StateGroup element provides state support for non-Item elements. Item (and all dervied elements) provides built in support for states and transitions @@ -406,7 +407,7 @@ void QDeclarativeStateGroupPrivate::setCurrentStateInternal(const QString &state } if (oldState == 0 || newState == 0) { - if (!nullState) { nullState = new QDeclarativeState; QDeclarativeGraphics_setParent_noEvent(nullState, q); } + if (!nullState) { nullState = new QDeclarativeState; QDeclarative_setParent_noEvent(nullState, q); } if (!oldState) oldState = nullState; if (!newState) newState = nullState; } diff --git a/src/declarative/util/qdeclarativestateoperations.cpp b/src/declarative/util/qdeclarativestateoperations.cpp index 9df8658..cea9ad7 100644 --- a/src/declarative/util/qdeclarativestateoperations.cpp +++ b/src/declarative/util/qdeclarativestateoperations.cpp @@ -48,6 +48,7 @@ #include <qdeclarativeanchors_p_p.h> #include <qdeclarativeitem_p.h> #include <qdeclarativeguard_p.h> +#include <qdeclarativenullablevalue_p_p.h> #include <QtCore/qdebug.h> #include <QtGui/qgraphicsitem.h> @@ -62,7 +63,7 @@ class QDeclarativeParentChangePrivate : public QObjectPrivate Q_DECLARE_PUBLIC(QDeclarativeParentChange) public: QDeclarativeParentChangePrivate() : target(0), parent(0), origParent(0), origStackBefore(0), - rewindParent(0), rewindStackBefore(0) {} + rewindParent(0), rewindStackBefore(0) {} QDeclarativeItem *target; QDeclarativeItem *parent; @@ -71,6 +72,13 @@ public: QDeclarativeItem *rewindParent; QDeclarativeItem *rewindStackBefore; + QDeclarativeNullableValue<qreal> x; + QDeclarativeNullableValue<qreal> y; + QDeclarativeNullableValue<qreal> width; + QDeclarativeNullableValue<qreal> height; + QDeclarativeNullableValue<qreal> scale; + QDeclarativeNullableValue<qreal> rotation; + void doChange(QDeclarativeItem *targetParent, QDeclarativeItem *stackBefore = 0); }; @@ -173,6 +181,120 @@ QDeclarativeParentChange::~QDeclarativeParentChange() { } +qreal QDeclarativeParentChange::x() const +{ + Q_D(const QDeclarativeParentChange); + return d->x.isNull ? qreal(0.) : d->x.value; +} + +void QDeclarativeParentChange::setX(qreal x) +{ + Q_D(QDeclarativeParentChange); + d->x = x; +} + +bool QDeclarativeParentChange::xIsSet() const +{ + Q_D(const QDeclarativeParentChange); + return d->x.isValid(); +} + +qreal QDeclarativeParentChange::y() const +{ + Q_D(const QDeclarativeParentChange); + return d->y.isNull ? qreal(0.) : d->y.value; +} + +void QDeclarativeParentChange::setY(qreal y) +{ + Q_D(QDeclarativeParentChange); + d->y = y; +} + +bool QDeclarativeParentChange::yIsSet() const +{ + Q_D(const QDeclarativeParentChange); + return d->y.isValid(); +} + +qreal QDeclarativeParentChange::width() const +{ + Q_D(const QDeclarativeParentChange); + return d->width.isNull ? qreal(0.) : d->width.value; +} + +void QDeclarativeParentChange::setWidth(qreal width) +{ + Q_D(QDeclarativeParentChange); + d->width = width; +} + +bool QDeclarativeParentChange::widthIsSet() const +{ + Q_D(const QDeclarativeParentChange); + return d->width.isValid(); +} + +qreal QDeclarativeParentChange::height() const +{ + Q_D(const QDeclarativeParentChange); + return d->height.isNull ? qreal(0.) : d->height.value; +} + +void QDeclarativeParentChange::setHeight(qreal height) +{ + Q_D(QDeclarativeParentChange); + d->height = height; +} + +bool QDeclarativeParentChange::heightIsSet() const +{ + Q_D(const QDeclarativeParentChange); + return d->height.isValid(); +} + +qreal QDeclarativeParentChange::scale() const +{ + Q_D(const QDeclarativeParentChange); + return d->scale.isNull ? qreal(1.) : d->scale.value; +} + +void QDeclarativeParentChange::setScale(qreal scale) +{ + Q_D(QDeclarativeParentChange); + d->scale = scale; +} + +bool QDeclarativeParentChange::scaleIsSet() const +{ + Q_D(const QDeclarativeParentChange); + return d->scale.isValid(); +} + +qreal QDeclarativeParentChange::rotation() const +{ + Q_D(const QDeclarativeParentChange); + return d->rotation.isNull ? qreal(0.) : d->rotation.value; +} + +void QDeclarativeParentChange::setRotation(qreal rotation) +{ + Q_D(QDeclarativeParentChange); + d->rotation = rotation; +} + +bool QDeclarativeParentChange::rotationIsSet() const +{ + Q_D(const QDeclarativeParentChange); + return d->rotation.isValid(); +} + +QDeclarativeItem *QDeclarativeParentChange::originalParent() const +{ + Q_D(const QDeclarativeParentChange); + return d->origParent; +} + /*! \qmlproperty Item ParentChange::target This property holds the item to be reparented @@ -213,10 +335,43 @@ QDeclarativeStateOperation::ActionList QDeclarativeParentChange::actions() if (!d->target || !d->parent) return ActionList(); + ActionList actions; + QDeclarativeAction a; a.event = this; + actions << a; - return ActionList() << a; + if (d->x.isValid()) { + QDeclarativeAction xa(d->target, QLatin1String("x"), x()); + actions << xa; + } + + if (d->y.isValid()) { + QDeclarativeAction ya(d->target, QLatin1String("y"), y()); + actions << ya; + } + + if (d->scale.isValid()) { + QDeclarativeAction sa(d->target, QLatin1String("scale"), scale()); + actions << sa; + } + + if (d->rotation.isValid()) { + QDeclarativeAction ra(d->target, QLatin1String("rotation"), rotation()); + actions << ra; + } + + if (d->width.isValid()) { + QDeclarativeAction wa(d->target, QLatin1String("width"), width()); + actions << wa; + } + + if (d->height.isValid()) { + QDeclarativeAction ha(d->target, QLatin1String("height"), height()); + actions << ha; + } + + return actions; } class AccessibleFxItem : public QDeclarativeItem diff --git a/src/declarative/util/qdeclarativestateoperations_p.h b/src/declarative/util/qdeclarativestateoperations_p.h index 9204a58..dd4248023 100644 --- a/src/declarative/util/qdeclarativestateoperations_p.h +++ b/src/declarative/util/qdeclarativestateoperations_p.h @@ -45,7 +45,7 @@ #include "qdeclarativestate_p.h" #include <qdeclarativeitem.h> -#include "private/qdeclarativeanchors_p.h" +#include <private/qdeclarativeanchors_p.h> #include <qdeclarativescriptstring.h> QT_BEGIN_HEADER @@ -62,6 +62,12 @@ class Q_DECLARATIVE_EXPORT QDeclarativeParentChange : public QDeclarativeStateOp Q_PROPERTY(QDeclarativeItem *target READ object WRITE setObject) Q_PROPERTY(QDeclarativeItem *parent READ parent WRITE setParent) + Q_PROPERTY(qreal x READ x WRITE setX) + Q_PROPERTY(qreal y READ y WRITE setY) + Q_PROPERTY(qreal width READ width WRITE setWidth) + Q_PROPERTY(qreal height READ height WRITE setHeight) + Q_PROPERTY(qreal scale READ scale WRITE setScale) + Q_PROPERTY(qreal rotation READ rotation WRITE setRotation) public: QDeclarativeParentChange(QObject *parent=0); ~QDeclarativeParentChange(); @@ -72,6 +78,32 @@ public: QDeclarativeItem *parent() const; void setParent(QDeclarativeItem *); + QDeclarativeItem *originalParent() const; + + qreal x() const; + void setX(qreal x); + bool xIsSet() const; + + qreal y() const; + void setY(qreal y); + bool yIsSet() const; + + qreal width() const; + void setWidth(qreal width); + bool widthIsSet() const; + + qreal height() const; + void setHeight(qreal height); + bool heightIsSet() const; + + qreal scale() const; + void setScale(qreal scale); + bool scaleIsSet() const; + + qreal rotation() const; + void setRotation(qreal rotation); + bool rotationIsSet() const; + virtual ActionList actions(); virtual void saveOriginals(); diff --git a/src/declarative/util/qdeclarativesystempalette.cpp b/src/declarative/util/qdeclarativesystempalette.cpp index 1e00f22..d819c27 100644 --- a/src/declarative/util/qdeclarativesystempalette.cpp +++ b/src/declarative/util/qdeclarativesystempalette.cpp @@ -58,6 +58,7 @@ public: /*! \qmlclass SystemPalette QDeclarativeSystemPalette + \since 4.7 \ingroup group_utility \brief The SystemPalette item gives access to the Qt palettes. \sa QPalette diff --git a/src/declarative/util/qdeclarativetimer.cpp b/src/declarative/util/qdeclarativetimer.cpp index 89c461b..d7e02b1 100644 --- a/src/declarative/util/qdeclarativetimer.cpp +++ b/src/declarative/util/qdeclarativetimer.cpp @@ -70,6 +70,7 @@ public: /*! \qmlclass Timer QDeclarativeTimer + \since 4.7 \brief The Timer item triggers a handler at a specified interval. A timer can be used to trigger an action either once, or repeatedly diff --git a/src/declarative/util/qdeclarativeutilmodule.cpp b/src/declarative/util/qdeclarativeutilmodule.cpp index ecaa607c..2b8c7de 100644 --- a/src/declarative/util/qdeclarativeutilmodule.cpp +++ b/src/declarative/util/qdeclarativeutilmodule.cpp @@ -45,7 +45,7 @@ #include "qdeclarativeanimation_p_p.h" #include "qdeclarativebehavior_p.h" #include "qdeclarativebind_p.h" -#include "qdeclarativeconnection_p.h" +#include "qdeclarativeconnections_p.h" #include "qdeclarativedatetimeformatter_p.h" #include "qdeclarativeeasefollow_p.h" #include "qdeclarativefontloader_p.h" @@ -80,7 +80,7 @@ void QDeclarativeUtilModule::defineModule() QML_REGISTER_TYPE(Qt,4,6,Behavior,QDeclarativeBehavior); QML_REGISTER_TYPE(Qt,4,6,Binding,QDeclarativeBind); QML_REGISTER_TYPE(Qt,4,6,ColorAnimation,QDeclarativeColorAnimation); - QML_REGISTER_TYPE(Qt,4,6,Connection,QDeclarativeConnection); + QML_REGISTER_TYPE(Qt,4,6,Connections,QDeclarativeConnections); QML_REGISTER_TYPE(Qt,4,6,DateTimeFormatter,QDeclarativeDateTimeFormatter); QML_REGISTER_TYPE(Qt,4,6,EaseFollow,QDeclarativeEaseFollow);; QML_REGISTER_TYPE(Qt,4,6,FontLoader,QDeclarativeFontLoader); @@ -90,6 +90,7 @@ void QDeclarativeUtilModule::defineModule() QML_REGISTER_TYPE(Qt,4,6,Package,QDeclarativePackage); QML_REGISTER_TYPE(Qt,4,6,ParallelAnimation,QDeclarativeParallelAnimation); QML_REGISTER_TYPE(Qt,4,6,ParentAction,QDeclarativeParentAction); + QML_REGISTER_TYPE(Qt,4,6,ParentAnimation,QDeclarativeParentAnimation); QML_REGISTER_TYPE(Qt,4,6,ParentChange,QDeclarativeParentChange); QML_REGISTER_TYPE(Qt,4,6,PauseAnimation,QDeclarativePauseAnimation); QML_REGISTER_TYPE(Qt,4,6,PropertyAction,QDeclarativePropertyAction); @@ -117,4 +118,5 @@ void QDeclarativeUtilModule::defineModule() QML_REGISTER_CUSTOM_TYPE(Qt, 4,6, ListModel, QDeclarativeListModel, QDeclarativeListModelParser); QML_REGISTER_CUSTOM_TYPE(Qt, 4,6, PropertyChanges, QDeclarativePropertyChanges, QDeclarativePropertyChangesParser); + QML_REGISTER_CUSTOM_TYPE(Qt, 4,6, Connections, QDeclarativeConnections, QDeclarativeConnectionsParser); } diff --git a/src/declarative/util/qdeclarativexmllistmodel_p.h b/src/declarative/util/qdeclarativexmllistmodel_p.h index 132a53c..f0ad4b8 100644 --- a/src/declarative/util/qdeclarativexmllistmodel_p.h +++ b/src/declarative/util/qdeclarativexmllistmodel_p.h @@ -47,7 +47,7 @@ #include <QtCore/qurl.h> -#include "../3rdparty/qlistmodelinterface_p.h" +#include <private/qlistmodelinterface_p.h> QT_BEGIN_HEADER diff --git a/src/declarative/util/util.pri b/src/declarative/util/util.pri index 610eb3f..198e9e5 100644 --- a/src/declarative/util/util.pri +++ b/src/declarative/util/util.pri @@ -5,7 +5,7 @@ SOURCES += \ $$PWD/qdeclarativeview.cpp \ $$PWD/qfxperf.cpp \ $$PWD/qperformancelog.cpp \ - $$PWD/qdeclarativeconnection.cpp \ + $$PWD/qdeclarativeconnections.cpp \ $$PWD/qdeclarativepackage.cpp \ $$PWD/qdeclarativeanimation.cpp \ $$PWD/qdeclarativesystempalette.cpp \ @@ -37,7 +37,7 @@ HEADERS += \ $$PWD/qdeclarativeview.h \ $$PWD/qfxperf_p_p.h \ $$PWD/qperformancelog_p_p.h \ - $$PWD/qdeclarativeconnection_p.h \ + $$PWD/qdeclarativeconnections_p.h \ $$PWD/qdeclarativepackage_p.h \ $$PWD/qdeclarativeanimation_p.h \ $$PWD/qdeclarativeanimation_p_p.h \ diff --git a/src/gui/dialogs/qcolordialog_mac.mm b/src/gui/dialogs/qcolordialog_mac.mm index bdcb872..8af0d2b 100644 --- a/src/gui/dialogs/qcolordialog_mac.mm +++ b/src/gui/dialogs/qcolordialog_mac.mm @@ -96,6 +96,7 @@ QT_USE_NAMESPACE - (void)finishOffWithCode:(NSInteger)result; - (void)showColorPanel; - (void)exec; +- (void)setResultSet:(BOOL)result; @end @implementation QCocoaColorPanelDelegate @@ -158,6 +159,11 @@ QT_USE_NAMESPACE [super dealloc]; } +- (void)setResultSet:(BOOL)result +{ + mResultSet = result; +} + - (BOOL)windowShouldClose:(id)window { Q_UNUSED(window); @@ -320,7 +326,7 @@ QT_USE_NAMESPACE } else { mPriv->colorDialog()->accept(); } - } + } } } @@ -433,7 +439,7 @@ void QColorDialogPrivate::openCocoaColorPanel(const QColor &initial, priv:this]; [colorPanel setDelegate:static_cast<QCocoaColorPanelDelegate *>(delegate)]; } - + [delegate setResultSet:false]; setCocoaPanelColor(initial); [static_cast<QCocoaColorPanelDelegate *>(delegate) showColorPanel]; } diff --git a/src/gui/dialogs/qfontdialog.cpp b/src/gui/dialogs/qfontdialog.cpp index 56580a9..a4bf15d 100644 --- a/src/gui/dialogs/qfontdialog.cpp +++ b/src/gui/dialogs/qfontdialog.cpp @@ -989,34 +989,24 @@ void QFontDialog::open(QObject *receiver, const char *member) void QFontDialog::setVisible(bool visible) { Q_D(QFontDialog); - if (visible) - d->selectedFont = QFont(); - -#if defined(Q_WS_MAC) - bool isCurrentlyVisible = (isVisible() || d->delegate); - - if (!visible == !isCurrentlyVisible) - return; - if (visible) { - if (!(d->opts & DontUseNativeDialog) && QFontDialogPrivate::sharedFontPanelAvailable) { - d->delegate = QFontDialogPrivate::openCocoaFontPanel( - currentFont(), parentWidget(), windowTitle(), options(), d); - QFontDialogPrivate::sharedFontPanelAvailable = false; - return; - } - - setWindowFlags(windowModality() == Qt::WindowModal ? Qt::Sheet : DefaultWindowFlags); - } else { - if (d->delegate) { - QFontDialogPrivate::closeCocoaFontPanel(d->delegate); - d->delegate = 0; - QFontDialogPrivate::sharedFontPanelAvailable = true; + if (testAttribute(Qt::WA_WState_ExplicitShowHide) && !testAttribute(Qt::WA_WState_Hidden)) return; + } else if (testAttribute(Qt::WA_WState_ExplicitShowHide) && testAttribute(Qt::WA_WState_Hidden)) + return; +#ifdef Q_WS_MAC + if (d->canBeNativeDialog()){ + if (d->setVisible_sys(visible)){ + d->nativeDialogInUse = true; + // Set WA_DontShowOnScreen so that QDialog::setVisible(visible) below + // updates the state correctly, but skips showing the non-native version: + setAttribute(Qt::WA_DontShowOnScreen, true); + } else { + d->nativeDialogInUse = false; + setAttribute(Qt::WA_DontShowOnScreen, false); } } -#endif - +#endif // Q_WS_MAC QDialog::setVisible(visible); } @@ -1032,11 +1022,14 @@ void QFontDialog::done(int result) Q_D(QFontDialog); QDialog::done(result); if (result == Accepted) { - d->selectedFont = currentFont(); + // We check if this is the same font we had before, if so we emit currentFontChanged + QFont selectedFont = currentFont(); + if(selectedFont != d->selectedFont) + emit(currentFontChanged(selectedFont)); + d->selectedFont = selectedFont; emit fontSelected(d->selectedFont); - } else { + } else d->selectedFont = QFont(); - } if (d->receiverToDisconnectOnClose) { disconnect(this, SIGNAL(fontSelected(QFont)), d->receiverToDisconnectOnClose, d->memberToDisconnectOnClose); @@ -1045,6 +1038,23 @@ void QFontDialog::done(int result) d->memberToDisconnectOnClose.clear(); } +#ifdef Q_WS_MAC +bool QFontDialogPrivate::canBeNativeDialog() +{ + Q_Q(QFontDialog); + if (nativeDialogInUse) + return true; + if (q->testAttribute(Qt::WA_DontShowOnScreen)) + return false; + if (opts & QFontDialog::DontUseNativeDialog) + return false; + + QLatin1String staticName(QFontDialog::staticMetaObject.className()); + QLatin1String dynamicName(q->metaObject()->className()); + return (staticName == dynamicName); +} +#endif // Q_WS_MAC + /*! \fn QFont QFontDialog::getFont(bool *ok, const QFont &initial, QWidget* parent, const char* name) \since 4.5 diff --git a/src/gui/dialogs/qfontdialog.h b/src/gui/dialogs/qfontdialog.h index e6f209e..6035a3a 100644 --- a/src/gui/dialogs/qfontdialog.h +++ b/src/gui/dialogs/qfontdialog.h @@ -131,6 +131,9 @@ private: Q_PRIVATE_SLOT(d_func(), void _q_styleHighlighted(int)) Q_PRIVATE_SLOT(d_func(), void _q_sizeHighlighted(int)) Q_PRIVATE_SLOT(d_func(), void _q_updateSample()) +#if defined(Q_WS_MAC) + Q_PRIVATE_SLOT(d_func(), void _q_macRunNativeAppModalPanel()) +#endif }; Q_DECLARE_OPERATORS_FOR_FLAGS(QFontDialog::FontDialogOptions) diff --git a/src/gui/dialogs/qfontdialog_mac.mm b/src/gui/dialogs/qfontdialog_mac.mm index 68f5f00..67d32b8 100644 --- a/src/gui/dialogs/qfontdialog_mac.mm +++ b/src/gui/dialogs/qfontdialog_mac.mm @@ -49,6 +49,7 @@ #include <private/qfontengine_p.h> #include <private/qt_cocoa_helpers_mac_p.h> #include <private/qt_mac_p.h> +#include <qabstracteventdispatcher.h> #include <qdebug.h> #import <AppKit/AppKit.h> #import <Foundation/Foundation.h> @@ -372,7 +373,12 @@ static QFont qfontForCocoaFont(NSFont *cocoaFont, const QFont &resolveFont) [NSApp endModalSession:mModalSession]; mModalSession = 0; } - + // Hack alert! + // Since this code path was never intended to be followed when starting from exec + // we need to force the dialog to communicate the new font, otherwise the signal + // won't get emitted. + if(code == NSOKButton) + mPriv->sampleEdit->setFont([self qtFont]); mPriv->done((code == NSOKButton) ? QDialog::Accepted : QDialog::Rejected); } else { [NSApp stopModalWithCode:code]; @@ -567,7 +573,6 @@ void *QFontDialogPrivate::openCocoaFontPanel(const QFont &initial, [ourPanel makeKeyAndOrderFront:ourPanel]; } } - return delegate; } @@ -640,6 +645,145 @@ void QFontDialogPrivate::setFont(void *delegate, const QFont &font) [static_cast<QCocoaFontPanelDelegate *>(delegate) setQtFont:font]; } +void *QFontDialogPrivate::_q_constructNativePanel() +{ + QMacCocoaAutoReleasePool pool; + + bool sharedFontPanelExisted = [NSFontPanel sharedFontPanelExists]; + NSFontPanel *sharedFontPanel = [NSFontPanel sharedFontPanel]; + [sharedFontPanel setHidesOnDeactivate:false]; + + // hack to ensure that QCocoaApplication's validModesForFontPanel: + // implementation is honored + if (!sharedFontPanelExisted) { + [sharedFontPanel makeKeyAndOrderFront:sharedFontPanel]; + [sharedFontPanel close]; + } + + NSPanel *ourPanel = 0; + NSView *stolenContentView = 0; + NSButton *okButton = 0; + NSButton *cancelButton = 0; + + CGFloat dialogExtraWidth = 0.0; + CGFloat dialogExtraHeight = 0.0; + + // compute dialogExtra{Width,Height} + dialogExtraWidth = 2.0 * DialogSideMargin; + dialogExtraHeight = DialogTopMargin + ButtonTopMargin + ButtonMinHeight + + ButtonBottomMargin; + + // compute initial contents rectangle + NSRect contentRect = [sharedFontPanel contentRectForFrameRect:[sharedFontPanel frame]]; + contentRect.size.width += dialogExtraWidth; + contentRect.size.height += dialogExtraHeight; + + // create the new panel + ourPanel = [[NSPanel alloc] initWithContentRect:contentRect + styleMask:StyleMask + backing:NSBackingStoreBuffered + defer:YES]; + [ourPanel setReleasedWhenClosed:YES]; + + stolenContentView = [sharedFontPanel contentView]; + + // steal the font panel's contents view + [stolenContentView retain]; + [sharedFontPanel setContentView:0]; + + { + // create a new content view and add the stolen one as a subview + NSRect frameRect = { { 0.0, 0.0 }, { 0.0, 0.0 } }; + NSView *ourContentView = [[NSView alloc] initWithFrame:frameRect]; + [ourContentView addSubview:stolenContentView]; + + // create OK and Cancel buttons and add these as subviews + okButton = macCreateButton("&OK", ourContentView); + cancelButton = macCreateButton("Cancel", ourContentView); + + [ourPanel setContentView:ourContentView]; + [ourPanel setDefaultButtonCell:[okButton cell]]; + } + // create a delegate and set it + QCocoaFontPanelDelegate *delegate = + [[QCocoaFontPanelDelegate alloc] initWithFontPanel:sharedFontPanel + stolenContentView:stolenContentView + okButton:okButton + cancelButton:cancelButton + priv:this + extraWidth:dialogExtraWidth + extraHeight:dialogExtraHeight]; + [ourPanel setDelegate:delegate]; + [[NSFontManager sharedFontManager] setDelegate:delegate]; +#ifdef QT_MAC_USE_COCOA + [[NSFontManager sharedFontManager] setTarget:delegate]; +#endif + setFont(delegate, QApplication::font()); + + { + // hack to get correct initial layout + NSRect frameRect = [ourPanel frame]; + frameRect.size.width += 1.0; + [ourPanel setFrame:frameRect display:NO]; + frameRect.size.width -= 1.0; + frameRect.size = [delegate windowWillResize:ourPanel toSize:frameRect.size]; + [ourPanel setFrame:frameRect display:NO]; + [ourPanel center]; + } + NSString *title = @"Select font"; + [ourPanel setTitle:title]; + + [delegate setModalSession:[NSApp beginModalSessionForWindow:ourPanel]]; + return delegate; +} + +void QFontDialogPrivate::mac_nativeDialogModalHelp() +{ + // Copied from QFileDialogPrivate + // Do a queued meta-call to open the native modal dialog so it opens after the new + // event loop has started to execute (in QDialog::exec). Using a timer rather than + // a queued meta call is intentional to ensure that the call is only delivered when + // [NSApp run] runs (timers are handeled special in cocoa). If NSApp is not + // running (which is the case if e.g a top-most QEventLoop has been + // interrupted, and the second-most event loop has not yet been reactivated (regardless + // if [NSApp run] is still on the stack)), showing a native modal dialog will fail. + if (nativeDialogInUse) { + Q_Q(QFontDialog); + QTimer::singleShot(1, q, SLOT(_q_macRunNativeAppModalPanel())); + } +} + +// The problem with the native font dialog is that OS X does not +// offer a proper dialog, but a panel (i.e. without Ok and Cancel buttons). +// This means we need to "construct" a native dialog by taking the panel +// and "adding" the buttons. +void QFontDialogPrivate::_q_macRunNativeAppModalPanel() +{ + QBoolBlocker nativeDialogOnTop(QApplicationPrivate::native_modal_dialog_active); + Q_Q(QFontDialog); + QCocoaFontPanelDelegate *delegate = (QCocoaFontPanelDelegate *)_q_constructNativePanel(); + NSWindow *ourPanel = [delegate actualPanel]; + [ourPanel retain]; + int rval = [NSApp runModalForWindow:ourPanel]; + QAbstractEventDispatcher::instance()->interrupt(); + [ourPanel release]; + [delegate cleanUpAfterMyself]; + [delegate release]; + bool isOk = (rval == NSOKButton); + if(isOk) + rescode = QDialog::Accepted; + else + rescode = QDialog::Rejected; +} + +bool QFontDialogPrivate::setVisible_sys(bool visible) +{ + Q_Q(QFontDialog); + if (!visible == q->isHidden()) + return false; + return visible; +} + QT_END_NAMESPACE #endif diff --git a/src/gui/dialogs/qfontdialog_p.h b/src/gui/dialogs/qfontdialog_p.h index ca2b10b..7654a80 100644 --- a/src/gui/dialogs/qfontdialog_p.h +++ b/src/gui/dialogs/qfontdialog_p.h @@ -152,6 +152,12 @@ public: inline QFontDialog *fontDialog() { return q_func(); } void *delegate; + bool nativeDialogInUse; + bool canBeNativeDialog(); + bool setVisible_sys(bool visible); + void *_q_constructNativePanel(); + void _q_macRunNativeAppModalPanel(); + void mac_nativeDialogModalHelp(); static bool sharedFontPanelAvailable; #endif diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index ca20101..5735cd6 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -414,12 +414,6 @@ /*! \enum QGraphicsItem::GraphicsItemChange - ItemVisibleHasChanged, - ItemEnabledHasChanged, - ItemSelectedHasChanged, - ItemParentHasChanged, - ItemSceneHasChanged - This enum describes the state changes that are notified by QGraphicsItem::itemChange(). The notifications are sent as the state changes, and in some cases, adjustments can be made (see the documentation @@ -647,9 +641,16 @@ are children of a modal panel are not blocked. The values are: - \value NonModal The panel is not modal and does not block input to other panels. - \value PanelModal The panel is modal to a single item hierarchy and blocks input to its parent pane, all grandparent panels, and all siblings of its parent and grandparent panels. - \value SceneModal The window is modal to the entire scene and blocks input to all panels. + + \value NonModal The panel is not modal and does not block input to + other panels. This is the default value for panels. + + \value PanelModal The panel is modal to a single item hierarchy + and blocks input to its parent pane, all grandparent panels, and + all siblings of its parent and grandparent panels. + + \value SceneModal The window is modal to the entire scene and + blocks input to all panels. \sa QGraphicsItem::setPanelModality(), QGraphicsItem::panelModality(), QGraphicsItem::ItemIsPanel */ diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp index aaae88e..365afdd 100644 --- a/src/gui/graphicsview/qgraphicsscene.cpp +++ b/src/gui/graphicsview/qgraphicsscene.cpp @@ -693,6 +693,18 @@ void QGraphicsScenePrivate::removeItemHelper(QGraphicsItem *item) --selectionChanging; if (!selectionChanging && selectedItems.size() != oldSelectedItemsSize) emit q->selectionChanged(); + + QHash<QGesture *, QGraphicsObject *>::iterator it; + for (it = gestureTargets.begin(); it != gestureTargets.end();) { + if (it.value() == item) + it = gestureTargets.erase(it); + else + ++it; + } + QGraphicsObject *dummy = static_cast<QGraphicsObject *>(item); + cachedTargetItems.removeOne(dummy); + cachedItemGestures.remove(dummy); + cachedAlreadyDeliveredGestures.remove(dummy); } /*! @@ -801,7 +813,8 @@ void QGraphicsScenePrivate::setFocusItemHelper(QGraphicsItem *item, // do it ourselves. if (item) { for (int i = 0; i < views.size(); ++i) - views.at(i)->inputContext()->reset(); + if (views.at(i)->inputContext()) + views.at(i)->inputContext()->reset(); } } #endif //QT_NO_IM @@ -4680,7 +4693,8 @@ void QGraphicsScenePrivate::drawSubtreeRecursive(QGraphicsItem *item, QPainter * if (widget) item->d_ptr->paintedViewBoundingRects.insert(widget, viewBoundingRect); viewBoundingRect.adjust(-1, -1, 1, 1); - drawItem = exposedRegion ? exposedRegion->intersects(viewBoundingRect) : !viewBoundingRect.isEmpty(); + drawItem = exposedRegion ? exposedRegion->intersects(viewBoundingRect) + : !viewBoundingRect.normalized().isEmpty(); if (!drawItem) { if (!itemHasChildren) return; @@ -5900,45 +5914,51 @@ void QGraphicsScenePrivate::leaveModal(QGraphicsItem *panel) dispatchHoverEvent(&hoverEvent); } -void QGraphicsScenePrivate::getGestureTargets(const QSet<QGesture *> &gestures, - QWidget *viewport, - QMap<Qt::GestureType, QGesture *> *conflictedGestures, - QList<QList<QGraphicsObject *> > *conflictedItems, - QHash<QGesture *, QGraphicsObject *> *normalGestures) +void QGraphicsScenePrivate::gestureTargetsAtHotSpots(const QSet<QGesture *> &gestures, + Qt::GestureFlag flag, + QHash<QGraphicsObject *, QSet<QGesture *> > *targets, + QSet<QGraphicsObject *> *itemsSet, + QSet<QGesture *> *normal, + QSet<QGesture *> *conflicts) { + QSet<QGesture *> normalGestures; // that are not in conflicted state. foreach (QGesture *gesture, gestures) { - Qt::GestureType gestureType = gesture->gestureType(); - if (gesture->hasHotSpot()) { - QPoint screenPos = gesture->hotSpot().toPoint(); - QList<QGraphicsItem *> items = itemsAtPosition(screenPos, QPointF(), viewport); - QList<QGraphicsObject *> result; - for (int j = 0; j < items.size(); ++j) { - QGraphicsItem *item = items.at(j); + if (!gesture->hasHotSpot()) + continue; + const Qt::GestureType gestureType = gesture->gestureType(); + QList<QGraphicsItem *> items = itemsAtPosition(QPoint(), gesture->d_func()->sceneHotSpot, 0); + for (int j = 0; j < items.size(); ++j) { + QGraphicsItem *item = items.at(j); - // Check if the item is blocked by a modal panel and use it as - // a target instead of this item. - (void) item->isBlockedByModalPanel(&item); + // Check if the item is blocked by a modal panel and use it as + // a target instead of this item. + (void) item->isBlockedByModalPanel(&item); - if (QGraphicsObject *itemobj = item->toGraphicsObject()) { - QGraphicsItemPrivate *d = item->d_func(); - if (d->gestureContext.contains(gestureType)) { - result.append(itemobj); + if (QGraphicsObject *itemobj = item->toGraphicsObject()) { + QGraphicsItemPrivate *d = item->QGraphicsItem::d_func(); + QMap<Qt::GestureType, Qt::GestureFlags>::const_iterator it = + d->gestureContext.find(gestureType); + if (it != d->gestureContext.end() && (!flag || (it.value() & flag))) { + if (normalGestures.contains(gesture)) { + normalGestures.remove(gesture); + if (conflicts) + conflicts->insert(gesture); + } else { + normalGestures.insert(gesture); } + if (targets) + (*targets)[itemobj].insert(gesture); + if (itemsSet) + (*itemsSet).insert(itemobj); } - // Don't propagate through panels. - if (item->isPanel()) - break; - } - DEBUG() << "QGraphicsScenePrivate::getGestureTargets:" - << gesture << result; - if (result.size() == 1) { - normalGestures->insert(gesture, result.first()); - } else if (!result.isEmpty()) { - conflictedGestures->insert(gestureType, gesture); - conflictedItems->append(result); } + // Don't propagate through panels. + if (item->isPanel()) + break; } } + if (normal) + *normal = normalGestures; } void QGraphicsScenePrivate::gestureEventHandler(QGestureEvent *event) @@ -5946,266 +5966,215 @@ void QGraphicsScenePrivate::gestureEventHandler(QGestureEvent *event) QWidget *viewport = event->widget(); if (!viewport) return; + QGraphicsView *graphicsView = qobject_cast<QGraphicsView *>(viewport->parent()); + if (!graphicsView) + return; + QList<QGesture *> allGestures = event->gestures(); DEBUG() << "QGraphicsScenePrivate::gestureEventHandler:" << "Delivering gestures:" << allGestures; - typedef QHash<QGraphicsObject *, QList<QGesture *> > GesturesPerItem; - GesturesPerItem gesturesPerItem; - - // gestures that are only supposed to propagate to parent items. - QSet<QGesture *> parentPropagatedGestures; - QSet<QGesture *> startedGestures; + QPoint delta = graphicsView->mapFromGlobal(QPoint()); + QTransform toScene = QTransform::fromTranslate(delta.x(), delta.y()) + * graphicsView->viewportTransform().inverted(); foreach (QGesture *gesture, allGestures) { + // cache scene coordinates of the hot spot + if (gesture->hasHotSpot()) { + gesture->d_func()->sceneHotSpot = toScene.map(gesture->hotSpot()); + } else { + gesture->d_func()->sceneHotSpot = QPointF(); + } + QGraphicsObject *target = gestureTargets.value(gesture, 0); if (!target) { // when we are not in started mode but don't have a target // then the only one interested in gesture is the view/scene if (gesture->state() == Qt::GestureStarted) startedGestures.insert(gesture); - } else { - gesturesPerItem[target].append(gesture); - Qt::GestureFlags flags = - target->QGraphicsItem::d_func()->gestureContext.value(gesture->gestureType()); - if (flags & Qt::IgnoredGesturesPropagateToParent) - parentPropagatedGestures.insert(gesture); } } - QMap<Qt::GestureType, QGesture *> conflictedGestures; - QList<QList<QGraphicsObject *> > conflictedItems; - QHash<QGesture *, QGraphicsObject *> normalGestures; - getGestureTargets(startedGestures, viewport, &conflictedGestures, &conflictedItems, - &normalGestures); - DEBUG() << "QGraphicsScenePrivate::gestureEventHandler:" - << "Conflicting gestures:" << conflictedGestures.values() << conflictedItems; - Q_ASSERT((conflictedGestures.isEmpty() && conflictedItems.isEmpty()) || - (!conflictedGestures.isEmpty() && !conflictedItems.isEmpty())); - - // gestures that were sent as override events, but no one accepted them - QHash<QGesture *, QGraphicsObject *> ignoredConflictedGestures; - - // deliver conflicted gestures as override events first - while (!conflictedGestures.isEmpty() && !conflictedItems.isEmpty()) { - // get the topmost item to deliver the override event - Q_ASSERT(!conflictedItems.isEmpty()); - Q_ASSERT(!conflictedItems.first().isEmpty()); - QGraphicsObject *topmost = conflictedItems.first().first(); - for (int i = 1; i < conflictedItems.size(); ++i) { - QGraphicsObject *item = conflictedItems.at(i).first(); - if (qt_closestItemFirst(item, topmost)) { - topmost = item; - } - } - // get a list of gestures to send to the item - QList<Qt::GestureType> grabbedGestures = - topmost->QGraphicsItem::d_func()->gestureContext.keys(); - QList<QGesture *> gestures; - for (int i = 0; i < grabbedGestures.size(); ++i) { - if (QGesture *g = conflictedGestures.value(grabbedGestures.at(i), 0)) { - gestures.append(g); - if (!ignoredConflictedGestures.contains(g)) - ignoredConflictedGestures.insert(g, topmost); - } - } - - // send gesture override to the topmost item - QGestureEvent ev(gestures); - ev.t = QEvent::GestureOverride; - ev.setWidget(event->widget()); - // mark event and individual gestures as ignored - ev.ignore(); - foreach(QGesture *g, gestures) - ev.setAccepted(g, false); + if (!startedGestures.isEmpty()) { + QSet<QGesture *> normalGestures; // that have just one target + QSet<QGesture *> conflictedGestures; // that have multiple possible targets + gestureTargetsAtHotSpots(startedGestures, Qt::GestureFlag(0), &cachedItemGestures, 0, + &normalGestures, &conflictedGestures); + cachedTargetItems = cachedItemGestures.keys(); + qSort(cachedTargetItems.begin(), cachedTargetItems.end(), qt_closestItemFirst); DEBUG() << "QGraphicsScenePrivate::gestureEventHandler:" - << "delivering override to" - << topmost << gestures; - sendEvent(topmost, &ev); - // mark all accepted gestures to deliver them as normal gesture events - foreach (QGesture *g, gestures) { - if (ev.isAccepted() || ev.isAccepted(g)) { - conflictedGestures.remove(g->gestureType()); - gestureTargets.remove(g); - // add the gesture to the list of normal delivered gestures - normalGestures.insert(g, topmost); + << "Conflicting gestures:" << conflictedGestures; + + // deliver conflicted gestures as override events AND remember + // initial gesture targets + if (!conflictedGestures.isEmpty()) { + for (int i = 0; i < cachedTargetItems.size(); ++i) { + QWeakPointer<QGraphicsObject> item = cachedTargetItems.at(i); + + // get gestures to deliver to the current item + QSet<QGesture *> gestures = conflictedGestures & cachedItemGestures.value(item.data()); + if (gestures.isEmpty()) + continue; + DEBUG() << "QGraphicsScenePrivate::gestureEventHandler:" - << "override was accepted:" - << g << topmost; - ignoredConflictedGestures.remove(g); + << "delivering override to" + << item.data() << gestures; + // send gesture override + QGestureEvent ev(gestures.toList()); + ev.t = QEvent::GestureOverride; + ev.setWidget(event->widget()); + // mark event and individual gestures as ignored + ev.ignore(); + foreach(QGesture *g, gestures) + ev.setAccepted(g, false); + sendEvent(item.data(), &ev); + // mark all accepted gestures to deliver them as normal gesture events + foreach (QGesture *g, gestures) { + if (ev.isAccepted() || ev.isAccepted(g)) { + conflictedGestures.remove(g); + // mark the item as a gesture target + if (item) + gestureTargets.insert(g, item.data()); + DEBUG() << "QGraphicsScenePrivate::gestureEventHandler:" + << "override was accepted:" + << g << item.data(); + } + // remember the first item that received the override event + // as it most likely become a target if noone else accepts + // the override event + if (!gestureTargets.contains(g) && item) + gestureTargets.insert(g, item.data()); + + } + if (conflictedGestures.isEmpty()) + break; } } - // remove the item that we've already delivered from the list - for (int i = 0; i < conflictedItems.size(); ) { - QList<QGraphicsObject *> &items = conflictedItems[i]; - if (items.first() == topmost) { - items.removeFirst(); - if (items.isEmpty()) { - conflictedItems.removeAt(i); - continue; + // remember the initial target item for each gesture that was not in + // the conflicted state. + if (!normalGestures.isEmpty()) { + for (int i = 0; i < cachedTargetItems.size() && !normalGestures.isEmpty(); ++i) { + QGraphicsObject *item = cachedTargetItems.at(i); + + // get gestures to deliver to the current item + foreach (QGesture *g, cachedItemGestures.value(item)) { + if (!gestureTargets.contains(g)) { + gestureTargets.insert(g, item); + normalGestures.remove(g); + } } } - ++i; } } - // put back those started gestures that are not in the conflicted state - // and remember their targets - QHash<QGesture *, QGraphicsObject *>::const_iterator it = normalGestures.begin(), - e = normalGestures.end(); - for (; it != e; ++it) { - QGesture *g = it.key(); - QGraphicsObject *receiver = it.value(); - Q_ASSERT(!gestureTargets.contains(g)); - gestureTargets.insert(g, receiver); - gesturesPerItem[receiver].append(g); - Qt::GestureFlags flags = - receiver->QGraphicsItem::d_func()->gestureContext.value(g->gestureType()); - if (flags & Qt::IgnoredGesturesPropagateToParent) - parentPropagatedGestures.insert(g); - } - it = ignoredConflictedGestures.begin(); - e = ignoredConflictedGestures.end(); - for (; it != e; ++it) { - QGesture *g = it.key(); - QGraphicsObject *receiver = it.value(); - Q_ASSERT(!gestureTargets.contains(g)); - gestureTargets.insert(g, receiver); - gesturesPerItem[receiver].append(g); - Qt::GestureFlags flags = - receiver->QGraphicsItem::d_func()->gestureContext.value(g->gestureType()); - if (flags & Qt::IgnoredGesturesPropagateToParent) - parentPropagatedGestures.insert(g); - } - - DEBUG() << "QGraphicsScenePrivate::gestureEventHandler:" - << "Started gestures:" << normalGestures.keys() - << "All gestures:" << gesturesPerItem.values(); // deliver all gesture events - QList<QGesture *> alreadyIgnoredGestures; - QHash<QGraphicsObject *, QSet<QGesture *> > itemIgnoredGestures; - QList<QGraphicsObject *> targetItems = gesturesPerItem.keys(); - qSort(targetItems.begin(), targetItems.end(), qt_closestItemFirst); - for (int i = 0; i < targetItems.size(); ++i) { - QGraphicsObject *item = targetItems.at(i); - QList<QGesture *> gestures = gesturesPerItem.value(item); - // remove gestures that were already delivered once and were ignored - DEBUG() << "QGraphicsScenePrivate::gestureEventHandler:" - << "already ignored gestures for item" - << item << ":" << itemIgnoredGestures.value(item); - - if (itemIgnoredGestures.contains(item)) // don't deliver twice to the same item - continue; - - QGraphicsItemPrivate *gid = item->QGraphicsItem::d_func(); - foreach(QGesture *g, alreadyIgnoredGestures) { - QMap<Qt::GestureType, Qt::GestureFlags>::iterator contextit = - gid->gestureContext.find(g->gestureType()); - bool deliver = false; - if (contextit != gid->gestureContext.end()) { - if (g->state() == Qt::GestureStarted) { - deliver = true; - } else { - const Qt::GestureFlags flags = contextit.value(); - if (flags & Qt::ReceivePartialGestures) { - QGraphicsObject *originalTarget = gestureTargets.value(g); - Q_ASSERT(originalTarget); - QGraphicsItemPrivate *otd = originalTarget->QGraphicsItem::d_func(); - const Qt::GestureFlags originalTargetFlags = otd->gestureContext.value(g->gestureType()); - if (originalTargetFlags & Qt::IgnoredGesturesPropagateToParent) { - // only deliver to parents of the original target item - deliver = item->isAncestorOf(originalTarget); - } else { - deliver = true; - } - } - } - } - if (deliver) - gestures += g; + QSet<QGesture *> undeliveredGestures; + QSet<QGesture *> parentPropagatedGestures; + foreach (QGesture *gesture, allGestures) { + if (QGraphicsObject *target = gestureTargets.value(gesture, 0)) { + cachedItemGestures[target].insert(gesture); + cachedTargetItems.append(target); + undeliveredGestures.insert(gesture); + QGraphicsItemPrivate *d = target->QGraphicsItem::d_func(); + const Qt::GestureFlags flags = d->gestureContext.value(gesture->gestureType()); + if (flags & Qt::IgnoredGesturesPropagateToParent) + parentPropagatedGestures.insert(gesture); } + } + qSort(cachedTargetItems.begin(), cachedTargetItems.end(), qt_closestItemFirst); + for (int i = 0; i < cachedTargetItems.size(); ++i) { + QWeakPointer<QGraphicsObject> receiver = cachedTargetItems.at(i); + QSet<QGesture *> gestures = + undeliveredGestures & cachedItemGestures.value(receiver.data()); + gestures -= cachedAlreadyDeliveredGestures.value(receiver.data()); + if (gestures.isEmpty()) continue; + + cachedAlreadyDeliveredGestures[receiver.data()] += gestures; + const bool isPanel = receiver.data()->isPanel(); + DEBUG() << "QGraphicsScenePrivate::gestureEventHandler:" << "delivering to" - << item << gestures; - QGestureEvent ev(gestures); + << receiver.data() << gestures; + QGestureEvent ev(gestures.toList()); ev.setWidget(event->widget()); - sendEvent(item, &ev); + sendEvent(receiver.data(), &ev); QSet<QGesture *> ignoredGestures; foreach (QGesture *g, gestures) { if (!ev.isAccepted() && !ev.isAccepted(g)) { - ignoredGestures.insert(g); + // if the gesture was ignored by its target, we will update the + // targetItems list with a possible target items (items that + // want to receive partial gestures). + // ### wont' work if the target was destroyed in the event + // we will just stop delivering it. + if (receiver && receiver.data() == gestureTargets.value(g, 0)) + ignoredGestures.insert(g); } else { - if (g->state() == Qt::GestureStarted) - gestureTargets[g] = item; - } - } - if (!ignoredGestures.isEmpty()) { - // get a list of items under the (current) hotspot of each ignored - // gesture and start delivery again from the beginning - DEBUG() << "QGraphicsScenePrivate::gestureEventHandler:" - << "item has ignored the event, will propagate." - << item << ignoredGestures; - itemIgnoredGestures[item] += ignoredGestures; - alreadyIgnoredGestures = ignoredGestures.toList(); - - // remove gestures that are supposed to be propagated to - // parent items only. - QSet<QGesture *> parentGestures; - for (QSet<QGesture *>::iterator it = ignoredGestures.begin(); - it != ignoredGestures.end();) { - if (parentPropagatedGestures.contains(*it)) { - parentGestures.insert(*it); - it = ignoredGestures.erase(it); - } else { - ++it; + if (receiver && g->state() == Qt::GestureStarted) { + // someone accepted the propagated initial GestureStarted + // event, let it be the new target for all following events. + gestureTargets[g] = receiver.data(); } + undeliveredGestures.remove(g); } + } + if (undeliveredGestures.isEmpty()) + break; - QSet<QGraphicsObject *> itemsSet = targetItems.toSet(); - - foreach(QGesture *g, parentGestures) { - // get the original target for the gesture - QGraphicsItem *item = gestureTargets.value(g, 0); - Q_ASSERT(item); - const Qt::GestureType gestureType = g->gestureType(); - // iterate through parent items of the original gesture - // target item and collect potential receivers - do { - if (QGraphicsObject *obj = item->toGraphicsObject()) { - if (item->d_func()->gestureContext.contains(gestureType)) - itemsSet.insert(obj); + // ignoredGestures list is only filled when delivering to the gesture + // target item, so it is safe to assume item == target. + if (!ignoredGestures.isEmpty() && !isPanel) { + // look for new potential targets for gestures that were ignored + // and should be propagated. + + QSet<QGraphicsObject *> targetsSet = cachedTargetItems.toSet(); + + if (receiver) { + // first if the gesture should be propagated to parents only + for (QSet<QGesture *>::iterator it = ignoredGestures.begin(); + it != ignoredGestures.end();) { + if (parentPropagatedGestures.contains(*it)) { + QGesture *gesture = *it; + const Qt::GestureType gestureType = gesture->gestureType(); + QGraphicsItem *item = receiver.data(); + while (item) { + if (QGraphicsObject *obj = item->toGraphicsObject()) { + if (item->d_func()->gestureContext.contains(gestureType)) { + targetsSet.insert(obj); + cachedItemGestures[obj].insert(gesture); + } + } + if (item->isPanel()) + break; + item = item->parentItem(); + } + + it = ignoredGestures.erase(it); + continue; } - if (item->isPanel()) - break; - } while ((item = item->parentItem())); + ++it; + } } - QMap<Qt::GestureType, QGesture *> conflictedGestures; - QList<QList<QGraphicsObject *> > itemsForConflictedGestures; - QHash<QGesture *, QGraphicsObject *> normalGestures; - getGestureTargets(ignoredGestures, viewport, - &conflictedGestures, &itemsForConflictedGestures, - &normalGestures); - for (int k = 0; k < itemsForConflictedGestures.size(); ++k) - itemsSet += itemsForConflictedGestures.at(k).toSet(); - - targetItems = itemsSet.toList(); + gestureTargetsAtHotSpots(ignoredGestures, Qt::ReceivePartialGestures, + &cachedItemGestures, &targetsSet, 0, 0); - qSort(targetItems.begin(), targetItems.end(), qt_closestItemFirst); + cachedTargetItems = targetsSet.toList(); + qSort(cachedTargetItems.begin(), cachedTargetItems.end(), qt_closestItemFirst); DEBUG() << "QGraphicsScenePrivate::gestureEventHandler:" - << "new targets:" << targetItems; + << "new targets:" << cachedTargetItems; i = -1; // start delivery again continue; } } + foreach (QGesture *g, startedGestures) { if (g->gestureCancelPolicy() == QGesture::CancelAllInContext) { DEBUG() << "lets try to cancel some"; // find gestures in context in Qt::GestureStarted or Qt::GestureUpdated state and cancel them - cancelGesturesForChildren(g, event->widget()); + cancelGesturesForChildren(g); } } @@ -6220,9 +6189,13 @@ void QGraphicsScenePrivate::gestureEventHandler(QGestureEvent *event) break; } } + + cachedTargetItems.clear(); + cachedItemGestures.clear(); + cachedAlreadyDeliveredGestures.clear(); } -void QGraphicsScenePrivate::cancelGesturesForChildren(QGesture *original, QWidget *viewport) +void QGraphicsScenePrivate::cancelGesturesForChildren(QGesture *original) { Q_ASSERT(original); QGraphicsItem *originalItem = gestureTargets.value(original); @@ -6278,8 +6251,7 @@ void QGraphicsScenePrivate::cancelGesturesForChildren(QGesture *original, QWidge if (!g->hasHotSpot()) continue; - QPoint screenPos = g->hotSpot().toPoint(); - QList<QGraphicsItem *> items = itemsAtPosition(screenPos, QPointF(), viewport); + QList<QGraphicsItem *> items = itemsAtPosition(QPoint(), g->d_func()->sceneHotSpot, 0); for (int j = 0; j < items.size(); ++j) { QGraphicsObject *item = items.at(j)->toGraphicsObject(); if (!item) diff --git a/src/gui/graphicsview/qgraphicsscene_p.h b/src/gui/graphicsview/qgraphicsscene_p.h index 04ffe0f..ca8b829 100644 --- a/src/gui/graphicsview/qgraphicsscene_p.h +++ b/src/gui/graphicsview/qgraphicsscene_p.h @@ -294,13 +294,18 @@ public: bool allItemsIgnoreTouchEvents; void enableTouchEventsOnViews(); + QList<QGraphicsObject *> cachedTargetItems; + QHash<QGraphicsObject *, QSet<QGesture *> > cachedItemGestures; + QHash<QGraphicsObject *, QSet<QGesture *> > cachedAlreadyDeliveredGestures; QHash<QGesture *, QGraphicsObject *> gestureTargets; void gestureEventHandler(QGestureEvent *event); - void getGestureTargets(const QSet<QGesture *> &gestures, QWidget *viewport, - QMap<Qt::GestureType, QGesture *> *conflictedGestures, - QList<QList<QGraphicsObject *> > *conflictedItems, - QHash<QGesture *, QGraphicsObject *> *normalGestures); - void cancelGesturesForChildren(QGesture *original, QWidget *viewport); + void gestureTargetsAtHotSpots(const QSet<QGesture *> &gestures, + Qt::GestureFlag flag, + QHash<QGraphicsObject *, QSet<QGesture *> > *targets, + QSet<QGraphicsObject *> *itemsSet = 0, + QSet<QGesture *> *normal = 0, + QSet<QGesture *> *conflicts = 0); + void cancelGesturesForChildren(QGesture *original); void updateInputMethodSensitivityInViews(); diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp index 06b7438..1ced3d7 100644 --- a/src/gui/graphicsview/qgraphicsview.cpp +++ b/src/gui/graphicsview/qgraphicsview.cpp @@ -3400,6 +3400,13 @@ void QGraphicsView::paintEvent(QPaintEvent *event) if (!d->scene->d_func()->painterStateProtection) painter.setWorldTransform(viewTransform); } else { + // Make sure we don't have unpolished items before we draw + if (!d->scene->d_func()->unpolishedItems.isEmpty()) + d->scene->d_func()->_q_polishItems(); + // We reset updateAll here (after we've issued polish events) + // so that we can discard update requests coming from polishEvent(). + d->scene->d_func()->updateAll = false; + // Find all exposed items bool allItems = false; QList<QGraphicsItem *> itemList = d->findItems(d->exposedRegion, &allItems, viewTransform); @@ -3408,9 +3415,25 @@ void QGraphicsView::paintEvent(QPaintEvent *event) const int numItems = itemList.size(); QGraphicsItem **itemArray = &itemList[0]; // Relies on QList internals, but is perfectly valid. QStyleOptionGraphicsItem *styleOptionArray = d->allocStyleOptionsArray(numItems); + QTransform transform(Qt::Uninitialized); for (int i = 0; i < numItems; ++i) { - itemArray[i]->d_ptr->initStyleOption(&styleOptionArray[i], viewTransform, - d->exposedRegion, allItems); + QGraphicsItem *item = itemArray[i]; + QGraphicsItemPrivate *itemd = item->d_ptr.data(); + itemd->initStyleOption(&styleOptionArray[i], viewTransform, d->exposedRegion, allItems); + // Cache the item's area in view coordinates. + // Note that we have to do this here in case the base class implementation + // (QGraphicsScene::drawItems) is not called. If it is, we'll do this + // operation twice, but that's the price one has to pay for using indirect + // painting :-/. + const QRectF brect = adjustedItemEffectiveBoundingRect(item); + if (!itemd->itemIsUntransformable()) { + transform = item->sceneTransform(); + if (viewTransformed) + transform *= viewTransform; + } else { + transform = item->deviceTransform(viewTransform); + } + itemd->paintedViewBoundingRects.insert(d->viewport, transform.mapRect(brect).toRect()); } // Draw the items. drawItems(&painter, numItems, itemArray, styleOptionArray); diff --git a/src/gui/image/qnativeimage.cpp b/src/gui/image/qnativeimage.cpp index 2226901..8446387 100644 --- a/src/gui/image/qnativeimage.cpp +++ b/src/gui/image/qnativeimage.cpp @@ -182,7 +182,7 @@ QNativeImage::QNativeImage(int width, int height, QImage::Format format,bool /* qWarning() << "Error while marking the shared memory segment to be destroyed"; ok = (xshminfo.shmaddr != (char*)-1); if (ok) - image = QImage((uchar *)xshmimg->data, width, height, systemFormat()); + image = QImage((uchar *)xshmimg->data, width, height, format); } xshminfo.readOnly = false; if (ok) diff --git a/src/gui/itemviews/qabstractitemview.cpp b/src/gui/itemviews/qabstractitemview.cpp index adf3ce3..bc6db90 100644 --- a/src/gui/itemviews/qabstractitemview.cpp +++ b/src/gui/itemviews/qabstractitemview.cpp @@ -2119,6 +2119,11 @@ void QAbstractItemView::focusOutEvent(QFocusEvent *event) Q_D(QAbstractItemView); QAbstractScrollArea::focusOutEvent(event); d->viewport->update(); + +#ifdef QT_SOFTKEYS_ENABLED + if(!hasEditFocus()) + removeAction(d->doneSoftKey); +#endif } /*! @@ -2144,7 +2149,12 @@ void QAbstractItemView::keyPressEvent(QKeyEvent *event) if (!hasEditFocus()) { setEditFocus(true); #ifdef QT_SOFTKEYS_ENABLED - addAction(d->doneSoftKey); + // If we can't keypad navigate to any direction, there is no sense to add + // "Done" softkey, since it basically does nothing when there is + // only one widget in screen + if(QWidgetPrivate::canKeypadNavigate(Qt::Horizontal) + || QWidgetPrivate::canKeypadNavigate(Qt::Vertical)) + addAction(d->doneSoftKey); #endif return; } @@ -2160,6 +2170,26 @@ void QAbstractItemView::keyPressEvent(QKeyEvent *event) event->ignore(); } return; + case Qt::Key_Down: + case Qt::Key_Up: + // Let's ignore vertical navigation events, only if there is no other widget + // what can take the focus in vertical direction. This means widget can handle navigation events + // even the widget don't have edit focus, and there is no other widget in requested direction. + if(QApplication::keypadNavigationEnabled() && !hasEditFocus() + && QWidgetPrivate::canKeypadNavigate(Qt::Vertical)) { + event->ignore(); + return; + } + break; + case Qt::Key_Left: + case Qt::Key_Right: + // Similar logic as in up and down events + if(QApplication::keypadNavigationEnabled() && !hasEditFocus() + && (QWidgetPrivate::canKeypadNavigate(Qt::Horizontal) || QWidgetPrivate::inTabWidget(this))) { + event->ignore(); + return; + } + break; default: if (QApplication::keypadNavigationEnabled() && !hasEditFocus()) { event->ignore(); @@ -2245,7 +2275,7 @@ void QAbstractItemView::keyPressEvent(QKeyEvent *event) case Qt::Key_Down: case Qt::Key_Up: #ifdef QT_KEYPAD_NAVIGATION - if (QApplication::keypadNavigationEnabled()) { + if (QApplication::keypadNavigationEnabled() && QWidgetPrivate::canKeypadNavigate(Qt::Vertical)) { event->accept(); // don't change focus break; } @@ -2253,8 +2283,10 @@ void QAbstractItemView::keyPressEvent(QKeyEvent *event) case Qt::Key_Left: case Qt::Key_Right: #ifdef QT_KEYPAD_NAVIGATION - if (QApplication::navigationMode() == Qt::NavigationModeKeypadDirectional) { - event->accept(); // don't change horizontal focus in directional mode + if (QApplication::navigationMode() == Qt::NavigationModeKeypadDirectional + && (QWidgetPrivate::canKeypadNavigate(Qt::Horizontal) + || (QWidgetPrivate::inTabWidget(this) && d->model->columnCount(d->root) > 1))) { + event->accept(); // don't change focus break; } #endif // QT_KEYPAD_NAVIGATION diff --git a/src/gui/itemviews/qabstractproxymodel.cpp b/src/gui/itemviews/qabstractproxymodel.cpp index 40345a7..43a1327 100644 --- a/src/gui/itemviews/qabstractproxymodel.cpp +++ b/src/gui/itemviews/qabstractproxymodel.cpp @@ -127,6 +127,7 @@ void QAbstractProxyModel::setSourceModel(QAbstractItemModel *sourceModel) } else { d->model = QAbstractItemModelPrivate::staticEmptyModel(); } + d->roleNames = d->model->roleNames(); } /*! diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 3e2e6f6..baefdfd 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -597,7 +597,9 @@ TKeyResponse QSymbianControl::OfferKeyEvent(const TKeyEvent& keyEvent, TEventCod TUint s60Keysym = QApplicationPrivate::resolveS60ScanCode(keyEvent.iScanCode, keyEvent.iCode); int keyCode; - if (s60Keysym >= 0x20 && s60Keysym < ENonCharacterKeyBase) { + if (s60Keysym == EKeyNull){ //some key events have 0 in iCode, for them iScanCode should be used + keyCode = qt_keymapper_private()->mapS60ScanCodesToQt(keyEvent.iScanCode); + } else if (s60Keysym >= 0x20 && s60Keysym < ENonCharacterKeyBase) { // Normal characters keys. keyCode = s60Keysym; } else { @@ -1146,6 +1148,10 @@ void qt_init(QApplicationPrivate * /* priv */, int) #endif S60->wsSession().SetAutoFlush(ETrue); +#ifdef Q_SYMBIAN_WINDOW_SIZE_CACHE + TRAP_IGNORE(S60->wsSession().EnableWindowSizeCacheL()); +#endif + S60->updateScreenSize(); diff --git a/src/gui/kernel/qapplication_win.cpp b/src/gui/kernel/qapplication_win.cpp index 31d245f..131b9bb 100644 --- a/src/gui/kernel/qapplication_win.cpp +++ b/src/gui/kernel/qapplication_win.cpp @@ -1905,8 +1905,13 @@ LRESULT CALLBACK QtWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam break; if (!msg.wParam) { +#ifdef Q_WS_WINCE + // On Windows CE, lParam parameter is a constant, not a char pointer. + if (msg.lParam == INI_INTL) { +#else QString area = QString::fromWCharArray((wchar_t*)msg.lParam); if (area == QLatin1String("intl")) { +#endif QLocalePrivate::updateSystemPrivate(); if (!widget->testAttribute(Qt::WA_SetLocale)) widget->dptr()->setLocale_helper(QLocale(), true); diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm index c347410..6a16403 100644 --- a/src/gui/kernel/qcocoaview_mac.mm +++ b/src/gui/kernel/qcocoaview_mac.mm @@ -419,6 +419,8 @@ extern "C" { - (BOOL)isOpaque; { + if (!qwidgetprivate) + return [super isOpaque]; return qwidgetprivate->isOpaque; } @@ -450,7 +452,7 @@ extern "C" { } // Make sure the opengl context is updated on resize. - if (qwidgetprivate->isGLWidget) { + if (qwidgetprivate && qwidgetprivate->isGLWidget) { qwidgetprivate->needWindowChange = true; QEvent event(QEvent::MacGLWindowChange); qApp->sendEvent(qwidget, &event); @@ -459,6 +461,9 @@ extern "C" { - (void)drawRect:(NSRect)aRect { + if (!qwidget) + return; + if (QApplicationPrivate::graphicsSystem() != 0) { if (QWidgetBackingStore *bs = qwidgetprivate->maybeBackingStore()) { // Drawing is handled on the window level @@ -552,12 +557,18 @@ extern "C" { - (BOOL)acceptsFirstMouse:(NSEvent *)theEvent { + if (!qwidget) + return NO; + Q_UNUSED(theEvent); return !qwidget->testAttribute(Qt::WA_MacNoClickThrough); } - (NSView *)hitTest:(NSPoint)aPoint { + if (!qwidget) + return [super hitTest:aPoint]; + if (qwidget->testAttribute(Qt::WA_TransparentForMouseEvents)) return nil; // You cannot hit a transparent for mouse event widget. return [super hitTest:aPoint]; @@ -565,6 +576,9 @@ extern "C" { - (void)updateTrackingAreas { + if (!qwidget) + return; + // [NSView addTrackingArea] is slow, so bail out early if we can: if (NSIsEmptyRect([self visibleRect])) return; @@ -598,6 +612,9 @@ extern "C" { - (void)mouseEntered:(NSEvent *)event { + if (!qwidget) + return; + if (qwidgetprivate->data.in_destructor) return; QEvent enterEvent(QEvent::Enter); @@ -620,6 +637,9 @@ extern "C" { - (void)mouseExited:(NSEvent *)event { + if (!qwidget) + return; + QEvent leaveEvent(QEvent::Leave); NSPoint globalPoint = [[event window] convertBaseToScreen:[event locationInWindow]]; if (!qAppInstance()->activeModalWidget() || QApplicationPrivate::tryModalHelper(qwidget, 0)) { @@ -638,6 +658,9 @@ extern "C" { - (void)flagsChanged:(NSEvent *)theEvent { + if (!qwidget) + return; + QWidget *widgetToGetKey = qwidget; QWidget *popup = qAppInstance()->activePopupWidget(); @@ -649,6 +672,9 @@ extern "C" { - (void)mouseMoved:(NSEvent *)theEvent { + if (!qwidget) + return; + // We always enable mouse tracking for all QCocoaView-s. In cases where we have // child views, we will receive mouseMoved for both parent & the child (if // mouse is over the child). We need to ignore the parent mouseMoved in such @@ -939,6 +965,8 @@ extern "C" { - (void)frameDidChange:(NSNotification *)note { Q_UNUSED(note); + if (!qwidget) + return; if (qwidget->isWindow()) return; NSRect newFrame = [self frame]; @@ -962,7 +990,7 @@ extern "C" { { QMacCocoaAutoReleasePool pool; [super setEnabled:flag]; - if (qwidget->isEnabled() != flag) + if (qwidget && qwidget->isEnabled() != flag) qwidget->setEnabled(flag); } @@ -973,6 +1001,8 @@ extern "C" { - (BOOL)acceptsFirstResponder { + if (!qwidget) + return NO; if (qwidget->isWindow()) return YES; // Always do it, so that windows can accept key press events. return qwidget->focusPolicy() != Qt::NoFocus; @@ -980,6 +1010,8 @@ extern "C" { - (BOOL)resignFirstResponder { + if (!qwidget) + return NO; // Seems like the following test only triggers if this // view is inside a QMacNativeWidget: if (qwidget == QApplication::focusWidget()) @@ -1015,6 +1047,12 @@ extern "C" { return qwidget; } +- (void) qt_clearQWidget +{ + qwidget = 0; + qwidgetprivate = 0; +} + - (BOOL)qt_leftButtonIsRightButton { return leftButtonIsRightButton; @@ -1068,9 +1106,11 @@ extern "C" { - (void)viewWillMoveToWindow:(NSWindow *)window { + if (qwidget == 0) + return; + if (qwidget->windowFlags() & Qt::MSWindowsOwnDC && (window != [self window])) { // OpenGL Widget - // Create a stupid ClearDrawable Event QEvent event(QEvent::MacGLClearDrawable); qApp->sendEvent(qwidget, &event); } @@ -1078,6 +1118,9 @@ extern "C" { - (void)viewDidMoveToWindow { + if (qwidget == 0) + return; + if (qwidget->windowFlags() & Qt::MSWindowsOwnDC && [self window]) { // call update paint event qwidgetprivate->needWindowChange = true; @@ -1273,6 +1316,9 @@ extern "C" { - (NSArray*) validAttributesForMarkedText { + if (qwidget == 0) + return nil; + if (!qwidget->testAttribute(Qt::WA_InputMethodEnabled)) return nil; // Not sure if that's correct, but it's saves a malloc. diff --git a/src/gui/kernel/qcocoaview_mac_p.h b/src/gui/kernel/qcocoaview_mac_p.h index 4bb10c5..33aaa24 100644 --- a/src/gui/kernel/qcocoaview_mac_p.h +++ b/src/gui/kernel/qcocoaview_mac_p.h @@ -103,6 +103,7 @@ Q_GUI_EXPORT - (void)draggedImage:(NSImage *)anImage endedAt:(NSPoint)aPoint operation:(NSDragOperation)operation; - (BOOL)isComposing; - (QWidget *)qt_qwidget; +- (void) qt_clearQWidget; - (BOOL)qt_leftButtonIsRightButton; - (void)qt_setLeftButtonIsRightButton:(BOOL)isSwapped; + (DnDParams*)currentMouseEvent; diff --git a/src/gui/kernel/qgesture_p.h b/src/gui/kernel/qgesture_p.h index dee5592..649a310 100644 --- a/src/gui/kernel/qgesture_p.h +++ b/src/gui/kernel/qgesture_p.h @@ -69,13 +69,13 @@ public: QGesturePrivate() : gestureType(Qt::CustomGesture), state(Qt::NoGesture), isHotSpotSet(false), gestureCancelPolicy(0) - { } Qt::GestureType gestureType; Qt::GestureState state; QPointF hotSpot; + QPointF sceneHotSpot; uint isHotSpotSet : 1; uint gestureCancelPolicy : 2; }; diff --git a/src/gui/kernel/qgesturerecognizer.cpp b/src/gui/kernel/qgesturerecognizer.cpp index 8735d27..c88a9a7 100644 --- a/src/gui/kernel/qgesturerecognizer.cpp +++ b/src/gui/kernel/qgesturerecognizer.cpp @@ -181,6 +181,7 @@ void QGestureRecognizer::reset(QGesture *gesture) QGesturePrivate *d = gesture->d_func(); d->state = Qt::NoGesture; d->hotSpot = QPointF(); + d->sceneHotSpot = QPointF(); d->isHotSpotSet = false; } } diff --git a/src/gui/kernel/qkeymapper_p.h b/src/gui/kernel/qkeymapper_p.h index 09c36c88..3e42d6e 100644 --- a/src/gui/kernel/qkeymapper_p.h +++ b/src/gui/kernel/qkeymapper_p.h @@ -207,12 +207,12 @@ public: KeyboardLayoutItem *keyLayout[256]; #elif defined(Q_WS_QWS) #elif defined(Q_OS_SYMBIAN) -private: - QHash<TUint, int> s60ToQtKeyMap; - void fillKeyMap(); public: QString translateKeyEvent(int keySym, Qt::KeyboardModifiers modifiers); int mapS60KeyToQt(TUint s60key); + int mapS60ScanCodesToQt(TUint s60key); + int mapQtToS60Key(int qtKey); + int mapQtToS60ScanCodes(int qtKey); #endif }; diff --git a/src/gui/kernel/qkeymapper_s60.cpp b/src/gui/kernel/qkeymapper_s60.cpp index 6e21420..fd263ef 100644 --- a/src/gui/kernel/qkeymapper_s60.cpp +++ b/src/gui/kernel/qkeymapper_s60.cpp @@ -46,7 +46,6 @@ QT_BEGIN_NAMESPACE QKeyMapperPrivate::QKeyMapperPrivate() { - fillKeyMap(); } QKeyMapperPrivate::~QKeyMapperPrivate() @@ -74,174 +73,145 @@ QString QKeyMapperPrivate::translateKeyEvent(int keySym, Qt::KeyboardModifiers / return QString(QChar(keySym)); } -void QKeyMapperPrivate::fillKeyMap() +#include <e32keys.h> +struct KeyMapping{ + TKeyCode s60KeyCode; + TStdScanCode s60ScanCode; + Qt::Key qtKey; +}; + +using namespace Qt; + +static const KeyMapping keyMapping[] = { + {EKeyBackspace, EStdKeyBackspace, Key_Backspace}, + {EKeyTab, EStdKeyTab, Key_Tab}, + {EKeyEnter, EStdKeyEnter, Key_Enter}, + {EKeyEscape, EStdKeyEscape, Key_Escape}, + {EKeySpace, EStdKeySpace, Key_Space}, + {EKeyDelete, EStdKeyDelete, Key_Delete}, + {EKeyPrintScreen, EStdKeyPrintScreen, Key_SysReq}, + {EKeyPause, EStdKeyPause, Key_Pause}, + {EKeyHome, EStdKeyHome, Key_Home}, + {EKeyEnd, EStdKeyEnd, Key_End}, + {EKeyPageUp, EStdKeyPageUp, Key_PageUp}, + {EKeyPageDown, EStdKeyPageDown, Key_PageDown}, + {EKeyInsert, EStdKeyInsert, Key_Insert}, + {EKeyLeftArrow, EStdKeyLeftArrow, Key_Left}, + {EKeyRightArrow, EStdKeyRightArrow, Key_Right}, + {EKeyUpArrow, EStdKeyUpArrow, Key_Up}, + {EKeyDownArrow, EStdKeyDownArrow, Key_Down}, + {EKeyLeftShift, EStdKeyLeftShift, Key_Shift}, + {EKeyRightShift, EStdKeyRightShift, Key_Shift}, + {EKeyLeftAlt, EStdKeyLeftAlt, Key_Alt}, + {EKeyRightAlt, EStdKeyRightAlt, Key_AltGr}, + {EKeyLeftCtrl, EStdKeyLeftCtrl, Key_Control}, + {EKeyRightCtrl, EStdKeyRightCtrl, Key_Control}, + {EKeyLeftFunc, EStdKeyLeftFunc, Key_Super_L}, + {EKeyRightFunc, EStdKeyRightFunc, Key_Super_R}, + {EKeyCapsLock, EStdKeyCapsLock, Key_CapsLock}, + {EKeyNumLock, EStdKeyNumLock, Key_NumLock}, + {EKeyScrollLock, EStdKeyScrollLock, Key_ScrollLock}, + {EKeyF1, EStdKeyF1, Key_F1}, + {EKeyF2, EStdKeyF2, Key_F2}, + {EKeyF3, EStdKeyF3, Key_F3}, + {EKeyF4, EStdKeyF4, Key_F4}, + {EKeyF5, EStdKeyF5, Key_F5}, + {EKeyF6, EStdKeyF6, Key_F6}, + {EKeyF7, EStdKeyF7, Key_F7}, + {EKeyF8, EStdKeyF8, Key_F8}, + {EKeyF9, EStdKeyF9, Key_F9}, + {EKeyF10, EStdKeyF10, Key_F10}, + {EKeyF11, EStdKeyF11, Key_F11}, + {EKeyF12, EStdKeyF12, Key_F12}, + {EKeyF13, EStdKeyF13, Key_F13}, + {EKeyF14, EStdKeyF14, Key_F14}, + {EKeyF15, EStdKeyF15, Key_F15}, + {EKeyF16, EStdKeyF16, Key_F16}, + {EKeyF17, EStdKeyF17, Key_F17}, + {EKeyF18, EStdKeyF18, Key_F18}, + {EKeyF19, EStdKeyF19, Key_F19}, + {EKeyF20, EStdKeyF20, Key_F20}, + {EKeyF21, EStdKeyF21, Key_F21}, + {EKeyF22, EStdKeyF22, Key_F22}, + {EKeyF23, EStdKeyF23, Key_F23}, + {EKeyF24, EStdKeyF24, Key_F24}, + {EKeyOff, EStdKeyOff, Key_PowerOff}, +// {EKeyMenu, EStdKeyMenu, Key_Menu}, // Menu is EKeyApplication0 + {EKeyHelp, EStdKeyHelp, Key_Help}, + {EKeyDial, EStdKeyDial, Key_Call}, + {EKeyIncVolume, EStdKeyIncVolume, Key_VolumeUp}, + {EKeyDecVolume, EStdKeyDecVolume, Key_VolumeDown}, + {EKeyDevice0, EStdKeyDevice0, Key_Context1}, // Found by manual testing. + {EKeyDevice1, EStdKeyDevice1, Key_Context2}, // Found by manual testing. + {EKeyDevice3, EStdKeyDevice3, Key_Select}, +// {EKeyDevice7, EStdKeyDevice7, Key_Camera}, //not supported by qt yet + {EKeyApplication0, EStdKeyApplication0, Key_Menu}, // Found by manual testing. + {EKeyApplication1, EStdKeyApplication1, Key_Launch1}, // Found by manual testing. + {EKeyApplication2, EStdKeyApplication2, Key_MediaPlay}, // Found by manual testing. + {EKeyApplication3, EStdKeyApplication3, Key_MediaStop}, // Found by manual testing. + {EKeyApplication4, EStdKeyApplication4, Key_MediaNext}, // Found by manual testing. + {EKeyApplication5, EStdKeyApplication5, Key_MediaPrevious}, // Found by manual testing. + {EKeyApplication6, EStdKeyApplication6, Key_Launch6}, + {EKeyApplication7, EStdKeyApplication7, Key_Launch7}, + {EKeyApplication8, EStdKeyApplication8, Key_Launch8}, + {EKeyApplication9, EStdKeyApplication9, Key_Launch9}, + {EKeyApplicationA, EStdKeyApplicationA, Key_LaunchA}, + {EKeyApplicationB, EStdKeyApplicationB, Key_LaunchB}, + {EKeyApplicationC, EStdKeyApplicationC, Key_LaunchC}, + {EKeyApplicationD, EStdKeyApplicationD, Key_LaunchD}, + {EKeyApplicationE, EStdKeyApplicationE, Key_LaunchE}, + {EKeyApplicationF, EStdKeyApplicationF, Key_LaunchF}, +// {EKeyApplication19, EStdKeyApplication19, Key_CameraFocus}, //not supported by qt yet + {EKeyYes, EStdKeyYes, Key_Yes}, + {EKeyNo, EStdKeyNo, Key_No}, + {TKeyCode(0), TStdScanCode(0), Qt::Key(0)} +}; + +int QKeyMapperPrivate::mapS60KeyToQt(TUint s60key) { - using namespace Qt; - static const struct { - TUint s60Key; - int qtKey; - } map[] = { - {EKeyBell, Key_unknown}, - {EKeyBackspace, Key_Backspace}, - {EKeyTab, Key_Tab}, - {EKeyLineFeed, Key_unknown}, - {EKeyVerticalTab, Key_unknown}, - {EKeyFormFeed, Key_unknown}, - {EKeyEnter, Key_Enter}, - {EKeyEscape, Key_Escape}, - {EKeySpace, Key_Space}, - {EKeyDelete, Key_Delete}, - {EKeyPrintScreen, Key_SysReq}, - {EKeyPause, Key_Pause}, - {EKeyHome, Key_Home}, - {EKeyEnd, Key_End}, - {EKeyPageUp, Key_PageUp}, - {EKeyPageDown, Key_PageDown}, - {EKeyInsert, Key_Insert}, - {EKeyLeftArrow, Key_Left}, - {EKeyRightArrow, Key_Right}, - {EKeyUpArrow, Key_Up}, - {EKeyDownArrow, Key_Down}, - {EKeyLeftShift, Key_Shift}, - {EKeyRightShift, Key_Shift}, - {EKeyLeftAlt, Key_Alt}, - {EKeyRightAlt, Key_AltGr}, - {EKeyLeftCtrl, Key_Control}, - {EKeyRightCtrl, Key_Control}, - {EKeyLeftFunc, Key_Super_L}, - {EKeyRightFunc, Key_Super_R}, - {EKeyCapsLock, Key_CapsLock}, - {EKeyNumLock, Key_NumLock}, - {EKeyScrollLock, Key_ScrollLock}, - {EKeyF1, Key_F1}, - {EKeyF2, Key_F2}, - {EKeyF3, Key_F3}, - {EKeyF4, Key_F4}, - {EKeyF5, Key_F5}, - {EKeyF6, Key_F6}, - {EKeyF7, Key_F7}, - {EKeyF8, Key_F8}, - {EKeyF9, Key_F9}, - {EKeyF10, Key_F10}, - {EKeyF11, Key_F11}, - {EKeyF12, Key_F12}, - {EKeyF13, Key_F13}, - {EKeyF14, Key_F14}, - {EKeyF15, Key_F15}, - {EKeyF16, Key_F16}, - {EKeyF17, Key_F17}, - {EKeyF18, Key_F18}, - {EKeyF19, Key_F19}, - {EKeyF20, Key_F20}, - {EKeyF21, Key_F21}, - {EKeyF22, Key_F22}, - {EKeyF23, Key_F23}, - {EKeyF24, Key_F24}, - {EKeyOff, Key_unknown}, - {EKeyIncContrast, Key_unknown}, - {EKeyDecContrast, Key_unknown}, - {EKeyBacklightOn, Key_unknown}, - {EKeyBacklightOff, Key_unknown}, - {EKeyBacklightToggle, Key_unknown}, - {EKeySliderDown, Key_unknown}, - {EKeySliderUp, Key_unknown}, - {EKeyMenu, Key_Menu}, - {EKeyDictaphonePlay, Key_unknown}, - {EKeyDictaphoneStop, Key_unknown}, - {EKeyDictaphoneRecord, Key_unknown}, - {EKeyHelp, Key_unknown}, - {EKeyDial, Key_Call}, - {EKeyScreenDimension0, Key_unknown}, - {EKeyScreenDimension1, Key_unknown}, - {EKeyScreenDimension2, Key_unknown}, - {EKeyScreenDimension3, Key_unknown}, - {EKeyIncVolume, Key_unknown}, - {EKeyDecVolume, Key_unknown}, - {EKeyDevice0, Key_Context1}, // Found by manual testing, left softkey. - {EKeyDevice1, Key_Context2}, // Found by manual testing. - {EKeyDevice2, Key_unknown}, - {EKeyDevice3, Key_Select}, // Found by manual testing. - {EKeyDevice4, Key_unknown}, - {EKeyDevice5, Key_unknown}, - {EKeyDevice6, Key_unknown}, - {EKeyDevice7, Key_unknown}, - {EKeyDevice8, Key_unknown}, - {EKeyDevice9, Key_unknown}, - {EKeyDeviceA, Key_unknown}, - {EKeyDeviceB, Key_unknown}, - {EKeyDeviceC, Key_unknown}, - {EKeyDeviceD, Key_unknown}, - {EKeyDeviceE, Key_unknown}, - {EKeyDeviceF, Key_unknown}, - {EKeyApplication0, Key_Launch0}, - {EKeyApplication1, Key_Launch1}, - {EKeyApplication2, Key_Launch2}, - {EKeyApplication3, Key_Launch3}, - {EKeyApplication4, Key_Launch4}, - {EKeyApplication5, Key_Launch5}, - {EKeyApplication6, Key_Launch6}, - {EKeyApplication7, Key_Launch7}, - {EKeyApplication8, Key_Launch8}, - {EKeyApplication9, Key_Launch9}, - {EKeyApplicationA, Key_LaunchA}, - {EKeyApplicationB, Key_LaunchB}, - {EKeyApplicationC, Key_LaunchC}, - {EKeyApplicationD, Key_LaunchD}, - {EKeyApplicationE, Key_LaunchE}, - {EKeyApplicationF, Key_LaunchF}, - {EKeyYes, Key_Yes}, - {EKeyNo, Key_No}, - {EKeyIncBrightness, Key_unknown}, - {EKeyDecBrightness, Key_unknown}, - {EKeyKeyboardExtend, Key_unknown}, - {EKeyDevice10, Key_unknown}, - {EKeyDevice11, Key_unknown}, - {EKeyDevice12, Key_unknown}, - {EKeyDevice13, Key_unknown}, - {EKeyDevice14, Key_unknown}, - {EKeyDevice15, Key_unknown}, - {EKeyDevice16, Key_unknown}, - {EKeyDevice17, Key_unknown}, - {EKeyDevice18, Key_unknown}, - {EKeyDevice19, Key_unknown}, - {EKeyDevice1A, Key_unknown}, - {EKeyDevice1B, Key_unknown}, - {EKeyDevice1C, Key_unknown}, - {EKeyDevice1D, Key_unknown}, - {EKeyDevice1E, Key_unknown}, - {EKeyDevice1F, Key_unknown}, - {EKeyApplication10, Key_unknown}, - {EKeyApplication11, Key_unknown}, - {EKeyApplication12, Key_unknown}, - {EKeyApplication13, Key_unknown}, - {EKeyApplication14, Key_unknown}, - {EKeyApplication15, Key_unknown}, - {EKeyApplication16, Key_unknown}, - {EKeyApplication17, Key_unknown}, - {EKeyApplication18, Key_unknown}, - {EKeyApplication19, Key_unknown}, - {EKeyApplication1A, Key_unknown}, - {EKeyApplication1B, Key_unknown}, - {EKeyApplication1C, Key_unknown}, - {EKeyApplication1D, Key_unknown}, - {EKeyApplication1E, Key_unknown}, - {EKeyApplication1F, Key_unknown} - }; - const int mapSize = int(sizeof(map)/sizeof(map[0])); - s60ToQtKeyMap.reserve(mapSize + 5); // +5? docs: Ideally, slightly more than number of items - for (int i = 0; i < mapSize; ++i) - s60ToQtKeyMap.insert(map[i].s60Key, map[i].qtKey); + int res = Qt::Key_unknown; + for (int i = 0; keyMapping[i].s60KeyCode != 0; i++) { + if (keyMapping[i].s60KeyCode == s60key) { + res = keyMapping[i].qtKey; + break; + } + } + return res; } -int QKeyMapperPrivate::mapS60KeyToQt(TUint s60key) +int QKeyMapperPrivate::mapS60ScanCodesToQt(TUint s60scanCode) { - QHash<TUint, int>::const_iterator mapping; - mapping = s60ToQtKeyMap.find(s60key); - if (mapping != s60ToQtKeyMap.end()) { - return *mapping; - } else { - return Qt::Key_unknown; + int res = Qt::Key_unknown; + for (int i = 0; keyMapping[i].s60KeyCode != 0; i++) { + if (keyMapping[i].s60ScanCode == s60scanCode) { + res = keyMapping[i].qtKey; + break; + } } + return res; } +int QKeyMapperPrivate::mapQtToS60Key(int qtKey) +{ + int res = KErrUnknown; + for (int i = 0; keyMapping[i].s60KeyCode != 0; i++) { + if (keyMapping[i].qtKey == qtKey) { + res = keyMapping[i].s60KeyCode; + break; + } + } + return res; +} + +int QKeyMapperPrivate::mapQtToS60ScanCodes(int qtKey) +{ + int res = KErrUnknown; + for (int i = 0; keyMapping[i].s60KeyCode != 0; i++) { + if (keyMapping[i].qtKey == qtKey) { + res = keyMapping[i].s60ScanCode; + break; + } + } + return res; +} QT_END_NAMESPACE diff --git a/src/gui/kernel/qt_cocoa_helpers_mac.mm b/src/gui/kernel/qt_cocoa_helpers_mac.mm index e9fdbda..9560952 100644 --- a/src/gui/kernel/qt_cocoa_helpers_mac.mm +++ b/src/gui/kernel/qt_cocoa_helpers_mac.mm @@ -369,6 +369,16 @@ QMacTabletHash *qt_mac_tablet_hash() } #ifdef QT_MAC_USE_COCOA + +// Clears the QWidget pointer that each QCocoaView holds. +void qt_mac_clearCocoaViewQWidgetPointers(QWidget *widget) +{ + QCocoaView *cocoaView = reinterpret_cast<QCocoaView *>(qt_mac_nativeview_for(widget)); + if (cocoaView && [cocoaView respondsToSelector:@selector(qt_qwidget)]) { + [cocoaView qt_clearQWidget]; + } +} + void qt_dispatchTabletProximityEvent(void * /*NSEvent * */ tabletEvent) { NSEvent *proximityEvent = static_cast<NSEvent *>(tabletEvent); diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index d433048..2f6ec6b 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -118,6 +118,10 @@ #include "private/qgraphicssystem_p.h" #include "private/qgesturemanager_p.h" +#ifdef QT_KEYPAD_NAVIGATION +#include "qtabwidget.h" // Needed in inTabWidget() +#endif // QT_KEYPAD_NAVIGATION + // widget/widget data creation count //#define QWIDGET_EXTRA_DEBUG //#define ALIEN_DEBUG @@ -1468,6 +1472,15 @@ QWidget::~QWidget() d->declarativeData = 0; // don't activate again in ~QObject } +#ifdef QT_MAC_USE_COCOA + // QCocoaView holds a pointer back to this widget. Clear it now + // to make sure it's not followed later on. The lifetime of the + // QCocoaView might exceed the lifetime of this widget in cases + // where Cocoa itself holds references to it. + extern void qt_mac_clearCocoaViewQWidgetPointers(QWidget *); + qt_mac_clearCocoaViewQWidgetPointers(this); +#endif + if (!d->children.isEmpty()) d->deleteChildren(); @@ -11632,6 +11645,45 @@ QWidget *QWidgetPrivate::widgetInNavigationDirection(Direction direction) } return targetWidget; } + +/*! + \internal + + Tells us if it there is currently a reachable widget by keypad navigation in + a certain \a orientation. + If no navigation is possible, occuring key events in that \a orientation may + be used to interact with the value in the focussed widget, even though it + currently has not the editFocus. + + \sa QWidgetPrivate::widgetInNavigationDirection(), QWidget::hasEditFocus() +*/ +bool QWidgetPrivate::canKeypadNavigate(Qt::Orientation orientation) +{ + return orientation == Qt::Horizontal? + (QWidgetPrivate::widgetInNavigationDirection(QWidgetPrivate::DirectionEast) + || QWidgetPrivate::widgetInNavigationDirection(QWidgetPrivate::DirectionWest)) + :(QWidgetPrivate::widgetInNavigationDirection(QWidgetPrivate::DirectionNorth) + || QWidgetPrivate::widgetInNavigationDirection(QWidgetPrivate::DirectionSouth)); +} +/*! + \internal + + Checks, if the \a widget is inside a QTabWidget. If is is inside + one, left/right key events will be used to switch between tabs in keypad + navigation. If there is no QTabWidget, the horizontal key events can be used +to + interact with the value in the focussed widget, even though it currently has + not the editFocus. + + \sa QWidget::hasEditFocus() +*/ +bool QWidgetPrivate::inTabWidget(QWidget *widget) +{ + for (QWidget *tabWidget = widget; tabWidget; tabWidget = tabWidget->parentWidget()) + if (qobject_cast<const QTabWidget*>(tabWidget)) + return true; + return false; +} #endif /*! diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm index da9e9eb..dcb87fc 100644 --- a/src/gui/kernel/qwidget_mac.mm +++ b/src/gui/kernel/qwidget_mac.mm @@ -4543,8 +4543,20 @@ void QWidgetPrivate::scroll_sys(int dx, int dy, const QRect &r) } } + // ### Scroll the dirty regions as well, the following is not correct. + QRegion displayRegion = r.isNull() ? dirtyOnWidget : (dirtyOnWidget & r); + const QVector<QRect> &rects = dirtyOnWidget.rects(); + const QVector<QRect>::const_iterator end = rects.end(); + QVector<QRect>::const_iterator it = rects.begin(); + while (it != end) { + const QRect rect = *it; + const NSRect dirtyRect = NSMakeRect(rect.x() + dx, rect.y() + dy, + rect.width(), rect.height()); + [view setNeedsDisplayInRect:dirtyRect]; + ++it; + } + NSSize deltaSize = NSMakeSize(dx, dy); - [view translateRectsNeedingDisplayInRect:scrollRect by:deltaSize]; [view scrollRect:scrollRect by:deltaSize]; [view setNeedsDisplayInRect:deltaXRect]; [view setNeedsDisplayInRect:deltaYRect]; diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h index 75b4c12..efd9a0a 100644 --- a/src/gui/kernel/qwidget_p.h +++ b/src/gui/kernel/qwidget_p.h @@ -475,6 +475,8 @@ public: #ifdef QT_KEYPAD_NAVIGATION static bool navigateToDirection(Direction direction); static QWidget *widgetInNavigationDirection(Direction direction); + static bool canKeypadNavigate(Qt::Orientation orientation); + static bool inTabWidget(QWidget *widget); #endif void setWindowIconText_sys(const QString &cap); diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index fae26e0..891f4c2 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -46,6 +46,7 @@ #include <private/qdrawhelper_armv6_p.h> #include <private/qdrawhelper_neon_p.h> #include <private/qmath_p.h> +#include <private/qsimd_p.h> #include <qmath.h> QT_BEGIN_NAMESPACE @@ -7720,199 +7721,6 @@ static void qt_memfill16_setup(quint16 *dest, quint16 value, int count); qt_memfill32_func qt_memfill32 = qt_memfill32_setup; qt_memfill16_func qt_memfill16 = qt_memfill16_setup; -enum CPUFeatures { - None = 0, - MMX = 0x1, - MMXEXT = 0x2, - MMX3DNOW = 0x4, - MMX3DNOWEXT = 0x8, - SSE = 0x10, - SSE2 = 0x20, - CMOV = 0x40, - IWMMXT = 0x80, - NEON = 0x100 -}; - -static uint detectCPUFeatures() -{ -#if defined (Q_OS_WINCE) -#if defined (ARM) - if (IsProcessorFeaturePresent(PF_ARM_INTEL_WMMX)) - return IWMMXT; -#elif defined(_X86_) - uint features = 0; -#if defined QT_HAVE_MMX - if (IsProcessorFeaturePresent(PF_MMX_INSTRUCTIONS_AVAILABLE)) - features |= MMX; -#endif -#if defined QT_HAVE_3DNOW - if (IsProcessorFeaturePresent(PF_3DNOW_INSTRUCTIONS_AVAILABLE)) - features |= MMX3DNOW; -#endif - return features; -#endif - return 0; -#elif defined(QT_HAVE_IWMMXT) - // runtime detection only available when running as a previlegied process - static const bool doIWMMXT = !qgetenv("QT_NO_IWMMXT").toInt(); - return doIWMMXT ? IWMMXT : 0; -#elif defined(QT_HAVE_NEON) - static const bool doNEON = !qgetenv("QT_NO_NEON").toInt(); - return doNEON ? NEON : 0; -#else - uint features = 0; -#if defined(__x86_64__) || defined(Q_OS_WIN64) - features = MMX|SSE|SSE2|CMOV; -#elif defined(__ia64__) - features = MMX|SSE|SSE2; -#elif defined(__i386__) || defined(_M_IX86) - unsigned int extended_result = 0; - uint result = 0; - /* see p. 118 of amd64 instruction set manual Vol3 */ -#if defined(Q_CC_GNU) - asm ("push %%ebx\n" - "pushf\n" - "pop %%eax\n" - "mov %%eax, %%ebx\n" - "xor $0x00200000, %%eax\n" - "push %%eax\n" - "popf\n" - "pushf\n" - "pop %%eax\n" - "xor %%edx, %%edx\n" - "xor %%ebx, %%eax\n" - "jz 1f\n" - - "mov $0x00000001, %%eax\n" - "cpuid\n" - "1:\n" - "pop %%ebx\n" - "mov %%edx, %0\n" - : "=r" (result) - : - : "%eax", "%ecx", "%edx" - ); - - asm ("push %%ebx\n" - "pushf\n" - "pop %%eax\n" - "mov %%eax, %%ebx\n" - "xor $0x00200000, %%eax\n" - "push %%eax\n" - "popf\n" - "pushf\n" - "pop %%eax\n" - "xor %%edx, %%edx\n" - "xor %%ebx, %%eax\n" - "jz 2f\n" - - "mov $0x80000000, %%eax\n" - "cpuid\n" - "cmp $0x80000000, %%eax\n" - "jbe 2f\n" - "mov $0x80000001, %%eax\n" - "cpuid\n" - "2:\n" - "pop %%ebx\n" - "mov %%edx, %0\n" - : "=r" (extended_result) - : - : "%eax", "%ecx", "%edx" - ); -#elif defined (Q_OS_WIN) - _asm { - push eax - push ebx - push ecx - push edx - pushfd - pop eax - mov ebx, eax - xor eax, 00200000h - push eax - popfd - pushfd - pop eax - mov edx, 0 - xor eax, ebx - jz skip - - mov eax, 1 - cpuid - mov result, edx - skip: - pop edx - pop ecx - pop ebx - pop eax - } - - _asm { - push eax - push ebx - push ecx - push edx - pushfd - pop eax - mov ebx, eax - xor eax, 00200000h - push eax - popfd - pushfd - pop eax - mov edx, 0 - xor eax, ebx - jz skip2 - - mov eax, 80000000h - cpuid - cmp eax, 80000000h - jbe skip2 - mov eax, 80000001h - cpuid - mov extended_result, edx - skip2: - pop edx - pop ecx - pop ebx - pop eax - } -#endif - - // result now contains the standard feature bits - if (result & (1u << 15)) - features |= CMOV; - if (result & (1u << 23)) - features |= MMX; - if (extended_result & (1u << 22)) - features |= MMXEXT; - if (extended_result & (1u << 31)) - features |= MMX3DNOW; - if (extended_result & (1u << 30)) - features |= MMX3DNOWEXT; - if (result & (1u << 25)) - features |= SSE; - if (result & (1u << 26)) - features |= SSE2; -#endif // i386 - - if (qgetenv("QT_NO_MMX").toInt()) - features ^= MMX; - if (qgetenv("QT_NO_MMXEXT").toInt()) - features ^= MMXEXT; - if (qgetenv("QT_NO_3DNOW").toInt()) - features ^= MMX3DNOW; - if (qgetenv("QT_NO_3DNOWEXT").toInt()) - features ^= MMX3DNOWEXT; - if (qgetenv("QT_NO_SSE").toInt()) - features ^= SSE; - if (qgetenv("QT_NO_SSE2").toInt()) - features ^= SSE2; - - return features; -#endif -} - #if defined(Q_CC_RVCT) && defined(QT_HAVE_ARMV6) // Move these to qdrawhelper_arm.c when all // functions are implemented using arm assembly. @@ -8005,10 +7813,7 @@ static void qt_blend_color_argb_armv6(int count, const QSpan *spans, void *userD void qInitDrawhelperAsm() { - static uint features = 0xffffffff; - if (features != 0xffffffff) - return; - features = detectCPUFeatures(); + const uint features = qDetectCPUFeatures(); qt_memfill32 = qt_memfill_template<quint32, quint32>; qt_memfill16 = qt_memfill_quint16; //qt_memfill_template<quint16, quint16>; diff --git a/src/gui/painting/qdrawhelper_p.h b/src/gui/painting/qdrawhelper_p.h index 2f78b00..f5b17ea 100644 --- a/src/gui/painting/qdrawhelper_p.h +++ b/src/gui/painting/qdrawhelper_p.h @@ -67,15 +67,6 @@ #include "QtGui/qscreen_qws.h" #endif -// Disable MMX and SSE on Mac/PPC builds, or if the compiler -// does not support -Xarch argument passing -#if defined(QT_NO_MAC_XARCH) || (defined(Q_OS_DARWIN) && (defined(__ppc__) || defined(__ppc64__))) -#undef QT_HAVE_SSE2 -#undef QT_HAVE_SSE -#undef QT_HAVE_3DNOW -#undef QT_HAVE_MMX -#endif - QT_BEGIN_NAMESPACE #if defined(Q_CC_MSVC) && _MSCVER <= 1300 && !defined(Q_CC_INTEL) diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index 60265c5..a7c2a0b 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -3213,6 +3213,9 @@ QRasterPaintEnginePrivate::getPenFunc(const QRectF &rect, return isUnclipped(rect, penWidth) ? data->unclipped_blend : data->blend; } +/*! + \reimp +*/ void QRasterPaintEngine::drawStaticTextItem(QStaticTextItem *textItem) { ensurePen(); diff --git a/src/gui/styles/qstylesheetstyle.cpp b/src/gui/styles/qstylesheetstyle.cpp index 1f9fc32..bc1bece 100644 --- a/src/gui/styles/qstylesheetstyle.cpp +++ b/src/gui/styles/qstylesheetstyle.cpp @@ -5749,6 +5749,13 @@ QRect QStyleSheetStyle::subElementRect(SubElement se, const QStyleOption *opt, c return positionRect(w, subRule, subRule2, pe, opt->rect, opt->direction); } +#ifndef QT_NO_TOOLBAR + case SE_ToolBarHandle: + if (hasStyleRule(w, PseudoElement_ToolBarHandle)) + return ParentStyle::subElementRect(se, opt, w); + break; +#endif //QT_NO_TOOLBAR + default: break; } diff --git a/src/gui/widgets/qabstractslider.cpp b/src/gui/widgets/qabstractslider.cpp index 4bd7b5a..2888490 100644 --- a/src/gui/widgets/qabstractslider.cpp +++ b/src/gui/widgets/qabstractslider.cpp @@ -47,9 +47,6 @@ #ifndef QT_NO_ACCESSIBILITY #include "qaccessible.h" #endif -#ifdef QT_KEYPAD_NAVIGATION -#include "qtabwidget.h" // Needed in inTabWidget() -#endif // QT_KEYPAD_NAVIGATION #include <limits.h> QT_BEGIN_NAMESPACE @@ -702,7 +699,7 @@ bool QAbstractSliderPrivate::scrollByDelta(Qt::Orientation orientation, Qt::Keyb stepsToScroll = qBound(-pageStep, int(offset * pageStep), pageStep); offset_accumulated = 0; } else { - // Calculate how many lines to scroll. Depending on what delta is (and + // Calculate how many lines to scroll. Depending on what delta is (and // offset), we might end up with a fraction (e.g. scroll 1.3 lines). We can // only scroll whole lines, so we keep the reminder until next event. qreal stepsToScrollF = @@ -749,45 +746,7 @@ void QAbstractSlider::wheelEvent(QWheelEvent * e) } #endif -#ifdef QT_KEYPAD_NAVIGATION -/*! - \internal - - Tells us if it there is currently a reachable widget by keypad navigation in - a certain \a orientation. - If no navigation is possible, occuring key events in that \a orientation may - be used to interact with the value in the focussed widget, even though it - currently has not the editFocus. - \sa QWidgetPrivate::widgetInNavigationDirection(), QWidget::hasEditFocus() -*/ -inline static bool canKeypadNavigate(Qt::Orientation orientation) -{ - return orientation == Qt::Horizontal? - (QWidgetPrivate::widgetInNavigationDirection(QWidgetPrivate::DirectionEast) - || QWidgetPrivate::widgetInNavigationDirection(QWidgetPrivate::DirectionWest)) - :(QWidgetPrivate::widgetInNavigationDirection(QWidgetPrivate::DirectionNorth) - || QWidgetPrivate::widgetInNavigationDirection(QWidgetPrivate::DirectionSouth)); -} -/*! - \internal - - Checks, if the \a widget is inside a QTabWidget. If is is inside - one, left/right key events will be used to switch between tabs in keypad - navigation. If there is no QTabWidget, the horizontal key events can be used to - interact with the value in the focussed widget, even though it currently has - not the editFocus. - - \sa QWidget::hasEditFocus() -*/ -inline static bool inTabWidget(QWidget *widget) -{ - for (QWidget *tabWidget = widget; tabWidget; tabWidget = tabWidget->parentWidget()) - if (qobject_cast<const QTabWidget*>(tabWidget)) - return true; - return false; -} -#endif // QT_KEYPAD_NAVIGATION /*! \reimp */ @@ -853,7 +812,8 @@ void QAbstractSlider::keyPressEvent(QKeyEvent *ev) if (QApplication::keypadNavigationEnabled() && (!hasEditFocus() && QApplication::navigationMode() == Qt::NavigationModeKeypadTabOrder || d->orientation == Qt::Vertical - || !hasEditFocus() && (canKeypadNavigate(Qt::Horizontal) || inTabWidget(this)))) { + || !hasEditFocus() + && (QWidgetPrivate::canKeypadNavigate(Qt::Horizontal) || QWidgetPrivate::inTabWidget(this)))) { ev->ignore(); return; } @@ -872,7 +832,8 @@ void QAbstractSlider::keyPressEvent(QKeyEvent *ev) if (QApplication::keypadNavigationEnabled() && (!hasEditFocus() && QApplication::navigationMode() == Qt::NavigationModeKeypadTabOrder || d->orientation == Qt::Vertical - || !hasEditFocus() && (canKeypadNavigate(Qt::Horizontal) || inTabWidget(this)))) { + || !hasEditFocus() + && (QWidgetPrivate::canKeypadNavigate(Qt::Horizontal) || QWidgetPrivate::inTabWidget(this)))) { ev->ignore(); return; } @@ -892,7 +853,7 @@ void QAbstractSlider::keyPressEvent(QKeyEvent *ev) if (QApplication::keypadNavigationEnabled() && (QApplication::navigationMode() == Qt::NavigationModeKeypadTabOrder || d->orientation == Qt::Horizontal - || !hasEditFocus() && canKeypadNavigate(Qt::Vertical))) { + || !hasEditFocus() && QWidgetPrivate::canKeypadNavigate(Qt::Vertical))) { ev->ignore(); break; } @@ -905,7 +866,7 @@ void QAbstractSlider::keyPressEvent(QKeyEvent *ev) if (QApplication::keypadNavigationEnabled() && (QApplication::navigationMode() == Qt::NavigationModeKeypadTabOrder || d->orientation == Qt::Horizontal - || !hasEditFocus() && canKeypadNavigate(Qt::Vertical))) { + || !hasEditFocus() && QWidgetPrivate::canKeypadNavigate(Qt::Vertical))) { ev->ignore(); break; } diff --git a/src/gui/widgets/qdockarealayout.cpp b/src/gui/widgets/qdockarealayout.cpp index 2b8cf59..c1b1ea3 100644 --- a/src/gui/widgets/qdockarealayout.cpp +++ b/src/gui/widgets/qdockarealayout.cpp @@ -2993,8 +2993,7 @@ bool QDockAreaLayout::restoreDockWidget(QDockWidget *dockWidget) QRect r = constrainedRect(placeHolder->topLevelRect, desktop.screenGeometry(dockWidget)); dockWidget->d_func()->setWindowState(true, true, r); } - dockWidget->show(); -// dockWidget->setVisible(!placeHolder->hidden); + dockWidget->setVisible(!placeHolder->hidden); #ifdef Q_WS_X11 if (placeHolder->window) // gets rid of the X11BypassWindowManager window flag dockWidget->d_func()->setWindowState(true); diff --git a/src/gui/widgets/qlineedit_p.cpp b/src/gui/widgets/qlineedit_p.cpp index 1aa7a2b..2c76a5c 100644 --- a/src/gui/widgets/qlineedit_p.cpp +++ b/src/gui/widgets/qlineedit_p.cpp @@ -129,7 +129,7 @@ void QLineEditPrivate::_q_editFocusChange(bool e) void QLineEditPrivate::_q_selectionChanged() { Q_Q(QLineEdit); - if (control->preeditAreaText().isEmpty()) { + if (!control->text().isEmpty() && control->preeditAreaText().isEmpty()) { QStyleOptionFrameV2 opt; q->initStyleOption(&opt); bool showCursor = control->hasSelectedText() ? diff --git a/src/multimedia/audio/qaudioinput.cpp b/src/multimedia/audio/qaudioinput.cpp index 45cafc1..fd892dd 100644 --- a/src/multimedia/audio/qaudioinput.cpp +++ b/src/multimedia/audio/qaudioinput.cpp @@ -190,18 +190,18 @@ QAudioInput::~QAudioInput() Passing a QIODevice allows the data to be transfered without any extra code. All that is required is to open the QIODevice. + If able to successfully get audio data from the systems audio device the + state() is set to either QAudio::ActiveState or QAudio::IdleState, + error() is set to QAudio::NoError and the stateChanged() signal is emitted. + + If a problem occurs during this process the error() is set to QAudio::OpenError, + state() is set to QAudio::StoppedState and stateChanged() signal is emitted. + \sa QIODevice */ void QAudioInput::start(QIODevice* device) { - /* - -If currently not StoppedState, stop - -If previous start was push mode, delete internal QIODevice. - -open audio input. - If ok, NoError and ActiveState, else OpenError and StoppedState. - -emit stateChanged() - */ d->start(device); } @@ -210,19 +210,18 @@ void QAudioInput::start(QIODevice* device) transfer. This QIODevice can be used to read() audio data directly. + If able to access the systems audio device the state() is set to + QAudio::IdleState, error() is set to QAudio::NoError + and the stateChanged() signal is emitted. + + If a problem occurs during this process the error() is set to QAudio::OpenError, + state() is set to QAudio::StoppedState and stateChanged() signal is emitted. + \sa QIODevice */ QIODevice* QAudioInput::start() { - /* - -If currently not StoppedState, stop - -If no internal QIODevice, create one. - -open audio input. - -If ok, NoError and IdleState, else OpenError and StoppedState - -emit stateChanged() - -return internal QIODevice - */ return d->start(0); } @@ -236,17 +235,14 @@ QAudioFormat QAudioInput::format() const } /*! - Stops the audio input. + Stops the audio input, detaching from the system resource. + + Sets error() to QAudio::NoError, state() to QAudio::StoppedState and + emit stateChanged() signal. */ void QAudioInput::stop() { - /* - -If StoppedState, return - -set to StoppedState - -detach from audio device - -emit stateChanged() - */ d->stop(); } @@ -256,42 +252,32 @@ void QAudioInput::stop() void QAudioInput::reset() { - /* - -drop all buffered audio, set buffers to zero. - -call stop() - */ d->reset(); } /*! Stops processing audio data, preserving buffered audio data. + + Sets error() to QAudio::NoError, state() to QAudio::SuspendedState and + emit stateChanged() signal. */ void QAudioInput::suspend() { - /* - -If not ActiveState|IdleState, return - -stop processing audio, saving all buffered audio data - -set NoError and SuspendedState - -emit stateChanged() - */ d->suspend(); } /*! Resumes processing audio data after a suspend(). + + Sets error() to QAudio::NoError. + Sets state() to QAudio::ActiveState if you previously called start(QIODevice*). + Sets state() to QAudio::IdleState if you previously called start(). + emits stateChanged() signal. */ void QAudioInput::resume() { - /* - -If SuspendedState, return - -resume audio - -(PULL MODE): set ActiveState, NoError - -(PUSH MODE): set IdleState, NoError - -kick start audio if needed - -emit stateChanged() - */ d->resume(); } @@ -327,6 +313,9 @@ int QAudioInput::bufferSize() const /*! Returns the amount of audio data available to read in bytes. + + NOTE: returned value is only valid while in QAudio::ActiveState or QAudio::IdleState + state, otherwise returns zero. */ int QAudioInput::bytesReady() const @@ -352,7 +341,10 @@ int QAudioInput::periodSize() const /*! Sets the interval for notify() signal to be emitted. This is based on the \a ms of audio data processed - not on actual real-time. The resolution of the timer is platform specific. + not on actual real-time. + The minimum resolution of the timer is platform specific and values + should be checked with notifyInterval() to confirm actual value + being used. */ void QAudioInput::setNotifyInterval(int ms) diff --git a/src/multimedia/audio/qaudioinput_alsa_p.cpp b/src/multimedia/audio/qaudioinput_alsa_p.cpp index 26e46b3..6010f3c 100644 --- a/src/multimedia/audio/qaudioinput_alsa_p.cpp +++ b/src/multimedia/audio/qaudioinput_alsa_p.cpp @@ -217,9 +217,11 @@ QIODevice* QAudioInputPrivate::start(QIODevice* device) //set to pull mode pullMode = true; audioSource = device; + deviceState = QAudio::ActiveState; } else { //set to push mode pullMode = false; + deviceState = QAudio::IdleState; audioSource = new InputPrivate(this); audioSource->open(QIODevice::ReadOnly | QIODevice::Unbuffered); } @@ -413,7 +415,6 @@ bool QAudioInputPrivate::open() timer->start(period_time*chunks/2000); errorState = QAudio::NoError; - deviceState = QAudio::ActiveState; totalTimeValue = 0; @@ -439,7 +440,7 @@ int QAudioInputPrivate::bytesReady() const if(resuming) return period_size; - if(deviceState != QAudio::ActiveState) + if(deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState) return 0; int frames = snd_pcm_avail_update(handle); if((int)frames > (int)buffer_frames) @@ -450,8 +451,8 @@ int QAudioInputPrivate::bytesReady() const qint64 QAudioInputPrivate::read(char* data, qint64 len) { - Q_UNUSED(data) Q_UNUSED(len) + // Read in some audio data and write it to QIODevice, pull mode if ( !handle ) return 0; @@ -468,7 +469,7 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len) if (readFrames >= 0) { err = snd_pcm_frames_to_bytes(handle, readFrames); #ifdef DEBUG_AUDIO - qDebug()<<QString::fromLatin1("PULL: read in bytes = %1 (frames=%2)").arg(err).arg(readFrames).toLatin1().constData(); + qDebug()<<QString::fromLatin1("read in bytes = %1 (frames=%2)").arg(err).arg(readFrames).toLatin1().constData(); #endif break; } else if((readFrames == -EAGAIN) || (readFrames == -EINTR)) { @@ -489,28 +490,46 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len) if(err > 0) { // got some send it onward #ifdef DEBUG_AUDIO - qDebug()<<"PULL: frames to write to QIODevice = "<< + qDebug()<<"frames to write to QIODevice = "<< snd_pcm_bytes_to_frames( handle, (int)err )<<" ("<<err<<") bytes"; #endif - if(deviceState != QAudio::ActiveState) + if(deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState) return 0; + if (pullMode) { + qint64 l = audioSource->write(audioBuffer,err); + if(l < 0) { + close(); + errorState = QAudio::IOError; + deviceState = QAudio::StoppedState; + emit stateChanged(deviceState); + } else if(l == 0) { + if (deviceState != QAudio::IdleState) { + errorState = QAudio::NoError; + deviceState = QAudio::IdleState; + emit stateChanged(deviceState); + } + } else { + totalTimeValue += err; + resuming = false; + if (deviceState != QAudio::ActiveState) { + errorState = QAudio::NoError; + deviceState = QAudio::ActiveState; + emit stateChanged(deviceState); + } + } + return l; - qint64 l = audioSource->write(audioBuffer,err); - if(l < 0) { - close(); - errorState = QAudio::IOError; - deviceState = QAudio::StoppedState; - emit stateChanged(deviceState); - } else if(l == 0) { - errorState = QAudio::NoError; - deviceState = QAudio::IdleState; } else { - totalTimeValue += snd_pcm_bytes_to_frames(handle, err)*1000000/settings.frequency(); + memcpy(data,audioBuffer,err); + totalTimeValue += err; resuming = false; - errorState = QAudio::NoError; - deviceState = QAudio::ActiveState; + if (deviceState != QAudio::ActiveState) { + errorState = QAudio::NoError; + deviceState = QAudio::ActiveState; + emit stateChanged(deviceState); + } + return err; } - return l; } return 0; } @@ -569,7 +588,7 @@ int QAudioInputPrivate::notifyInterval() const qint64 QAudioInputPrivate::processedUSecs() const { - return totalTimeValue; + return qint64(1000000) * totalTimeValue / settings.frequency(); } void QAudioInputPrivate::suspend() @@ -617,34 +636,10 @@ bool QAudioInputPrivate::deviceReady() qint64 QAudioInputPrivate::elapsedUSecs() const { - if(!handle) - return 0; - if (deviceState == QAudio::StoppedState) return 0; -#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) - snd_pcm_status_t* status; - snd_pcm_status_alloca(&status); - - snd_timestamp_t t1,t2; - if( snd_pcm_status(handle, status) >= 0) { - snd_pcm_status_get_tstamp(status,&t1); - snd_pcm_status_get_trigger_tstamp(status,&t2); - t1.tv_sec-=t2.tv_sec; - - signed long l = (signed long)t1.tv_usec - (signed long)t2.tv_usec; - if(l < 0) { - t1.tv_sec--; - l = -l; - l %= 1000000; - } - return ((t1.tv_sec * 1000000)+l); - } else - return 0; -#else return clockStamp.elapsed()*1000; -#endif } void QAudioInputPrivate::reset() @@ -670,43 +665,7 @@ InputPrivate::~InputPrivate() qint64 InputPrivate::readData( char* data, qint64 len) { - // push mode, user read() called - if((audioDevice->state() != QAudio::ActiveState) && !audioDevice->resuming) - return 0; - - int readFrames; - int count=0, err = 0; - - while(count < 5) { - int frames = snd_pcm_bytes_to_frames(audioDevice->handle, len); - readFrames = snd_pcm_readi(audioDevice->handle, data, frames); - if (readFrames >= 0) { - err = snd_pcm_frames_to_bytes(audioDevice->handle, readFrames); -#ifdef DEBUG_AUDIO - qDebug()<<QString::fromLatin1("PUSH: read in bytes = %1 (frames=%2)").arg(err).arg(readFrames).toLatin1().constData(); -#endif - break; - } else if((readFrames == -EAGAIN) || (readFrames == -EINTR)) { - audioDevice->errorState = QAudio::IOError; - err = 0; - break; - } else { - if(readFrames == -EPIPE) { - audioDevice->errorState = QAudio::UnderrunError; - err = snd_pcm_prepare(audioDevice->handle); - } else if(readFrames == -ESTRPIPE) { - err = snd_pcm_prepare(audioDevice->handle); - } - if(err != 0) break; - } - count++; - } - if(err > 0 && readFrames > 0) { - audioDevice->totalTimeValue += readFrames*1000/audioDevice->settings.frequency()*1000; - audioDevice->deviceState = QAudio::ActiveState; - return err; - } - return 0; + return audioDevice->read(data,len); } qint64 InputPrivate::writeData(const char* data, qint64 len) diff --git a/src/multimedia/audio/qaudioinput_win32_p.cpp b/src/multimedia/audio/qaudioinput_win32_p.cpp index cc4fdee..594f6ca 100644 --- a/src/multimedia/audio/qaudioinput_win32_p.cpp +++ b/src/multimedia/audio/qaudioinput_win32_p.cpp @@ -192,9 +192,11 @@ QIODevice* QAudioInputPrivate::start(QIODevice* device) //set to pull mode pullMode = true; audioSource = device; + deviceState = QAudio::ActiveState; } else { //set to push mode pullMode = false; + deviceState = QAudio::IdleState; audioSource = new InputPrivate(this); audioSource->open(QIODevice::ReadOnly | QIODevice::Unbuffered); } @@ -311,7 +313,6 @@ bool QAudioInputPrivate::open() elapsedTimeOffset = 0; totalTimeValue = 0; errorState = QAudio::NoError; - deviceState = QAudio::ActiveState; return true; } @@ -320,9 +321,9 @@ void QAudioInputPrivate::close() if(deviceState == QAudio::StoppedState) return; + deviceState = QAudio::StoppedState; waveInReset(hWaveIn); waveInClose(hWaveIn); - deviceState = QAudio::StoppedState; int count = 0; while(!finished && count < 500) { @@ -357,7 +358,6 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len) char* p = data; qint64 l = 0; qint64 written = 0; - while(!done) { // Read in some audio data if(waveBlocks[header].dwBytesRecorded > 0 && waveBlocks[header].dwFlags & WHDR_DONE) { @@ -378,11 +378,12 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len) errorState = QAudio::IOError; } else { - totalTimeValue += waveBlocks[header].dwBytesRecorded - /((settings.channels()*settings.sampleSize()/8)) - *10000/settings.frequency()*100; + totalTimeValue += waveBlocks[header].dwBytesRecorded; errorState = QAudio::NoError; - deviceState = QAudio::ActiveState; + if (deviceState != QAudio::ActiveState) { + deviceState = QAudio::ActiveState; + emit stateChanged(deviceState); + } resuming = false; } } else { @@ -392,16 +393,17 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len) #ifdef DEBUG_AUDIO qDebug()<<"IN: "<<waveBlocks[header].dwBytesRecorded<<", OUT: "<<l; #endif - totalTimeValue += waveBlocks[header].dwBytesRecorded - /((settings.channels()*settings.sampleSize()/8)) - *10000/settings.frequency()*100; + totalTimeValue += waveBlocks[header].dwBytesRecorded; errorState = QAudio::NoError; - deviceState = QAudio::ActiveState; + if (deviceState != QAudio::ActiveState) { + deviceState = QAudio::ActiveState; + emit stateChanged(deviceState); + } resuming = false; } } else { //no data, not ready yet, next time - return 0; + break; } waveInUnprepareHeader(hWaveIn,&waveBlocks[header], sizeof(WAVEHDR)); @@ -510,7 +512,13 @@ int QAudioInputPrivate::notifyInterval() const qint64 QAudioInputPrivate::processedUSecs() const { - return totalTimeValue; + if (deviceState == QAudio::StoppedState) + return 0; + qint64 result = qint64(1000000) * totalTimeValue / + (settings.channels()*(settings.sampleSize()/8)) / + settings.frequency(); + + return result; } void QAudioInputPrivate::suspend() @@ -540,6 +548,9 @@ bool QAudioInputPrivate::deviceReady() QTime now(QTime::currentTime()); qDebug()<<now.second()<<"s "<<now.msec()<<"ms :deviceReady() INPUT"; #endif + if(deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState) + return true; + if(pullMode) { // reads some audio data and writes it to QIODevice read(0,0); @@ -548,8 +559,6 @@ bool QAudioInputPrivate::deviceReady() InputPrivate* a = qobject_cast<InputPrivate*>(audioSource); a->trigger(); } - if(deviceState != QAudio::ActiveState) - return true; if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) { emit notify(); @@ -582,7 +591,8 @@ InputPrivate::~InputPrivate() {} qint64 InputPrivate::readData( char* data, qint64 len) { // push mode, user read() called - if(audioDevice->deviceState != QAudio::ActiveState) + if(audioDevice->deviceState != QAudio::ActiveState && + audioDevice->deviceState != QAudio::IdleState) return 0; // Read in some audio data return audioDevice->read(data,len); diff --git a/src/multimedia/audio/qaudiooutput.cpp b/src/multimedia/audio/qaudiooutput.cpp index afd8a84..b0b5244 100644 --- a/src/multimedia/audio/qaudiooutput.cpp +++ b/src/multimedia/audio/qaudiooutput.cpp @@ -202,18 +202,18 @@ QAudioFormat QAudioOutput::format() const Passing a QIODevice allows the data to be transfered without any extra code. All that is required is to open the QIODevice. + If able to successfully output audio data to the systems audio device the + state() is set to QAudio::ActiveState, error() is set to QAudio::NoError + and the stateChanged() signal is emitted. + + If a problem occurs during this process the error() is set to QAudio::OpenError, + state() is set to QAudio::StoppedState and stateChanged() signal is emitted. + \sa QIODevice */ void QAudioOutput::start(QIODevice* device) { - /* - -If currently not StoppedState, stop. - -If previous start was push mode, delete internal QIODevice. - -open audio output. - -If ok, NoError and ActiveState, else OpenError and StoppedState - -emit stateChanged() - */ d->start(device); } @@ -221,34 +221,30 @@ void QAudioOutput::start(QIODevice* device) Returns a pointer to the QIODevice being used to handle the data transfer. This QIODevice can be used to write() audio data directly. + If able to access the systems audio device the state() is set to + QAudio::IdleState, error() is set to QAudio::NoError + and the stateChanged() signal is emitted. + + If a problem occurs during this process the error() is set to QAudio::OpenError, + state() is set to QAudio::StoppedState and stateChanged() signal is emitted. + \sa QIODevice */ QIODevice* QAudioOutput::start() { - /* - -If currently not StoppedState, stop. - -If no internal QIODevice, create one. - -open audio output. - -If ok, NoError and IdleState, else OpenError and StoppedState - -emit stateChanged() - -return internal QIODevice - */ return d->start(0); } /*! - Stops the audio output. + Stops the audio output, detaching from the system resource. + + Sets error() to QAudio::NoError, state() to QAudio::StoppedState and + emit stateChanged() signal. */ void QAudioOutput::stop() { - /* - -If StoppedState, return - -set to StoppedState - -detach from audio device - -emit stateChanged() - */ d->stop(); } @@ -258,55 +254,44 @@ void QAudioOutput::stop() void QAudioOutput::reset() { - /* - -drop all buffered audio, set buffers to zero. - -call stop() - */ d->reset(); } /*! Stops processing audio data, preserving buffered audio data. + + Sets error() to QAudio::NoError, state() to QAudio::SuspendedState and + emit stateChanged() signal. */ void QAudioOutput::suspend() { - /* - -If not ActiveState|IdleState, return - -stop processing audio, saving all buffered audio data - -set NoError and SuspendedState - -emit stateChanged() - */ d->suspend(); } /*! Resumes processing audio data after a suspend(). + + Sets error() to QAudio::NoError. + Sets state() to QAudio::ActiveState if you previously called start(QIODevice*). + Sets state() to QAudio::IdleState if you previously called start(). + emits stateChanged() signal. */ void QAudioOutput::resume() { - /* - -If SuspendedState, return - -resume audio - -(PULL MODE): set ActiveState, NoError - -(PUSH MODE): set IdleState, NoError - -kick start audio if needed - -emit stateChanged() - */ d->resume(); } /*! Returns the free space available in bytes in the audio buffer. + + NOTE: returned value is only valid while in QAudio::ActiveState or QAudio::IdleState + state, otherwise returns zero. */ int QAudioOutput::bytesFree() const { - /* - -If not ActiveState|IdleState, return 0 - -return space available in audio buffer in bytes - */ return d->bytesFree(); } @@ -353,7 +338,10 @@ int QAudioOutput::bufferSize() const /*! Sets the interval for notify() signal to be emitted. This is based on the \a ms of audio data processed - not on actual real-time. The resolution of the timer is platform specific. + not on actual real-time. + The minimum resolution of the timer is platform specific and values + should be checked with notifyInterval() to confirm actual value + being used. */ void QAudioOutput::setNotifyInterval(int ms) diff --git a/src/multimedia/audio/qaudiooutput_alsa_p.cpp b/src/multimedia/audio/qaudiooutput_alsa_p.cpp index 7b89cef..b127103 100644 --- a/src/multimedia/audio/qaudiooutput_alsa_p.cpp +++ b/src/multimedia/audio/qaudiooutput_alsa_p.cpp @@ -259,6 +259,7 @@ void QAudioOutputPrivate::stop() { if(deviceState == QAudio::StoppedState) return; + errorState = QAudio::NoError; deviceState = QAudio::StoppedState; close(); emit stateChanged(deviceState); @@ -494,10 +495,13 @@ qint64 QAudioOutputPrivate::write( const char *data, qint64 len ) err = snd_pcm_writei( handle, data, frames ); } if(err > 0) { - totalTimeValue += err*1000000/settings.frequency(); + totalTimeValue += err; resuming = false; errorState = QAudio::NoError; - deviceState = QAudio::ActiveState; + if (deviceState != QAudio::ActiveState) { + deviceState = QAudio::ActiveState; + emit stateChanged(deviceState); + } return snd_pcm_frames_to_bytes( handle, err ); } else err = xrun_recovery(err); @@ -542,7 +546,7 @@ int QAudioOutputPrivate::notifyInterval() const qint64 QAudioOutputPrivate::processedUSecs() const { - return totalTimeValue; + return qint64(1000000) * totalTimeValue / settings.frequency(); } void QAudioOutputPrivate::resume() @@ -562,10 +566,8 @@ void QAudioOutputPrivate::resume() bytesAvailable = (int)snd_pcm_frames_to_bytes(handle, buffer_frames); } resuming = true; - if(pullMode) - deviceState = QAudio::ActiveState; - else - deviceState = QAudio::IdleState; + + deviceState = QAudio::ActiveState; errorState = QAudio::NoError; timer->start(period_time/1000); @@ -637,7 +639,9 @@ bool QAudioOutputPrivate::deviceReady() // Got some data to output if(deviceState != QAudio::ActiveState) return true; - write(audioBuffer,l); + qint64 bytesWritten = write(audioBuffer,l); + if (bytesWritten != l) + audioSource->seek(audioSource->pos()-(l-bytesWritten)); bytesAvailable = bytesFree(); } else if(l == 0) { @@ -645,9 +649,11 @@ bool QAudioOutputPrivate::deviceReady() bytesAvailable = bytesFree(); if(bytesAvailable > snd_pcm_frames_to_bytes(handle, buffer_frames-period_frames)) { // Underrun - errorState = QAudio::UnderrunError; - deviceState = QAudio::IdleState; - emit stateChanged(deviceState); + if (deviceState != QAudio::IdleState) { + errorState = QAudio::UnderrunError; + deviceState = QAudio::IdleState; + emit stateChanged(deviceState); + } } } else if(l < 0) { @@ -655,8 +661,17 @@ bool QAudioOutputPrivate::deviceReady() errorState = QAudio::IOError; emit stateChanged(deviceState); } - } else + } else { bytesAvailable = bytesFree(); + if(bytesAvailable > snd_pcm_frames_to_bytes(handle, buffer_frames-period_frames)) { + // Underrun + if (deviceState != QAudio::IdleState) { + errorState = QAudio::UnderrunError; + deviceState = QAudio::IdleState; + emit stateChanged(deviceState); + } + } + } if(deviceState != QAudio::ActiveState) return true; @@ -671,35 +686,10 @@ bool QAudioOutputPrivate::deviceReady() qint64 QAudioOutputPrivate::elapsedUSecs() const { - if(!handle) - return 0; - if (deviceState == QAudio::StoppedState) return 0; -#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) - snd_pcm_status_t* status; - snd_pcm_status_alloca(&status); - - snd_timestamp_t t1,t2; - if( snd_pcm_status(handle, status) >= 0) { - snd_pcm_status_get_tstamp(status,&t1); - snd_pcm_status_get_trigger_tstamp(status,&t2); - t1.tv_sec-=t2.tv_sec; - - signed long l = (signed long)t1.tv_usec - (signed long)t2.tv_usec; - if(l < 0) { - t1.tv_sec--; - l = -l; - l %= 1000000; - } - return ((t1.tv_sec * 1000000)+l); - } else - return 0; -#else return clockStamp.elapsed()*1000; -#endif - return 0; } void QAudioOutputPrivate::reset() diff --git a/src/multimedia/audio/qaudiooutput_win32_p.cpp b/src/multimedia/audio/qaudiooutput_win32_p.cpp index bce45c1..6200160 100644 --- a/src/multimedia/audio/qaudiooutput_win32_p.cpp +++ b/src/multimedia/audio/qaudiooutput_win32_p.cpp @@ -211,6 +211,13 @@ bool QAudioOutputPrivate::open() QTime now(QTime::currentTime()); qDebug()<<now.second()<<"s "<<now.msec()<<"ms :open()"; #endif + if (!(settings.frequency() >= 8000 && settings.frequency() <= 48000)) { + errorState = QAudio::OpenError; + deviceState = QAudio::StoppedState; + emit stateChanged(deviceState); + qWarning("QAudioOutput: open error, frequency out of range."); + return false; + } if(buffer_size == 0) { // Default buffer size, 200ms, default period size is 40ms buffer_size = settings.frequency()*settings.channels()*(settings.sampleSize()/8)*0.2; @@ -289,6 +296,7 @@ void QAudioOutputPrivate::close() return; deviceState = QAudio::StoppedState; + errorState = QAudio::NoError; int delay = (buffer_size-bytesFree())*1000/(settings.frequency() *settings.channels()*(settings.sampleSize()/8)); waveOutReset(hWaveOut); @@ -340,12 +348,20 @@ int QAudioOutputPrivate::notifyInterval() const qint64 QAudioOutputPrivate::processedUSecs() const { - return totalTimeValue; + if (deviceState == QAudio::StoppedState) + return 0; + qint64 result = qint64(1000000) * totalTimeValue / + (settings.channels()*(settings.sampleSize()/8)) / + settings.frequency(); + + return result; } qint64 QAudioOutputPrivate::write( const char *data, qint64 len ) { // Write out some audio data + if (deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState) + return 0; char* p = (char*)data; int l = (int)len; @@ -385,13 +401,16 @@ qint64 QAudioOutputPrivate::write( const char *data, qint64 len ) current->dwBufferLength,waveFreeBlockCount); LeaveCriticalSection(&waveOutCriticalSection); #endif - totalTimeValue += current->dwBufferLength - /(settings.channels()*(settings.sampleSize()/8)) - *1000000/settings.frequency();; + totalTimeValue += current->dwBufferLength; waveCurrentBlock++; waveCurrentBlock %= buffer_size/period_size; current = &waveBlocks[waveCurrentBlock]; current->dwUser = 0; + errorState = QAudio::NoError; + if (deviceState != QAudio::ActiveState) { + deviceState = QAudio::ActiveState; + emit stateChanged(deviceState); + } } return (len-l); } @@ -409,8 +428,11 @@ void QAudioOutputPrivate::resume() void QAudioOutputPrivate::suspend() { - if(deviceState == QAudio::ActiveState) { + if(deviceState == QAudio::ActiveState || deviceState == QAudio::IdleState) { + int delay = (buffer_size-bytesFree())*1000/(settings.frequency() + *settings.channels()*(settings.sampleSize()/8)); waveOutPause(hWaveOut); + Sleep(delay+10); deviceState = QAudio::SuspendedState; errorState = QAudio::NoError; emit stateChanged(deviceState); @@ -465,8 +487,16 @@ bool QAudioOutputPrivate::deviceReady() int l = audioSource->read(audioBuffer,input); if(l > 0) { int out= write(audioBuffer,l); - if(out > 0) - deviceState = QAudio::ActiveState; + if(out > 0) { + if (deviceState != QAudio::ActiveState) { + deviceState = QAudio::ActiveState; + emit stateChanged(deviceState); + } + } + if ( out < l) { + // Didnt write all data + audioSource->seek(audioSource->pos()-(l-out)); + } if(startup) waveOutRestart(hWaveOut); } else if(l == 0) { @@ -478,16 +508,28 @@ bool QAudioOutputPrivate::deviceReady() LeaveCriticalSection(&waveOutCriticalSection); if(check == buffer_size/period_size) { errorState = QAudio::UnderrunError; - deviceState = QAudio::IdleState; - emit stateChanged(deviceState); + if (deviceState != QAudio::IdleState) { + deviceState = QAudio::IdleState; + emit stateChanged(deviceState); + } } } else if(l < 0) { bytesAvailable = bytesFree(); errorState = QAudio::IOError; } + } else { + int buffered; + EnterCriticalSection(&waveOutCriticalSection); + buffered = waveFreeBlockCount; + LeaveCriticalSection(&waveOutCriticalSection); + errorState = QAudio::UnderrunError; + if (buffered >= buffer_size/period_size && deviceState == QAudio::ActiveState) { + deviceState = QAudio::IdleState; + emit stateChanged(deviceState); + } } - if(deviceState != QAudio::ActiveState) + if(deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState) return true; if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) { diff --git a/src/multimedia/base/qgraphicsvideoitem.cpp b/src/multimedia/base/qgraphicsvideoitem.cpp index 21ba8c9..d5ca9e8 100644 --- a/src/multimedia/base/qgraphicsvideoitem.cpp +++ b/src/multimedia/base/qgraphicsvideoitem.cpp @@ -177,9 +177,10 @@ void QGraphicsVideoItemPrivate::_q_mediaObjectDestroyed() /*! \class QGraphicsVideoItem - \brief The QGraphicsVideoItem class provides a graphics item which display video produced by a QMediaObject. + \since 4.7 + \ingroup multimedia Attaching a QGraphicsVideoItem to a QMediaObject allows it to display diff --git a/src/multimedia/base/qmediacontent.cpp b/src/multimedia/base/qmediacontent.cpp index fd519c6..b6bf56b 100644 --- a/src/multimedia/base/qmediacontent.cpp +++ b/src/multimedia/base/qmediacontent.cpp @@ -76,6 +76,7 @@ private: \class QMediaContent \preliminary \brief The QMediaContent class provides access to the resources relating to a media content. + \since 4.7 \ingroup multimedia @@ -206,6 +207,15 @@ QUrl QMediaContent::canonicalUrl() const } /*! + Returns a QNetworkRequest that represents that canonical resource for this media content. +*/ + +QNetworkRequest QMediaContent::canonicalRequest() const +{ + return canonicalResource().request(); +} + +/*! Returns a QMediaResource that represents that canonical resource for this media content. */ diff --git a/src/multimedia/base/qmediacontent.h b/src/multimedia/base/qmediacontent.h index b6f3017..5a279c1 100644 --- a/src/multimedia/base/qmediacontent.h +++ b/src/multimedia/base/qmediacontent.h @@ -75,6 +75,7 @@ public: bool isNull() const; QUrl canonicalUrl() const; + QNetworkRequest canonicalRequest() const; QMediaResource canonicalResource() const; QMediaResourceList resources() const; diff --git a/src/multimedia/base/qmediacontrol.cpp b/src/multimedia/base/qmediacontrol.cpp index c8bbfd4..b84c49e 100644 --- a/src/multimedia/base/qmediacontrol.cpp +++ b/src/multimedia/base/qmediacontrol.cpp @@ -52,6 +52,7 @@ QT_BEGIN_NAMESPACE /*! \class QMediaControl \ingroup multimedia-serv + \since 4.7 \preliminary \brief The QMediaControl class provides a base interface for media service controls. diff --git a/src/multimedia/base/qmediaobject.cpp b/src/multimedia/base/qmediaobject.cpp index b2b8c1b..0422718 100644 --- a/src/multimedia/base/qmediaobject.cpp +++ b/src/multimedia/base/qmediaobject.cpp @@ -67,6 +67,7 @@ void QMediaObjectPrivate::_q_notify() \class QMediaObject \preliminary \brief The QMediaObject class provides a common base for multimedia objects. + \since 4.7 \ingroup multimedia diff --git a/src/multimedia/base/qmediaplaylist.cpp b/src/multimedia/base/qmediaplaylist.cpp index ab91fd7..b3f3dd3 100644 --- a/src/multimedia/base/qmediaplaylist.cpp +++ b/src/multimedia/base/qmediaplaylist.cpp @@ -66,6 +66,7 @@ Q_GLOBAL_STATIC_WITH_ARGS(QMediaPluginLoader, playlistIOLoader, /*! \class QMediaPlaylist \ingroup multimedia + \since 4.7 \preliminary \brief The QMediaPlaylist class provides a list of media content to play. diff --git a/src/multimedia/base/qmediaplaylistcontrol.cpp b/src/multimedia/base/qmediaplaylistcontrol.cpp index 2ae03ad..ba3d224 100644 --- a/src/multimedia/base/qmediaplaylistcontrol.cpp +++ b/src/multimedia/base/qmediaplaylistcontrol.cpp @@ -49,6 +49,7 @@ QT_BEGIN_NAMESPACE /*! \class QMediaPlaylistControl \ingroup multimedia-serv + \since 4.7 \preliminary \brief The QMediaPlaylistControl class provides access to the playlist functionality of a diff --git a/src/multimedia/base/qmediaplaylistioplugin.cpp b/src/multimedia/base/qmediaplaylistioplugin.cpp index 5f11e38..48fd721 100644 --- a/src/multimedia/base/qmediaplaylistioplugin.cpp +++ b/src/multimedia/base/qmediaplaylistioplugin.cpp @@ -46,6 +46,7 @@ QT_BEGIN_NAMESPACE /*! \class QMediaPlaylistReader \preliminary + \since 4.7 \brief The QMediaPlaylistReader class provides an interface for reading a playlist file. \sa QMediaPlaylistIOPlugin @@ -83,6 +84,7 @@ QMediaPlaylistReader::~QMediaPlaylistReader() /*! \class QMediaPlaylistWriter \preliminary + \since 4.7 \brief The QMediaPlaylistWriter class provides an interface for writing a playlist file. \sa QMediaPlaylistIOPlugin @@ -111,6 +113,7 @@ QMediaPlaylistWriter::~QMediaPlaylistWriter() /*! \class QMediaPlaylistIOPlugin + \since 4.7 \brief The QMediaPlaylistIOPlugin class provides an interface for media playlist I/O plug-ins. */ diff --git a/src/multimedia/base/qmediaplaylistnavigator.cpp b/src/multimedia/base/qmediaplaylistnavigator.cpp index 3c22ea4..0c52c71 100644 --- a/src/multimedia/base/qmediaplaylistnavigator.cpp +++ b/src/multimedia/base/qmediaplaylistnavigator.cpp @@ -193,6 +193,7 @@ int QMediaPlaylistNavigatorPrivate::previousItemPos(int steps) const /*! \class QMediaPlaylistNavigator \preliminary + \since 4.7 \brief The QMediaPlaylistNavigator class provides navigation for a media playlist. \sa QMediaPlaylist, QMediaPlaylistProvider diff --git a/src/multimedia/base/qmediaplaylistprovider.cpp b/src/multimedia/base/qmediaplaylistprovider.cpp index 65105dc..942f155 100644 --- a/src/multimedia/base/qmediaplaylistprovider.cpp +++ b/src/multimedia/base/qmediaplaylistprovider.cpp @@ -50,6 +50,7 @@ QT_BEGIN_NAMESPACE /*! \class QMediaPlaylistProvider \preliminary + \since 4.7 \brief The QMediaPlaylistProvider class provides an abstract list of media. \sa QMediaPlaylist diff --git a/src/multimedia/base/qmediaresource.cpp b/src/multimedia/base/qmediaresource.cpp index 515e432..646d9a7 100644 --- a/src/multimedia/base/qmediaresource.cpp +++ b/src/multimedia/base/qmediaresource.cpp @@ -51,6 +51,7 @@ QT_BEGIN_NAMESPACE /*! \class QMediaResource \preliminary + \since 4.7 \brief The QMediaResource class provides a description of a media resource. \ingroup multimedia diff --git a/src/multimedia/base/qmediaservice.cpp b/src/multimedia/base/qmediaservice.cpp index e40688e..d9e980b 100644 --- a/src/multimedia/base/qmediaservice.cpp +++ b/src/multimedia/base/qmediaservice.cpp @@ -57,6 +57,7 @@ QT_MODULE(Multimedia) service implementations. \ingroup multimedia-serv \preliminary + \since 4.7 Media services provide implementations of the functionality promised by media objects, and allow multiple providers to implement a QMediaObject. diff --git a/src/multimedia/base/qmediaserviceprovider.cpp b/src/multimedia/base/qmediaserviceprovider.cpp index 02c9b29..eb6505c 100644 --- a/src/multimedia/base/qmediaserviceprovider.cpp +++ b/src/multimedia/base/qmediaserviceprovider.cpp @@ -82,6 +82,7 @@ public: /*! \class QMediaServiceProviderHint \preliminary + \since 4.7 \brief The QMediaServiceProviderHint class describes what is required of a QMediaService. \ingroup multimedia-serv @@ -489,6 +490,7 @@ Q_GLOBAL_STATIC(QPluginServiceProvider, pluginProvider); /*! \class QMediaServiceProvider \preliminary + \since 4.7 \brief The QMediaServiceProvider class provides an abstract allocator for media services. */ @@ -597,6 +599,7 @@ QMediaServiceProvider *QMediaServiceProvider::defaultServiceProvider() /*! \class QMediaServiceProviderPlugin \preliminary + \since 4.7 \brief The QMediaServiceProviderPlugin class interface provides an interface for QMediaService plug-ins. @@ -630,6 +633,7 @@ QMediaServiceProvider *QMediaServiceProvider::defaultServiceProvider() \class QMediaServiceSupportedFormatsInterface \brief The QMediaServiceSupportedFormatsInterface class interface identifies if a media service plug-in supports a media format. + \since 4.7 A QMediaServiceProviderPlugin may implement this interface. */ @@ -656,6 +660,7 @@ QMediaServiceProvider *QMediaServiceProvider::defaultServiceProvider() \class QMediaServiceSupportedDevicesInterface \brief The QMediaServiceSupportedDevicesInterface class interface identifies the devices supported by a media service plug-in. + \since 4.7 A QMediaServiceProviderPlugin may implement this interface. */ @@ -682,6 +687,7 @@ QMediaServiceProvider *QMediaServiceProvider::defaultServiceProvider() \class QMediaServiceFeaturesInterface \brief The QMediaServiceFeaturesInterface class interface identifies features supported by a media service plug-in. + \since 4.7 A QMediaServiceProviderPlugin may implement this interface. */ diff --git a/src/multimedia/base/qmediatimerange.cpp b/src/multimedia/base/qmediatimerange.cpp index 0ca1948..e1cea7e 100644 --- a/src/multimedia/base/qmediatimerange.cpp +++ b/src/multimedia/base/qmediatimerange.cpp @@ -48,6 +48,7 @@ QT_BEGIN_NAMESPACE \class QMediaTimeInterval \brief The QMediaTimeInterval class represents a time interval with integer precision. \ingroup multimedia + \since 4.7 An interval is specified by an inclusive start() and end() time. These must be set in the constructor, as this is an immutable class. @@ -308,6 +309,7 @@ void QMediaTimeRangePrivate::removeInterval(const QMediaTimeInterval &interval) \brief The QMediaTimeRange class represents a set of zero or more disjoint time intervals. \ingroup multimedia + \since 4.7 \reentrant diff --git a/src/multimedia/base/qmetadatacontrol.cpp b/src/multimedia/base/qmetadatacontrol.cpp index 3ecbe8d..28a82ec 100644 --- a/src/multimedia/base/qmetadatacontrol.cpp +++ b/src/multimedia/base/qmetadatacontrol.cpp @@ -49,7 +49,7 @@ QT_BEGIN_NAMESPACE /*! \class QMetaDataControl \ingroup multimedia-serv - + \since 4.7 \preliminary \brief The QMetaDataControl class provides access to the meta-data of a QMediaService's media. diff --git a/src/multimedia/base/qvideodevicecontrol.cpp b/src/multimedia/base/qvideodevicecontrol.cpp index 21db500..c0fe9a8 100644 --- a/src/multimedia/base/qvideodevicecontrol.cpp +++ b/src/multimedia/base/qvideodevicecontrol.cpp @@ -49,6 +49,7 @@ QT_BEGIN_NAMESPACE /*! \class QVideoDeviceControl \preliminary + \since 4.7 \brief The QVideoDeviceControl class provides an video device selector media control. \ingroup multimedia-serv diff --git a/src/multimedia/base/qvideooutputcontrol.cpp b/src/multimedia/base/qvideooutputcontrol.cpp index a904385..58f1527 100644 --- a/src/multimedia/base/qvideooutputcontrol.cpp +++ b/src/multimedia/base/qvideooutputcontrol.cpp @@ -47,7 +47,7 @@ QT_BEGIN_NAMESPACE /*! \class QVideoOutputControl \preliminary - + \since 4.7 \brief The QVideoOutputControl class provides a means of selecting the active video output control. diff --git a/src/multimedia/base/qvideorenderercontrol.cpp b/src/multimedia/base/qvideorenderercontrol.cpp index 4e7b3da..a34ef9b 100644 --- a/src/multimedia/base/qvideorenderercontrol.cpp +++ b/src/multimedia/base/qvideorenderercontrol.cpp @@ -49,7 +49,7 @@ QT_BEGIN_NAMESPACE /*! \class QVideoRendererControl \preliminary - + \since 4.7 \brief The QVideoRendererControl class provides a control for rendering to a video surface. diff --git a/src/multimedia/base/qvideowidget.cpp b/src/multimedia/base/qvideowidget.cpp index 5df245e..aabfefc 100644 --- a/src/multimedia/base/qvideowidget.cpp +++ b/src/multimedia/base/qvideowidget.cpp @@ -488,7 +488,7 @@ void QVideoWidgetPrivate::_q_dimensionsChanged() /*! \class QVideoWidget \preliminary - + \since 4.7 \brief The QVideoWidget class provides a widget which presents video produced by a media object. \ingroup multimedia diff --git a/src/multimedia/base/qvideowidgetcontrol.cpp b/src/multimedia/base/qvideowidgetcontrol.cpp index bd7ce4e..c53c77b 100644 --- a/src/multimedia/base/qvideowidgetcontrol.cpp +++ b/src/multimedia/base/qvideowidgetcontrol.cpp @@ -48,7 +48,7 @@ QT_BEGIN_NAMESPACE /*! \class QVideoWidgetControl \preliminary - + \since 4.7 \brief The QVideoWidgetControl class provides a media control which implements a video widget. diff --git a/src/multimedia/base/qvideowindowcontrol.cpp b/src/multimedia/base/qvideowindowcontrol.cpp index a23cb4b..da46823 100644 --- a/src/multimedia/base/qvideowindowcontrol.cpp +++ b/src/multimedia/base/qvideowindowcontrol.cpp @@ -47,6 +47,7 @@ QT_BEGIN_NAMESPACE /*! \class QVideoWindowControl \preliminary + \since 4.7 \ingroup multimedia-serv \brief The QVideoWindowControl class provides a media control for rendering video to a window. diff --git a/src/multimedia/playback/qmediaplayer.cpp b/src/multimedia/playback/qmediaplayer.cpp index ca34993..27bff02 100644 --- a/src/multimedia/playback/qmediaplayer.cpp +++ b/src/multimedia/playback/qmediaplayer.cpp @@ -66,7 +66,7 @@ QT_MODULE(Multimedia) \class QMediaPlayer \brief The QMediaPlayer class allows the playing of a media source. \ingroup multimedia - + \since 4.7 \preliminary The QMediaPlayer class is a high level media playback class. It can be used diff --git a/src/multimedia/playback/qmediaplayercontrol.cpp b/src/multimedia/playback/qmediaplayercontrol.cpp index 95ffade..2129098 100644 --- a/src/multimedia/playback/qmediaplayercontrol.cpp +++ b/src/multimedia/playback/qmediaplayercontrol.cpp @@ -50,7 +50,7 @@ QT_BEGIN_NAMESPACE /*! \class QMediaPlayerControl \ingroup multimedia-serv - + \since 4.7 \preliminary \brief The QMediaPlayerControl class provides access to the media playing functionality of a QMediaService. diff --git a/src/multimedia/qml/qdeclarativeaudio.cpp b/src/multimedia/qml/qdeclarativeaudio.cpp index 67df625..1cbf594 100644 --- a/src/multimedia/qml/qdeclarativeaudio.cpp +++ b/src/multimedia/qml/qdeclarativeaudio.cpp @@ -48,6 +48,7 @@ QT_BEGIN_NAMESPACE /*! \qmlclass Audio QDeclarativeAudio + \since 4.7 \brief The Audio element allows you to add audio playback to a scene. \qml diff --git a/src/multimedia/qml/qdeclarativevideo.cpp b/src/multimedia/qml/qdeclarativevideo.cpp index d0e94f6..7f62075 100644 --- a/src/multimedia/qml/qdeclarativevideo.cpp +++ b/src/multimedia/qml/qdeclarativevideo.cpp @@ -69,6 +69,7 @@ void QDeclarativeVideo::_q_error(int errorCode, const QString &errorString) /*! \qmlclass Video QDeclarativeVideo + \since 4.7 \brief The Video element allows you to add videos to a scene. \inherits Item diff --git a/src/multimedia/qml/qsoundeffect.cpp b/src/multimedia/qml/qsoundeffect.cpp index 919aa75..541e6c9 100644 --- a/src/multimedia/qml/qsoundeffect.cpp +++ b/src/multimedia/qml/qsoundeffect.cpp @@ -56,6 +56,7 @@ QT_BEGIN_NAMESPACE /*! \qmlclass SoundEffect QSoundEffect + \since 4.7 \brief The SoundEffect element provides a way to play sound effects in qml. The following example plays a wav file on mouse click. diff --git a/src/multimedia/qml/qsoundeffect_pulse_p.cpp b/src/multimedia/qml/qsoundeffect_pulse_p.cpp index ec851aa..7e9a25c 100644 --- a/src/multimedia/qml/qsoundeffect_pulse_p.cpp +++ b/src/multimedia/qml/qsoundeffect_pulse_p.cpp @@ -72,6 +72,8 @@ // Less than ideal #define PA_SCACHE_ENTRY_SIZE_MAX (1024*1024*16) +QT_BEGIN_NAMESPACE + namespace { inline pa_sample_spec audioFormatToSampleSpec(const QAudioFormat &format) @@ -502,3 +504,6 @@ void QSoundEffectPrivate::play_callback(pa_context *c, int success, void *userda } } +QT_END_NAMESPACE + + diff --git a/src/multimedia/qml/qsoundeffect_qmedia_p.cpp b/src/multimedia/qml/qsoundeffect_qmedia_p.cpp index 886380a..48fb257 100644 --- a/src/multimedia/qml/qsoundeffect_qmedia_p.cpp +++ b/src/multimedia/qml/qsoundeffect_qmedia_p.cpp @@ -59,6 +59,8 @@ #include "qsoundeffect_qmedia_p.h" +QT_BEGIN_NAMESPACE + QSoundEffectPrivate::QSoundEffectPrivate(QObject* parent): QObject(parent), m_muted(false), @@ -161,3 +163,5 @@ void QSoundEffectPrivate::setMedia(const QMediaContent &media) m_player->setMedia(media.canonicalUrl()); } +QT_END_NAMESPACE + diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index 62aa2d7..a887449 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -416,13 +416,25 @@ QHttpNetworkReply* QHttpNetworkConnectionPrivate::queueRequest(const QHttpNetwor lowPriorityQueue.prepend(pair); break; } + // this used to be called via invokeMethod and a QueuedConnection + // It is the only place _q_startNextRequest is called directly without going + // through the event loop using a QueuedConnection. + // This is dangerous because of recursion that might occur when emitting + // signals as DirectConnection from this code path. Therefore all signal + // emissions that can come out from this code path need to + // be QueuedConnection. + // We are currently trying to fine-tune this. _q_startNextRequest(); + + return reply; } void QHttpNetworkConnectionPrivate::requeueRequest(const HttpMessagePair &pair) { + Q_Q(QHttpNetworkConnection); + QHttpNetworkRequest request = pair.first; switch (request.priority()) { case QHttpNetworkRequest::HighPriority: @@ -433,8 +445,8 @@ void QHttpNetworkConnectionPrivate::requeueRequest(const HttpMessagePair &pair) lowPriorityQueue.prepend(pair); break; } - // this used to be called via invokeMethod and a QueuedConnection - _q_startNextRequest(); + + QMetaObject::invokeMethod(q, "_q_startNextRequest", Qt::QueuedConnection); } void QHttpNetworkConnectionPrivate::dequeueAndSendRequest(QAbstractSocket *socket) @@ -682,6 +694,8 @@ void QHttpNetworkConnectionPrivate::removeReply(QHttpNetworkReply *reply) +// This function must be called from the event loop. The only +// exception is documented in QHttpNetworkConnectionPrivate::queueRequest void QHttpNetworkConnectionPrivate::_q_startNextRequest() { //resend the necessary ones. diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index dbee72a..e92b2f3 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -459,6 +459,8 @@ void QHttpNetworkConnectionChannel::handleUnexpectedEOF() } else { reconnectAttempts--; reply->d_func()->clear(); + reply->d_func()->connection = connection; + reply->d_func()->connectionChannel = this; closeAndResendCurrentRequest(); } } diff --git a/src/network/access/qnetworkaccessdatabackend.cpp b/src/network/access/qnetworkaccessdatabackend.cpp index a2e7ef5..efb6e3e 100644 --- a/src/network/access/qnetworkaccessdatabackend.cpp +++ b/src/network/access/qnetworkaccessdatabackend.cpp @@ -44,6 +44,7 @@ #include "qnetworkreply.h" #include "qurlinfo.h" #include "private/qdataurl_p.h" +#include <qcoreapplication.h> QT_BEGIN_NAMESPACE @@ -72,7 +73,8 @@ void QNetworkAccessDataBackend::open() if (operation() != QNetworkAccessManager::GetOperation && operation() != QNetworkAccessManager::HeadOperation) { // data: doesn't support anything but GET - QString msg = QObject::tr("Operation not supported on %1") + const QString msg = QCoreApplication::translate("QNetworkAccessDataBackend", + "Operation not supported on %1") .arg(uri.toString()); error(QNetworkReply::ContentOperationNotPermittedError, msg); finished(); @@ -96,7 +98,8 @@ void QNetworkAccessDataBackend::open() } // something wrong with this URI - QString msg = QObject::tr("Invalid URI: %1").arg(uri.toString()); + const QString msg = QCoreApplication::translate("QNetworkAccessDataBackend", + "Invalid URI: %1").arg(uri.toString()); error(QNetworkReply::ProtocolFailure, msg); finished(); } diff --git a/src/network/access/qnetworkaccessdebugpipebackend.cpp b/src/network/access/qnetworkaccessdebugpipebackend.cpp index 5926d0b..cd077e7 100644 --- a/src/network/access/qnetworkaccessdebugpipebackend.cpp +++ b/src/network/access/qnetworkaccessdebugpipebackend.cpp @@ -252,7 +252,7 @@ void QNetworkAccessDebugPipeBackend::socketError() break; } - error(code, QObject::tr("Socket error on %1: %2") + error(code, QNetworkAccessDebugPipeBackend::tr("Socket error on %1: %2") .arg(url().toString(), socket.errorString())); finished(); disconnect(&socket, SIGNAL(disconnected()), this, SLOT(socketDisconnected())); @@ -267,7 +267,7 @@ void QNetworkAccessDebugPipeBackend::socketDisconnected() // normal close } else { // abnormal close - QString msg = QObject::tr("Remote host closed the connection prematurely on %1") + QString msg = QNetworkAccessDebugPipeBackend::tr("Remote host closed the connection prematurely on %1") .arg(url().toString()); error(QNetworkReply::RemoteHostClosedError, msg); finished(); diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp index b9bd52a..5876ee2 100644 --- a/src/network/access/qnetworkaccessmanager.cpp +++ b/src/network/access/qnetworkaccessmanager.cpp @@ -110,7 +110,8 @@ static void ensureInitialized() object, which holds the common configuration and settings for the requests it sends. It contains the proxy and cache configuration, as well as the signals related to such issues, and reply signals that can be used to - monitor the progress of a network operation. + monitor the progress of a network operation. One QNetworkAccessManager + should be enough for the whole Qt application. Once a QNetworkAccessManager object has been created, the application can use it to send requests over the network. A group of standard functions @@ -121,6 +122,7 @@ static void ensureInitialized() A simple download off the network could be accomplished with: \snippet doc/src/snippets/code/src_network_access_qnetworkaccessmanager.cpp 0 + QNetworkAccessManager has an asynchronous API. When the \tt replyFinished slot above is called, the parameter it takes is the QNetworkReply object containing the downloaded data as well as meta-data (headers, etc.). @@ -130,6 +132,11 @@ static void ensureInitialized() delete it inside the slot connected to finished(). You can use the deleteLater() function. + \note QNetworkAccessManager queues the requests it receives. The number + of requests executed in parallel is dependent on the protocol. + Currently, for the HTTP protocol on desktop platforms, 6 requests are + executed in parallel for one host/port combination. + A more involved example, assuming the manager is already existent, can be: \snippet doc/src/snippets/code/src_network_access_qnetworkaccessmanager.cpp 1 diff --git a/src/network/access/qnetworkreplyimpl.cpp b/src/network/access/qnetworkreplyimpl.cpp index 2175686..b201380 100644 --- a/src/network/access/qnetworkreplyimpl.cpp +++ b/src/network/access/qnetworkreplyimpl.cpp @@ -565,7 +565,7 @@ void QNetworkReplyImplPrivate::finished() } } else { error(QNetworkReply::TemporaryNetworkFailureError, - q->tr("Temporary network failure.")); + QNetworkReply::tr("Temporary network failure.")); } } } diff --git a/src/network/access/qnetworkreplyimpl_p.h b/src/network/access/qnetworkreplyimpl_p.h index ec413cc..b4fbd1e 100644 --- a/src/network/access/qnetworkreplyimpl_p.h +++ b/src/network/access/qnetworkreplyimpl_p.h @@ -199,7 +199,7 @@ class QDisabledNetworkReply : public QNetworkReply public: QDisabledNetworkReply(QObject *parent, const QNetworkRequest &req, - const QNetworkAccessManager::Operation op); + QNetworkAccessManager::Operation op); ~QDisabledNetworkReply(); void abort() { } diff --git a/src/network/access/qnetworkrequest.cpp b/src/network/access/qnetworkrequest.cpp index e563f4e..61c116d 100644 --- a/src/network/access/qnetworkrequest.cpp +++ b/src/network/access/qnetworkrequest.cpp @@ -138,6 +138,8 @@ QT_BEGIN_NAMESPACE default follow redirections: it's up to the application to determine if the requested redirection should be allowed, according to its security policies. + The returned URL might be relative. Use QUrl::resolved() + to create an absolute URL out of it. \value ConnectionEncryptedAttribute Replies only, type: QVariant::Bool (default: false) diff --git a/src/network/kernel/qhostinfo.cpp b/src/network/kernel/qhostinfo.cpp index 9de499e..93f6d13 100644 --- a/src/network/kernel/qhostinfo.cpp +++ b/src/network/kernel/qhostinfo.cpp @@ -165,7 +165,7 @@ int QHostInfo::lookupHost(const QString &name, QObject *receiver, if (name.isEmpty()) { QHostInfo hostInfo(id); hostInfo.setError(QHostInfo::HostNotFound); - hostInfo.setErrorString(QObject::tr("No host name given")); + hostInfo.setErrorString(QCoreApplication::translate("QHostInfo", "No host name given")); QScopedPointer<QHostInfoResult> result(new QHostInfoResult); QObject::connect(result.data(), SIGNAL(resultsReady(QHostInfo)), receiver, member, Qt::QueuedConnection); diff --git a/src/network/kernel/qhostinfo_unix.cpp b/src/network/kernel/qhostinfo_unix.cpp index be06b6e..a186e78 100644 --- a/src/network/kernel/qhostinfo_unix.cpp +++ b/src/network/kernel/qhostinfo_unix.cpp @@ -193,7 +193,9 @@ QHostInfo QHostInfoAgent::fromName(const QString &hostName) results.setHostName(hostName); if (aceHostname.isEmpty()) { results.setError(QHostInfo::HostNotFound); - results.setErrorString(hostName.isEmpty() ? QObject::tr("No host name given") : QObject::tr("Invalid hostname")); + results.setErrorString(hostName.isEmpty() ? + QCoreApplication::translate("QHostInfoAgent", "No host name given") : + QCoreApplication::translate("QHostInfoAgent", "Invalid hostname")); return results; } diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp index 829df89..275c436 100644 --- a/src/network/socket/qabstractsocket.cpp +++ b/src/network/socket/qabstractsocket.cpp @@ -155,6 +155,9 @@ See the \l network/fortuneclient and \l network/blockingfortuneclient examples for an overview of both approaches. + \note We discourage the use of the blocking functions together + with signals. One of the two possibilities should be used. + QAbstractSocket can be used with QTextStream and QDataStream's stream operators (operator<<() and operator>>()). There is one issue to be aware of, though: You must make sure that enough data @@ -1682,9 +1685,12 @@ static int qt_timeout_value(int msecs, int elapsed) If msecs is -1, this function will not time out. - Note: This function may wait slightly longer than \a msecs, + \note This function may wait slightly longer than \a msecs, depending on the time it takes to complete the host lookup. + \note Multiple calls to this functions do not accumulate the time. + If the function times out, the connecting process will be aborted. + \sa connectToHost(), connected() */ bool QAbstractSocket::waitForConnected(int msecs) @@ -1722,7 +1728,7 @@ bool QAbstractSocket::waitForConnected(int msecs) d->_q_startConnecting(QHostInfo::fromName(d->hostName)); } if (state() == UnconnectedState) - return false; + return false; // connect not im progress anymore! bool timedOut = true; #if defined (QABSTRACTSOCKET_DEBUG) diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 2ed185f..73cd6a8 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -5559,7 +5559,7 @@ QSize QGLTexture::bindCompressedTexturePVR(const char *buf, int len) quint32 level = 0; quint32 width = pvrHeader->width; quint32 height = pvrHeader->height; - while (bufferSize > 0 && level < pvrHeader->mipMapCount) { + while (bufferSize > 0 && level <= pvrHeader->mipMapCount) { quint32 size = (qMax(width, minWidth) * qMax(height, minHeight) * pvrHeader->bitsPerPixel) / 8; diff --git a/src/openvg/qpaintengine_vg.cpp b/src/openvg/qpaintengine_vg.cpp index bc9f0c9..35f552e 100644 --- a/src/openvg/qpaintengine_vg.cpp +++ b/src/openvg/qpaintengine_vg.cpp @@ -130,8 +130,9 @@ public: void draw(VGPath path, const QPen& pen, const QBrush& brush, VGint rule = VG_EVEN_ODD); void stroke(VGPath path, const QPen& pen); void fill(VGPath path, const QBrush& brush, VGint rule = VG_EVEN_ODD); - VGPath vectorPathToVGPath(const QVectorPath& path); - VGPath painterPathToVGPath(const QPainterPath& path); + inline void releasePath(VGPath path); + VGPath vectorPathToVGPath(const QVectorPath& path, bool forceNewPath = false); + VGPath painterPathToVGPath(const QPainterPath& path, bool forceNewPath = false); VGPath roundedRectPath(const QRectF &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode); VGPaintType setBrush (VGPaint paint, const QBrush& brush, VGMatrixMode mode, @@ -177,6 +178,8 @@ public: VGPath roundRectPath; // Cached path for quick drawing of rounded rects. #endif + VGPath reusablePath; // Reusable path for vectorPathToVGPath(), etc. + QTransform transform; // Currently active transform. bool simpleTransform; // True if the transform is simple (non-projective). qreal penScale; // Pen scaling factor from "transform". @@ -349,6 +352,8 @@ void QVGPaintEnginePrivate::init() roundRectPath = 0; #endif + reusablePath = 0; + simpleTransform = true; pathTransformSet = false; penScale = 1.0; @@ -445,6 +450,15 @@ void QVGPaintEnginePrivate::initObjects() VG_PATH_CAPABILITY_ALL); vgAppendPathData(linePath, 2, segments, coords); #endif + + // This path can be reused over and over by calling vgClearPath(). + reusablePath = vgCreatePath(VG_PATH_FORMAT_STANDARD, + VG_PATH_DATATYPE_F, + 1.0f, // scale + 0.0f, // bias + 32 + 1, // segmentCapacityHint + 32 * 2, // coordCapacityHint + VG_PATH_CAPABILITY_ALL); } void QVGPaintEnginePrivate::destroy() @@ -464,6 +478,8 @@ void QVGPaintEnginePrivate::destroy() if (roundRectPath) vgDestroyPath(roundRectPath); #endif + if (reusablePath) + vgDestroyPath(reusablePath); #if !defined(QVG_NO_DRAW_GLYPHS) QVGFontCache::Iterator it; @@ -540,19 +556,32 @@ void QVGPaintEnginePrivate::updateTransform(QPaintDevice *pdev) qt_scaleForTransform(transform, &penScale); } -VGPath QVGPaintEnginePrivate::vectorPathToVGPath(const QVectorPath& path) +inline void QVGPaintEnginePrivate::releasePath(VGPath path) +{ + if (path == reusablePath) + vgClearPath(path, VG_PATH_CAPABILITY_ALL); + else + vgDestroyPath(path); +} + +VGPath QVGPaintEnginePrivate::vectorPathToVGPath(const QVectorPath& path, bool forceNewPath) { int count = path.elementCount(); const qreal *points = path.points(); const QPainterPath::ElementType *elements = path.elements(); - VGPath vgpath = vgCreatePath(VG_PATH_FORMAT_STANDARD, - VG_PATH_DATATYPE_F, - 1.0f, // scale - 0.0f, // bias - count + 1, // segmentCapacityHint - count * 2, // coordCapacityHint - VG_PATH_CAPABILITY_ALL); + VGPath vgpath; + if (forceNewPath) { + vgpath = vgCreatePath(VG_PATH_FORMAT_STANDARD, + VG_PATH_DATATYPE_F, + 1.0f, // scale + 0.0f, // bias + count + 1, // segmentCapacityHint + count * 2, // coordCapacityHint + VG_PATH_CAPABILITY_ALL); + } else { + vgpath = reusablePath; + } // Size is sufficient segments for drawRoundedRect() paths. QVarLengthArray<VGubyte, 20> segments; @@ -724,17 +753,22 @@ VGPath QVGPaintEnginePrivate::vectorPathToVGPath(const QVectorPath& path) return vgpath; } -VGPath QVGPaintEnginePrivate::painterPathToVGPath(const QPainterPath& path) +VGPath QVGPaintEnginePrivate::painterPathToVGPath(const QPainterPath& path, bool forceNewPath) { int count = path.elementCount(); - VGPath vgpath = vgCreatePath(VG_PATH_FORMAT_STANDARD, - VG_PATH_DATATYPE_F, - 1.0f, // scale - 0.0f, // bias - count + 1, // segmentCapacityHint - count * 2, // coordCapacityHint - VG_PATH_CAPABILITY_ALL); + VGPath vgpath; + if (forceNewPath) { + vgpath = vgCreatePath(VG_PATH_FORMAT_STANDARD, + VG_PATH_DATATYPE_F, + 1.0f, // scale + 0.0f, // bias + count + 1, // segmentCapacityHint + count * 2, // coordCapacityHint + VG_PATH_CAPABILITY_ALL); + } else { + vgpath = reusablePath; + } if (count == 0) return vgpath; @@ -953,13 +987,7 @@ VGPath QVGPaintEnginePrivate::roundedRectPath(const QRectF &rect, qreal xRadius, vgModifyPathCoords(vgpath, 0, 9, pts); } #else - VGPath vgpath = vgCreatePath(VG_PATH_FORMAT_STANDARD, - VG_PATH_DATATYPE_F, - 1.0f, // scale - 0.0f, // bias - 10, // segmentCapacityHint - 17 * 2, // coordCapacityHint - VG_PATH_CAPABILITY_ALL); + VGPath vgpath = reusablePath; vgAppendPathData(vgpath, 10, roundedrect_types, pts); #endif @@ -1512,7 +1540,7 @@ void QVGPaintEngine::draw(const QVectorPath &path) d->draw(vgpath, s->pen, s->brush, VG_EVEN_ODD); else d->draw(vgpath, s->pen, s->brush, VG_NON_ZERO); - vgDestroyPath(vgpath); + d->releasePath(vgpath); } void QVGPaintEngine::fill(const QVectorPath &path, const QBrush &brush) @@ -1523,7 +1551,7 @@ void QVGPaintEngine::fill(const QVectorPath &path, const QBrush &brush) d->fill(vgpath, brush, VG_EVEN_ODD); else d->fill(vgpath, brush, VG_NON_ZERO); - vgDestroyPath(vgpath); + d->releasePath(vgpath); } void QVGPaintEngine::stroke(const QVectorPath &path, const QPen &pen) @@ -1531,7 +1559,7 @@ void QVGPaintEngine::stroke(const QVectorPath &path, const QPen &pen) Q_D(QVGPaintEngine); VGPath vgpath = d->vectorPathToVGPath(path); d->stroke(vgpath, pen); - vgDestroyPath(vgpath); + d->releasePath(vgpath); } // Determine if a co-ordinate transform is simple enough to allow @@ -1727,7 +1755,7 @@ void QVGPaintEngine::clip(const QVectorPath &path, Qt::ClipOperation op) default: break; } - vgDestroyPath(vgpath); + d->releasePath(vgpath); vgSeti(VG_MASKING, VG_TRUE); d->maskValid = true; @@ -2044,7 +2072,7 @@ void QVGPaintEngine::clip(const QPainterPath &path, Qt::ClipOperation op) default: break; } - vgDestroyPath(vgpath); + d->releasePath(vgpath); vgSeti(VG_MASKING, VG_TRUE); d->maskValid = true; @@ -2395,7 +2423,7 @@ void QVGPaintEngine::fillRect(const QRectF &rect, const QBrush &brush) return; // Check to see if we can use vgClear() for faster filling. - if (brush.style() == Qt::SolidPattern && + if (brush.style() == Qt::SolidPattern && brush.isOpaque() && clipTransformIsSimple(d->transform) && d->opacity == 1.0f && clearRect(rect, brush.color())) { return; @@ -2438,7 +2466,7 @@ void QVGPaintEngine::fillRect(const QRectF &rect, const QColor &color) Q_D(QVGPaintEngine); // Check to see if we can use vgClear() for faster filling. - if (clipTransformIsSimple(d->transform) && d->opacity == 1.0f && + if (clipTransformIsSimple(d->transform) && d->opacity == 1.0f && color.alpha() == 255 && clearRect(rect, color)) { return; } @@ -2483,7 +2511,7 @@ void QVGPaintEngine::drawRoundedRect(const QRectF &rect, qreal xrad, qreal yrad, VGPath vgpath = d->roundedRectPath(rect, xrad, yrad, mode); d->draw(vgpath, s->pen, s->brush); #if defined(QVG_NO_MODIFY_PATH) - vgDestroyPath(vgpath); + d->releasePath(vgpath); #endif } else { QPaintEngineEx::drawRoundedRect(rect, xrad, yrad, mode); @@ -2632,13 +2660,7 @@ void QVGPaintEngine::drawEllipse(const QRectF &r) Q_D(QVGPaintEngine); if (d->simpleTransform) { QVGPainterState *s = state(); - VGPath path = vgCreatePath(VG_PATH_FORMAT_STANDARD, - VG_PATH_DATATYPE_F, - 1.0f, // scale - 0.0f, // bias - 4, // segmentCapacityHint - 12, // coordCapacityHint - VG_PATH_CAPABILITY_ALL); + VGPath path = d->reusablePath; static VGubyte segments[4] = { VG_MOVE_TO_ABS, VG_SCCWARC_TO_REL, @@ -2662,7 +2684,7 @@ void QVGPaintEngine::drawEllipse(const QRectF &r) coords[11] = 0.0f; vgAppendPathData(path, 4, segments, coords); d->draw(path, s->pen, s->brush); - vgDestroyPath(path); + d->releasePath(path); } else { // The projective transform version of an ellipse is difficult. // Generate a QVectorPath containing cubic curves and transform that. @@ -2686,7 +2708,7 @@ void QVGPaintEngine::drawPath(const QPainterPath &path) d->draw(vgpath, s->pen, s->brush, VG_EVEN_ODD); else d->draw(vgpath, s->pen, s->brush, VG_NON_ZERO); - vgDestroyPath(vgpath); + d->releasePath(vgpath); } void QVGPaintEngine::drawPoints(const QPointF *points, int pointCount) @@ -2761,13 +2783,7 @@ void QVGPaintEngine::drawPolygon(const QPointF *points, int pointCount, PolygonD { Q_D(QVGPaintEngine); QVGPainterState *s = state(); - VGPath path = vgCreatePath(VG_PATH_FORMAT_STANDARD, - VG_PATH_DATATYPE_F, - 1.0f, // scale - 0.0f, // bias - pointCount + 1, // segmentCapacityHint - pointCount * 2, // coordCapacityHint - VG_PATH_CAPABILITY_ALL); + VGPath path = d->reusablePath; QVarLengthArray<VGfloat, 16> coords; QVarLengthArray<VGubyte, 10> segments; for (int i = 0; i < pointCount; ++i, ++points) { @@ -2801,20 +2817,14 @@ void QVGPaintEngine::drawPolygon(const QPointF *points, int pointCount, PolygonD d->draw(path, s->pen, s->brush, VG_EVEN_ODD); break; } - vgDestroyPath(path); + d->releasePath(path); } void QVGPaintEngine::drawPolygon(const QPoint *points, int pointCount, PolygonDrawMode mode) { Q_D(QVGPaintEngine); QVGPainterState *s = state(); - VGPath path = vgCreatePath(VG_PATH_FORMAT_STANDARD, - VG_PATH_DATATYPE_F, - 1.0f, // scale - 0.0f, // bias - pointCount + 1, // segmentCapacityHint - pointCount * 2, // coordCapacityHint - VG_PATH_CAPABILITY_ALL); + VGPath path = d->reusablePath; QVarLengthArray<VGfloat, 16> coords; QVarLengthArray<VGubyte, 10> segments; for (int i = 0; i < pointCount; ++i, ++points) { @@ -2848,7 +2858,7 @@ void QVGPaintEngine::drawPolygon(const QPoint *points, int pointCount, PolygonDr d->draw(path, s->pen, s->brush, VG_EVEN_ODD); break; } - vgDestroyPath(path); + d->releasePath(path); } void QVGPaintEnginePrivate::setImageOptions() @@ -3245,7 +3255,7 @@ void QVGFontGlyphCache::cacheGlyphs(QVGPaintEnginePrivate *d, fontEngine->getUnscaledGlyph(glyph, &path, &metrics); VGPath vgPath; if (!path.isEmpty()) { - vgPath = d->painterPathToVGPath(path); + vgPath = d->painterPathToVGPath(path, true); } else { // Probably a "space" character with no visible outline. vgPath = VG_INVALID_HANDLE; diff --git a/src/plugins/bearer/corewlan/qcorewlanengine.mm b/src/plugins/bearer/corewlan/qcorewlanengine.mm index a5384d1..9a28a33 100644 --- a/src/plugins/bearer/corewlan/qcorewlanengine.mm +++ b/src/plugins/bearer/corewlan/qcorewlanengine.mm @@ -154,9 +154,9 @@ void QCoreWlanEngine::connectToId(const QString &id) NSDictionary *parametersDict; NSArray* apArray; - CW8021XProfile *user8021XProfile; - NSError *err; - NSMutableDictionary *params; + CW8021XProfile *user8021XProfile; + NSError *err; + NSMutableDictionary *params; while ((wProfile = [enumerator nextObject])) { //CWWirelessProfile @@ -185,10 +185,8 @@ void QCoreWlanEngine::connectToId(const QString &id) bool result = [wifiInterface associateToNetwork: apNetwork parameters:[NSDictionary dictionaryWithDictionary:params] error:&err]; if(!result) { - qWarning() <<"ERROR"<< nsstringToQString([err localizedDescription ]); emit connectionError(id, ConnectError); } else { - [apNetwork release]; [autoreleasepool release]; return; } @@ -350,83 +348,81 @@ QStringList QCoreWlanEngine::scanForSsids(const QString &interfaceName) NSAutoreleasePool *autoreleasepool = [[NSAutoreleasePool alloc] init]; CWInterface *currentInterface = [CWInterface interfaceWithName:qstringToNSString(interfaceName)]; - NSError *err = nil; - NSDictionary *parametersDict = nil; - NSArray* apArray = [currentInterface scanForNetworksWithParameters:parametersDict error:&err]; + if([currentInterface power]) { + NSError *err = nil; + NSDictionary *parametersDict = nil; + NSArray* apArray = [currentInterface scanForNetworksWithParameters:parametersDict error:&err]; - CWNetwork *apNetwork; - if (!err) { - for(uint row=0; row < [apArray count]; row++ ) { - NSAutoreleasePool *looppool = [[NSAutoreleasePool alloc] init]; + CWNetwork *apNetwork; + if (!err) { + for(uint row=0; row < [apArray count]; row++ ) { + NSAutoreleasePool *looppool = [[NSAutoreleasePool alloc] init]; - apNetwork = [apArray objectAtIndex:row]; + apNetwork = [apArray objectAtIndex:row]; - const QString networkSsid = nsstringToQString([apNetwork ssid]); + const QString networkSsid = nsstringToQString([apNetwork ssid]); - const QString id = QString::number(qHash(QLatin1String("corewlan:") + networkSsid)); - found.append(id); + const QString id = QString::number(qHash(QLatin1String("corewlan:") + networkSsid)); + found.append(id); - QNetworkConfiguration::StateFlags state = QNetworkConfiguration::Undefined; + QNetworkConfiguration::StateFlags state = QNetworkConfiguration::Undefined; - if ([currentInterface.interfaceState intValue] == kCWInterfaceStateRunning) { - if (networkSsid == nsstringToQString([currentInterface ssid])) - state = QNetworkConfiguration::Active; - } else { - if (isKnownSsid(interfaceName, networkSsid)) - state = QNetworkConfiguration::Discovered; - else - state = QNetworkConfiguration::Defined; - } + if ([currentInterface.interfaceState intValue] == kCWInterfaceStateRunning) { + if (networkSsid == nsstringToQString([currentInterface ssid])) + state = QNetworkConfiguration::Active; + } else { + if (isKnownSsid(interfaceName, networkSsid)) + state = QNetworkConfiguration::Discovered; + else + state = QNetworkConfiguration::Defined; + } - if (accessPointConfigurations.contains(id)) { - QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id); + if (accessPointConfigurations.contains(id)) { + QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id); - bool changed = false; + bool changed = false; - if (!ptr->isValid) { - ptr->isValid = true; - changed = true; - } + if (!ptr->isValid) { + ptr->isValid = true; + changed = true; + } - if (ptr->name != networkSsid) { - ptr->name = networkSsid; - changed = true; - } + if (ptr->name != networkSsid) { + ptr->name = networkSsid; + changed = true; + } - if (ptr->id != id) { - ptr->id = id; - changed = true; - } + if (ptr->id != id) { + ptr->id = id; + changed = true; + } - if (ptr->state != state) { - ptr->state = state; - changed = true; - } + if (ptr->state != state) { + ptr->state = state; + changed = true; + } - if (changed) - emit configurationChanged(ptr); - } else { - QNetworkConfigurationPrivatePointer ptr(new QNetworkConfigurationPrivate); + if (changed) + emit configurationChanged(ptr); + } else { + QNetworkConfigurationPrivatePointer ptr(new QNetworkConfigurationPrivate); - ptr->name = networkSsid; - ptr->isValid = true; - ptr->id = id; - ptr->state = state; - ptr->type = QNetworkConfiguration::InternetAccessPoint; - ptr->bearer = QLatin1String("WLAN"); + ptr->name = networkSsid; + ptr->isValid = true; + ptr->id = id; + ptr->state = state; + ptr->type = QNetworkConfiguration::InternetAccessPoint; + ptr->bearer = QLatin1String("WLAN"); - accessPointConfigurations.insert(id, ptr); - configurationInterface.insert(id, interfaceName); + accessPointConfigurations.insert(id, ptr); + configurationInterface.insert(id, interfaceName); - emit configurationAdded(ptr); + emit configurationAdded(ptr); + } + [looppool release]; } - [looppool release]; } - } else { - qWarning() << "ERROR scanning for ssids" << nsstringToQString([err localizedDescription]) - <<nsstringToQString([err domain]); } - [autoreleasepool drain]; #else Q_UNUSED(interfaceName); diff --git a/src/plugins/bearer/generic/qgenericengine.cpp b/src/plugins/bearer/generic/qgenericengine.cpp index e96b80c..e6c871d 100644 --- a/src/plugins/bearer/generic/qgenericengine.cpp +++ b/src/plugins/bearer/generic/qgenericengine.cpp @@ -63,6 +63,7 @@ #include <unistd.h> #endif +QT_BEGIN_NAMESPACE static QString qGetInterfaceType(const QString &interface) { @@ -126,14 +127,11 @@ static QString qGetInterfaceType(const QString &interface) ifreq request; strncpy(request.ifr_name, interface.toLocal8Bit().data(), sizeof(request.ifr_name)); - if (ioctl(sock, SIOCGIFHWADDR, &request) >= 0) { - switch (request.ifr_hwaddr.sa_family) { - case ARPHRD_ETHER: - return QLatin1String("Ethernet"); - } - } - + int result = ioctl(sock, SIOCGIFHWADDR, &request); close(sock); + + if (result >= 0 && request.ifr_hwaddr.sa_family == ARPHRD_ETHER) + return QLatin1String("Ethernet"); #else Q_UNUSED(interface); #endif diff --git a/src/plugins/bearer/icd/qnetworksession_impl.cpp b/src/plugins/bearer/icd/qnetworksession_impl.cpp index a9e93e0..e7c56a2 100644 --- a/src/plugins/bearer/icd/qnetworksession_impl.cpp +++ b/src/plugins/bearer/icd/qnetworksession_impl.cpp @@ -1080,14 +1080,14 @@ QString QNetworkSessionPrivateImpl::errorString() const QString errorStr; switch(q->error()) { case QNetworkSession::RoamingError: - errorStr = QObject::tr("Roaming error"); + errorStr = QNetworkSessionPrivateImpl::tr("Roaming error"); break; case QNetworkSession::SessionAbortedError: - errorStr = QObject::tr("Session aborted by user or system"); + errorStr = QNetworkSessionPrivateImpl::tr("Session aborted by user or system"); break; default: case QNetworkSession::UnknownSessionError: - errorStr = QObject::tr("Unidentified Error"); + errorStr = QNetworkSessionPrivateImpl::tr("Unidentified Error"); break; } return errorStr; diff --git a/src/plugins/bearer/qnetworksession_impl.cpp b/src/plugins/bearer/qnetworksession_impl.cpp index f41fdba..05ce62f 100644 --- a/src/plugins/bearer/qnetworksession_impl.cpp +++ b/src/plugins/bearer/qnetworksession_impl.cpp @@ -201,22 +201,22 @@ void QNetworkSessionPrivateImpl::stop() void QNetworkSessionPrivateImpl::migrate() { - qWarning("This platform does not support roaming (%s).", __FUNCTION__); + qWarning("This platform does not support roaming (%s).", Q_FUNC_INFO); } void QNetworkSessionPrivateImpl::accept() { - qWarning("This platform does not support roaming (%s).", __FUNCTION__); + qWarning("This platform does not support roaming (%s).", Q_FUNC_INFO); } void QNetworkSessionPrivateImpl::ignore() { - qWarning("This platform does not support roaming (%s).", __FUNCTION__); + qWarning("This platform does not support roaming (%s).", Q_FUNC_INFO); } void QNetworkSessionPrivateImpl::reject() { - qWarning("This platform does not support roaming (%s).", __FUNCTION__); + qWarning("This platform does not support roaming (%s).", Q_FUNC_INFO); } QNetworkInterface QNetworkSessionPrivateImpl::currentInterface() const diff --git a/src/plugins/bearer/symbian/symbian.pro b/src/plugins/bearer/symbian/symbian.pro index 9fd1a74..9613def 100644 --- a/src/plugins/bearer/symbian/symbian.pro +++ b/src/plugins/bearer/symbian/symbian.pro @@ -21,6 +21,7 @@ exists($${EPOCROOT}epoc32/release/armv5/lib/cmmanager.lib) { } INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE +symbian-abld:INCLUDEPATH += $$QT_BUILD_TREE/include/QtNetwork/private LIBS += -lcommdb \ -lapsettingshandlerui \ diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp index cd4d5c2..cffd4e3 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp @@ -1126,6 +1126,8 @@ bool QDirectFBScreen::connect(const QString &displaySpec) if (displayArgs.contains(QLatin1String("boundingrectflip"), Qt::CaseInsensitive)) { d_ptr->directFBFlags |= BoundingRectFlip; + } else if (displayArgs.contains(QLatin1String("nopartialflip"), Qt::CaseInsensitive)) { + d_ptr->directFBFlags |= NoPartialFlip; } #ifdef QT_DIRECTFB_IMAGECACHE @@ -1139,6 +1141,8 @@ bool QDirectFBScreen::connect(const QString &displaySpec) #endif d_ptr->dfb->SetCooperativeLevel(d_ptr->dfb, DFSCL_FULLSCREEN); + const bool forcePremultiplied = displayArgs.contains(QLatin1String("forcepremultiplied"), Qt::CaseInsensitive); + DFBSurfaceDescription description; memset(&description, 0, sizeof(DFBSurfaceDescription)); IDirectFBSurface *surface; @@ -1167,7 +1171,7 @@ bool QDirectFBScreen::connect(const QString &displaySpec) description.caps |= capabilities[i].cap; } - if (displayArgs.contains(QLatin1String("forcepremultiplied"), Qt::CaseInsensitive)) { + if (forcePremultiplied) { description.caps |= DSCAPS_PREMULTIPLIED; } @@ -1217,6 +1221,8 @@ bool QDirectFBScreen::connect(const QString &displaySpec) d_ptr->alphaPixmapFormat = QImage::Format_ARGB32_Premultiplied; break; case QImage::Format_ARGB32: + if (forcePremultiplied) + d_ptr->alphaPixmapFormat = pixelFormat = QImage::Format_ARGB32_Premultiplied; case QImage::Format_ARGB32_Premultiplied: case QImage::Format_ARGB4444_Premultiplied: case QImage::Format_ARGB8555_Premultiplied: @@ -1674,7 +1680,7 @@ bool QDirectFBScreen::initSurfaceDescriptionPixelFormat(DFBSurfaceDescription *d uchar *QDirectFBScreen::lockSurface(IDirectFBSurface *surface, DFBSurfaceLockFlags flags, int *bpl) { - void *mem; + void *mem = 0; const DFBResult result = surface->Lock(surface, flags, &mem, bpl); if (result != DFB_OK) { DirectFBError("QDirectFBScreen::lockSurface()", result); @@ -1683,11 +1689,22 @@ uchar *QDirectFBScreen::lockSurface(IDirectFBSurface *surface, DFBSurfaceLockFla return reinterpret_cast<uchar*>(mem); } +static inline bool isFullUpdate(IDirectFBSurface *surface, const QRegion ®ion, const QPoint &offset) +{ + if (offset == QPoint(0, 0) && region.rectCount() == 1) { + QSize size; + surface->GetSize(surface, &size.rwidth(), &size.rheight()); + if (region.boundingRect().size() == size) + return true; + } + return false; +} void QDirectFBScreen::flipSurface(IDirectFBSurface *surface, DFBSurfaceFlipFlags flipFlags, const QRegion ®ion, const QPoint &offset) { - if (!(flipFlags & DSFLIP_BLIT)) { + if (d_ptr->directFBFlags & NoPartialFlip + || (!(flipFlags & DSFLIP_BLIT) && QT_PREPEND_NAMESPACE(isFullUpdate(surface, region, offset)))) { surface->Flip(surface, 0, flipFlags); } else { if (!(d_ptr->directFBFlags & BoundingRectFlip) && region.rectCount() > 1) { diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h index a8c4b43..c483020 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h +++ b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h @@ -144,7 +144,8 @@ public: NoFlags = 0x00, VideoOnly = 0x01, SystemOnly = 0x02, - BoundingRectFlip = 0x04 + BoundingRectFlip = 0x04, + NoPartialFlip = 0x08 }; Q_DECLARE_FLAGS(DirectFBFlags, DirectFBFlag); diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp index 6764e75..a8bdb65 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp @@ -92,10 +92,6 @@ QDirectFBWindowSurface::QDirectFBWindowSurface(DFBSurfaceFlipFlags flip, QDirect mode = Offscreen; flags = Buffered; } -#else - noSystemBackground = widget && widget->testAttribute(Qt::WA_NoSystemBackground); - if (noSystemBackground) - flags &= ~Opaque; #endif setSurfaceFlags(flags); #ifdef QT_DIRECTFB_TIMING @@ -134,33 +130,35 @@ void QDirectFBWindowSurface::createWindow(const QRect &rect) if (!layer) qFatal("QDirectFBWindowSurface: Unable to get primary display layer!"); + updateIsOpaque(); + DFBWindowDescription description; memset(&description, 0, sizeof(DFBWindowDescription)); + description.flags = DWDESC_CAPS|DWDESC_HEIGHT|DWDESC_WIDTH|DWDESC_POSX|DWDESC_POSY|DWDESC_SURFACE_CAPS|DWDESC_PIXELFORMAT; description.caps = DWCAPS_NODECORATION; - description.flags = DWDESC_CAPS|DWDESC_SURFACE_CAPS|DWDESC_PIXELFORMAT|DWDESC_HEIGHT|DWDESC_WIDTH|DWDESC_POSX|DWDESC_POSY; -#if (Q_DIRECTFB_VERSION >= 0x010200) - description.flags |= DWDESC_OPTIONS; -#endif + description.surface_caps = DSCAPS_NONE; + imageFormat = screen->pixelFormat(); - if (noSystemBackground) { + if (!(surfaceFlags() & Opaque)) { + imageFormat = screen->alphaPixmapFormat(); description.caps |= DWCAPS_ALPHACHANNEL; #if (Q_DIRECTFB_VERSION >= 0x010200) + description.flags |= DWDESC_OPTIONS; description.options |= DWOP_ALPHACHANNEL; #endif } - + description.pixelformat = QDirectFBScreen::getSurfacePixelFormat(imageFormat); description.posx = rect.x(); description.posy = rect.y(); description.width = rect.width(); description.height = rect.height(); - description.surface_caps = DSCAPS_NONE; + + if (QDirectFBScreen::isPremultiplied(imageFormat)) + description.surface_caps = DSCAPS_PREMULTIPLIED; + if (screen->directFBFlags() & QDirectFBScreen::VideoOnly) description.surface_caps |= DSCAPS_VIDEOONLY; - const QImage::Format format = (noSystemBackground ? screen->alphaPixmapFormat() : screen->pixelFormat()); - description.pixelformat = QDirectFBScreen::getSurfacePixelFormat(format); - if (QDirectFBScreen::isPremultiplied(format)) - description.surface_caps = DSCAPS_PREMULTIPLIED; DFBResult result = layer->CreateWindow(layer, &description, &dfbWindow); @@ -182,7 +180,6 @@ void QDirectFBWindowSurface::createWindow(const QRect &rect) Q_ASSERT(!dfbSurface); dfbWindow->GetSurface(dfbWindow, &dfbSurface); - updateFormat(); } static DFBResult setWindowGeometry(IDirectFBWindow *dfbWindow, const QRect &old, const QRect &rect) @@ -267,15 +264,17 @@ void QDirectFBWindowSurface::setGeometry(const QRect &rect) } } else { // mode == Offscreen if (!dfbSurface) { - dfbSurface = screen->createDFBSurface(rect.size(), screen->pixelFormat(), QDirectFBScreen::DontTrackSurface); + dfbSurface = screen->createDFBSurface(rect.size(), surfaceFlags() & Opaque ? screen->pixelFormat() : screen->alphaPixmapFormat(), + QDirectFBScreen::DontTrackSurface); } } if (result != DFB_OK) DirectFBErrorFatal("QDirectFBWindowSurface::setGeometry()", result); #endif } - if (oldSurface != dfbSurface) - updateFormat(); + if (oldSurface != dfbSurface) { + imageFormat = dfbSurface ? QDirectFBScreen::getImageFormat(dfbSurface) : QImage::Format_Invalid; + } if (oldRect.size() != rect.size()) { QWSWindowSurface::setGeometry(rect); @@ -296,7 +295,7 @@ void QDirectFBWindowSurface::setPermanentState(const QByteArray &state) if (state.size() == sizeof(this)) { sibling = *reinterpret_cast<QDirectFBWindowSurface *const*>(state.constData()); Q_ASSERT(sibling); - sibling->setSurfaceFlags(surfaceFlags()); + setSurfaceFlags(sibling->surfaceFlags()); } } @@ -359,8 +358,6 @@ void QDirectFBWindowSurface::flush(QWidget *widget, const QRegion ®ion, const quint8 windowOpacity = quint8(win->windowOpacity() * 0xff); const QRect windowGeometry = geometry(); #ifdef QT_DIRECTFB_WM - const bool wasNoSystemBackground = noSystemBackground; - noSystemBackground = win->testAttribute(Qt::WA_NoSystemBackground); quint8 currentOpacity; Q_ASSERT(dfbWindow); dfbWindow->GetOpacity(dfbWindow, ¤tOpacity); @@ -368,18 +365,9 @@ void QDirectFBWindowSurface::flush(QWidget *widget, const QRegion ®ion, dfbWindow->SetOpacity(dfbWindow, windowOpacity); } - setOpaque(noSystemBackground || windowOpacity != 0xff); - if (wasNoSystemBackground != noSystemBackground) { - releaseSurface(); - dfbWindow->Release(dfbWindow); - dfbWindow = 0; - createWindow(windowGeometry); - win->update(); - return; - } screen->flipSurface(dfbSurface, flipFlags, region, offset); #else - setOpaque(windowOpacity != 0xff); + setOpaque(windowOpacity == 0xff); if (mode == Offscreen) { screen->exposeRegion(region.translated(offset + geometry().topLeft()), 0); } else { @@ -442,11 +430,6 @@ IDirectFBSurface *QDirectFBWindowSurface::surfaceForWidget(const QWidget *widget return dfbSurface; } -void QDirectFBWindowSurface::updateFormat() -{ - imageFormat = dfbSurface ? QDirectFBScreen::getImageFormat(dfbSurface) : QImage::Format_Invalid; -} - void QDirectFBWindowSurface::releaseSurface() { if (dfbSurface) { @@ -465,9 +448,37 @@ void QDirectFBWindowSurface::releaseSurface() } } +void QDirectFBWindowSurface::updateIsOpaque() +{ + const QWidget *win = window(); + Q_ASSERT(win); + if (win->testAttribute(Qt::WA_OpaquePaintEvent) || win->testAttribute(Qt::WA_PaintOnScreen)) { + setOpaque(true); + return; + } -QT_END_NAMESPACE + if (qFuzzyCompare(static_cast<float>(win->windowOpacity()), 1.0f)) { + const QPalette &pal = win->palette(); -#endif // QT_NO_QWS_DIRECTFB + if (win->autoFillBackground()) { + const QBrush &autoFillBrush = pal.brush(win->backgroundRole()); + if (autoFillBrush.style() != Qt::NoBrush && autoFillBrush.isOpaque()) { + setOpaque(true); + return; + } + } + + if (win->isWindow() && !win->testAttribute(Qt::WA_NoSystemBackground)) { + const QBrush &windowBrush = win->palette().brush(QPalette::Window); + if (windowBrush.style() != Qt::NoBrush && windowBrush.isOpaque()) { + setOpaque(true); + return; + } + } + } + setOpaque(false); +} +QT_END_NAMESPACE +#endif // QT_NO_QWS_DIRECTFB diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.h b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.h index 9568067..a6138f6 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.h +++ b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.h @@ -97,8 +97,8 @@ public: IDirectFBWindow *directFBWindow() const; #endif private: + void updateIsOpaque(); void setOpaque(bool opaque); - void updateFormat(); void releaseSurface(); QDirectFBWindowSurface *sibling; @@ -113,7 +113,6 @@ private: #endif DFBSurfaceFlipFlags flipFlags; - bool noSystemBackground; bool boundingRectFlip; #ifdef QT_DIRECTFB_TIMING int frames; diff --git a/src/plugins/imageformats/tiff/tiff.pro b/src/plugins/imageformats/tiff/tiff.pro index 312f99c..514fd69 100644 --- a/src/plugins/imageformats/tiff/tiff.pro +++ b/src/plugins/imageformats/tiff/tiff.pro @@ -47,14 +47,15 @@ contains(QT_CONFIG, system-tiff) { ../../../3rdparty/libtiff/libtiff/tif_warning.c \ ../../../3rdparty/libtiff/libtiff/tif_write.c \ ../../../3rdparty/libtiff/libtiff/tif_zip.c - win32 { + win32:!wince*: { SOURCES += ../../../3rdparty/libtiff/libtiff/tif_win32.c } unix: { SOURCES += ../../../3rdparty/libtiff/libtiff/tif_unix.c } wince*: { - SOURCES += ../../../corelib/kernel/qfunctions_wince.cpp + SOURCES += ../../../corelib/kernel/qfunctions_wince.cpp \ + ../../../3rdparty/libtiff/libtiff/tif_wince.c } symbian*: { SOURCES += ../../../3rdparty/libtiff/port/lfind.c diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowaudioendpointcontrol.cpp b/src/plugins/mediaservices/directshow/mediaplayer/directshowaudioendpointcontrol.cpp index 570b44a..5f72ca6 100644 --- a/src/plugins/mediaservices/directshow/mediaplayer/directshowaudioendpointcontrol.cpp +++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowaudioendpointcontrol.cpp @@ -55,7 +55,7 @@ DirectShowAudioEndpointControl::DirectShowAudioEndpointControl( , m_deviceEnumerator(0) { if (CreateBindCtx(0, &m_bindContext) == S_OK) { - m_deviceEnumerator = com_new<ICreateDevEnum>(CLSID_SystemDeviceEnum); + m_deviceEnumerator = com_new<ICreateDevEnum>(CLSID_SystemDeviceEnum, IID_ICreateDevEnum); updateEndpoints(); @@ -82,6 +82,7 @@ QList<QString> DirectShowAudioEndpointControl::availableEndpoints() const QString DirectShowAudioEndpointControl::endpointDescription(const QString &name) const { +#ifdef __IPropertyBag_INTERFACE_DEFINED__ QString description; if (IMoniker *moniker = m_devices.value(name, 0)) { @@ -96,7 +97,11 @@ QString DirectShowAudioEndpointControl::endpointDescription(const QString &name) propertyBag->Release(); } } - return description;; + + return description; +#else + return name.section(QLatin1Char('\\'), -1); +#endif } QString DirectShowAudioEndpointControl::defaultEndpoint() const @@ -120,7 +125,7 @@ void DirectShowAudioEndpointControl::setActiveEndpoint(const QString &name) if (moniker->BindToObject( m_bindContext, 0, - __uuidof(IBaseFilter), + IID_IBaseFilter, reinterpret_cast<void **>(&filter)) == S_OK) { m_service->setAudioOutput(filter); diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowglobal.h b/src/plugins/mediaservices/directshow/mediaplayer/directshowglobal.h index 1c9fe54..e43e2a7 100644 --- a/src/plugins/mediaservices/directshow/mediaplayer/directshowglobal.h +++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowglobal.h @@ -42,30 +42,30 @@ #ifndef DIRECTSHOWGLOBAL_H #define DIRECTSHOWGLOBAL_H -#include <dshow.h> +#include <QtCore/qglobal.h> +#include <dshow.h> QT_BEGIN_HEADER QT_BEGIN_NAMESPACE -template <typename T> T *com_cast(IUnknown *unknown) +template <typename T> T *com_cast(IUnknown *unknown, const IID &iid) { T *iface = 0; - return unknown && unknown->QueryInterface( - __uuidof(T), reinterpret_cast<void **>(&iface)) == S_OK + return unknown && unknown->QueryInterface(iid, reinterpret_cast<void **>(&iface)) == S_OK ? iface : 0; } -template <typename T> T *com_new(const IID &clsid) +template <typename T> T *com_new(const IID &clsid, const IID &iid) { T *object = 0; return CoCreateInstance( clsid, NULL, CLSCTX_INPROC_SERVER, - __uuidof(T), + iid, reinterpret_cast<void **>(&object)) == S_OK ? object : 0; @@ -75,4 +75,73 @@ QT_END_NAMESPACE QT_END_HEADER +#ifndef __IFilterGraph2_INTERFACE_DEFINED__ +#define __IFilterGraph2_INTERFACE_DEFINED__ +#define INTERFACE IFilterGraph2 +DECLARE_INTERFACE_(IFilterGraph2 ,IGraphBuilder) +{ + STDMETHOD(AddSourceFilterForMoniker)(THIS_ IMoniker *, IBindCtx *, LPCWSTR,IBaseFilter **) PURE; + STDMETHOD(ReconnectEx)(THIS_ IPin *, const AM_MEDIA_TYPE *) PURE; + STDMETHOD(RenderEx)(IPin *, DWORD, DWORD *) PURE; +}; +#undef INTERFACE +#endif + +#ifndef __IAMFilterMiscFlags_INTERFACE_DEFINED__ +#define __IAMFilterMiscFlags_INTERFACE_DEFINED__ +#define INTERFACE IAMFilterMiscFlags +DECLARE_INTERFACE_(IAMFilterMiscFlags ,IUnknown) +{ + STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + STDMETHOD_(ULONG,GetMiscFlags)(THIS) PURE; +}; +#undef INTERFACE +#endif + +#ifndef __IFileSourceFilter_INTERFACE_DEFINED__ +#define __IFileSourceFilter_INTERFACE_DEFINED__ +#define INTERFACE IFileSourceFilter +DECLARE_INTERFACE_(IFileSourceFilter ,IUnknown) +{ + STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + STDMETHOD(Load)(THIS_ LPCOLESTR, const AM_MEDIA_TYPE *) PURE; + STDMETHOD(GetCurFile)(THIS_ LPOLESTR *ppszFileName, AM_MEDIA_TYPE *) PURE; +}; +#undef INTERFACE +#endif + +#ifndef __IAMOpenProgress_INTERFACE_DEFINED__ +#define __IAMOpenProgress_INTERFACE_DEFINED__ +#define INTERFACE IAMOpenProgress +DECLARE_INTERFACE_(IAMOpenProgress ,IUnknown) +{ + STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + STDMETHOD(QueryProgress)(THIS_ LONGLONG *, LONGLONG *) PURE; + STDMETHOD(AbortOperation)(THIS) PURE; +}; +#undef INTERFACE +#endif + +#ifndef __IFilterChain_INTERFACE_DEFINED__ +#define __IFilterChain_INTERFACE_DEFINED__ +#define INTERFACE IFilterChain +DECLARE_INTERFACE_(IFilterChain ,IUnknown) +{ + STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + STDMETHOD(StartChain)(IBaseFilter *, IBaseFilter *) PURE; + STDMETHOD(PauseChain)(IBaseFilter *, IBaseFilter *) PURE; + STDMETHOD(StopChain)(IBaseFilter *, IBaseFilter *) PURE; + STDMETHOD(RemoveChain)(IBaseFilter *, IBaseFilter *) PURE; +}; +#undef INTERFACE +#endif + #endif diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowioreader.cpp b/src/plugins/mediaservices/directshow/mediaplayer/directshowioreader.cpp index 54446b8..7369099 100644 --- a/src/plugins/mediaservices/directshow/mediaplayer/directshowioreader.cpp +++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowioreader.cpp @@ -143,7 +143,7 @@ HRESULT DirectShowIOReader::RequestAllocator( return S_OK; } else { - *ppActual = com_new<IMemAllocator>(CLSID_MemoryAllocator); + *ppActual = com_new<IMemAllocator>(CLSID_MemoryAllocator, IID_IMemAllocator); if (*ppActual) { if ((*ppActual)->SetProperties(pProps, &actualProperties) != S_OK) { diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowiosource.cpp b/src/plugins/mediaservices/directshow/mediaplayer/directshowiosource.cpp index 1dca465..7b66d56 100644 --- a/src/plugins/mediaservices/directshow/mediaplayer/directshowiosource.cpp +++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowiosource.cpp @@ -121,6 +121,10 @@ void DirectShowIOSource::setAllocator(IMemAllocator *allocator) // IUnknown HRESULT DirectShowIOSource::QueryInterface(REFIID riid, void **ppvObject) { + // 2dd74950-a890-11d1-abe8-00a0c905f375 + static const GUID iid_IAmFilterMiscFlags = { + 0x2dd74950, 0xa890, 0x11d1, {0xab, 0xe8, 0x00, 0xa0, 0xc9, 0x05, 0xf3, 0x75}}; + if (!ppvObject) { return E_POINTER; } else if (riid == IID_IUnknown @@ -128,7 +132,7 @@ HRESULT DirectShowIOSource::QueryInterface(REFIID riid, void **ppvObject) || riid == IID_IMediaFilter || riid == IID_IBaseFilter) { *ppvObject = static_cast<IBaseFilter *>(this); - } else if (riid == IID_IAMFilterMiscFlags) { + } else if (riid == iid_IAmFilterMiscFlags) { *ppvObject = static_cast<IAMFilterMiscFlags *>(this); } else if (riid == IID_IPin) { *ppvObject = static_cast<IPin *>(this); @@ -414,8 +418,8 @@ HRESULT DirectShowIOSource::tryConnect(IPin *pin, const AM_MEDIA_TYPE *type) } else if (!m_allocator) { hr = VFW_E_NO_TRANSPORT; - if (IMemInputPin *memPin = com_cast<IMemInputPin>(pin)) { - if ((m_allocator = com_new<IMemAllocator>(CLSID_MemoryAllocator))) { + if (IMemInputPin *memPin = com_cast<IMemInputPin>(pin, IID_IMemInputPin)) { + if ((m_allocator = com_new<IMemAllocator>(CLSID_MemoryAllocator, IID_IMemAllocator))) { ALLOCATOR_PROPERTIES properties; if (memPin->GetAllocatorRequirements(&properties) == S_OK || m_allocator->GetProperties(&properties) == S_OK) { diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowiosource.h b/src/plugins/mediaservices/directshow/mediaplayer/directshowiosource.h index b626473..1d917df 100644 --- a/src/plugins/mediaservices/directshow/mediaplayer/directshowiosource.h +++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowiosource.h @@ -42,17 +42,17 @@ #ifndef DIRECTSHOWIOSOURCE_H #define DIRECTSHOWIOSOURCE_H +#include "directshowglobal.h" #include "directshowioreader.h" #include "directshowmediatype.h" #include "directshowmediatypelist.h" +#include <QtCore/qfile.h> QT_BEGIN_HEADER QT_BEGIN_NAMESPACE -#include <QtCore/qfile.h> - class DirectShowIOSource : public DirectShowMediaTypeList , public IBaseFilter diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowmediatype.cpp b/src/plugins/mediaservices/directshow/mediaplayer/directshowmediatype.cpp index f719b29..cf6d45b 100644 --- a/src/plugins/mediaservices/directshow/mediaplayer/directshowmediatype.cpp +++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowmediatype.cpp @@ -54,20 +54,20 @@ namespace static const TypeLookup qt_typeLookup[] = { - { QVideoFrame::Format_RGB32, MEDIASUBTYPE_RGB32 }, - { QVideoFrame::Format_BGR24, MEDIASUBTYPE_RGB24 }, - { QVideoFrame::Format_RGB565, MEDIASUBTYPE_RGB565 }, - { QVideoFrame::Format_RGB555, MEDIASUBTYPE_RGB555 }, - { QVideoFrame::Format_AYUV444, MEDIASUBTYPE_AYUV }, - { QVideoFrame::Format_YUYV, MEDIASUBTYPE_YUY2 }, - { QVideoFrame::Format_UYVY, MEDIASUBTYPE_UYVY }, - { QVideoFrame::Format_IMC1, MEDIASUBTYPE_IMC1 }, - { QVideoFrame::Format_IMC2, MEDIASUBTYPE_IMC2 }, - { QVideoFrame::Format_IMC3, MEDIASUBTYPE_IMC3 }, - { QVideoFrame::Format_IMC4, MEDIASUBTYPE_IMC4 }, - { QVideoFrame::Format_YV12, MEDIASUBTYPE_YV12 }, - { QVideoFrame::Format_NV12, MEDIASUBTYPE_NV12 }, - { QVideoFrame::Format_YUV420P, MEDIASUBTYPE_IYUV } + { QVideoFrame::Format_RGB32, /*MEDIASUBTYPE_RGB32*/ {0xe436eb7e, 0x524f, 0x11ce, {0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}} }, + { QVideoFrame::Format_BGR24, /*MEDIASUBTYPE_RGB24*/ {0xe436eb7d, 0x524f, 0x11ce, {0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}} }, + { QVideoFrame::Format_RGB565, /*MEDIASUBTYPE_RGB565*/ {0xe436eb7b, 0x524f, 0x11ce, {0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}} }, + { QVideoFrame::Format_RGB555, /*MEDIASUBTYPE_RGB555*/ {0xe436eb7c, 0x524f, 0x11ce, {0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}} }, + { QVideoFrame::Format_AYUV444, /*MEDIASUBTYPE_AYUV*/ {0x56555941, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}} }, + { QVideoFrame::Format_YUYV, /*MEDIASUBTYPE_YUY2*/ {0x32595559, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}} }, + { QVideoFrame::Format_UYVY, /*MEDIASUBTYPE_UYVY*/ {0x59565955, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}} }, + { QVideoFrame::Format_IMC1, /*MEDIASUBTYPE_IMC1*/ {0x31434D49, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}} }, + { QVideoFrame::Format_IMC2, /*MEDIASUBTYPE_IMC2*/ {0x32434D49, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}} }, + { QVideoFrame::Format_IMC3, /*MEDIASUBTYPE_IMC3*/ {0x33434D49, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}} }, + { QVideoFrame::Format_IMC4, /*MEDIASUBTYPE_IMC4*/ {0x34434D49, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}} }, + { QVideoFrame::Format_YV12, /*MEDIASUBTYPE_YV12*/ {0x32315659, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}} }, + { QVideoFrame::Format_NV12, /*MEDIASUBTYPE_NV12*/ {0x3231564E, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}} }, + { QVideoFrame::Format_YUV420P, /*MEDIASUBTYPE_IYUV*/ {0x56555949, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}} } }; } @@ -102,12 +102,16 @@ void DirectShowMediaType::freeData(AM_MEDIA_TYPE *type) GUID DirectShowMediaType::convertPixelFormat(QVideoFrame::PixelFormat format) { + // MEDIASUBTYPE_None; + static const GUID none = { + 0xe436eb8e, 0x524f, 0x11ce, {0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70} }; + const int count = sizeof(qt_typeLookup) / sizeof(TypeLookup); for (int i = 0; i < count; ++i) if (qt_typeLookup[i].pixelFormat == format) return qt_typeLookup[i].mediaType; - return MEDIASUBTYPE_None; + return none; } QVideoSurfaceFormat DirectShowMediaType::formatFromType(const AM_MEDIA_TYPE &type) diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowmetadatacontrol.cpp b/src/plugins/mediaservices/directshow/mediaplayer/directshowmetadatacontrol.cpp index 7b2552f..89821c4 100644 --- a/src/plugins/mediaservices/directshow/mediaplayer/directshowmetadatacontrol.cpp +++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowmetadatacontrol.cpp @@ -297,7 +297,7 @@ QVariant DirectShowMetaDataControl::metaData(QtMultimedia::MetaData key) const } if (string) { - value = QString::fromUtf16(string, ::SysStringLen(string)); + value = QString::fromUtf16(reinterpret_cast<ushort *>(string), ::SysStringLen(string)); ::SysFreeString(string); } @@ -344,7 +344,7 @@ void DirectShowMetaDataControl::updateGraph(IFilterGraph2 *graph, IBaseFilter *s if (m_headerInfo) m_headerInfo->Release(); - m_headerInfo = com_cast<IWMHeaderInfo>(source); + m_headerInfo = com_cast<IWMHeaderInfo>(source, IID_IWMHeaderInfo); #endif // DirectShowMediaPlayerService holds a lock at this point so defer emitting signals to a later // time. diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowmetadatacontrol.h b/src/plugins/mediaservices/directshow/mediaplayer/directshowmetadatacontrol.h index 966f9b8..9a81ba8 100644 --- a/src/plugins/mediaservices/directshow/mediaplayer/directshowmetadatacontrol.h +++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowmetadatacontrol.h @@ -42,9 +42,10 @@ #ifndef DIRECTSHOWMETADATACONTROL_H #define DIRECTSHOWMETADATACONTROL_H +#include "directshowglobal.h" + #include <QtMultimedia/qmetadatacontrol.h> -#include <dshow.h> #include <qnetwork.h> #ifndef QT_NO_WMSDK diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowplayercontrol.cpp b/src/plugins/mediaservices/directshow/mediaplayer/directshowplayercontrol.cpp index b024557..bb7bac3 100644 --- a/src/plugins/mediaservices/directshow/mediaplayer/directshowplayercontrol.cpp +++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowplayercontrol.cpp @@ -371,7 +371,7 @@ void DirectShowPlayerControl::updateAudioOutput(IBaseFilter *filter) if (m_audio) m_audio->Release(); - m_audio = com_cast<IBasicAudio>(filter); + m_audio = com_cast<IBasicAudio>(filter, IID_IBasicAudio); } void DirectShowPlayerControl::updateError(QMediaPlayer::Error error, const QString &errorString) diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.cpp b/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.cpp index 57f4bec..317fa5c 100644 --- a/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.cpp +++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.cpp @@ -56,8 +56,6 @@ #include <QtCore/qthread.h> #include <QtCore/qvarlengtharray.h> -#include <uuids.h> - Q_GLOBAL_STATIC(DirectShowEventLoop, qt_directShowEventLoop) QT_BEGIN_NAMESPACE @@ -80,11 +78,11 @@ private: DirectShowPlayerService::DirectShowPlayerService(QObject *parent) : QMediaService(parent) , m_playerControl(0) - , m_audioEndpointControl(0) , m_metaDataControl(0) , m_videoOutputControl(0) , m_videoRendererControl(0) , m_videoWindowControl(0) + , m_audioEndpointControl(0) , m_taskThread(0) , m_loop(qt_directShowEventLoop()) , m_pendingTasks(0) @@ -203,9 +201,12 @@ void DirectShowPlayerService::load(const QMediaContent &media, QIODevice *stream m_graphStatus = InvalidMedia; m_error = QMediaPlayer::ResourceError; } else { + // {36b73882-c2c8-11cf-8b46-00805f6cef60} + static const GUID iid_IFilterGraph2 = { + 0x36b73882, 0xc2c8, 0x11cf, {0x8b, 0x46, 0x00, 0x80, 0x5f, 0x6c, 0xef, 0x60} }; m_graphStatus = Loading; - m_graph = com_new<IFilterGraph2>(CLSID_FilterGraph); + m_graph = com_new<IFilterGraph2>(CLSID_FilterGraph, iid_IFilterGraph2); if (stream) m_pendingTasks = SetStreamSource; @@ -231,15 +232,22 @@ void DirectShowPlayerService::doSetUrlSource(QMutexLocker *locker) HRESULT hr = E_FAIL; -#ifndef QT_NO_WMSDK if (url.scheme() == QLatin1String("http") || url.scheme() == QLatin1String("https")) { - if (IFileSourceFilter *fileSource = com_new<IFileSourceFilter>(CLSID_WMAsfReader)) { + static const GUID clsid_WMAsfReader = { + 0x187463a0, 0x5bb7, 0x11d3, {0xac, 0xbe, 0x00, 0x80, 0xc7, 0x5e, 0x24, 0x6e} }; + + // {56a868a6-0ad4-11ce-b03a-0020af0ba770} + static const GUID iid_IFileSourceFilter = { + 0x56a868a6, 0x0ad4, 0x11ce, {0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70} }; + + if (IFileSourceFilter *fileSource = com_new<IFileSourceFilter>( + clsid_WMAsfReader, iid_IFileSourceFilter)) { locker->unlock(); - hr = fileSource->Load(url.toString().utf16(), 0); + hr = fileSource->Load(reinterpret_cast<const OLECHAR *>(url.toString().utf16()), 0); locker->relock(); if (SUCCEEDED(hr)) { - source = com_cast<IBaseFilter>(fileSource); + source = com_cast<IBaseFilter>(fileSource, IID_IBaseFilter); if (!SUCCEEDED(hr = m_graph->AddFilter(source, L"Source")) && source) { source->Release(); @@ -259,13 +267,11 @@ void DirectShowPlayerService::doSetUrlSource(QMutexLocker *locker) } if (!SUCCEEDED(hr)) { -#endif locker->unlock(); - hr = m_graph->AddSourceFilter(url.toString().utf16(), L"Source", &source); + hr = m_graph->AddSourceFilter( + reinterpret_cast<const OLECHAR *>(url.toString().utf16()), L"Source", &source); locker->relock(); -#ifndef QT_NO_WMSDK } -#endif if (SUCCEEDED(hr)) { m_executedTasks = SetSource; @@ -299,7 +305,7 @@ void DirectShowPlayerService::doSetUrlSource(QMutexLocker *locker) default: m_error = QMediaPlayer::ResourceError; m_errorString = QString(); - qWarning("DirectShowPlayerService::doSetUrlSource: Unresolved error code %x", hr); + qWarning("DirectShowPlayerService::doSetUrlSource: Unresolved error code %x", uint(hr)); break; } @@ -342,7 +348,7 @@ void DirectShowPlayerService::doRender(QMutexLocker *locker) { m_pendingTasks |= m_executedTasks & (Play | Pause); - if (IMediaControl *control = com_cast<IMediaControl>(m_graph)) { + if (IMediaControl *control = com_cast<IMediaControl>(m_graph, IID_IMediaControl)) { control->Stop(); control->Release(); } @@ -393,7 +399,7 @@ void DirectShowPlayerService::doRender(QMutexLocker *locker) locker->unlock(); HRESULT hr; if (SUCCEEDED(hr = graph->RenderEx( - pin, AM_RENDEREX_RENDERTOEXISTINGRENDERERS, 0))) { + pin, /*AM_RENDEREX_RENDERTOEXISTINGRENDERERS*/ 1, 0))) { rendered = true; } else if (renderHr == S_OK || renderHr == VFW_E_NO_DECOMPRESSOR){ renderHr = hr; @@ -448,7 +454,7 @@ void DirectShowPlayerService::doRender(QMutexLocker *locker) m_error = QMediaPlayer::ResourceError; m_errorString = QString(); qWarning("DirectShowPlayerService::doRender: Unresolved error code %x", - renderHr); + uint(renderHr)); } } @@ -462,11 +468,11 @@ void DirectShowPlayerService::doRender(QMutexLocker *locker) void DirectShowPlayerService::doFinalizeLoad(QMutexLocker *locker) { if (m_graphStatus != Loaded) { - if (IMediaEvent *event = com_cast<IMediaEvent>(m_graph)) { + if (IMediaEvent *event = com_cast<IMediaEvent>(m_graph, IID_IMediaEvent)) { event->GetEventHandle(reinterpret_cast<OAEVENT *>(&m_eventHandle)); event->Release(); } - if (IMediaSeeking *seeking = com_cast<IMediaSeeking>(m_graph)) { + if (IMediaSeeking *seeking = com_cast<IMediaSeeking>(m_graph, IID_IMediaSeeking)) { LONGLONG duration = 0; seeking->GetDuration(&duration); m_duration = duration / 10; @@ -496,7 +502,12 @@ void DirectShowPlayerService::releaseGraph() { if (m_graph) { if (m_executingTask != 0) { - if (IAMOpenProgress *progress = com_cast<IAMOpenProgress>(m_graph)) { + // {8E1C39A1-DE53-11cf-AA63-0080C744528D} + static const GUID iid_IAMOpenProgress = { + 0x8E1C39A1, 0xDE53, 0x11cf, {0xAA, 0x63, 0x00, 0x80, 0xC7, 0x44, 0x52, 0x8D} }; + + if (IAMOpenProgress *progress = com_cast<IAMOpenProgress>( + m_graph, iid_IAMOpenProgress)) { progress->AbortOperation(); progress->Release(); } @@ -515,7 +526,7 @@ void DirectShowPlayerService::doReleaseGraph(QMutexLocker *locker) { Q_UNUSED(locker); - if (IMediaControl *control = com_cast<IMediaControl>(m_graph)) { + if (IMediaControl *control = com_cast<IMediaControl>(m_graph, IID_IMediaControl)) { control->Stop(); control->Release(); } @@ -630,7 +641,7 @@ void DirectShowPlayerService::play() void DirectShowPlayerService::doPlay(QMutexLocker *locker) { - if (IMediaControl *control = com_cast<IMediaControl>(m_graph)) { + if (IMediaControl *control = com_cast<IMediaControl>(m_graph, IID_IMediaControl)) { locker->unlock(); HRESULT hr = control->Run(); locker->relock(); @@ -644,7 +655,7 @@ void DirectShowPlayerService::doPlay(QMutexLocker *locker) } else { m_error = QMediaPlayer::ResourceError; m_errorString = QString(); - qWarning("DirectShowPlayerService::doPlay: Unresolved error code %x", hr); + qWarning("DirectShowPlayerService::doPlay: Unresolved error code %x", uint(hr)); QCoreApplication::postEvent(this, new QEvent(QEvent::Type(Error))); } @@ -672,7 +683,7 @@ void DirectShowPlayerService::pause() void DirectShowPlayerService::doPause(QMutexLocker *locker) { - if (IMediaControl *control = com_cast<IMediaControl>(m_graph)) { + if (IMediaControl *control = com_cast<IMediaControl>(m_graph, IID_IMediaControl)) { locker->unlock(); HRESULT hr = control->Pause(); locker->relock(); @@ -680,7 +691,7 @@ void DirectShowPlayerService::doPause(QMutexLocker *locker) control->Release(); if (SUCCEEDED(hr)) { - if (IMediaSeeking *seeking = com_cast<IMediaSeeking>(m_graph)) { + if (IMediaSeeking *seeking = com_cast<IMediaSeeking>(m_graph, IID_IMediaSeeking)) { LONGLONG position = 0; seeking->GetCurrentPosition(&position); @@ -697,7 +708,7 @@ void DirectShowPlayerService::doPause(QMutexLocker *locker) } else { m_error = QMediaPlayer::ResourceError; m_errorString = QString(); - qWarning("DirectShowPlayerService::doPause: Unresolved error code %x", hr); + qWarning("DirectShowPlayerService::doPause: Unresolved error code %x", uint(hr)); QCoreApplication::postEvent(this, new QEvent(QEvent::Type(Error))); } @@ -723,12 +734,12 @@ void DirectShowPlayerService::stop() void DirectShowPlayerService::doStop(QMutexLocker *locker) { if (m_executedTasks & (Play | Pause)) { - if (IMediaControl *control = com_cast<IMediaControl>(m_graph)) { + if (IMediaControl *control = com_cast<IMediaControl>(m_graph, IID_IMediaControl)) { control->Stop(); control->Release(); } - if (IMediaSeeking *seeking = com_cast<IMediaSeeking>(m_graph)) { + if (IMediaSeeking *seeking = com_cast<IMediaSeeking>(m_graph, IID_IMediaSeeking)) { LONGLONG position = 0; seeking->GetCurrentPosition(&position); @@ -763,7 +774,7 @@ void DirectShowPlayerService::setRate(qreal rate) void DirectShowPlayerService::doSetRate(QMutexLocker *locker) { - if (IMediaSeeking *seeking = com_cast<IMediaSeeking>(m_graph)) { + if (IMediaSeeking *seeking = com_cast<IMediaSeeking>(m_graph, IID_IMediaSeeking)) { // Cache current values as we can't query IMediaSeeking during a seek due to the // possibility of a deadlock when flushing the VideoSurfaceFilter. LONGLONG currentPosition = 0; @@ -801,7 +812,7 @@ qint64 DirectShowPlayerService::position() const if (m_graphStatus == Loaded) { if (m_executingTask == Seek || m_executingTask == SetRate) { return m_position; - } else if (IMediaSeeking *seeking = com_cast<IMediaSeeking>(m_graph)) { + } else if (IMediaSeeking *seeking = com_cast<IMediaSeeking>(m_graph, IID_IMediaSeeking)) { LONGLONG position = 0; seeking->GetCurrentPosition(&position); @@ -822,7 +833,7 @@ QMediaTimeRange DirectShowPlayerService::availablePlaybackRanges() const if (m_graphStatus == Loaded) { if (m_executingTask == Seek || m_executingTask == SetRate) { return m_playbackRange; - } else if (IMediaSeeking *seeking = com_cast<IMediaSeeking>(m_graph)) { + } else if (IMediaSeeking *seeking = com_cast<IMediaSeeking>(m_graph, IID_IMediaSeeking)) { LONGLONG minimum = 0; LONGLONG maximum = 0; @@ -850,7 +861,7 @@ void DirectShowPlayerService::seek(qint64 position) void DirectShowPlayerService::doSeek(QMutexLocker *locker) { - if (IMediaSeeking *seeking = com_cast<IMediaSeeking>(m_graph)) { + if (IMediaSeeking *seeking = com_cast<IMediaSeeking>(m_graph, IID_IMediaSeeking)) { LONGLONG seekPosition = LONGLONG(m_position) * 10; // Cache current values as we can't query IMediaSeeking during a seek due to the @@ -886,7 +897,8 @@ int DirectShowPlayerService::bufferStatus() const #ifndef QT_NO_WMSDK QMutexLocker locker(const_cast<QMutex *>(&m_mutex)); - if (IWMReaderAdvanced2 *reader = com_cast<IWMReaderAdvanced2>(m_source)) { + if (IWMReaderAdvanced2 *reader = com_cast<IWMReaderAdvanced2>( + m_source, IID_IWMReaderAdvanced2)) { DWORD percentage = 0; reader->GetBufferProgress(&percentage, 0); @@ -949,7 +961,7 @@ void DirectShowPlayerService::doReleaseAudioOutput(QMutexLocker *locker) { m_pendingTasks |= m_executedTasks & (Play | Pause); - if (IMediaControl *control = com_cast<IMediaControl>(m_graph)) { + if (IMediaControl *control = com_cast<IMediaControl>(m_graph, IID_IMediaControl)) { control->Stop(); control->Release(); } @@ -960,7 +972,11 @@ void DirectShowPlayerService::doReleaseAudioOutput(QMutexLocker *locker) decoder->AddRef(); } - if (IFilterChain *chain = com_cast<IFilterChain>(m_graph)) { + // {DCFBDCF6-0DC2-45f5-9AB2-7C330EA09C29} + static const GUID iid_IFilterChain = { + 0xDCFBDCF6, 0x0DC2, 0x45f5, {0x9A, 0xB2, 0x7C, 0x33, 0x0E, 0xA0, 0x9C, 0x29} }; + + if (IFilterChain *chain = com_cast<IFilterChain>(m_graph, iid_IFilterChain)) { chain->RemoveChain(decoder, m_audioOutput); chain->Release(); } else { @@ -1018,7 +1034,7 @@ void DirectShowPlayerService::doReleaseVideoOutput(QMutexLocker *locker) { m_pendingTasks |= m_executedTasks & (Play | Pause); - if (IMediaControl *control = com_cast<IMediaControl>(m_graph)) { + if (IMediaControl *control = com_cast<IMediaControl>(m_graph, IID_IMediaControl)) { control->Stop(); control->Release(); } @@ -1035,7 +1051,11 @@ void DirectShowPlayerService::doReleaseVideoOutput(QMutexLocker *locker) decoder->AddRef(); } - if (IFilterChain *chain = com_cast<IFilterChain>(m_graph)) { + // {DCFBDCF6-0DC2-45f5-9AB2-7C330EA09C29} + static const GUID iid_IFilterChain = { + 0xDCFBDCF6, 0x0DC2, 0x45f5, {0x9A, 0xB2, 0x7C, 0x33, 0x0E, 0xA0, 0x9C, 0x29} }; + + if (IFilterChain *chain = com_cast<IFilterChain>(m_graph, iid_IFilterChain)) { chain->RemoveChain(decoder, m_videoOutput); chain->Release(); } else { @@ -1118,7 +1138,7 @@ void DirectShowPlayerService::videoOutputChanged() void DirectShowPlayerService::graphEvent(QMutexLocker *locker) { - if (IMediaEvent *event = com_cast<IMediaEvent>(m_graph)) { + if (IMediaEvent *event = com_cast<IMediaEvent>(m_graph, IID_IMediaEvent)) { long eventCode; LONG_PTR param1; LONG_PTR param2; @@ -1137,7 +1157,7 @@ void DirectShowPlayerService::graphEvent(QMutexLocker *locker) m_buffering = false; m_atEnd = true; - if (IMediaSeeking *seeking = com_cast<IMediaSeeking>(m_graph)) { + if (IMediaSeeking *seeking = com_cast<IMediaSeeking>(m_graph, IID_IMediaSeeking)) { LONGLONG position = 0; seeking->GetCurrentPosition(&position); @@ -1149,7 +1169,7 @@ void DirectShowPlayerService::graphEvent(QMutexLocker *locker) QCoreApplication::postEvent(this, new QEvent(QEvent::Type(EndOfMedia))); break; case EC_LENGTH_CHANGED: - if (IMediaSeeking *seeking = com_cast<IMediaSeeking>(m_graph)) { + if (IMediaSeeking *seeking = com_cast<IMediaSeeking>(m_graph, IID_IMediaSeeking)) { LONGLONG duration = 0; seeking->GetDuration(&duration); m_duration = duration / 10; diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.h b/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.h index a5da9a4..23515d0 100644 --- a/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.h +++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowplayerservice.h @@ -57,7 +57,6 @@ #include <QtCore/private/qwineventnotifier_p.h> - QT_BEGIN_HEADER QT_BEGIN_NAMESPACE diff --git a/src/plugins/mediaservices/directshow/mediaplayer/mediaplayer.pri b/src/plugins/mediaservices/directshow/mediaplayer/mediaplayer.pri index a7adb38..99a1191 100644 --- a/src/plugins/mediaservices/directshow/mediaplayer/mediaplayer.pri +++ b/src/plugins/mediaservices/directshow/mediaplayer/mediaplayer.pri @@ -2,7 +2,7 @@ INCLUDEPATH += $$PWD DEFINES += QMEDIA_DIRECTSHOW_PLAYER -win32-g++: DEFINES += QT_NO_WMSDK +!contains(QT_CONFIG, wmsdk): DEFINES += QT_NO_WMSDK HEADERS += \ $$PWD/directshowaudioendpointcontrol.h \ diff --git a/src/plugins/mediaservices/directshow/mediaplayer/videosurfacefilter.cpp b/src/plugins/mediaservices/directshow/mediaplayer/videosurfacefilter.cpp index 7b4aad5..a471c68 100644 --- a/src/plugins/mediaservices/directshow/mediaplayer/videosurfacefilter.cpp +++ b/src/plugins/mediaservices/directshow/mediaplayer/videosurfacefilter.cpp @@ -84,7 +84,11 @@ VideoSurfaceFilter::~VideoSurfaceFilter() } HRESULT VideoSurfaceFilter::QueryInterface(REFIID riid, void **ppvObject) -{ +{ + // 2dd74950-a890-11d1-abe8-00a0c905f375 + static const GUID iid_IAmFilterMiscFlags = { + 0x2dd74950, 0xa890, 0x11d1, {0xab, 0xe8, 0x00, 0xa0, 0xc9, 0x05, 0xf3, 0x75} }; + if (!ppvObject) { return E_POINTER; } else if (riid == IID_IUnknown @@ -92,7 +96,7 @@ HRESULT VideoSurfaceFilter::QueryInterface(REFIID riid, void **ppvObject) || riid == IID_IMediaFilter || riid == IID_IBaseFilter) { *ppvObject = static_cast<IBaseFilter *>(this); - } else if (riid == IID_IAMFilterMiscFlags) { + } else if (riid == iid_IAmFilterMiscFlags) { *ppvObject = static_cast<IAMFilterMiscFlags *>(this); } else if (riid == IID_IPin) { *ppvObject = static_cast<IPin *>(this); @@ -446,7 +450,7 @@ HRESULT VideoSurfaceFilter::EndOfStream() QMutexLocker locker(&m_mutex); if (!m_sampleScheduler.scheduleEndOfStream()) { - if (IMediaEventSink *sink = com_cast<IMediaEventSink>(m_graph)) { + if (IMediaEventSink *sink = com_cast<IMediaEventSink>(m_graph, IID_IMediaEventSink)) { sink->Notify( EC_COMPLETE, S_OK, @@ -570,6 +574,10 @@ void VideoSurfaceFilter::supportedFormatsChanged() { QMutexLocker locker(&m_mutex); + // MEDIASUBTYPE_None; + static const GUID none = { + 0xe436eb8e, 0x524f, 0x11ce, {0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70} }; + QList<QVideoFrame::PixelFormat> formats = m_surface->supportedPixelFormats(); QVector<AM_MEDIA_TYPE> mediaTypes; @@ -588,7 +596,7 @@ void VideoSurfaceFilter::supportedFormatsChanged() foreach (QVideoFrame::PixelFormat format, formats) { type.subtype = DirectShowMediaType::convertPixelFormat(format); - if (type.subtype != MEDIASUBTYPE_None) + if (type.subtype != none) mediaTypes.append(type); } @@ -610,7 +618,7 @@ void VideoSurfaceFilter::sampleReady() sample->Release(); if (eos) { - if (IMediaEventSink *sink = com_cast<IMediaEventSink>(m_graph)) { + if (IMediaEventSink *sink = com_cast<IMediaEventSink>(m_graph, IID_IMediaEventSink)) { sink->Notify( EC_COMPLETE, S_OK, diff --git a/src/plugins/mediaservices/directshow/mediaplayer/videosurfacefilter.h b/src/plugins/mediaservices/directshow/mediaplayer/videosurfacefilter.h index 8f3a101..0607fd3 100644 --- a/src/plugins/mediaservices/directshow/mediaplayer/videosurfacefilter.h +++ b/src/plugins/mediaservices/directshow/mediaplayer/videosurfacefilter.h @@ -41,6 +41,7 @@ #ifndef VIDEOSURFACEFILTER_H #define VIDEOSURFACEFILTER_H +#include "directshowglobal.h" #include "directshowmediatypelist.h" #include "directshowsamplescheduler.h" #include "directshowmediatype.h" @@ -52,9 +53,6 @@ #include <QtCore/qstring.h> #include <QtCore/qwaitcondition.h> -#include <dshow.h> - - QT_BEGIN_HEADER QT_BEGIN_NAMESPACE diff --git a/src/plugins/mediaservices/directshow/mediaplayer/vmr9videowindowcontrol.cpp b/src/plugins/mediaservices/directshow/mediaplayer/vmr9videowindowcontrol.cpp index a564e14..b1ddd98 100644 --- a/src/plugins/mediaservices/directshow/mediaplayer/vmr9videowindowcontrol.cpp +++ b/src/plugins/mediaservices/directshow/mediaplayer/vmr9videowindowcontrol.cpp @@ -48,7 +48,7 @@ QT_BEGIN_NAMESPACE Vmr9VideoWindowControl::Vmr9VideoWindowControl(QObject *parent) : QVideoWindowControl(parent) - , m_filter(com_new<IBaseFilter>(CLSID_VideoMixingRenderer9)) + , m_filter(com_new<IBaseFilter>(CLSID_VideoMixingRenderer9, IID_IBaseFilter)) , m_windowId(0) , m_dirtyValues(0) , m_brightness(0) @@ -57,7 +57,7 @@ Vmr9VideoWindowControl::Vmr9VideoWindowControl(QObject *parent) , m_saturation(0) , m_fullScreen(false) { - if (IVMRFilterConfig9 *config = com_cast<IVMRFilterConfig9>(m_filter)) { + if (IVMRFilterConfig9 *config = com_cast<IVMRFilterConfig9>(m_filter, IID_IVMRFilterConfig9)) { config->SetRenderingMode(VMR9Mode_Windowless); config->SetNumberOfStreams(1); config->Release(); @@ -81,7 +81,8 @@ void Vmr9VideoWindowControl::setWinId(WId id) { m_windowId = id; - if (IVMRWindowlessControl9 *control = com_cast<IVMRWindowlessControl9>(m_filter)) { + if (IVMRWindowlessControl9 *control = com_cast<IVMRWindowlessControl9>( + m_filter, IID_IVMRWindowlessControl9)) { control->SetVideoClippingWindow(m_windowId); control->Release(); } @@ -91,7 +92,8 @@ QRect Vmr9VideoWindowControl::displayRect() const { QRect rect; - if (IVMRWindowlessControl9 *control = com_cast<IVMRWindowlessControl9>(m_filter)) { + if (IVMRWindowlessControl9 *control = com_cast<IVMRWindowlessControl9>( + m_filter, IID_IVMRWindowlessControl9)) { RECT sourceRect; RECT displayRect; @@ -109,7 +111,8 @@ QRect Vmr9VideoWindowControl::displayRect() const void Vmr9VideoWindowControl::setDisplayRect(const QRect &rect) { - if (IVMRWindowlessControl9 *control = com_cast<IVMRWindowlessControl9>(m_filter)) { + if (IVMRWindowlessControl9 *control = com_cast<IVMRWindowlessControl9>( + m_filter, IID_IVMRWindowlessControl9)) { RECT sourceRect = { 0, 0, 0, 0 }; RECT displayRect = { rect.left(), rect.top(), rect.right(), rect.bottom() }; @@ -134,7 +137,8 @@ void Vmr9VideoWindowControl::repaint() if (QWidget *widget = QWidget::find(m_windowId)) { HDC dc = widget->getDC(); - if (IVMRWindowlessControl9 *control = com_cast<IVMRWindowlessControl9>(m_filter)) { + if (IVMRWindowlessControl9 *control = com_cast<IVMRWindowlessControl9>( + m_filter, IID_IVMRWindowlessControl9)) { control->RepaintVideo(m_windowId, dc); control->Release(); } @@ -146,7 +150,8 @@ QSize Vmr9VideoWindowControl::nativeSize() const { QSize size; - if (IVMRWindowlessControl9 *control = com_cast<IVMRWindowlessControl9>(m_filter)) { + if (IVMRWindowlessControl9 *control = com_cast<IVMRWindowlessControl9>( + m_filter, IID_IVMRWindowlessControl9)) { LONG width; LONG height; @@ -161,7 +166,8 @@ QVideoWidget::AspectRatioMode Vmr9VideoWindowControl::aspectRatioMode() const { QVideoWidget::AspectRatioMode mode = QVideoWidget::KeepAspectRatio; - if (IVMRWindowlessControl9 *control = com_cast<IVMRWindowlessControl9>(m_filter)) { + if (IVMRWindowlessControl9 *control = com_cast<IVMRWindowlessControl9>( + m_filter, IID_IVMRWindowlessControl9)) { DWORD arMode; if (control->GetAspectRatioMode(&arMode) == S_OK && arMode == VMR9ARMode_None) @@ -173,7 +179,8 @@ QVideoWidget::AspectRatioMode Vmr9VideoWindowControl::aspectRatioMode() const void Vmr9VideoWindowControl::setAspectRatioMode(QVideoWidget::AspectRatioMode mode) { - if (IVMRWindowlessControl9 *control = com_cast<IVMRWindowlessControl9>(m_filter)) { + if (IVMRWindowlessControl9 *control = com_cast<IVMRWindowlessControl9>( + m_filter, IID_IVMRWindowlessControl9)) { switch (mode) { case QVideoWidget::IgnoreAspectRatio: control->SetAspectRatioMode(VMR9ARMode_None); @@ -254,7 +261,7 @@ void Vmr9VideoWindowControl::setSaturation(int saturation) void Vmr9VideoWindowControl::setProcAmpValues() { - if (IVMRMixerControl9 *control = com_cast<IVMRMixerControl9>(m_filter)) { + if (IVMRMixerControl9 *control = com_cast<IVMRMixerControl9>(m_filter, IID_IVMRMixerControl9)) { VMR9ProcAmpControl procAmp; procAmp.dwSize = sizeof(VMR9ProcAmpControl); procAmp.dwFlags = m_dirtyValues; diff --git a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp index 4d0ffe4..eff6ea4 100644 --- a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp +++ b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp @@ -45,6 +45,8 @@ #include <gst/gstversion.h> +QT_BEGIN_NAMESPACE + struct QGstreamerMetaDataKeyLookup { QtMultimedia::MetaData key; @@ -202,3 +204,6 @@ void QGstreamerMetaDataProvider::updateTags() { emit metaDataChanged(); } + +QT_END_NAMESPACE + diff --git a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayercontrol.cpp b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayercontrol.cpp index d417266..2d7aaa8 100644 --- a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayercontrol.cpp +++ b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayercontrol.cpp @@ -54,6 +54,8 @@ #include <fcntl.h> #include <unistd.h> +QT_BEGIN_NAMESPACE + QGstreamerPlayerControl::QGstreamerPlayerControl(QGstreamerPlayerSession *session, QObject *parent) : QMediaPlayerControl(parent) , m_session(session) @@ -341,3 +343,6 @@ void QGstreamerPlayerControl::closeFifo() m_bufferOffset = 0; } } + +QT_END_NAMESPACE + diff --git a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.cpp b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.cpp index 2e5d10f..600621e 100644 --- a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.cpp +++ b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.cpp @@ -51,6 +51,9 @@ //#define USE_PLAYBIN2 + +QT_BEGIN_NAMESPACE + QGstreamerPlayerSession::QGstreamerPlayerSession(QObject *parent) :QObject(parent), m_state(QMediaPlayer::StoppedState), @@ -710,3 +713,6 @@ void QGstreamerPlayerSession::getStreamsInfo() emit streamsChanged(); } + +QT_END_NAMESPACE + diff --git a/src/plugins/mediaservices/gstreamer/qgstreamerbushelper.cpp b/src/plugins/mediaservices/gstreamer/qgstreamerbushelper.cpp index 59ae5be..5049fa1 100644 --- a/src/plugins/mediaservices/gstreamer/qgstreamerbushelper.cpp +++ b/src/plugins/mediaservices/gstreamer/qgstreamerbushelper.cpp @@ -45,6 +45,7 @@ #include "qgstreamerbushelper.h" +QT_BEGIN_NAMESPACE #ifndef QT_NO_GLIB class QGstreamerBusHelperPrivate : public QObject @@ -200,4 +201,6 @@ void QGstreamerBusHelper::installSyncEventFilter(QGstreamerSyncEventFilter *filt d->filter = filter; } +QT_END_NAMESPACE + #include "qgstreamerbushelper.moc" diff --git a/src/plugins/mediaservices/gstreamer/qgstreamermessage.cpp b/src/plugins/mediaservices/gstreamer/qgstreamermessage.cpp index 0a689d9..863b6d4 100644 --- a/src/plugins/mediaservices/gstreamer/qgstreamermessage.cpp +++ b/src/plugins/mediaservices/gstreamer/qgstreamermessage.cpp @@ -44,11 +44,13 @@ #include "qgstreamermessage.h" +QT_BEGIN_NAMESPACE + static int wuchi = qRegisterMetaType<QGstreamerMessage>(); /*! - \class QGstreamerMessage + \class gstreamer::QGstreamerMessage \internal */ @@ -91,3 +93,5 @@ QGstreamerMessage& QGstreamerMessage::operator=(QGstreamerMessage const& rhs) return *this; } + +QT_END_NAMESPACE diff --git a/src/plugins/mediaservices/gstreamer/qgstreamervideoinputdevicecontrol.cpp b/src/plugins/mediaservices/gstreamer/qgstreamervideoinputdevicecontrol.cpp index 94ae847..406cefe11 100644 --- a/src/plugins/mediaservices/gstreamer/qgstreamervideoinputdevicecontrol.cpp +++ b/src/plugins/mediaservices/gstreamer/qgstreamervideoinputdevicecontrol.cpp @@ -57,6 +57,9 @@ #include <sys/mman.h> #include <linux/videodev2.h> + +QT_BEGIN_NAMESPACE + QGstreamerVideoInputDeviceControl::QGstreamerVideoInputDeviceControl(QObject *parent) :QVideoDeviceControl(parent), m_selectedDevice(0) { @@ -155,3 +158,6 @@ void QGstreamerVideoInputDeviceControl::update() ::close(fd); } } + +QT_END_NAMESPACE + diff --git a/src/plugins/mediaservices/gstreamer/qgstreamervideooutputcontrol.cpp b/src/plugins/mediaservices/gstreamer/qgstreamervideooutputcontrol.cpp index decf524..f406bff 100644 --- a/src/plugins/mediaservices/gstreamer/qgstreamervideooutputcontrol.cpp +++ b/src/plugins/mediaservices/gstreamer/qgstreamervideooutputcontrol.cpp @@ -41,6 +41,8 @@ #include "qgstreamervideooutputcontrol.h" +QT_BEGIN_NAMESPACE + QGstreamerVideoOutputControl::QGstreamerVideoOutputControl(QObject *parent) : QVideoOutputControl(parent) , m_output(NoOutput) @@ -70,3 +72,6 @@ void QGstreamerVideoOutputControl::setOutput(Output output) if (m_output != output) emit outputChanged(m_output = output); } + +QT_END_NAMESPACE + diff --git a/src/plugins/mediaservices/gstreamer/qgstreamervideooverlay.cpp b/src/plugins/mediaservices/gstreamer/qgstreamervideooverlay.cpp index 6c6c802..846a24a 100644 --- a/src/plugins/mediaservices/gstreamer/qgstreamervideooverlay.cpp +++ b/src/plugins/mediaservices/gstreamer/qgstreamervideooverlay.cpp @@ -46,6 +46,8 @@ #include "qx11videosurface.h" +QT_BEGIN_NAMESPACE + QGstreamerVideoOverlay::QGstreamerVideoOverlay(QObject *parent) : QVideoWindowControl(parent) , m_surface(new QX11VideoSurface) @@ -208,3 +210,6 @@ void QGstreamerVideoOverlay::setScaledDisplayRect() break; }; } + +QT_END_NAMESPACE + diff --git a/src/plugins/mediaservices/gstreamer/qgstreamervideorenderer.cpp b/src/plugins/mediaservices/gstreamer/qgstreamervideorenderer.cpp index 25a53cf..1f03990 100644 --- a/src/plugins/mediaservices/gstreamer/qgstreamervideorenderer.cpp +++ b/src/plugins/mediaservices/gstreamer/qgstreamervideorenderer.cpp @@ -47,6 +47,9 @@ #include <gst/gst.h> + +QT_BEGIN_NAMESPACE + QGstreamerVideoRenderer::QGstreamerVideoRenderer(QObject *parent) :QVideoRendererControl(parent),m_videoSink(0) { @@ -80,3 +83,6 @@ void QGstreamerVideoRenderer::setSurface(QAbstractVideoSurface *surface) m_surface = surface; } +QT_END_NAMESPACE + + diff --git a/src/plugins/mediaservices/gstreamer/qgstreamervideorendererinterface.cpp b/src/plugins/mediaservices/gstreamer/qgstreamervideorendererinterface.cpp index 0a1c20d..886a064 100644 --- a/src/plugins/mediaservices/gstreamer/qgstreamervideorendererinterface.cpp +++ b/src/plugins/mediaservices/gstreamer/qgstreamervideorendererinterface.cpp @@ -41,6 +41,12 @@ #include "qgstreamervideorendererinterface.h" + +QT_BEGIN_NAMESPACE + QGstreamerVideoRendererInterface::~QGstreamerVideoRendererInterface() { } + +QT_END_NAMESPACE + diff --git a/src/plugins/mediaservices/gstreamer/qgstreamervideorendererinterface.h b/src/plugins/mediaservices/gstreamer/qgstreamervideorendererinterface.h index 39deee8..c63a757 100644 --- a/src/plugins/mediaservices/gstreamer/qgstreamervideorendererinterface.h +++ b/src/plugins/mediaservices/gstreamer/qgstreamervideorendererinterface.h @@ -59,11 +59,11 @@ public: virtual void precessNewStream() {} }; -QT_END_NAMESPACE - #define QGstreamerVideoRendererInterface_iid "com.nokia.Qt.QGstreamerVideoRendererInterface/1.0" Q_DECLARE_INTERFACE(QGstreamerVideoRendererInterface, QGstreamerVideoRendererInterface_iid) +QT_END_NAMESPACE + QT_END_HEADER #endif diff --git a/src/plugins/mediaservices/gstreamer/qgstreamervideowidget.cpp b/src/plugins/mediaservices/gstreamer/qgstreamervideowidget.cpp index 1d8d43d..47fb451 100644 --- a/src/plugins/mediaservices/gstreamer/qgstreamervideowidget.cpp +++ b/src/plugins/mediaservices/gstreamer/qgstreamervideowidget.cpp @@ -51,6 +51,9 @@ #include <gst/interfaces/xoverlay.h> #include <gst/interfaces/propertyprobe.h> + +QT_BEGIN_NAMESPACE + class QGstreamerVideoWidget : public QWidget { public: @@ -320,3 +323,6 @@ void QGstreamerVideoWidgetControl::setSaturation(int saturation) emit saturationChanged(saturation); } } + +QT_END_NAMESPACE + diff --git a/src/plugins/mediaservices/gstreamer/qgstvideobuffer.cpp b/src/plugins/mediaservices/gstreamer/qgstvideobuffer.cpp index 9519db6..76289bf 100644 --- a/src/plugins/mediaservices/gstreamer/qgstvideobuffer.cpp +++ b/src/plugins/mediaservices/gstreamer/qgstvideobuffer.cpp @@ -42,6 +42,8 @@ #include "qgstvideobuffer.h" +QT_BEGIN_NAMESPACE + QGstVideoBuffer::QGstVideoBuffer(GstBuffer *buffer, int bytesPerLine) : QAbstractVideoBuffer(NoHandle) , m_buffer(buffer) @@ -95,3 +97,5 @@ void QGstVideoBuffer::unmap() m_mode = NotMapped; } +QT_END_NAMESPACE + diff --git a/src/plugins/mediaservices/gstreamer/qgstxvimagebuffer.cpp b/src/plugins/mediaservices/gstreamer/qgstxvimagebuffer.cpp index 5b99817..b2e633d 100644 --- a/src/plugins/mediaservices/gstreamer/qgstxvimagebuffer.cpp +++ b/src/plugins/mediaservices/gstreamer/qgstxvimagebuffer.cpp @@ -47,6 +47,9 @@ #include "qgstxvimagebuffer.h" #include "qvideosurfacegstsink.h" + +QT_BEGIN_NAMESPACE + GstBufferClass *QGstXvImageBuffer::parent_class = NULL; GType QGstXvImageBuffer::get_type(void) @@ -274,3 +277,6 @@ void QGstXvImageBufferPool::destroyBuffer(QGstXvImageBuffer *xvBuffer) if (m_imagesToDestroy.size() == 1) QMetaObject::invokeMethod(this, "queuedDestroy", Qt::QueuedConnection); } + +QT_END_NAMESPACE + diff --git a/src/plugins/mediaservices/gstreamer/qgstxvimagebuffer.h b/src/plugins/mediaservices/gstreamer/qgstxvimagebuffer.h index beeb01f..30f77d1 100644 --- a/src/plugins/mediaservices/gstreamer/qgstxvimagebuffer.h +++ b/src/plugins/mediaservices/gstreamer/qgstxvimagebuffer.h @@ -56,14 +56,13 @@ #include <X11/extensions/Xv.h> #include <X11/extensions/Xvlib.h> - #include <gst/gst.h> + QT_BEGIN_HEADER QT_BEGIN_NAMESPACE - class QGstXvImageBufferPool; struct QGstXvImageBuffer { @@ -82,7 +81,6 @@ struct QGstXvImageBuffer { const QAbstractVideoBuffer::HandleType XvHandleType = QAbstractVideoBuffer::HandleType(4); -Q_DECLARE_METATYPE(XvImage*) class QGstXvImageBufferPool : public QObject { @@ -125,6 +123,8 @@ private: QT_END_NAMESPACE +Q_DECLARE_METATYPE(::XvImage*) + QT_END_HEADER diff --git a/src/plugins/mediaservices/gstreamer/qvideosurfacegstsink.cpp b/src/plugins/mediaservices/gstreamer/qvideosurfacegstsink.cpp index 402a225..76d87ce 100644 --- a/src/plugins/mediaservices/gstreamer/qvideosurfacegstsink.cpp +++ b/src/plugins/mediaservices/gstreamer/qvideosurfacegstsink.cpp @@ -52,8 +52,11 @@ #include "qgstxvimagebuffer.h" + Q_DECLARE_METATYPE(QVideoSurfaceFormat) +QT_BEGIN_NAMESPACE + QVideoSurfaceGstDelegate::QVideoSurfaceGstDelegate(QAbstractVideoSurface *surface) : m_surface(surface) , m_renderReturn(GST_FLOW_ERROR) @@ -691,3 +694,6 @@ GstFlowReturn QVideoSurfaceGstSink::render(GstBaseSink *base, GstBuffer *buffer) return sink->delegate->render(buffer); } +QT_END_NAMESPACE + + diff --git a/src/plugins/mediaservices/gstreamer/qx11videosurface.cpp b/src/plugins/mediaservices/gstreamer/qx11videosurface.cpp index 6e282ff..cbd5a76 100644 --- a/src/plugins/mediaservices/gstreamer/qx11videosurface.cpp +++ b/src/plugins/mediaservices/gstreamer/qx11videosurface.cpp @@ -46,7 +46,9 @@ #include "qx11videosurface.h" -Q_DECLARE_METATYPE(XvImage*); +Q_DECLARE_METATYPE(::XvImage*); + +QT_BEGIN_NAMESPACE static QAbstractVideoBuffer::HandleType XvHandleType = QAbstractVideoBuffer::HandleType(4); @@ -507,3 +509,5 @@ void QX11VideoSurface::querySupportedFormats() XFree(attributes); } } + +QT_END_NAMESPACE diff --git a/src/plugins/mediaservices/qt7/mediaplayer/qt7playermetadata.mm b/src/plugins/mediaservices/qt7/mediaplayer/qt7playermetadata.mm index a14981a..b046672 100644 --- a/src/plugins/mediaservices/qt7/mediaplayer/qt7playermetadata.mm +++ b/src/plugins/mediaservices/qt7/mediaplayer/qt7playermetadata.mm @@ -132,15 +132,19 @@ static OSStatus readMetaValue(QTMetaDataRef metaDataRef, QTMetaDataItem item, QT UInt32 propFlags; OSStatus err = QTMetaDataGetItemPropertyInfo(metaDataRef, item, propClass, id, &type, &propSize, &propFlags); - - *value = malloc(propSize); - - err = QTMetaDataGetItemProperty(metaDataRef, item, propClass, id, propSize, *value, size); - - if (type == 'code' || type == 'itsk' || type == 'itlk') { - // convert from native endian to big endian - OSTypePtr pType = (OSTypePtr)*value; - *pType = EndianU32_NtoB(*pType); + if (err == noErr) { + *value = malloc(propSize); + if (*value != 0) { + err = QTMetaDataGetItemProperty(metaDataRef, item, propClass, id, propSize, *value, size); + + if (err == noErr && (type == 'code' || type == 'itsk' || type == 'itlk')) { + // convert from native endian to big endian + OSTypePtr pType = (OSTypePtr)*value; + *pType = EndianU32_NtoB(*pType); + } + } + else + return -1; } return err; @@ -153,10 +157,14 @@ static UInt32 getMetaType(QTMetaDataRef metaDataRef, QTMetaDataItem item) OSStatus err = readMetaValue( metaDataRef, item, kPropertyClass_MetaDataItem, kQTMetaDataItemPropertyID_DataType, &value, &ignore); - UInt32 type = *((UInt32 *) value); - if (value) - free(value); - return type; + if (err == noErr) { + UInt32 type = *((UInt32 *) value); + if (value) + free(value); + return type; + } + + return 0; } static QString cFStringToQString(CFStringRef str) @@ -179,23 +187,26 @@ static QString getMetaValue(QTMetaDataRef metaDataRef, QTMetaDataItem item, SInt QTPropertyValuePtr value = 0; ByteCount size = 0; OSStatus err = readMetaValue(metaDataRef, item, kPropertyClass_MetaDataItem, id, &value, &size); - QString string; - UInt32 dataType = getMetaType(metaDataRef, item); - switch (dataType){ - case kQTMetaDataTypeUTF8: - case kQTMetaDataTypeMacEncodedText: - string = cFStringToQString(CFStringCreateWithBytes(0, (UInt8*)value, size, kCFStringEncodingUTF8, false)); - break; - case kQTMetaDataTypeUTF16BE: - string = cFStringToQString(CFStringCreateWithBytes(0, (UInt8*)value, size, kCFStringEncodingUTF16BE, false)); - break; - default: - break; + + if (err == noErr) { + UInt32 dataType = getMetaType(metaDataRef, item); + switch (dataType){ + case kQTMetaDataTypeUTF8: + case kQTMetaDataTypeMacEncodedText: + string = cFStringToQString(CFStringCreateWithBytes(0, (UInt8*)value, size, kCFStringEncodingUTF8, false)); + break; + case kQTMetaDataTypeUTF16BE: + string = cFStringToQString(CFStringCreateWithBytes(0, (UInt8*)value, size, kCFStringEncodingUTF16BE, false)); + break; + default: + break; + } + + if (value) + free(value); } - if (value) - free(value); return string; } @@ -234,10 +245,11 @@ void QT7PlayerMetaDataControl::updateTags() #ifdef QUICKTIME_C_API_AVAILABLE QTMetaDataRef metaDataRef; OSStatus err = QTCopyMovieMetaData([movie quickTimeMovie], &metaDataRef); - - readFormattedData(metaDataRef, kQTMetaDataStorageFormatUserData, metaMap); - readFormattedData(metaDataRef, kQTMetaDataStorageFormatQuickTime, metaMap); - readFormattedData(metaDataRef, kQTMetaDataStorageFormatiTunes, metaMap); + if (err == noErr) { + readFormattedData(metaDataRef, kQTMetaDataStorageFormatUserData, metaMap); + readFormattedData(metaDataRef, kQTMetaDataStorageFormatQuickTime, metaMap); + readFormattedData(metaDataRef, kQTMetaDataStorageFormatiTunes, metaMap); + } #else NSString *name = [movie attributeForKey:@"QTMovieDisplayNameAttribute"]; metaMap.insert(QLatin1String("nam"), QString::fromUtf8([name UTF8String])); diff --git a/src/plugins/mediaservices/qt7/mediaplayer/qt7playerservice.mm b/src/plugins/mediaservices/qt7/mediaplayer/qt7playerservice.mm index faf75d1..205e862 100644 --- a/src/plugins/mediaservices/qt7/mediaplayer/qt7playerservice.mm +++ b/src/plugins/mediaservices/qt7/mediaplayer/qt7playerservice.mm @@ -62,7 +62,7 @@ QT_BEGIN_NAMESPACE QT7PlayerService::QT7PlayerService(QObject *parent): QMediaService(parent) { - m_session = new QT7PlayerSession; + m_session = new QT7PlayerSession(this); m_control = new QT7PlayerControl(this); m_control->setSession(m_session); @@ -102,6 +102,7 @@ QT7PlayerService::QT7PlayerService(QObject *parent): QT7PlayerService::~QT7PlayerService() { + m_session->setVideoOutput(0); } QMediaControl *QT7PlayerService::control(const char *name) const diff --git a/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.h b/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.h index 4742e2e..0ba3041 100644 --- a/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.h +++ b/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.h @@ -107,7 +107,7 @@ public slots: void setMuted(bool muted); void processEOS(); - void processStateChange(); + void processLoadStateChange(); void processVolumeChange(); void processNaturalSizeChange(); @@ -138,6 +138,10 @@ private: bool m_muted; int m_volume; qreal m_rate; + + qint64 m_duration; + bool m_videoAvailable; + bool m_audioAvailable; }; QT_END_NAMESPACE diff --git a/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.mm b/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.mm index 3f198b9..d83c0e3 100644 --- a/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.mm +++ b/src/plugins/mediaservices/qt7/mediaplayer/qt7playersession.mm @@ -48,10 +48,13 @@ #include "qt7playercontrol.h" #include "qt7videooutputcontrol.h" +#include <QtNetwork/qnetworkcookie.h> #include <QtMultimedia/qmediaplaylistnavigator.h> #include <CoreFoundation/CoreFoundation.h> +#include <Foundation/Foundation.h> +#include <QtCore/qdatetime.h> #include <QtCore/qurl.h> #include <QtCore/qdebug.h> @@ -65,7 +68,9 @@ - (QTMovieObserver *) initWithPlayerSession:(QT7PlayerSession*)session; - (void) setMovie:(QTMovie *)movie; - (void) processEOS:(NSNotification *)notification; -- (void) processStateChange:(NSNotification *)notification; +- (void) processLoadStateChange:(NSNotification *)notification; +- (void) processVolumeChange:(NSNotification *)notification; +- (void) processNaturalSizeChange :(NSNotification *)notification; @end @implementation QTMovieObserver @@ -98,7 +103,7 @@ object:m_movie]; [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(processStateChange:) + selector:@selector(processLoadStateChange:) name:QTMovieLoadStateDidChangeNotification object:m_movie]; @@ -126,10 +131,10 @@ m_session->processEOS(); } -- (void) processStateChange:(NSNotification *)notification +- (void) processLoadStateChange:(NSNotification *)notification { Q_UNUSED(notification); - m_session->processStateChange(); + m_session->processLoadStateChange(); } - (void) processVolumeChange:(NSNotification *)notification @@ -164,6 +169,9 @@ QT7PlayerSession::QT7PlayerSession(QObject *parent) , m_muted(false) , m_volume(100) , m_rate(1.0) + , m_duration(0) + , m_videoAvailable(false) + , m_audioAvailable(false) { m_movieObserver = [[QTMovieObserver alloc] initWithPlayerSession:this]; } @@ -172,6 +180,7 @@ QT7PlayerSession::~QT7PlayerSession() { [(QTMovieObserver*)m_movieObserver setMovie:nil]; [(QTMovieObserver*)m_movieObserver release]; + [(QTMovie*)m_QTMovie release]; } void *QT7PlayerSession::movie() const @@ -365,17 +374,37 @@ void QT7PlayerSession::setMedia(const QMediaContent &content, QIODevice *stream) m_mediaStream = stream; m_mediaStatus = QMediaPlayer::NoMedia; - QUrl url; + QNetworkRequest request; if (!content.isNull()) - url = content.canonicalUrl(); + request = content.canonicalResource().request(); else return; -// qDebug() << "Open media" << url; + QVariant cookies = request.header(QNetworkRequest::CookieHeader); + if (cookies.isValid()) { + NSHTTPCookieStorage *store = [NSHTTPCookieStorage sharedHTTPCookieStorage]; + QList<QNetworkCookie> cookieList = cookies.value<QList<QNetworkCookie> >(); + + foreach (const QNetworkCookie &requestCookie, cookieList) { + NSMutableDictionary *p = [NSMutableDictionary dictionaryWithObjectsAndKeys: + (NSString*)qString2CFStringRef(requestCookie.name()), NSHTTPCookieName, + (NSString*)qString2CFStringRef(requestCookie.value()), NSHTTPCookieValue, + (NSString*)qString2CFStringRef(requestCookie.domain()), NSHTTPCookieDomain, + (NSString*)qString2CFStringRef(requestCookie.path()), NSHTTPCookiePath, + nil + ]; + if (requestCookie.isSessionCookie()) + [p setObject:[NSString stringWithUTF8String:"TRUE"] forKey:NSHTTPCookieDiscard]; + else + [p setObject:[NSDate dateWithTimeIntervalSince1970:requestCookie.expirationDate().toTime_t()] forKey:NSHTTPCookieExpires]; + + [store setCookie:[NSHTTPCookie cookieWithProperties:p]]; + } + } NSError *err = 0; - NSString *urlString = (NSString *)qString2CFStringRef(url.toString()); + NSString *urlString = (NSString *)qString2CFStringRef(request.url().toString()); NSDictionary *attr = [NSDictionary dictionaryWithObjectsAndKeys: [NSURL URLWithString:urlString], QTMovieURLAttribute, @@ -400,7 +429,7 @@ void QT7PlayerSession::setMedia(const QMediaContent &content, QIODevice *stream) m_videoOutput->setMovie(m_QTMovie); m_videoOutput->setEnabled(true); } - processStateChange(); + processLoadStateChange(); [(QTMovie*)m_QTMovie setMuted:m_muted]; setVolume(m_volume); @@ -432,8 +461,11 @@ void QT7PlayerSession::processEOS() emit mediaStatusChanged(m_mediaStatus); } -void QT7PlayerSession::processStateChange() +void QT7PlayerSession::processLoadStateChange() { + if (!m_QTMovie) + return; + signed long state = [[(QTMovie*)m_QTMovie attributeForKey:QTMovieLoadStateAttribute] longValue]; // qDebug() << "Moview load state changed:" << state; @@ -461,32 +493,30 @@ void QT7PlayerSession::processStateChange() if (state == kMovieLoadStateError) { newStatus = QMediaPlayer::InvalidMedia; - emit error(QMediaPlayer::FormatError, tr("Playback failed")); + emit error(QMediaPlayer::FormatError, tr("Failed to load media")); + emit stateChanged(m_state = QMediaPlayer::StoppedState); } - if (newStatus != m_mediaStatus) { - switch (newStatus) { - case QMediaPlayer::BufferedMedia: - case QMediaPlayer::BufferingMedia: - //delayed playback start is necessary for network sources - if (m_state == QMediaPlayer::PlayingState) { - QMetaObject::invokeMethod(this, "play", Qt::QueuedConnection); - } - //fall - case QMediaPlayer::LoadedMedia: - case QMediaPlayer::LoadingMedia: - emit durationChanged(duration()); - emit audioAvailableChanged(isAudioAvailable()); - emit videoAvailableChanged(isVideoAvailable()); - break; - case QMediaPlayer::InvalidMedia: - emit stateChanged(m_state = QMediaPlayer::StoppedState); - default: - break; - } + if (state >= kMovieLoadStatePlayable && + m_state == QMediaPlayer::PlayingState && + [(QTMovie*)m_QTMovie rate] == 0) { + QMetaObject::invokeMethod(this, "play", Qt::QueuedConnection); + } - emit mediaStatusChanged(m_mediaStatus = newStatus); + if (state >= kMovieLoadStateLoaded) { + qint64 currentDuration = duration(); + if (m_duration != currentDuration) + emit durationChanged(m_duration = currentDuration); + + if (m_audioAvailable != isAudioAvailable()) + emit audioAvailableChanged(m_audioAvailable = !m_audioAvailable); + + if (m_videoAvailable != isVideoAvailable()) + emit videoAvailableChanged(m_videoAvailable = !m_videoAvailable); } + + if (newStatus != m_mediaStatus) + emit mediaStatusChanged(m_mediaStatus = newStatus); } void QT7PlayerSession::processVolumeChange() diff --git a/src/plugins/mediaservices/qt7/qt7movierenderer.mm b/src/plugins/mediaservices/qt7/qt7movierenderer.mm index 6b9fd21..1c1f5e4 100644 --- a/src/plugins/mediaservices/qt7/qt7movierenderer.mm +++ b/src/plugins/mediaservices/qt7/qt7movierenderer.mm @@ -58,6 +58,8 @@ QT_BEGIN_NAMESPACE +//#define USE_MAIN_MONITOR_COLOR_SPACE 1 + class CVGLTextureVideoBuffer : public QAbstractVideoBuffer { public: @@ -233,7 +235,24 @@ bool QT7MovieRenderer::createPixelBufferVisualContext() &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); CFDictionarySetValue(visualContextOptions, kQTVisualContextPixelBufferAttributesKey, pixelBufferOptions); - CFDictionarySetValue(visualContextOptions, kQTVisualContextWorkingColorSpaceKey, CGColorSpaceCreateDeviceRGB()); + + CGColorSpaceRef colorSpace = NULL; + +#if USE_MAIN_MONITOR_COLOR_SPACE + CMProfileRef sysprof = NULL; + + // Get the Systems Profile for the main display + if (CMGetSystemProfile(&sysprof) == noErr) { + // Create a colorspace with the systems profile + colorSpace = CGColorSpaceCreateWithPlatformColorSpace(sysprof); + CMCloseProfile(sysprof); + } +#endif + + if (!colorSpace) + colorSpace = CGColorSpaceCreateDeviceRGB(); + + CFDictionarySetValue(visualContextOptions, kQTVisualContextOutputColorSpaceKey, colorSpace); OSStatus err = QTPixelBufferContextCreate(kCFAllocatorDefault, visualContextOptions, diff --git a/src/plugins/mediaservices/qt7/qt7movievideowidget.mm b/src/plugins/mediaservices/qt7/qt7movievideowidget.mm index 4043330..00ceffc 100644 --- a/src/plugins/mediaservices/qt7/qt7movievideowidget.mm +++ b/src/plugins/mediaservices/qt7/qt7movievideowidget.mm @@ -199,7 +199,6 @@ QT7MovieVideoWidget::QT7MovieVideoWidget(QObject *parent) } } - bool QT7MovieVideoWidget::createVisualContext() { #ifdef QUICKTIME_C_API_AVAILABLE @@ -210,8 +209,20 @@ bool QT7MovieVideoWidget::createVisualContext() NSOpenGLPixelFormat *nsglPixelFormat = [NSOpenGLView defaultPixelFormat]; CGLPixelFormatObj cglPixelFormat = static_cast<CGLPixelFormatObj>([nsglPixelFormat CGLPixelFormatObj]); - CFTypeRef keys[] = { kQTVisualContextWorkingColorSpaceKey }; - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); + CFTypeRef keys[] = { kQTVisualContextOutputColorSpaceKey }; + CGColorSpaceRef colorSpace = NULL; + CMProfileRef sysprof = NULL; + + // Get the Systems Profile for the main display + if (CMGetSystemProfile(&sysprof) == noErr) { + // Create a colorspace with the systems profile + colorSpace = CGColorSpaceCreateWithPlatformColorSpace(sysprof); + CMCloseProfile(sysprof); + } + + if (!colorSpace) + colorSpace = CGColorSpaceCreateDeviceRGB(); + CFDictionaryRef textureContextAttributes = CFDictionaryCreate(kCFAllocatorDefault, (const void **)keys, (const void **)&colorSpace, 1, diff --git a/src/script/api/qscriptengine.cpp b/src/script/api/qscriptengine.cpp index 98a24d0..d2e96d1 100644 --- a/src/script/api/qscriptengine.cpp +++ b/src/script/api/qscriptengine.cpp @@ -844,7 +844,7 @@ static QScriptValue __setupPackage__(QScriptContext *ctx, QScriptEngine *eng) } // namespace QScript QScriptEnginePrivate::QScriptEnginePrivate() - : registeredScriptValues(0), freeScriptValues(0), + : registeredScriptValues(0), freeScriptValues(0), freeScriptValuesCount(0), registeredScriptStrings(0), inEval(false) { qMetaTypeId<QScriptValue>(); diff --git a/src/script/api/qscriptengine_p.h b/src/script/api/qscriptengine_p.h index f69e537..d0d020a 100644 --- a/src/script/api/qscriptengine_p.h +++ b/src/script/api/qscriptengine_p.h @@ -354,6 +354,8 @@ public: int agentLineNumber; QScriptValuePrivate *registeredScriptValues; QScriptValuePrivate *freeScriptValues; + static const int maxFreeScriptValues = 256; + int freeScriptValuesCount; QScriptStringPrivate *registeredScriptStrings; QHash<int, QScriptTypeInfo*> m_typeInfos; int processEventsInterval; @@ -521,6 +523,7 @@ inline QScriptValuePrivate *QScriptEnginePrivate::allocateScriptValuePrivate(siz if (freeScriptValues) { QScriptValuePrivate *p = freeScriptValues; freeScriptValues = p->next; + --freeScriptValuesCount; return p; } return reinterpret_cast<QScriptValuePrivate*>(qMalloc(size)); @@ -528,8 +531,13 @@ inline QScriptValuePrivate *QScriptEnginePrivate::allocateScriptValuePrivate(siz inline void QScriptEnginePrivate::freeScriptValuePrivate(QScriptValuePrivate *p) { - p->next = freeScriptValues; - freeScriptValues = p; + if (freeScriptValuesCount < maxFreeScriptValues) { + p->next = freeScriptValues; + freeScriptValues = p; + ++freeScriptValuesCount; + } else { + qFree(p); + } } inline void QScriptEnginePrivate::registerScriptValue(QScriptValuePrivate *value) @@ -854,7 +862,7 @@ inline bool QScriptEnginePrivate::isQObject(JSC::JSValue value) inline bool QScriptEnginePrivate::isQMetaObject(JSC::JSValue value) { #ifndef QT_NO_QOBJECT - return JSC::asObject(value)->inherits(&QScript::QMetaObjectWrapperObject::info); + return isObject(value) && JSC::asObject(value)->inherits(&QScript::QMetaObjectWrapperObject::info); #else return false; #endif diff --git a/src/svg/qgraphicssvgitem.cpp b/src/svg/qgraphicssvgitem.cpp index 7e80e50..69ff7a3 100644 --- a/src/svg/qgraphicssvgitem.cpp +++ b/src/svg/qgraphicssvgitem.cpp @@ -267,6 +267,7 @@ int QGraphicsSvgItem::type() const /*! \property QGraphicsSvgItem::maximumCacheSize + \since 4.6 This property holds the maximum size of the device coordinate cache for this item. @@ -312,7 +313,8 @@ QSize QGraphicsSvgItem::maximumCacheSize() const /*! \property QGraphicsSvgItem::elementId - + \since 4.6 + This property holds the element's XML ID. */ diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro index e625c69..2ea9ca7 100644 --- a/tests/auto/auto.pro +++ b/tests/auto/auto.pro @@ -313,8 +313,6 @@ SUBDIRS += \ qmediaserviceprovider \ qmediatimerange \ qvideowidget \ - qdeclarativeaudio \ - qdeclarativevideo \ qspinbox \ qsplitter \ qsql \ @@ -485,6 +483,9 @@ contains(QT_CONFIG,opengl):SUBDIRS += qgl qglbuffer qgl_threads contains(QT_CONFIG,qt3support):!wince*:SUBDIRS += $$Q3SUBDIRS +contains(QT_CONFIG,multimedia):contains(QT_CONFIG,declarative):SUBDIRS += qdeclarativeaudio \ + qdeclarativevideo + contains(QT_CONFIG, OdfWriter):SUBDIRS += qzip qtextodfwriter mac: { SUBDIRS += macgui \ @@ -608,10 +609,3 @@ contains(QT_CONFIG, declarative): SUBDIRS += declarative xmlpatternsxqts \ xmlpatternsxslts - -############### make check recursively for testcases ################## -check.CONFIG = recursive -check.recurse = $$SUBDIRS -check.recurse_target = check -QMAKE_EXTRA_TARGETS += check -########################################################### diff --git a/tests/auto/declarative/qdeclarativeconnection/data/test-connection.qml b/tests/auto/declarative/qdeclarativeconnection/data/test-connection.qml index 9534621..81ab599 100644 --- a/tests/auto/declarative/qdeclarativeconnection/data/test-connection.qml +++ b/tests/auto/declarative/qdeclarativeconnection/data/test-connection.qml @@ -6,5 +6,5 @@ Item { property bool tested: false signal testMe - Connection { sender: screen; signal: "widthChanged()"; script: screen.tested = true } + Connections { target: screen; onWidthChanged: screen.tested = true } } diff --git a/tests/auto/declarative/qdeclarativeconnection/data/test-connection2.qml b/tests/auto/declarative/qdeclarativeconnection/data/test-connection2.qml index 65fe23a..22e9422 100644 --- a/tests/auto/declarative/qdeclarativeconnection/data/test-connection2.qml +++ b/tests/auto/declarative/qdeclarativeconnection/data/test-connection2.qml @@ -1,3 +1,3 @@ import Qt 4.6 -Connection { id: connection; sender: connection; signal: "widthChanged()"; script: 1 == 1 } +Connections { id: connection; target: connection; onTargetChanged: 1 == 1 } diff --git a/tests/auto/declarative/qdeclarativeconnection/data/test-connection3.qml b/tests/auto/declarative/qdeclarativeconnection/data/test-connection3.qml index 32133f9..6e396c0 100644 --- a/tests/auto/declarative/qdeclarativeconnection/data/test-connection3.qml +++ b/tests/auto/declarative/qdeclarativeconnection/data/test-connection3.qml @@ -1,3 +1,3 @@ import Qt 4.6 -Connection {} +Connections {} diff --git a/tests/auto/declarative/qdeclarativeconnection/data/trimming.qml b/tests/auto/declarative/qdeclarativeconnection/data/trimming.qml index c27dc46..736d5e8 100644 --- a/tests/auto/declarative/qdeclarativeconnection/data/trimming.qml +++ b/tests/auto/declarative/qdeclarativeconnection/data/trimming.qml @@ -6,5 +6,5 @@ Item { property string tested signal testMe(int param1, string param2) - Connection { sender: screen; signal: "testMe(param1, param2)"; script: screen.tested = param2 + param1 } + Connections { target: screen; onTestMe: screen.tested = param2 + param1 } } diff --git a/tests/auto/declarative/qdeclarativeconnection/tst_qdeclarativeconnection.cpp b/tests/auto/declarative/qdeclarativeconnection/tst_qdeclarativeconnection.cpp index adf343f..f4914e1 100644 --- a/tests/auto/declarative/qdeclarativeconnection/tst_qdeclarativeconnection.cpp +++ b/tests/auto/declarative/qdeclarativeconnection/tst_qdeclarativeconnection.cpp @@ -41,7 +41,7 @@ #include <qtest.h> #include <QtDeclarative/qdeclarativeengine.h> #include <QtDeclarative/qdeclarativecomponent.h> -#include <private/qdeclarativeconnection_p.h> +#include <private/qdeclarativeconnections_p.h> #include <private/qdeclarativeitem_p.h> #include "../../../shared/util.h" #include <QtDeclarative/qdeclarativescriptstring.h> @@ -71,12 +71,10 @@ void tst_qdeclarativeconnection::defaultValues() { QDeclarativeEngine engine; QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/test-connection3.qml")); - QDeclarativeConnection *item = qobject_cast<QDeclarativeConnection*>(c.create()); + QDeclarativeConnections *item = qobject_cast<QDeclarativeConnections*>(c.create()); QVERIFY(item != 0); - QVERIFY(item->signalSender() == 0); - QCOMPARE(item->script().script(), QString()); - QCOMPARE(item->signal(), QString()); + QVERIFY(item->target() == 0); delete item; } @@ -85,14 +83,12 @@ void tst_qdeclarativeconnection::properties() { QDeclarativeEngine engine; QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/test-connection2.qml")); - QDeclarativeConnection *item = qobject_cast<QDeclarativeConnection*>(c.create()); + QDeclarativeConnections *item = qobject_cast<QDeclarativeConnections*>(c.create()); QVERIFY(item != 0); QVERIFY(item != 0); - QVERIFY(item->signalSender() == item); - QCOMPARE(item->script().script(), QString("1 == 1")); - QCOMPARE(item->signal(), QString("widthChanged()")); + QVERIFY(item->target() == item); delete item; } diff --git a/tests/auto/declarative/qdeclarativeflickable/data/flickable02.qml b/tests/auto/declarative/qdeclarativeflickable/data/flickable02.qml index 3e08359..4b82d5c 100644 --- a/tests/auto/declarative/qdeclarativeflickable/data/flickable02.qml +++ b/tests/auto/declarative/qdeclarativeflickable/data/flickable02.qml @@ -2,7 +2,7 @@ import Qt 4.6 Flickable { width: 100; height: 100 - viewportWidth: row.width; viewportHeight: row.height + contentWidth: row.width; contentHeight: row.height Row { id: row diff --git a/tests/auto/declarative/qdeclarativeflickable/data/flickable03.qml b/tests/auto/declarative/qdeclarativeflickable/data/flickable03.qml index 3ed173d..49eed5a 100644 --- a/tests/auto/declarative/qdeclarativeflickable/data/flickable03.qml +++ b/tests/auto/declarative/qdeclarativeflickable/data/flickable03.qml @@ -2,7 +2,7 @@ import Qt 4.6 Flickable { width: 100; height: 100 - viewportWidth: column.width; viewportHeight: column.height + contentWidth: column.width; contentHeight: column.height Column { id: column diff --git a/tests/auto/declarative/qdeclarativeflickable/data/flickable04.qml b/tests/auto/declarative/qdeclarativeflickable/data/flickable04.qml index 1425d85..40c4606 100644 --- a/tests/auto/declarative/qdeclarativeflickable/data/flickable04.qml +++ b/tests/auto/declarative/qdeclarativeflickable/data/flickable04.qml @@ -2,7 +2,7 @@ import Qt 4.6 Flickable { width: 100; height: 100 - viewportWidth: column.width; viewportHeight: column.height + contentWidth: column.width; contentHeight: column.height pressDelay: 200; overShoot: false; interactive: false maximumFlickVelocity: 2000 diff --git a/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp b/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp index 1c98c50..cb87977 100644 --- a/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp +++ b/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp @@ -81,12 +81,11 @@ void tst_qdeclarativeflickable::create() QCOMPARE(obj->isAtXEnd(), false); QCOMPARE(obj->isAtYBeginning(), true); QCOMPARE(obj->isAtYEnd(), false); - QCOMPARE(obj->viewportX(), 0.); - QCOMPARE(obj->viewportY(), 0.); + QCOMPARE(obj->contentX(), 0.); + QCOMPARE(obj->contentY(), 0.); QCOMPARE(obj->horizontalVelocity(), 0.); QCOMPARE(obj->verticalVelocity(), 0.); - QCOMPARE(obj->reportedVelocitySmoothing(), 100.); QCOMPARE(obj->isInteractive(), true); QCOMPARE(obj->overShoot(), true); @@ -103,8 +102,8 @@ void tst_qdeclarativeflickable::horizontalViewportSize() QDeclarativeFlickable *obj = qobject_cast<QDeclarativeFlickable*>(c.create()); QVERIFY(obj != 0); - QCOMPARE(obj->viewportWidth(), 800.); - QCOMPARE(obj->viewportHeight(), 300.); + QCOMPARE(obj->contentWidth(), 800.); + QCOMPARE(obj->contentHeight(), 300.); QCOMPARE(obj->isAtXBeginning(), true); QCOMPARE(obj->isAtXEnd(), false); QCOMPARE(obj->isAtYBeginning(), true); @@ -120,8 +119,8 @@ void tst_qdeclarativeflickable::verticalViewportSize() QDeclarativeFlickable *obj = qobject_cast<QDeclarativeFlickable*>(c.create()); QVERIFY(obj != 0); - QCOMPARE(obj->viewportWidth(), 200.); - QCOMPARE(obj->viewportHeight(), 1200.); + QCOMPARE(obj->contentWidth(), 200.); + QCOMPARE(obj->contentHeight(), 1200.); QCOMPARE(obj->isAtXBeginning(), true); QCOMPARE(obj->isAtXEnd(), false); QCOMPARE(obj->isAtYBeginning(), true); diff --git a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp index 9c9d1d3..2a60fee 100644 --- a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp +++ b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp @@ -298,14 +298,14 @@ void tst_QDeclarativeGridView::inserted() model.insertItem(i, "Hello", QString::number(i)); QTest::qWait(300); - gridview->setViewportY(120); + gridview->setContentY(120); QTest::qWait(300); // Insert item outside visible area model.insertItem(1, "Hello", "1324"); QTest::qWait(300); - QVERIFY(gridview->viewportY() == 120); + QVERIFY(gridview->contentY() == 120); delete canvas; } @@ -392,7 +392,7 @@ void tst_QDeclarativeGridView::removed() } // Remove items before visible - gridview->setViewportY(120); + gridview->setContentY(120); QTest::qWait(500); gridview->setCurrentIndex(10); @@ -400,7 +400,7 @@ void tst_QDeclarativeGridView::removed() QTest::qWait(300); // Setting currentIndex above shouldn't cause view to scroll - QCOMPARE(gridview->viewportY(), 120.0); + QCOMPARE(gridview->contentY(), 120.0); model.removeItem(1); @@ -424,7 +424,7 @@ void tst_QDeclarativeGridView::removed() QCOMPARE(gridview->currentIndex(), 9); QVERIFY(gridview->currentItem() != oldCurrent); - gridview->setViewportY(0); + gridview->setContentY(0); // let transitions settle. QTest::qWait(300); @@ -441,7 +441,7 @@ void tst_QDeclarativeGridView::removed() // remove item outside current view. gridview->setCurrentIndex(32); QTest::qWait(500); - gridview->setViewportY(240); + gridview->setContentY(240); model.removeItem(30); QVERIFY(gridview->currentIndex() == 31); @@ -449,7 +449,7 @@ void tst_QDeclarativeGridView::removed() // remove current item beyond visible items. gridview->setCurrentIndex(20); QTest::qWait(500); - gridview->setViewportY(0); + gridview->setContentY(0); model.removeItem(20); QTest::qWait(500); @@ -459,7 +459,7 @@ void tst_QDeclarativeGridView::removed() // remove item before current, but visible gridview->setCurrentIndex(8); QTest::qWait(500); - gridview->setViewportY(240); + gridview->setContentY(240); oldCurrent = gridview->currentItem(); model.removeItem(6); QTest::qWait(500); @@ -520,7 +520,7 @@ void tst_QDeclarativeGridView::moved() QVERIFY(item->y() == (i/3)*60); } - gridview->setViewportY(120); + gridview->setContentY(120); // move outside visible area model.moveItem(1, 25); @@ -638,13 +638,13 @@ void tst_QDeclarativeGridView::currentIndex() QCOMPARE(gridview->currentIndex(), model.count()-1); QTest::qWait(500); - QCOMPARE(gridview->viewportY(), 279.0); + QCOMPARE(gridview->contentY(), 279.0); gridview->moveCurrentIndexRight(); QCOMPARE(gridview->currentIndex(), 0); QTest::qWait(500); - QCOMPARE(gridview->viewportY(), 0.0); + QCOMPARE(gridview->contentY(), 0.0); // Test keys qApp->setActiveWindow(canvas); @@ -829,7 +829,7 @@ void tst_QDeclarativeGridView::positionViewAtIndex() // Position on a currently visible item gridview->positionViewAtIndex(4); - QCOMPARE(gridview->viewportY(), 60.); + QCOMPARE(gridview->contentY(), 60.); // Confirm items positioned correctly itemCount = findItems<QDeclarativeItem>(viewport, "wrapper").count(); @@ -843,7 +843,7 @@ void tst_QDeclarativeGridView::positionViewAtIndex() // Position on an item beyond the visible items gridview->positionViewAtIndex(21); - QCOMPARE(gridview->viewportY(), 420.); + QCOMPARE(gridview->contentY(), 420.); // Confirm items positioned correctly itemCount = findItems<QDeclarativeItem>(viewport, "wrapper").count(); @@ -857,7 +857,7 @@ void tst_QDeclarativeGridView::positionViewAtIndex() // Position on an item that would leave empty space if positioned at the top gridview->positionViewAtIndex(31); - QCOMPARE(gridview->viewportY(), 520.); + QCOMPARE(gridview->contentY(), 520.); // Confirm items positioned correctly itemCount = findItems<QDeclarativeItem>(viewport, "wrapper").count(); @@ -871,7 +871,7 @@ void tst_QDeclarativeGridView::positionViewAtIndex() // Position at the beginning again gridview->positionViewAtIndex(0); - QCOMPARE(gridview->viewportY(), 0.); + QCOMPARE(gridview->contentY(), 0.); // Confirm items positioned correctly itemCount = findItems<QDeclarativeItem>(viewport, "wrapper").count(); diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp index 9100522..f15f26b 100644 --- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp +++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp @@ -486,14 +486,14 @@ void tst_QDeclarativeListView::inserted() model.insertItem(i, "Hello", QString::number(i)); QTest::qWait(500); - listview->setViewportY(80); + listview->setContentY(80); QTest::qWait(500); // Insert item outside visible area model.insertItem(1, "Hello", "1324"); QTest::qWait(500); - QVERIFY(listview->viewportY() == 80); + QVERIFY(listview->contentY() == 80); // Confirm items positioned correctly for (int i = 5; i < 5+15; ++i) { @@ -591,7 +591,7 @@ void tst_QDeclarativeListView::removed(bool animated) } // Remove items before visible - listview->setViewportY(80); + listview->setContentY(80); listview->setCurrentIndex(10); model.removeItem(1); // post: top item will be at 40 @@ -615,7 +615,7 @@ void tst_QDeclarativeListView::removed(bool animated) QCOMPARE(listview->currentIndex(), 9); QVERIFY(listview->currentItem() != oldCurrent); - listview->setViewportY(40); // That's the top now + listview->setContentY(40); // That's the top now // let transitions settle. QTest::qWait(500); @@ -631,7 +631,7 @@ void tst_QDeclarativeListView::removed(bool animated) // remove current item beyond visible items. listview->setCurrentIndex(20); QTest::qWait(500); - listview->setViewportY(40); + listview->setContentY(40); model.removeItem(20); QTest::qWait(500); @@ -682,7 +682,7 @@ void tst_QDeclarativeListView::clear() QVERIFY(listview->count() == 0); QVERIFY(listview->currentItem() == 0); - QVERIFY(listview->viewportY() == 0); + QVERIFY(listview->contentY() == 0); delete canvas; } @@ -740,7 +740,7 @@ void tst_QDeclarativeListView::moved() QVERIFY(item->y() == i*20); } - listview->setViewportY(80); + listview->setContentY(80); // move outside visible area model.moveItem(1, 18); @@ -812,7 +812,7 @@ void tst_QDeclarativeListView::enforceRange() // view should be positioned at the top of the range. QDeclarativeItem *item = findItem<QDeclarativeItem>(viewport, "wrapper", 0); QVERIFY(item); - QCOMPARE(listview->viewportY(), -100.0); + QCOMPARE(listview->contentY(), -100.0); QDeclarativeText *name = findItem<QDeclarativeText>(viewport, "textName", 0); QVERIFY(name != 0); @@ -822,7 +822,7 @@ void tst_QDeclarativeListView::enforceRange() QCOMPARE(number->text(), model.number(0)); // Check currentIndex is updated when viewport moves - listview->setViewportY(20); + listview->setContentY(20); QTest::qWait(500); QCOMPARE(listview->currentIndex(), 6); @@ -948,10 +948,10 @@ void tst_QDeclarativeListView::sections() QCOMPARE(listview->currentSection(), QString("0")); - listview->setViewportY(140); + listview->setContentY(140); QCOMPARE(listview->currentSection(), QString("1")); - listview->setViewportY(20); + listview->setContentY(20); QCOMPARE(listview->currentSection(), QString("0")); item = findItem<QDeclarativeItem>(viewport, "wrapper", 1); @@ -1012,13 +1012,13 @@ void tst_QDeclarativeListView::currentIndex() QCOMPARE(listview->currentIndex(), model.count()-1); QTest::qWait(1000); - QCOMPARE(listview->viewportY(), 279.0); + QCOMPARE(listview->contentY(), 279.0); listview->incrementCurrentIndex(); QCOMPARE(listview->currentIndex(), 0); QTest::qWait(1000); - QCOMPARE(listview->viewportY(), 0.0); + QCOMPARE(listview->contentY(), 0.0); // Test keys canvas->show(); @@ -1181,7 +1181,7 @@ void tst_QDeclarativeListView::positionViewAtIndex() // Position on a currently visible item listview->positionViewAtIndex(3); - QCOMPARE(listview->viewportY(), 60.); + QCOMPARE(listview->contentY(), 60.); // Confirm items positioned correctly itemCount = findItems<QDeclarativeItem>(viewport, "wrapper").count(); @@ -1194,7 +1194,7 @@ void tst_QDeclarativeListView::positionViewAtIndex() // Position on an item beyond the visible items listview->positionViewAtIndex(22); - QCOMPARE(listview->viewportY(), 440.); + QCOMPARE(listview->contentY(), 440.); // Confirm items positioned correctly itemCount = findItems<QDeclarativeItem>(viewport, "wrapper").count(); @@ -1207,7 +1207,7 @@ void tst_QDeclarativeListView::positionViewAtIndex() // Position on an item that would leave empty space if positioned at the top listview->positionViewAtIndex(28); - QCOMPARE(listview->viewportY(), 480.); + QCOMPARE(listview->contentY(), 480.); // Confirm items positioned correctly itemCount = findItems<QDeclarativeItem>(viewport, "wrapper").count(); @@ -1220,7 +1220,7 @@ void tst_QDeclarativeListView::positionViewAtIndex() // Position at the beginning again listview->positionViewAtIndex(0); - QCOMPARE(listview->viewportY(), 0.); + QCOMPARE(listview->contentY(), 0.); // Confirm items positioned correctly itemCount = findItems<QDeclarativeItem>(viewport, "wrapper").count(); diff --git a/tests/auto/declarative/qdeclarativeproperty/tst_qdeclarativeproperty.cpp b/tests/auto/declarative/qdeclarativeproperty/tst_qdeclarativeproperty.cpp index c72c9e7..0333d98 100644 --- a/tests/auto/declarative/qdeclarativeproperty/tst_qdeclarativeproperty.cpp +++ b/tests/auto/declarative/qdeclarativeproperty/tst_qdeclarativeproperty.cpp @@ -140,18 +140,17 @@ void tst_qdeclarativeproperty::qmlmetaproperty() QCOMPARE(prop.name(), QString()); QCOMPARE(prop.read(), QVariant()); QCOMPARE(prop.write(QVariant()), false); - QCOMPARE(prop.hasChangedNotifier(), false); - QCOMPARE(prop.needsChangedNotifier(), false); - QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, 0), false); - QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, -1), false); + QCOMPARE(prop.hasNotifySignal(), false); + QCOMPARE(prop.needsNotifySignal(), false); + QCOMPARE(prop.connectNotifySignal(0, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, 0), false); + QCOMPARE(prop.connectNotifySignal(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, -1), false); QVERIFY(prop.method().signature() == 0); QCOMPARE(prop.type(), QDeclarativeProperty::Invalid); QCOMPARE(prop.isProperty(), false); - QCOMPARE(prop.isDefault(), false); QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), false); QCOMPARE(prop.isResettable(), false); @@ -167,7 +166,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty() QVERIFY(QDeclarativePropertyPrivate::signalExpression(prop) == 0); QVERIFY(QDeclarativePropertyPrivate::setSignalExpression(prop, expression) == 0); QVERIFY(expression == 0); - QCOMPARE(prop.coreIndex(), -1); + QCOMPARE(prop.index(), -1); QCOMPARE(QDeclarativePropertyPrivate::valueTypeCoreIndex(prop), -1); delete obj; @@ -234,18 +233,17 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object() QCOMPARE(prop.name(), QString()); QCOMPARE(prop.read(), QVariant()); QCOMPARE(prop.write(QVariant()), false); - QCOMPARE(prop.hasChangedNotifier(), false); - QCOMPARE(prop.needsChangedNotifier(), false); - QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, 0), false); - QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, -1), false); + QCOMPARE(prop.hasNotifySignal(), false); + QCOMPARE(prop.needsNotifySignal(), false); + QCOMPARE(prop.connectNotifySignal(0, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, 0), false); + QCOMPARE(prop.connectNotifySignal(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, -1), false); QVERIFY(prop.method().signature() == 0); QCOMPARE(prop.type(), QDeclarativeProperty::Invalid); QCOMPARE(prop.isProperty(), false); - QCOMPARE(prop.isDefault(), false); QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), false); QCOMPARE(prop.isResettable(), false); @@ -261,7 +259,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object() QVERIFY(QDeclarativePropertyPrivate::signalExpression(prop) == 0); QVERIFY(QDeclarativePropertyPrivate::setSignalExpression(prop, expression) == 0); QVERIFY(expression == 0); - QCOMPARE(prop.coreIndex(), -1); + QCOMPARE(prop.index(), -1); QCOMPARE(QDeclarativePropertyPrivate::valueTypeCoreIndex(prop), -1); delete obj; @@ -281,18 +279,17 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object() QCOMPARE(prop.name(), QString("defaultProperty")); QCOMPARE(prop.read(), QVariant(10)); QCOMPARE(prop.write(QVariant()), false); - QCOMPARE(prop.hasChangedNotifier(), false); - QCOMPARE(prop.needsChangedNotifier(), true); - QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, 0), false); - QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, -1), false); + QCOMPARE(prop.hasNotifySignal(), false); + QCOMPARE(prop.needsNotifySignal(), true); + QCOMPARE(prop.connectNotifySignal(0, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, 0), false); + QCOMPARE(prop.connectNotifySignal(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, -1), false); QVERIFY(prop.method().signature() == 0); - QCOMPARE(prop.type(), (QDeclarativeProperty::Type)(QDeclarativeProperty::Property | QDeclarativeProperty::Default)); + QCOMPARE(prop.type(), QDeclarativeProperty::Property); QCOMPARE(prop.isProperty(), true); - QCOMPARE(prop.isDefault(), true); QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), true); QCOMPARE(prop.isResettable(), false); @@ -310,7 +307,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object() QVERIFY(QDeclarativePropertyPrivate::signalExpression(prop) == 0); QVERIFY(QDeclarativePropertyPrivate::setSignalExpression(prop, expression) == 0); QVERIFY(expression == 0); - QCOMPARE(prop.coreIndex(), dobject.metaObject()->indexOfProperty("defaultProperty")); + QCOMPARE(prop.index(), dobject.metaObject()->indexOfProperty("defaultProperty")); QCOMPARE(QDeclarativePropertyPrivate::valueTypeCoreIndex(prop), -1); delete obj; @@ -335,18 +332,17 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string() QCOMPARE(prop.name(), QString()); QCOMPARE(prop.read(), QVariant()); QCOMPARE(prop.write(QVariant()), false); - QCOMPARE(prop.hasChangedNotifier(), false); - QCOMPARE(prop.needsChangedNotifier(), false); - QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, 0), false); - QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, -1), false); + QCOMPARE(prop.hasNotifySignal(), false); + QCOMPARE(prop.needsNotifySignal(), false); + QCOMPARE(prop.connectNotifySignal(0, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, 0), false); + QCOMPARE(prop.connectNotifySignal(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, -1), false); QVERIFY(prop.method().signature() == 0); QCOMPARE(prop.type(), QDeclarativeProperty::Invalid); QCOMPARE(prop.isProperty(), false); - QCOMPARE(prop.isDefault(), false); QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), false); QCOMPARE(prop.isResettable(), false); @@ -362,7 +358,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string() QVERIFY(QDeclarativePropertyPrivate::signalExpression(prop) == 0); QVERIFY(QDeclarativePropertyPrivate::setSignalExpression(prop, expression) == 0); QVERIFY(expression == 0); - QCOMPARE(prop.coreIndex(), -1); + QCOMPARE(prop.index(), -1); QCOMPARE(QDeclarativePropertyPrivate::valueTypeCoreIndex(prop), -1); delete obj; @@ -382,18 +378,17 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string() QCOMPARE(prop.name(), QString("defaultProperty")); QCOMPARE(prop.read(), QVariant(10)); QCOMPARE(prop.write(QVariant()), false); - QCOMPARE(prop.hasChangedNotifier(), false); - QCOMPARE(prop.needsChangedNotifier(), true); - QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, 0), false); - QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, -1), false); + QCOMPARE(prop.hasNotifySignal(), false); + QCOMPARE(prop.needsNotifySignal(), true); + QCOMPARE(prop.connectNotifySignal(0, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, 0), false); + QCOMPARE(prop.connectNotifySignal(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, -1), false); QVERIFY(prop.method().signature() == 0); QCOMPARE(prop.type(), QDeclarativeProperty::Property); QCOMPARE(prop.isProperty(), true); - QCOMPARE(prop.isDefault(), false); QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), true); QCOMPARE(prop.isResettable(), false); @@ -411,7 +406,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string() QVERIFY(QDeclarativePropertyPrivate::signalExpression(prop) == 0); QVERIFY(QDeclarativePropertyPrivate::setSignalExpression(prop, expression) == 0); QVERIFY(expression == 0); - QCOMPARE(prop.coreIndex(), dobject.metaObject()->indexOfProperty("defaultProperty")); + QCOMPARE(prop.index(), dobject.metaObject()->indexOfProperty("defaultProperty")); QCOMPARE(QDeclarativePropertyPrivate::valueTypeCoreIndex(prop), -1); delete obj; @@ -431,18 +426,17 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string() QCOMPARE(prop.name(), QString("onClicked")); QCOMPARE(prop.read(), QVariant()); QCOMPARE(prop.write(QVariant("Hello")), false); - QCOMPARE(prop.hasChangedNotifier(), false); - QCOMPARE(prop.needsChangedNotifier(), false); - QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, 0), false); - QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, -1), false); + QCOMPARE(prop.hasNotifySignal(), false); + QCOMPARE(prop.needsNotifySignal(), false); + QCOMPARE(prop.connectNotifySignal(0, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, 0), false); + QCOMPARE(prop.connectNotifySignal(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, -1), false); QCOMPARE(QString(prop.method().signature()), QString("clicked()")); QCOMPARE(prop.type(), QDeclarativeProperty::SignalProperty); QCOMPARE(prop.isProperty(), false); - QCOMPARE(prop.isDefault(), false); QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), false); QCOMPARE(prop.isResettable(), false); @@ -459,7 +453,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string() QVERIFY(QDeclarativePropertyPrivate::setSignalExpression(prop, expression) == 0); QVERIFY(expression != 0); QVERIFY(QDeclarativePropertyPrivate::signalExpression(prop) == expression); - QCOMPARE(prop.coreIndex(), dobject.metaObject()->indexOfMethod("clicked()")); + QCOMPARE(prop.index(), dobject.metaObject()->indexOfMethod("clicked()")); QCOMPARE(QDeclarativePropertyPrivate::valueTypeCoreIndex(prop), -1); delete obj; @@ -479,18 +473,17 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string() QCOMPARE(prop.name(), QString("onOddlyNamedNotifySignal")); QCOMPARE(prop.read(), QVariant()); QCOMPARE(prop.write(QVariant("Hello")), false); - QCOMPARE(prop.hasChangedNotifier(), false); - QCOMPARE(prop.needsChangedNotifier(), false); - QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, 0), false); - QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, -1), false); + QCOMPARE(prop.hasNotifySignal(), false); + QCOMPARE(prop.needsNotifySignal(), false); + QCOMPARE(prop.connectNotifySignal(0, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, 0), false); + QCOMPARE(prop.connectNotifySignal(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, -1), false); QCOMPARE(QString(prop.method().signature()), QString("oddlyNamedNotifySignal()")); QCOMPARE(prop.type(), QDeclarativeProperty::SignalProperty); QCOMPARE(prop.isProperty(), false); - QCOMPARE(prop.isDefault(), false); QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), false); QCOMPARE(prop.isResettable(), false); @@ -507,7 +500,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string() QVERIFY(QDeclarativePropertyPrivate::setSignalExpression(prop, expression) == 0); QVERIFY(expression != 0); QVERIFY(QDeclarativePropertyPrivate::signalExpression(prop) == expression); - QCOMPARE(prop.coreIndex(), dobject.metaObject()->indexOfMethod("oddlyNamedNotifySignal()")); + QCOMPARE(prop.index(), dobject.metaObject()->indexOfMethod("oddlyNamedNotifySignal()")); QCOMPARE(QDeclarativePropertyPrivate::valueTypeCoreIndex(prop), -1); delete obj; @@ -532,18 +525,17 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_context() QCOMPARE(prop.name(), QString()); QCOMPARE(prop.read(), QVariant()); QCOMPARE(prop.write(QVariant()), false); - QCOMPARE(prop.hasChangedNotifier(), false); - QCOMPARE(prop.needsChangedNotifier(), false); - QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, 0), false); - QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, -1), false); + QCOMPARE(prop.hasNotifySignal(), false); + QCOMPARE(prop.needsNotifySignal(), false); + QCOMPARE(prop.connectNotifySignal(0, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, 0), false); + QCOMPARE(prop.connectNotifySignal(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, -1), false); QVERIFY(prop.method().signature() == 0); QCOMPARE(prop.type(), QDeclarativeProperty::Invalid); QCOMPARE(prop.isProperty(), false); - QCOMPARE(prop.isDefault(), false); QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), false); QCOMPARE(prop.isResettable(), false); @@ -559,7 +551,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_context() QVERIFY(QDeclarativePropertyPrivate::signalExpression(prop) == 0); QVERIFY(QDeclarativePropertyPrivate::setSignalExpression(prop, expression) == 0); QVERIFY(expression == 0); - QCOMPARE(prop.coreIndex(), -1); + QCOMPARE(prop.index(), -1); QCOMPARE(QDeclarativePropertyPrivate::valueTypeCoreIndex(prop), -1); delete obj; @@ -579,18 +571,17 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_context() QCOMPARE(prop.name(), QString("defaultProperty")); QCOMPARE(prop.read(), QVariant(10)); QCOMPARE(prop.write(QVariant()), false); - QCOMPARE(prop.hasChangedNotifier(), false); - QCOMPARE(prop.needsChangedNotifier(), true); - QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, 0), false); - QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, -1), false); + QCOMPARE(prop.hasNotifySignal(), false); + QCOMPARE(prop.needsNotifySignal(), true); + QCOMPARE(prop.connectNotifySignal(0, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, 0), false); + QCOMPARE(prop.connectNotifySignal(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, -1), false); QVERIFY(prop.method().signature() == 0); - QCOMPARE(prop.type(), (QDeclarativeProperty::Type)(QDeclarativeProperty::Property | QDeclarativeProperty::Default)); + QCOMPARE(prop.type(), QDeclarativeProperty::Property); QCOMPARE(prop.isProperty(), true); - QCOMPARE(prop.isDefault(), true); QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), true); QCOMPARE(prop.isResettable(), false); @@ -608,7 +599,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_context() QVERIFY(QDeclarativePropertyPrivate::signalExpression(prop) == 0); QVERIFY(QDeclarativePropertyPrivate::setSignalExpression(prop, expression) == 0); QVERIFY(expression == 0); - QCOMPARE(prop.coreIndex(), dobject.metaObject()->indexOfProperty("defaultProperty")); + QCOMPARE(prop.index(), dobject.metaObject()->indexOfProperty("defaultProperty")); QCOMPARE(QDeclarativePropertyPrivate::valueTypeCoreIndex(prop), -1); delete obj; @@ -633,18 +624,17 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string_context() QCOMPARE(prop.name(), QString()); QCOMPARE(prop.read(), QVariant()); QCOMPARE(prop.write(QVariant()), false); - QCOMPARE(prop.hasChangedNotifier(), false); - QCOMPARE(prop.needsChangedNotifier(), false); - QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, 0), false); - QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, -1), false); + QCOMPARE(prop.hasNotifySignal(), false); + QCOMPARE(prop.needsNotifySignal(), false); + QCOMPARE(prop.connectNotifySignal(0, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, 0), false); + QCOMPARE(prop.connectNotifySignal(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, -1), false); QVERIFY(prop.method().signature() == 0); QCOMPARE(prop.type(), QDeclarativeProperty::Invalid); QCOMPARE(prop.isProperty(), false); - QCOMPARE(prop.isDefault(), false); QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), false); QCOMPARE(prop.isResettable(), false); @@ -660,7 +650,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string_context() QVERIFY(QDeclarativePropertyPrivate::signalExpression(prop) == 0); QVERIFY(QDeclarativePropertyPrivate::setSignalExpression(prop, expression) == 0); QVERIFY(expression == 0); - QCOMPARE(prop.coreIndex(), -1); + QCOMPARE(prop.index(), -1); QCOMPARE(QDeclarativePropertyPrivate::valueTypeCoreIndex(prop), -1); delete obj; @@ -680,18 +670,17 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string_context() QCOMPARE(prop.name(), QString("defaultProperty")); QCOMPARE(prop.read(), QVariant(10)); QCOMPARE(prop.write(QVariant()), false); - QCOMPARE(prop.hasChangedNotifier(), false); - QCOMPARE(prop.needsChangedNotifier(), true); - QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, 0), false); - QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, -1), false); + QCOMPARE(prop.hasNotifySignal(), false); + QCOMPARE(prop.needsNotifySignal(), true); + QCOMPARE(prop.connectNotifySignal(0, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, 0), false); + QCOMPARE(prop.connectNotifySignal(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, -1), false); QVERIFY(prop.method().signature() == 0); QCOMPARE(prop.type(), QDeclarativeProperty::Property); QCOMPARE(prop.isProperty(), true); - QCOMPARE(prop.isDefault(), false); QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), true); QCOMPARE(prop.isResettable(), false); @@ -709,7 +698,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string_context() QVERIFY(QDeclarativePropertyPrivate::signalExpression(prop) == 0); QVERIFY(QDeclarativePropertyPrivate::setSignalExpression(prop, expression) == 0); QVERIFY(expression == 0); - QCOMPARE(prop.coreIndex(), dobject.metaObject()->indexOfProperty("defaultProperty")); + QCOMPARE(prop.index(), dobject.metaObject()->indexOfProperty("defaultProperty")); QCOMPARE(QDeclarativePropertyPrivate::valueTypeCoreIndex(prop), -1); delete obj; @@ -729,18 +718,17 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string_context() QCOMPARE(prop.name(), QString("onClicked")); QCOMPARE(prop.read(), QVariant()); QCOMPARE(prop.write(QVariant("Hello")), false); - QCOMPARE(prop.hasChangedNotifier(), false); - QCOMPARE(prop.needsChangedNotifier(), false); - QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, 0), false); - QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, -1), false); + QCOMPARE(prop.hasNotifySignal(), false); + QCOMPARE(prop.needsNotifySignal(), false); + QCOMPARE(prop.connectNotifySignal(0, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, 0), false); + QCOMPARE(prop.connectNotifySignal(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, -1), false); QCOMPARE(QString(prop.method().signature()), QString("clicked()")); QCOMPARE(prop.type(), QDeclarativeProperty::SignalProperty); QCOMPARE(prop.isProperty(), false); - QCOMPARE(prop.isDefault(), false); QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), false); QCOMPARE(prop.isResettable(), false); @@ -757,7 +745,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string_context() QVERIFY(QDeclarativePropertyPrivate::setSignalExpression(prop, expression) == 0); QVERIFY(expression != 0); QVERIFY(QDeclarativePropertyPrivate::signalExpression(prop) == expression); - QCOMPARE(prop.coreIndex(), dobject.metaObject()->indexOfMethod("clicked()")); + QCOMPARE(prop.index(), dobject.metaObject()->indexOfMethod("clicked()")); QCOMPARE(QDeclarativePropertyPrivate::valueTypeCoreIndex(prop), -1); delete obj; @@ -777,18 +765,17 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string_context() QCOMPARE(prop.name(), QString("onOddlyNamedNotifySignal")); QCOMPARE(prop.read(), QVariant()); QCOMPARE(prop.write(QVariant("Hello")), false); - QCOMPARE(prop.hasChangedNotifier(), false); - QCOMPARE(prop.needsChangedNotifier(), false); - QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false); - QCOMPARE(prop.connectNotifier(obj, 0), false); - QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); - QCOMPARE(prop.connectNotifier(obj, -1), false); + QCOMPARE(prop.hasNotifySignal(), false); + QCOMPARE(prop.needsNotifySignal(), false); + QCOMPARE(prop.connectNotifySignal(0, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifySignal(obj, 0), false); + QCOMPARE(prop.connectNotifySignal(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifySignal(obj, -1), false); QCOMPARE(QString(prop.method().signature()), QString("oddlyNamedNotifySignal()")); QCOMPARE(prop.type(), QDeclarativeProperty::SignalProperty); QCOMPARE(prop.isProperty(), false); - QCOMPARE(prop.isDefault(), false); QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), false); QCOMPARE(prop.isResettable(), false); @@ -805,7 +792,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string_context() QVERIFY(QDeclarativePropertyPrivate::setSignalExpression(prop, expression) == 0); QVERIFY(expression != 0); QVERIFY(QDeclarativePropertyPrivate::signalExpression(prop) == expression); - QCOMPARE(prop.coreIndex(), dobject.metaObject()->indexOfMethod("oddlyNamedNotifySignal()")); + QCOMPARE(prop.index(), dobject.metaObject()->indexOfMethod("oddlyNamedNotifySignal()")); QCOMPARE(QDeclarativePropertyPrivate::valueTypeCoreIndex(prop), -1); delete obj; diff --git a/tests/auto/declarative/qdeclarativewebview/data/forward.html b/tests/auto/declarative/qdeclarativewebview/data/forward.html index 030446a..62ab62d 100644 --- a/tests/auto/declarative/qdeclarativewebview/data/forward.html +++ b/tests/auto/declarative/qdeclarativewebview/data/forward.html @@ -1,6 +1,6 @@ <html> <head><title>Forward</title> -<link rel="icon" sizes="48x48" href="basic.png"> +<link rel="icon" sizes="32x32" href="forward.png"> </head> <body leftmargin="0" marginwidth="0"> <table width="123"> diff --git a/tests/auto/declarative/qdeclarativewebview/tst_qdeclarativewebview.cpp b/tests/auto/declarative/qdeclarativewebview/tst_qdeclarativewebview.cpp index 2634825..6d16056 100644 --- a/tests/auto/declarative/qdeclarativewebview/tst_qdeclarativewebview.cpp +++ b/tests/auto/declarative/qdeclarativewebview/tst_qdeclarativewebview.cpp @@ -277,6 +277,8 @@ void tst_qdeclarativewebview::historyNav() wv->setUrl(QUrl::fromLocalFile(SRCDIR "/data/forward.html")); QTRY_COMPARE(wv->progress(), 1.0); QCOMPARE(wv->title(),QString("Forward")); + QTRY_COMPARE(wv->icon().width(), 32); + QCOMPARE(wv->icon(),QPixmap(SRCDIR "/data/forward.png")); QCOMPARE(strippedHtml(fileContents(SRCDIR "/data/forward.html")), strippedHtml(wv->html())); QCOMPARE(wv->url(), QUrl::fromLocalFile(SRCDIR "/data/forward.html")); QCOMPARE(wv->status(), QDeclarativeWebView::Ready); diff --git a/tests/auto/declarative/visual/qdeclarativeflickable/flickable-horizontal.qml b/tests/auto/declarative/visual/qdeclarativeflickable/flickable-horizontal.qml index 1a7366d..50ba9ad 100644 --- a/tests/auto/declarative/visual/qdeclarativeflickable/flickable-horizontal.qml +++ b/tests/auto/declarative/visual/qdeclarativeflickable/flickable-horizontal.qml @@ -17,7 +17,7 @@ Rectangle { Flickable { id: flickable - anchors.fill: parent; viewportWidth: row.width + anchors.fill: parent; contentWidth: row.width Row { id: row diff --git a/tests/auto/declarative/visual/qdeclarativeflickable/flickable-vertical.qml b/tests/auto/declarative/visual/qdeclarativeflickable/flickable-vertical.qml index 6204aa9..ebb963d 100644 --- a/tests/auto/declarative/visual/qdeclarativeflickable/flickable-vertical.qml +++ b/tests/auto/declarative/visual/qdeclarativeflickable/flickable-vertical.qml @@ -18,7 +18,7 @@ Rectangle { flickable { id: flick height: parent.height-50 - width: parent.width; viewportHeight: column.height + width: parent.width; contentHeight: column.height Column { id: column diff --git a/tests/auto/gestures/tst_gestures.cpp b/tests/auto/gestures/tst_gestures.cpp index 24391c0..a2058cd 100644 --- a/tests/auto/gestures/tst_gestures.cpp +++ b/tests/auto/gestures/tst_gestures.cpp @@ -261,15 +261,19 @@ protected: eventsPtr->all << g->gestureType(); switch(g->state()) { case Qt::GestureStarted: + emit gestureStarted(e->type(), g); eventsPtr->started << g->gestureType(); break; case Qt::GestureUpdated: + emit gestureUpdated(e->type(), g); eventsPtr->updated << g->gestureType(); break; case Qt::GestureFinished: + emit gestureFinished(e->type(), g); eventsPtr->finished << g->gestureType(); break; case Qt::GestureCanceled: + emit gestureCanceled(e->type(), g); eventsPtr->canceled << g->gestureType(); break; default: @@ -283,13 +287,23 @@ protected: } return true; } + +Q_SIGNALS: + void gestureStarted(QEvent::Type, QGesture *); + void gestureUpdated(QEvent::Type, QGesture *); + void gestureFinished(QEvent::Type, QGesture *); + void gestureCanceled(QEvent::Type, QGesture *); + +public Q_SLOTS: + void deleteThis() { delete this; } }; // TODO rename to sendGestureSequence static void sendCustomGesture(CustomEvent *event, QObject *object, QGraphicsScene *scene = 0) { + QWeakPointer<QObject> receiver(object); for (int i = CustomGesture::SerialMaybeThreshold; - i <= CustomGesture::SerialFinishedThreshold; ++i) { + i <= CustomGesture::SerialFinishedThreshold && receiver; ++i) { event->serial = i; if (scene) scene->sendEvent(qobject_cast<QGraphicsObject *>(object), event); @@ -336,6 +350,9 @@ private slots: void graphicsViewParentPropagation(); void panelPropagation(); void panelStacksBehindParent(); + void deleteGestureTargetWidget(); + void deleteGestureTargetItem_data(); + void deleteGestureTargetItem(); }; tst_Gestures::tst_Gestures() @@ -657,14 +674,16 @@ static const QColor InstanceColors[] = { class GestureItem : public QGraphicsObject { + Q_OBJECT static int InstanceCount; - public: GestureItem(const char *name = 0) { instanceNumber = InstanceCount++; - if (name) + if (name) { setObjectName(QLatin1String(name)); + setToolTip(name); + } size = QRectF(0, 0, 100, 100); customEventsReceived = 0; gestureEventsReceived = 0; @@ -672,6 +691,8 @@ public: events.clear(); overrideEvents.clear(); acceptGestureOverride = false; + + scene = 0; } ~GestureItem() { @@ -773,15 +794,19 @@ protected: switch(g->state()) { case Qt::GestureStarted: eventsPtr->started << g->gestureType(); + emit gestureStarted(e->type(), g); break; case Qt::GestureUpdated: eventsPtr->updated << g->gestureType(); + emit gestureUpdated(e->type(), g); break; case Qt::GestureFinished: eventsPtr->finished << g->gestureType(); + emit gestureFinished(e->type(), g); break; case Qt::GestureCanceled: eventsPtr->canceled << g->gestureType(); + emit gestureCanceled(e->type(), g); break; default: Q_ASSERT(false); @@ -794,6 +819,26 @@ protected: } return true; } + +Q_SIGNALS: + void gestureStarted(QEvent::Type, QGesture *); + void gestureUpdated(QEvent::Type, QGesture *); + void gestureFinished(QEvent::Type, QGesture *); + void gestureCanceled(QEvent::Type, QGesture *); + +public: + // some arguments for the slots below: + QGraphicsScene *scene; + +public Q_SLOTS: + void deleteThis() { delete this; } + void addSelfToScene(QEvent::Type eventType, QGesture *) + { + if (eventType == QEvent::Gesture) { + disconnect(sender(), 0, this, SLOT(addSelfToScene(QEvent::Type,QGesture*))); + scene->addItem(this); + } + } }; int GestureItem::InstanceCount = 0; @@ -1549,7 +1594,7 @@ void tst_Gestures::graphicsViewParentPropagation() QCOMPARE(item1_c1_c1->gestureEventsReceived, TotalGestureEventsCount); QCOMPARE(item1_c1_c1->gestureOverrideEventsReceived, 1); - QCOMPARE(item1_c1->gestureEventsReceived, 0); + QCOMPARE(item1_c1->gestureEventsReceived, TotalGestureEventsCount-1); QCOMPARE(item1_c1->gestureOverrideEventsReceived, 1); QCOMPARE(item1->gestureEventsReceived, TotalGestureEventsCount-1); QCOMPARE(item1->gestureOverrideEventsReceived, 1); @@ -1724,5 +1769,93 @@ void tst_Gestures::panelStacksBehindParent() QCOMPARE(panel->gestureOverrideEventsReceived, 0); } +void tst_Gestures::deleteGestureTargetWidget() +{ + +} + +void tst_Gestures::deleteGestureTargetItem_data() +{ + QTest::addColumn<bool>("propagateUpdateGesture"); + QTest::addColumn<QString>("emitter"); + QTest::addColumn<QString>("receiver"); + QTest::addColumn<QByteArray>("signalName"); + QTest::addColumn<QByteArray>("slotName"); + + QByteArray gestureUpdated = SIGNAL(gestureUpdated(QEvent::Type,QGesture*)); + QByteArray gestureFinished = SIGNAL(gestureFinished(QEvent::Type,QGesture*)); + QByteArray deleteThis = SLOT(deleteThis()); + QByteArray deleteLater = SLOT(deleteLater()); + + QTest::newRow("delete1") + << false << "item1" << "item1" << gestureUpdated << deleteThis; + QTest::newRow("delete2") + << false << "item2" << "item2" << gestureUpdated << deleteThis; + QTest::newRow("delete3") + << false << "item1" << "item2" << gestureUpdated << deleteThis; + + QTest::newRow("deleteLater1") + << false << "item1" << "item1" << gestureUpdated << deleteLater; + QTest::newRow("deleteLater2") + << false << "item2" << "item2" << gestureUpdated << deleteLater; + QTest::newRow("deleteLater3") + << false << "item1" << "item2" << gestureUpdated << deleteLater; + QTest::newRow("deleteLater4") + << false << "item2" << "item1" << gestureUpdated << deleteLater; + + QTest::newRow("delete-self-and-propagate") + << true << "item2" << "item2" << gestureUpdated << deleteThis; + QTest::newRow("deleteLater-self-and-propagate") + << true << "item2" << "item2" << gestureUpdated << deleteLater; + QTest::newRow("propagate-to-deletedLater") + << true << "item2" << "item1" << gestureUpdated << deleteLater; +} + +void tst_Gestures::deleteGestureTargetItem() +{ + QFETCH(bool, propagateUpdateGesture); + QFETCH(QString, emitter); + QFETCH(QString, receiver); + QFETCH(QByteArray, signalName); + QFETCH(QByteArray, slotName); + + QGraphicsScene scene; + QGraphicsView view(&scene); + view.setWindowFlags(Qt::X11BypassWindowManagerHint); + + GestureItem *item1 = new GestureItem("item1"); + item1->grabGesture(CustomGesture::GestureType); + item1->setZValue(2); + scene.addItem(item1); + + GestureItem *item2 = new GestureItem("item2"); + item2->grabGesture(CustomGesture::GestureType); + item2->setZValue(5); + scene.addItem(item2); + + QMap<QString, GestureItem *> items; + items.insert(item1->objectName(), item1); + items.insert(item2->objectName(), item2); + + view.show(); + QTest::qWaitForWindowShown(&view); + view.ensureVisible(scene.sceneRect()); + + view.viewport()->grabGesture(CustomGesture::GestureType, Qt::DontStartGestureOnChildren); + + if (propagateUpdateGesture) + item2->ignoredUpdatedGestures << CustomGesture::GestureType; + connect(items.value(emitter, 0), signalName, items.value(receiver, 0), slotName); + + // some debug output to see the current test data tag, so if we crash + // we know which one caused the crash. + qDebug() << "<-- testing"; + + CustomEvent event; + event.hotSpot = mapToGlobal(QPointF(5, 5), item2, &view); + event.hasHotSpot = true; + sendCustomGesture(&event, item1, &scene); +} + QTEST_MAIN(tst_Gestures) #include "tst_gestures.moc" diff --git a/tests/auto/headers/headers.pro b/tests/auto/headers/headers.pro index 703da7c..74e1a02 100644 --- a/tests/auto/headers/headers.pro +++ b/tests/auto/headers/headers.pro @@ -1,3 +1,3 @@ load(qttest_p4) -SOURCES += tst_headers.cpp +SOURCES += tst_headers.cpp headersclean.cpp QT = core diff --git a/tests/auto/headers/headersclean.cpp b/tests/auto/headers/headersclean.cpp new file mode 100644 index 0000000..b932b9f --- /dev/null +++ b/tests/auto/headers/headersclean.cpp @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** 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 test suite 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$ +** +****************************************************************************/ + +#define QT_NO_KEYWORDS +#define signals int +#define slots int +#define emit public:; +#define foreach public:; +#define forever public:; + +// include all of Qt here + +// core Qt +#include <QtCore/QtCore> +#include <QtGui/QtGui> +#include <QtNetwork/QtNetwork> + +// extra +#include <QtDBus/QtDBus> +//#include <QtDeclarative/QtDeclarative> +#include <QtHelp/QtHelp> +#include <QtMultimedia/QtMultimedia> +#include <QtOpenGL/QtOpenGL> +#include <QtScript/QtScript> +#include <QtScriptTools/QtScriptTools> +#include <QtSql/QtSql> +#include <QtSvg/QtSvg> +#include <QtTest/QtTest> +#include <QtXml/QtXml> +#include <QtXmlPatterns/QtXmlPatterns> + +// webkit: +#include <QtWebKit/QtWebKit> + +// designer: +#include <QtDesigner/QtDesigner> +#include <QtUiTools/QtUiTools> + +// feature dependent: +#ifndef QT_NO_OPENVG +#include <QtOpenVG/QtOpenVG> +#endif + +// removed in 4.7: +//#include <QtAssistant/QtAssistant> + +// can't include this since it causes a linker error +//#include <Qt3Support/Qt3Support> diff --git a/tests/auto/qabstractproxymodel/tst_qabstractproxymodel.cpp b/tests/auto/qabstractproxymodel/tst_qabstractproxymodel.cpp index 6d92d03..88c2ef1 100644 --- a/tests/auto/qabstractproxymodel/tst_qabstractproxymodel.cpp +++ b/tests/auto/qabstractproxymodel/tst_qabstractproxymodel.cpp @@ -80,6 +80,7 @@ private slots: void setSourceModel(); void submit_data(); void submit(); + void testRoleNames(); }; // Subclass that exposes the protected functions. @@ -362,6 +363,87 @@ void tst_QAbstractProxyModel::submit() QCOMPARE(model.submit(), submit); } +class StandardItemModelWithCustomRoleNames : public QStandardItemModel +{ +public: + enum CustomRole { + CustomRole1 = Qt::UserRole, + CustomRole2 + }; + + StandardItemModelWithCustomRoleNames() { + QHash<int, QByteArray> _roleNames = roleNames(); + _roleNames.insert(CustomRole1, "custom1"); + _roleNames.insert(CustomRole2, "custom2"); + setRoleNames(_roleNames); + } +}; + +class AnotherStandardItemModelWithCustomRoleNames : public QStandardItemModel +{ + public: + enum CustomRole { + AnotherCustomRole1 = Qt::UserRole + 10, // Different to StandardItemModelWithCustomRoleNames::CustomRole1 + AnotherCustomRole2 + }; + + AnotherStandardItemModelWithCustomRoleNames() { + QHash<int, QByteArray> _roleNames = roleNames(); + _roleNames.insert(AnotherCustomRole1, "another_custom1"); + _roleNames.insert(AnotherCustomRole2, "another_custom2"); + setRoleNames(_roleNames); + } +}; + +/** + Verifies that @p subSet is a subset of @p superSet. That is, all keys in @p subSet exist in @p superSet and have the same values. +*/ +static void verifySubSetOf(const QHash<int, QByteArray> &superSet, const QHash<int, QByteArray> &subSet) +{ + QHash<int, QByteArray>::const_iterator it = subSet.constBegin(); + const QHash<int, QByteArray>::const_iterator end = subSet.constEnd(); + for ( ; it != end; ++it ) { + QVERIFY(superSet.contains(it.key())); + QVERIFY(it.value() == superSet.value(it.key())); + } +} + +void tst_QAbstractProxyModel::testRoleNames() +{ + QStandardItemModel defaultModel; + StandardItemModelWithCustomRoleNames model; + QHash<int, QByteArray> rootModelRoleNames = model.roleNames(); + QHash<int, QByteArray> defaultModelRoleNames = defaultModel.roleNames(); + + verifySubSetOf( rootModelRoleNames, defaultModelRoleNames); + QVERIFY( rootModelRoleNames.size() == defaultModelRoleNames.size() + 2 ); + QVERIFY( rootModelRoleNames.contains(StandardItemModelWithCustomRoleNames::CustomRole1)); + QVERIFY( rootModelRoleNames.contains(StandardItemModelWithCustomRoleNames::CustomRole2)); + QVERIFY( rootModelRoleNames.value(StandardItemModelWithCustomRoleNames::CustomRole1) == "custom1" ); + QVERIFY( rootModelRoleNames.value(StandardItemModelWithCustomRoleNames::CustomRole2) == "custom2" ); + + SubQAbstractProxyModel proxy1; + proxy1.setSourceModel(&model); + QHash<int, QByteArray> proxy1RoleNames = proxy1.roleNames(); + verifySubSetOf( proxy1RoleNames, defaultModelRoleNames ); + QVERIFY( proxy1RoleNames.size() == defaultModelRoleNames.size() + 2 ); + QVERIFY( proxy1RoleNames.contains(StandardItemModelWithCustomRoleNames::CustomRole1)); + QVERIFY( proxy1RoleNames.contains(StandardItemModelWithCustomRoleNames::CustomRole2)); + QVERIFY( proxy1RoleNames.value(StandardItemModelWithCustomRoleNames::CustomRole1) == "custom1" ); + QVERIFY( proxy1RoleNames.value(StandardItemModelWithCustomRoleNames::CustomRole2) == "custom2" ); + + SubQAbstractProxyModel proxy2; + proxy2.setSourceModel(&proxy1); + QHash<int, QByteArray> proxy2RoleNames = proxy2.roleNames(); + verifySubSetOf( proxy2RoleNames, defaultModelRoleNames ); + QVERIFY( proxy2RoleNames.size() == defaultModelRoleNames.size() + 2 ); + QVERIFY( proxy2RoleNames.contains(StandardItemModelWithCustomRoleNames::CustomRole1)); + QVERIFY( proxy2RoleNames.contains(StandardItemModelWithCustomRoleNames::CustomRole2)); + QVERIFY( proxy2RoleNames.value(StandardItemModelWithCustomRoleNames::CustomRole1) == "custom1" ); + QVERIFY( proxy2RoleNames.value(StandardItemModelWithCustomRoleNames::CustomRole2) == "custom2" ); + +} + QTEST_MAIN(tst_QAbstractProxyModel) #include "tst_qabstractproxymodel.moc" diff --git a/tests/auto/qchar/qchar.pro b/tests/auto/qchar/qchar.pro index fca4ef6..0a3fcc3 100644 --- a/tests/auto/qchar/qchar.pro +++ b/tests/auto/qchar/qchar.pro @@ -8,3 +8,4 @@ deploy.sources += NormalizationTest.txt DEPLOYMENT = deploy } +DEFINES += SRCDIR=\\\"$$PWD/\\\" diff --git a/tests/auto/qchar/tst_qchar.cpp b/tests/auto/qchar/tst_qchar.cpp index 241b9a5..547147c 100644 --- a/tests/auto/qchar/tst_qchar.cpp +++ b/tests/auto/qchar/tst_qchar.cpp @@ -499,10 +499,7 @@ void tst_QChar::normalization() QVERIFY(composed.normalized(QString::NormalizationForm_KC) == decomposed); } - QFile f("NormalizationTest.txt"); - // Windows - current directory is the debug/release subdirectory where the executable is located - if (!f.exists()) - f.setFileName("../NormalizationTest.txt");; + QFile f(SRCDIR "NormalizationTest.txt"); if (!f.exists()) { QFAIL("Couldn't find NormalizationTest.txt"); return; diff --git a/tests/auto/qdatastream/tst_qdatastream.cpp b/tests/auto/qdatastream/tst_qdatastream.cpp index c94ea7b..31e12fe 100644 --- a/tests/auto/qdatastream/tst_qdatastream.cpp +++ b/tests/auto/qdatastream/tst_qdatastream.cpp @@ -162,6 +162,9 @@ private slots: void stream_QIcon_data(); void stream_QIcon(); + void stream_QEasingCurve_data(); + void stream_QEasingCurve(); + void stream_atEnd_data(); void stream_atEnd(); @@ -243,6 +246,7 @@ private: void writeqint64(QDataStream *s); void writeQWMatrix(QDataStream *s); void writeQIcon(QDataStream *s); + void writeQEasingCurve(QDataStream *s); void readbool(QDataStream *s); void readQBool(QDataStream *s); @@ -272,6 +276,7 @@ private: void readqint64(QDataStream *s); void readQWMatrix(QDataStream *s); void readQIcon(QDataStream *s); + void readQEasingCurve(QDataStream *s); private: QString svgFile; @@ -687,6 +692,70 @@ void tst_QDataStream::readHash(QDataStream *s) // ************************************ +static QEasingCurve QEasingCurveData(int index) +{ + QEasingCurve easing; + + switch (index) { + case 0: + default: + break; + case 1: + easing.setType(QEasingCurve::Linear); + break; + case 2: + easing.setType(QEasingCurve::OutCubic); + break; + case 3: + easing.setType(QEasingCurve::InOutSine); + break; + case 4: + easing.setType(QEasingCurve::InOutElastic); + easing.setPeriod(1.5); + easing.setAmplitude(2.0); + break; + case 5: + easing.setType(QEasingCurve::OutInBack); + break; + case 6: + easing.setType(QEasingCurve::OutCurve); + break; + case 7: + easing.setType(QEasingCurve::InOutBack); + easing.setOvershoot(0.5); + break; + } + return easing; +} +#define MAX_EASING_DATA 8 + +void tst_QDataStream::stream_QEasingCurve_data() +{ + stream_data(MAX_EASING_DATA); +} + +void tst_QDataStream::stream_QEasingCurve() +{ + STREAM_IMPL(QEasingCurve); +} + +void tst_QDataStream::writeQEasingCurve(QDataStream* s) +{ + QEasingCurve test(QEasingCurveData(dataIndex(QTest::currentDataTag()))); + *s << test; +} + +void tst_QDataStream::readQEasingCurve(QDataStream *s) +{ + QEasingCurve S; + QEasingCurve expected(QEasingCurveData(dataIndex(QTest::currentDataTag()))); + + *s >> S; + QCOMPARE(S, expected); +} + +// ************************************ + // contains some quint64 testing as well #define MAX_qint64_DATA 4 diff --git a/tests/auto/qdbuspendingcall/tst_qdbuspendingcall.cpp b/tests/auto/qdbuspendingcall/tst_qdbuspendingcall.cpp index 7208383..a55a427 100644 --- a/tests/auto/qdbuspendingcall/tst_qdbuspendingcall.cpp +++ b/tests/auto/qdbuspendingcall/tst_qdbuspendingcall.cpp @@ -41,6 +41,7 @@ #include <QtCore/QObject> #include <QtCore/QVariant> #include <QtCore/QList> +#include <QtCore/QThread> #include <QtCore/QVector> #include <QtTest/QtTest> #ifndef QT_NO_DBUS @@ -90,6 +91,7 @@ private Q_SLOTS: void watcher(); void watcher_error(); void watcher_waitForFinished(); + void watcher_waitForFinished_threaded(); void watcher_waitForFinished_alreadyFinished(); void watcher_waitForFinished_alreadyFinished_eventLoop(); void watcher_waitForFinished_error(); @@ -124,7 +126,8 @@ void tst_QDBusPendingCall::finished(QDBusPendingCallWatcher *call) slotCalled = FinishCalled; ++callCount; watchArgument = call; - QTestEventLoop::instance().exitLoop(); + if (QThread::currentThread() == thread()) + QTestEventLoop::instance().exitLoop(); } void tst_QDBusPendingCall::callback(const QStringList &list) @@ -377,6 +380,56 @@ void tst_QDBusPendingCall::watcher_waitForFinished() QVERIFY(args2.at(0).toStringList().contains(conn.baseService())); } +void tst_QDBusPendingCall::watcher_waitForFinished_threaded() +{ + callCount = 0; + watchArgument = 0; + slotCalled = 0; + + class WorkerThread: public QThread { + public: + tst_QDBusPendingCall *tst; + WorkerThread(tst_QDBusPendingCall *tst) : tst(tst) {} + void run() + { + QDBusPendingCall ac = tst->sendMessage(); +// QVERIFY(!ac.isFinished()); +// QVERIFY(!ac.isError()); +// QVERIFY(ac.reply().type() == QDBusMessage::InvalidMessage); + + QDBusPendingCallWatcher watch(ac); + tst->connect(&watch, SIGNAL(finished(QDBusPendingCallWatcher*)), + SLOT(finished(QDBusPendingCallWatcher*)), Qt::DirectConnection); + + QTest::qSleep(100); // don't process events in this thread + +// QVERIFY(!ac.isFinished()); +// QVERIFY(!ac.isError()); +// QVERIFY(ac.reply().type() == QDBusMessage::InvalidMessage); + QCOMPARE(tst->callCount, 0); + QCOMPARE(tst->slotCalled, 0); + + watch.waitForFinished(); + QVERIFY(ac.isFinished()); + QVERIFY(!ac.isError()); + + QCOMPARE(tst->callCount, 1); + QCOMPARE(tst->slotCalled, (int)FinishCalled); + QCOMPARE(tst->watchArgument, &watch); + QVERIFY(!watch.isError()); + + const QVariantList args2 = ac.reply().arguments(); + QVERIFY(!args2.isEmpty()); + QVERIFY(args2.at(0).toStringList().contains(tst->conn.baseService())); + } + } thread(this); + QTestEventLoop::instance().connect(&thread, SIGNAL(finished()), SLOT(exitLoop())); + thread.start(); + QTestEventLoop::instance().enterLoop(10); + QVERIFY(!thread.isRunning()); + QVERIFY(!QTestEventLoop::instance().timeout()); +} + void tst_QDBusPendingCall::watcher_waitForFinished_alreadyFinished() { QDBusPendingCall ac = sendMessage(); diff --git a/tests/auto/qdeclarativeaudio/qdeclarativeaudio.pro b/tests/auto/qdeclarativeaudio/qdeclarativeaudio.pro index f3262ee..13bf606 100644 --- a/tests/auto/qdeclarativeaudio/qdeclarativeaudio.pro +++ b/tests/auto/qdeclarativeaudio/qdeclarativeaudio.pro @@ -2,5 +2,3 @@ load(qttest_p4) SOURCES += tst_qdeclarativeaudio.cpp QT += multimedia declarative -requires(contains(QT_CONFIG, multimedia)) -requires(contains(QT_CONFIG, declarative)) diff --git a/tests/auto/qdeclarativevideo/qdeclarativevideo.pro b/tests/auto/qdeclarativevideo/qdeclarativevideo.pro index 0cd7879..d946bb0 100644 --- a/tests/auto/qdeclarativevideo/qdeclarativevideo.pro +++ b/tests/auto/qdeclarativevideo/qdeclarativevideo.pro @@ -2,5 +2,3 @@ load(qttest_p4) SOURCES += tst_qdeclarativevideo.cpp QT += multimedia declarative -requires(contains(QT_CONFIG, multimedia)) -requires(contains(QT_CONFIG, declarative)) diff --git a/tests/auto/qeasingcurve/tst_qeasingcurve.cpp b/tests/auto/qeasingcurve/tst_qeasingcurve.cpp index abb4014..124f900 100644 --- a/tests/auto/qeasingcurve/tst_qeasingcurve.cpp +++ b/tests/auto/qeasingcurve/tst_qeasingcurve.cpp @@ -69,8 +69,6 @@ private slots: void valueForProgress(); void setCustomType(); void operators(); - void dataStreamOperators_data(); - void dataStreamOperators(); void properties(); void metaTypes(); @@ -509,58 +507,6 @@ void tst_QEasingCurve::operators() QVERIFY(curve2 == curve); } -void tst_QEasingCurve::dataStreamOperators_data() -{ - QTest::addColumn<int>("type"); - QTest::addColumn<qreal>("amplitude"); - QTest::addColumn<qreal>("overshoot"); - QTest::addColumn<qreal>("period"); - QTest::addColumn<QEasingCurve>("easingCurve"); - QTest::newRow("Linear") << int(QEasingCurve::Linear) << -1.0 << -1.0 << -1.0 << QEasingCurve(QEasingCurve::Linear); - QTest::newRow("OutCubic") << int(QEasingCurve::OutCubic) << -1.0 << -1.0 << -1.0 << QEasingCurve(QEasingCurve::OutCubic); - QTest::newRow("InOutSine") << int(QEasingCurve::InOutSine) << -1.0 << -1.0 << -1.0 << QEasingCurve(QEasingCurve::InOutSine); - QEasingCurve inOutElastic(QEasingCurve::InOutElastic); - inOutElastic.setPeriod(1.5); - inOutElastic.setAmplitude(2.0); - QTest::newRow("InOutElastic") << int(QEasingCurve::InOutElastic) << 2.0 << -1.0 << 1.5 << inOutElastic; - QTest::newRow("OutInBack") << int(QEasingCurve::OutInBack) << -1.0 << -1.0 << -1.0 << QEasingCurve(QEasingCurve::OutInBack); - QTest::newRow("OutCurve") << int(QEasingCurve::OutCurve) << -1.0 << -1.0 << -1.0 << QEasingCurve(QEasingCurve::OutCurve); - QEasingCurve inOutBack(QEasingCurve::InOutBack); - inOutBack.setOvershoot(0.5); - QTest::newRow("InOutBack") << int(QEasingCurve::InOutBack) << -1.0 << 0.5 << -1.0 << inOutBack; -} - -void tst_QEasingCurve::dataStreamOperators() -{ - QFETCH(int, type); - QFETCH(qreal, amplitude); - QFETCH(qreal, overshoot); - QFETCH(qreal, period); - QFETCH(QEasingCurve, easingCurve); - - // operator << - QEasingCurve curve; - curve.setType(QEasingCurve::Type(type)); - if (amplitude != -1.0) - curve.setAmplitude(amplitude); - if (overshoot != -1.0) - curve.setOvershoot(overshoot); - if (period != -1.0) - curve.setPeriod(period); - - QVERIFY(easingCurve == curve); - - QByteArray array; - QDataStream out(&array, QIODevice::WriteOnly); - out << curve; - - QDataStream in(array); - QEasingCurve curve2; - in >> curve2; - - QVERIFY(curve2 == curve); -} - class tst_QEasingProperties : public QObject { Q_OBJECT diff --git a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp index 2ef0419..d37ff76 100644 --- a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp +++ b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp @@ -245,6 +245,7 @@ private slots: #endif void render_data(); void render(); + void renderItemsWithNegativeWidthOrHeight(); void contextMenuEvent(); void contextMenuEvent_ItemIgnoresTransformations(); void update(); @@ -2751,6 +2752,41 @@ void tst_QGraphicsScene::render() } } +void tst_QGraphicsScene::renderItemsWithNegativeWidthOrHeight() +{ + QGraphicsScene scene(0, 0, 150, 150); + + // Add item with negative width. + QGraphicsRectItem *item1 = new QGraphicsRectItem(0, 0, -150, 50); + item1->setBrush(Qt::red); + item1->setPos(150, 50); + scene.addItem(item1); + + // Add item with negative height. + QGraphicsRectItem *item2 = new QGraphicsRectItem(0, 0, 50, -150); + item2->setBrush(Qt::blue); + item2->setPos(50, 150); + scene.addItem(item2); + + QGraphicsView view(&scene); + view.setFrameStyle(QFrame::NoFrame); + view.resize(150, 150); + view.show(); + QCOMPARE(view.viewport()->size(), QSize(150, 150)); + + QImage expected(view.viewport()->size(), QImage::Format_RGB32); + view.viewport()->render(&expected); + + // Make sure the scene background is the same as the viewport background. + scene.setBackgroundBrush(view.viewport()->palette().brush(view.viewport()->backgroundRole())); + QImage actual(150, 150, QImage::Format_RGB32); + QPainter painter(&actual); + scene.render(&painter); + painter.end(); + + QCOMPARE(actual, expected); +} + void tst_QGraphicsScene::contextMenuEvent() { QGraphicsScene scene; diff --git a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp index 59bffeb..c77f76d 100644 --- a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp +++ b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp @@ -218,6 +218,7 @@ private slots: void update(); void inputMethodSensitivity(); void inputContextReset(); + void indirectPainting(); // task specific tests below me void task172231_untransformableItems(); @@ -3799,6 +3800,31 @@ void tst_QGraphicsView::inputContextReset() QCOMPARE(inputContext.resets, 0); } +void tst_QGraphicsView::indirectPainting() +{ + class MyScene : public QGraphicsScene + { public: + MyScene() : QGraphicsScene(), drawCount(0) {} + void drawItems(QPainter *, int, QGraphicsItem **, const QStyleOptionGraphicsItem *, QWidget *) + { ++drawCount; } + int drawCount; + }; + + MyScene scene; + QGraphicsItem *item = scene.addRect(0, 0, 50, 50); + + QGraphicsView view(&scene); + view.setOptimizationFlag(QGraphicsView::IndirectPainting); + view.show(); + QTest::qWaitForWindowShown(&view); + QTest::qWait(100); + + scene.drawCount = 0; + item->setPos(20, 20); + QApplication::processEvents(); + QTRY_VERIFY(scene.drawCount > 0); +} + void tst_QGraphicsView::task253415_reconnectUpdateSceneOnSceneChanged() { QGraphicsView view; diff --git a/tests/auto/qmediacontent/tst_qmediacontent.cpp b/tests/auto/qmediacontent/tst_qmediacontent.cpp index 8987241..a0a9bdb 100644 --- a/tests/auto/qmediacontent/tst_qmediacontent.cpp +++ b/tests/auto/qmediacontent/tst_qmediacontent.cpp @@ -85,6 +85,7 @@ void tst_QMediaContent::testRequestCtor() QMediaContent media(request); + QCOMPARE(media.canonicalRequest(), request); QCOMPARE(media.canonicalUrl(), QUrl("http://example.com/movie.mov")); QCOMPARE(media.canonicalResource().request(), request); QCOMPARE(media.canonicalResource().url(), QUrl("http://example.com/movie.mov")); diff --git a/tests/auto/qpropertyanimation/tst_qpropertyanimation.cpp b/tests/auto/qpropertyanimation/tst_qpropertyanimation.cpp index 66cfeb7..849b8b2 100644 --- a/tests/auto/qpropertyanimation/tst_qpropertyanimation.cpp +++ b/tests/auto/qpropertyanimation/tst_qpropertyanimation.cpp @@ -40,6 +40,7 @@ ****************************************************************************/ #include <QtTest/QtTest> +#include "../../shared/util.h" #include <QtCore/qpropertyanimation.h> #include <QtCore/qvariantanimation.h> @@ -288,7 +289,7 @@ void tst_QPropertyAnimation::statesAndSignals() anim->start(); QTest::qWait(1000); - QCOMPARE(anim->state(), QAnimationGroup::Stopped); + QTRY_COMPARE(anim->state(), QAnimationGroup::Stopped); QCOMPARE(runningSpy.count(), 2); //started and stopped again runningSpy.clear(); QCOMPARE(finishedSpy.count(), 1); @@ -340,7 +341,7 @@ void tst_QPropertyAnimation::deletion1() QCOMPARE(anim->state(), QAnimationGroup::Running); QTest::qWait(150); QVERIFY(anim); //The animation should not have been deleted - QCOMPARE(anim->state(), QAnimationGroup::Stopped); + QTRY_COMPARE(anim->state(), QAnimationGroup::Stopped); QCOMPARE(runningSpy.count(), 2); QCOMPARE(finishedSpy.count(), 1); @@ -351,9 +352,9 @@ void tst_QPropertyAnimation::deletion1() QVERIFY(anim); QCOMPARE(anim->state(), QAnimationGroup::Running); QTest::qWait(150); - QVERIFY(!anim); //The animation must have been deleted - QCOMPARE(runningSpy.count(), 4); + QTRY_COMPARE(runningSpy.count(), 4); QCOMPARE(finishedSpy.count(), 2); + QVERIFY(!anim); //The animation must have been deleted delete object; } @@ -459,7 +460,7 @@ void tst_QPropertyAnimation::noStartValue() QTest::qWait(300); - QCOMPARE(o.values.first(), 42); + QTRY_COMPARE(o.values.first(), 42); QCOMPARE(o.values.last(), 420); } @@ -497,7 +498,7 @@ void tst_QPropertyAnimation::startWhenAnotherIsRunning() QSignalSpy runningSpy(anim, SIGNAL(stateChanged(QAbstractAnimation::State, QAbstractAnimation::State))); anim->start(QVariantAnimation::DeleteWhenStopped); QTest::qWait(anim->duration() + 100); - QCOMPARE(runningSpy.count(), 2); //started and then stopped + QTRY_COMPARE(runningSpy.count(), 2); //started and then stopped QVERIFY(!anim); } @@ -518,7 +519,7 @@ void tst_QPropertyAnimation::startWhenAnotherIsRunning() QVERIFY(!anim); //anim should have been deleted QVERIFY(anim2); QTest::qWait(anim2->duration()); - QVERIFY(!anim2); //anim2 is finished: it should have been deleted by now + QTRY_VERIFY(!anim2); //anim2 is finished: it should have been deleted by now QVERIFY(!anim); } @@ -591,7 +592,7 @@ void tst_QPropertyAnimation::startWithoutStartValue() QVERIFY(current < 100); QTest::qWait(200); - QCOMPARE(anim.state(), QVariantAnimation::Stopped); + QTRY_COMPARE(anim.state(), QVariantAnimation::Stopped); current = anim.currentValue().toInt(); QCOMPARE(current, 100); QCOMPARE(o.property("ole").toInt(), current); @@ -631,7 +632,7 @@ void tst_QPropertyAnimation::startBackwardWithoutEndValue() QVERIFY(current < 100); QTest::qWait(200); - QCOMPARE(anim.state(), QVariantAnimation::Stopped); + QTRY_COMPARE(anim.state(), QVariantAnimation::Stopped); current = anim.currentValue().toInt(); QCOMPARE(current, 100); QCOMPARE(o.property("ole").toInt(), current); @@ -661,7 +662,7 @@ void tst_QPropertyAnimation::playForwardBackward() anim.setEndValue(100); anim.start(); QTest::qWait(anim.duration() + 100); - QCOMPARE(anim.state(), QAbstractAnimation::Stopped); + QTRY_COMPARE(anim.state(), QAbstractAnimation::Stopped); QCOMPARE(anim.currentTime(), anim.duration()); //the animation is at the end @@ -669,7 +670,7 @@ void tst_QPropertyAnimation::playForwardBackward() anim.start(); QCOMPARE(anim.state(), QAbstractAnimation::Running); QTest::qWait(anim.duration() + 100); - QCOMPARE(anim.state(), QAbstractAnimation::Stopped); + QTRY_COMPARE(anim.state(), QAbstractAnimation::Stopped); QCOMPARE(anim.currentTime(), 0); //the direction is backward @@ -678,7 +679,7 @@ void tst_QPropertyAnimation::playForwardBackward() QCOMPARE(anim.state(), QAbstractAnimation::Running); QCOMPARE(anim.currentTime(), anim.duration()); QTest::qWait(anim.duration() + 100); - QCOMPARE(anim.state(), QAbstractAnimation::Stopped); + QTRY_COMPARE(anim.state(), QAbstractAnimation::Stopped); QCOMPARE(anim.currentTime(), 0); } @@ -1146,7 +1147,7 @@ void tst_QPropertyAnimation::twoAnimations() o2.anim.start(); QTest::qWait(o1.anim.duration() + 100); - QCOMPARE(o1.anim.state(), QAbstractAnimation::Stopped); + QTRY_COMPARE(o1.anim.state(), QAbstractAnimation::Stopped); QCOMPARE(o2.anim.state(), QAbstractAnimation::Stopped); QCOMPARE(o1.ole(), 1000); @@ -1197,7 +1198,7 @@ void tst_QPropertyAnimation::deletedInUpdateCurrentTime() QCOMPARE(composedAnimation.state(), QAbstractAnimation::Running); QTest::qWait(composedAnimation.duration() + 100); - QCOMPARE(composedAnimation.state(), QAbstractAnimation::Stopped); + QTRY_COMPARE(composedAnimation.state(), QAbstractAnimation::Stopped); QCOMPARE(o.value(), 1000); } diff --git a/tests/auto/qregexp/tst_qregexp.cpp b/tests/auto/qregexp/tst_qregexp.cpp index 4d16ab5..ea07323 100644 --- a/tests/auto/qregexp/tst_qregexp.cpp +++ b/tests/auto/qregexp/tst_qregexp.cpp @@ -102,6 +102,9 @@ private slots: void reentrancy(); void threadsafeEngineCache(); + + void QTBUG_7049_data(); + void QTBUG_7049(); }; // Testing get/set functions @@ -1333,5 +1336,95 @@ void tst_QRegExp::operator_eq() } } +void tst_QRegExp::QTBUG_7049_data() +{ + QTest::addColumn<QString>("reStr"); + QTest::addColumn<QString>("text"); + QTest::addColumn<int>("matchIndex"); + + QTest::addColumn<int>("pos0"); + QTest::addColumn<int>("pos1"); + QTest::addColumn<int>("pos2"); + + QTest::addColumn<QString>("cap0"); + QTest::addColumn<QString>("cap1"); + QTest::addColumn<QString>("cap2"); + + QTest::newRow("no match") + << QString("(a) (b)") << QString("b a") << -1 + << -1 << -1 << -1 << QString() << QString() << QString(); + + QTest::newRow("both captures match") + << QString("(a) (b)") << QString("a b") << 0 + << 0 << 0 << 2 << QString("a b") << QString("a") << QString("b"); + + QTest::newRow("first capture matches @0") + << QString("(a*)|(b*)") << QString("axx") << 0 + << 0 << 0 << -1 << QString("a") << QString("a") << QString(); + QTest::newRow("second capture matches @0") + << QString("(a*)|(b*)") << QString("bxx") << 0 + << 0 << -1 << 0 << QString("b") << QString() << QString("b"); + QTest::newRow("first capture empty match @0") + << QString("(a*)|(b*)") << QString("xx") << 0 + << 0 << -1 << -1 << QString("") << QString() << QString(); + QTest::newRow("second capture empty match @0") + << QString("(a)|(b*)") << QString("xx") << 0 + << 0 << -1 << -1 << QString("") << QString() << QString(); + + QTest::newRow("first capture matches @1") + << QString("x(?:(a*)|(b*))") << QString("-xa") << 1 + << 1 << 2 << -1 << QString("xa") << QString("a") << QString(); + QTest::newRow("second capture matches @1") + << QString("x(?:(a*)|(b*))") << QString("-xb") << 1 + << 1 << -1 << 2 << QString("xb") << QString() << QString("b"); + QTest::newRow("first capture empty match @1") + << QString("x(?:(a*)|(b*))") << QString("-xx") << 1 + << 1 << -1 << -1 << QString("x") << QString() << QString(); + QTest::newRow("second capture empty match @1") + << QString("x(?:(a)|(b*))") << QString("-xx") << 1 + << 1 << -1 << -1 << QString("x") << QString() << QString(); + + QTest::newRow("first capture matches @2") + << QString("(a)|(b)") << QString("xxa") << 2 + << 2 << 2 << -1 << QString("a") << QString("a") << QString(); + QTest::newRow("second capture matches @2") + << QString("(a)|(b)") << QString("xxb") << 2 + << 2 << -1 << 2 << QString("b") << QString() << QString("b"); + QTest::newRow("no match - with options") + << QString("(a)|(b)") << QString("xx") << -1 + << -1 << -1 << -1 << QString() << QString() << QString(); + +} + +void tst_QRegExp::QTBUG_7049() +{ + QFETCH( QString, reStr ); + QFETCH( QString, text ); + QFETCH( int, matchIndex ); + QFETCH( int, pos0 ); + QFETCH( int, pos1 ); + QFETCH( int, pos2 ); + QFETCH( QString, cap0 ); + QFETCH( QString, cap1 ); + QFETCH( QString, cap2 ); + + QRegExp re(reStr); + QCOMPARE(re.numCaptures(), 2); + QCOMPARE(re.capturedTexts().size(), 3); + + QCOMPARE(re.indexIn(text), matchIndex); + + QCOMPARE( re.pos(0), pos0 ); + QCOMPARE( re.pos(1), pos1 ); + QCOMPARE( re.pos(2), pos2 ); + + QCOMPARE( re.cap(0).isNull(), cap0.isNull() ); + QCOMPARE( re.cap(0), cap0 ); + QCOMPARE( re.cap(1).isNull(), cap1.isNull() ); + QCOMPARE( re.cap(1), cap1 ); + QCOMPARE( re.cap(2).isNull(), cap2.isNull() ); + QCOMPARE( re.cap(2), cap2 ); +} + QTEST_APPLESS_MAIN(tst_QRegExp) #include "tst_qregexp.moc" diff --git a/tests/auto/qscriptstring/tst_qscriptstring.cpp b/tests/auto/qscriptstring/tst_qscriptstring.cpp index 808b643..ea4a92b 100644 --- a/tests/auto/qscriptstring/tst_qscriptstring.cpp +++ b/tests/auto/qscriptstring/tst_qscriptstring.cpp @@ -177,6 +177,12 @@ void tst_QScriptString::toArrayIndex_data() QTest::newRow("101a") << QString::fromLatin1("101a") << false << quint32(0xffffffff); QTest::newRow("4294967294") << QString::fromLatin1("4294967294") << true << quint32(0xfffffffe); QTest::newRow("4294967295") << QString::fromLatin1("4294967295") << false << quint32(0xffffffff); + QTest::newRow("0.0") << QString::fromLatin1("0.0") << false << quint32(0xffffffff); + QTest::newRow("1.0") << QString::fromLatin1("1.0") << false << quint32(0xffffffff); + QTest::newRow("1.5") << QString::fromLatin1("1.5") << false << quint32(0xffffffff); + QTest::newRow("1.") << QString::fromLatin1("1.") << false << quint32(0xffffffff); + QTest::newRow(".1") << QString::fromLatin1(".1") << false << quint32(0xffffffff); + QTest::newRow("1e0") << QString::fromLatin1("1e0") << false << quint32(0xffffffff); } void tst_QScriptString::toArrayIndex() diff --git a/tests/auto/qscriptvalue/qscriptvalue.pro b/tests/auto/qscriptvalue/qscriptvalue.pro index 1588cc5..191cd4a 100644 --- a/tests/auto/qscriptvalue/qscriptvalue.pro +++ b/tests/auto/qscriptvalue/qscriptvalue.pro @@ -5,3 +5,10 @@ HEADERS += tst_qscriptvalue.h # Generated by testgen SOURCES += tst_qscriptvalue_generated.cpp + + +win32-msvc* { + # With -O2, MSVC takes up to 24 minutes to compile this test! + QMAKE_CXXFLAGS_RELEASE -= -O1 -O2 + QMAKE_CXXFLAGS_RELEASE += -Od +} diff --git a/tests/auto/qscriptvalue/testgen/data.txt b/tests/auto/qscriptvalue/testgen/data.txt index a041c9b..73677ec 100644 --- a/tests/auto/qscriptvalue/testgen/data.txt +++ b/tests/auto/qscriptvalue/testgen/data.txt @@ -34,6 +34,7 @@ QScriptValue(QString()) QScriptValue(QString("0")) QScriptValue(QString("123")) QScriptValue(QString("12.4")) +#QScriptValue(QString::fromUtf8("ąśćżźółńę")) #Unbound values (bound to a null engine) QScriptValue(0, QScriptValue::UndefinedValue) @@ -64,6 +65,7 @@ QScriptValue(0, QString()) QScriptValue(0, QString("0")) QScriptValue(0, QString("123")) QScriptValue(0, QString("12.3")) +#QScriptValue(0, QString::fromUtf8("ąśćżźółńę")) #Bound values QScriptValue(engine, QScriptValue::UndefinedValue) @@ -114,7 +116,46 @@ engine->evaluate("/foo/") engine->evaluate("new Object()") engine->evaluate("new Array()") engine->evaluate("new Error()") +engine->evaluate("a = new Object(); a.foo = 22; a.foo") +engine->evaluate("Undefined") +engine->evaluate("Null") +engine->evaluate("True") +engine->evaluate("False") + +engine->evaluate("undefined") +engine->evaluate("null") +engine->evaluate("true") +engine->evaluate("false") +engine->evaluate("122") +engine->evaluate("124") +engine->evaluate("0") +engine->evaluate("0.0") +engine->evaluate("123.0") +engine->evaluate("6.37e-8") +engine->evaluate("-6.37e-8") +engine->evaluate("0x43211234") +engine->evaluate("0x10000") +engine->evaluate("0x10001") +engine->evaluate("NaN") +engine->evaluate("Infinity") +engine->evaluate("-Infinity") +engine->evaluate("'ciao'") +engine->evaluate("''") +engine->evaluate("'0'") +engine->evaluate("'123'") +engine->evaluate("'12.4'") +#engine->evaluate(QString::fromUtf8("'ąśćżźółńę'")) #other engine->nullValue() -engine->undefinedValue()
\ No newline at end of file +engine->undefinedValue() +engine->newObject() +engine->newArray() +engine->newArray(10) +engine->newDate(QDateTime()) +engine->newQMetaObject(&QObject::staticMetaObject) +engine->newVariant(QVariant()) +engine->newVariant(QVariant(123)) +engine->newVariant(QVariant(false)) +engine->newQObject(0) +engine->newQObject(engine)
\ No newline at end of file diff --git a/tests/auto/qscriptvalue/testgen/gen.py b/tests/auto/qscriptvalue/testgen/gen.py index b3c81b9..6e48f46 100755 --- a/tests/auto/qscriptvalue/testgen/gen.py +++ b/tests/auto/qscriptvalue/testgen/gen.py @@ -70,8 +70,7 @@ class Options(): return getattr(self._o, attr) -mainTempl = Template("""/* -/**************************************************************************** +mainTempl = Template("""/**************************************************************************** ** ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. diff --git a/tests/auto/qscriptvalue/testgen/testgenerator.cpp b/tests/auto/qscriptvalue/testgen/testgenerator.cpp index d852ea5..4376c42 100644 --- a/tests/auto/qscriptvalue/testgen/testgenerator.cpp +++ b/tests/auto/qscriptvalue/testgen/testgenerator.cpp @@ -119,6 +119,7 @@ static QString generateIsXXXDef(const QString& name, const QList<QString>& list) "{\n"\ " QFETCH(bool, expected);\n"\ " QCOMPARE(value.%1(), expected);\n"\ + " QCOMPARE(value.%1(), expected);\n"\ "}\n"\ "\n"\ "DEFINE_TEST_FUNCTION(%1)\n"\ @@ -166,6 +167,7 @@ static QString generateToXXXDef(const QString& name, const QList<QPair<QString, "{\n"\ " QFETCH(%2, expected);\n"\ " QCOMPARE(value.%1(), expected);\n"\ + " QCOMPARE(value.%1(), expected);\n"\ "}\n"\ "\n"\ "DEFINE_TEST_FUNCTION(%1)\n"; @@ -213,9 +215,11 @@ QString generateToXXXDef<qsreal>(const QString& name, const QList<QPair<QString, "%666" " if (qIsInf(expected)) {\n"\ " QVERIFY(qIsInf(value.%1()));\n"\ + " QVERIFY(qIsInf(value.%1()));\n"\ " return;\n"\ " }\n"\ " QCOMPARE(value.%1(), expected);\n"\ + " QCOMPARE(value.%1(), expected);\n"\ "}\n"\ "\n"\ "DEFINE_TEST_FUNCTION(%1)\n"; @@ -269,6 +273,7 @@ static QString generateCastDef(const QList<QPair<QString, T> >& list) "{\n"\ " QFETCH(%2, expected);\n"\ " QCOMPARE(qscriptvalue_cast<%2>(value), expected);\n"\ + " QCOMPARE(qscriptvalue_cast<%2>(value), expected);\n"\ "}\n"\ "\n"\ "DEFINE_TEST_FUNCTION(qscriptvalue_cast%2)\n"; @@ -313,13 +318,16 @@ QString generateCastDef<qsreal>(const QList<QPair<QString, qsreal> >& list) " QFETCH(%2, expected);\n"\ " if (qIsNaN(expected)) {\n" " QVERIFY(qIsNaN(qscriptvalue_cast<%2>(value)));\n" + " QVERIFY(qIsNaN(qscriptvalue_cast<%2>(value)));\n" " return;\n" " }\n"\ " if (qIsInf(expected)) {\n" " QVERIFY(qIsInf(qscriptvalue_cast<%2>(value)));\n" + " QVERIFY(qIsInf(qscriptvalue_cast<%2>(value)));\n" " return;\n" " }\n" " QCOMPARE(qscriptvalue_cast<%2>(value), expected);\n"\ + " QCOMPARE(qscriptvalue_cast<%2>(value), expected);\n"\ "}\n"\ "\n"\ "DEFINE_TEST_FUNCTION(qscriptvalue_cast%2)\n"; diff --git a/tests/auto/qscriptvalue/tst_qscriptvalue.h b/tests/auto/qscriptvalue/tst_qscriptvalue.h index 6215506..a5c7b45 100644 --- a/tests/auto/qscriptvalue/tst_qscriptvalue.h +++ b/tests/auto/qscriptvalue/tst_qscriptvalue.h @@ -89,11 +89,11 @@ private slots: void isObject_data(); void isObject(); -// void isQMetaObject_data(); -// void isQMetaObject(); + void isQMetaObject_data(); + void isQMetaObject(); -// void isQObject_data(); -// void isQObject(); + void isQObject_data(); + void isQObject(); void isRegExp_data(); void isRegExp(); @@ -107,8 +107,8 @@ private slots: void isValid_data(); void isValid(); -// void isVariant_data(); -// void isVariant(); + void isVariant_data(); + void isVariant(); void toBool_data(); void toBool(); diff --git a/tests/auto/qscriptvalue/tst_qscriptvalue_generated.cpp b/tests/auto/qscriptvalue/tst_qscriptvalue_generated.cpp index 4e621b3..a07ff4b 100644 --- a/tests/auto/qscriptvalue/tst_qscriptvalue_generated.cpp +++ b/tests/auto/qscriptvalue/tst_qscriptvalue_generated.cpp @@ -152,8 +152,45 @@ void tst_QScriptValue::initScriptValues() DEFINE_TEST_VALUE(engine->evaluate("new Object()")); DEFINE_TEST_VALUE(engine->evaluate("new Array()")); DEFINE_TEST_VALUE(engine->evaluate("new Error()")); + DEFINE_TEST_VALUE(engine->evaluate("a = new Object(); a.foo = 22; a.foo")); + DEFINE_TEST_VALUE(engine->evaluate("Undefined")); + DEFINE_TEST_VALUE(engine->evaluate("Null")); + DEFINE_TEST_VALUE(engine->evaluate("True")); + DEFINE_TEST_VALUE(engine->evaluate("False")); + DEFINE_TEST_VALUE(engine->evaluate("undefined")); + DEFINE_TEST_VALUE(engine->evaluate("null")); + DEFINE_TEST_VALUE(engine->evaluate("true")); + DEFINE_TEST_VALUE(engine->evaluate("false")); + DEFINE_TEST_VALUE(engine->evaluate("122")); + DEFINE_TEST_VALUE(engine->evaluate("124")); + DEFINE_TEST_VALUE(engine->evaluate("0")); + DEFINE_TEST_VALUE(engine->evaluate("0.0")); + DEFINE_TEST_VALUE(engine->evaluate("123.0")); + DEFINE_TEST_VALUE(engine->evaluate("6.37e-8")); + DEFINE_TEST_VALUE(engine->evaluate("-6.37e-8")); + DEFINE_TEST_VALUE(engine->evaluate("0x43211234")); + DEFINE_TEST_VALUE(engine->evaluate("0x10000")); + DEFINE_TEST_VALUE(engine->evaluate("0x10001")); + DEFINE_TEST_VALUE(engine->evaluate("NaN")); + DEFINE_TEST_VALUE(engine->evaluate("Infinity")); + DEFINE_TEST_VALUE(engine->evaluate("-Infinity")); + DEFINE_TEST_VALUE(engine->evaluate("'ciao'")); + DEFINE_TEST_VALUE(engine->evaluate("''")); + DEFINE_TEST_VALUE(engine->evaluate("'0'")); + DEFINE_TEST_VALUE(engine->evaluate("'123'")); + DEFINE_TEST_VALUE(engine->evaluate("'12.4'")); DEFINE_TEST_VALUE(engine->nullValue()); DEFINE_TEST_VALUE(engine->undefinedValue()); + DEFINE_TEST_VALUE(engine->newObject()); + DEFINE_TEST_VALUE(engine->newArray()); + DEFINE_TEST_VALUE(engine->newArray(10)); + DEFINE_TEST_VALUE(engine->newDate(QDateTime())); + DEFINE_TEST_VALUE(engine->newQMetaObject(&QObject::staticMetaObject)); + DEFINE_TEST_VALUE(engine->newVariant(QVariant())); + DEFINE_TEST_VALUE(engine->newVariant(QVariant(123))); + DEFINE_TEST_VALUE(engine->newVariant(QVariant(false))); + DEFINE_TEST_VALUE(engine->newQObject(0)); + DEFINE_TEST_VALUE(engine->newQObject(engine)); } @@ -269,8 +306,45 @@ void tst_QScriptValue::isValid_makeData(const char* expr) << "engine->evaluate(\"new Object()\")" << "engine->evaluate(\"new Array()\")" << "engine->evaluate(\"new Error()\")" + << "engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")" + << "engine->evaluate(\"Undefined\")" + << "engine->evaluate(\"Null\")" + << "engine->evaluate(\"True\")" + << "engine->evaluate(\"False\")" + << "engine->evaluate(\"undefined\")" + << "engine->evaluate(\"null\")" + << "engine->evaluate(\"true\")" + << "engine->evaluate(\"false\")" + << "engine->evaluate(\"122\")" + << "engine->evaluate(\"124\")" + << "engine->evaluate(\"0\")" + << "engine->evaluate(\"0.0\")" + << "engine->evaluate(\"123.0\")" + << "engine->evaluate(\"6.37e-8\")" + << "engine->evaluate(\"-6.37e-8\")" + << "engine->evaluate(\"0x43211234\")" + << "engine->evaluate(\"0x10000\")" + << "engine->evaluate(\"0x10001\")" + << "engine->evaluate(\"NaN\")" + << "engine->evaluate(\"Infinity\")" + << "engine->evaluate(\"-Infinity\")" + << "engine->evaluate(\"'ciao'\")" + << "engine->evaluate(\"''\")" + << "engine->evaluate(\"'0'\")" + << "engine->evaluate(\"'123'\")" + << "engine->evaluate(\"'12.4'\")" << "engine->nullValue()" << "engine->undefinedValue()" + << "engine->newObject()" + << "engine->newArray()" + << "engine->newArray(10)" + << "engine->newDate(QDateTime())" + << "engine->newQMetaObject(&QObject::staticMetaObject)" + << "engine->newVariant(QVariant())" + << "engine->newVariant(QVariant(123))" + << "engine->newVariant(QVariant(false))" + << "engine->newQObject(0)" + << "engine->newQObject(engine)" ; } newRow(expr) << isValid.contains(expr); @@ -280,6 +354,7 @@ void tst_QScriptValue::isValid_test(const char*, const QScriptValue& value) { QFETCH(bool, expected); QCOMPARE(value.isValid(), expected); + QCOMPARE(value.isValid(), expected); } DEFINE_TEST_FUNCTION(isValid) @@ -301,6 +376,8 @@ void tst_QScriptValue::isBool_makeData(const char* expr) << "QScriptValue(0, false)" << "QScriptValue(engine, true)" << "QScriptValue(engine, false)" + << "engine->evaluate(\"true\")" + << "engine->evaluate(\"false\")" ; } newRow(expr) << isBool.contains(expr); @@ -310,6 +387,7 @@ void tst_QScriptValue::isBool_test(const char*, const QScriptValue& value) { QFETCH(bool, expected); QCOMPARE(value.isBool(), expected); + QCOMPARE(value.isBool(), expected); } DEFINE_TEST_FUNCTION(isBool) @@ -331,6 +409,8 @@ void tst_QScriptValue::isBoolean_makeData(const char* expr) << "QScriptValue(0, false)" << "QScriptValue(engine, true)" << "QScriptValue(engine, false)" + << "engine->evaluate(\"true\")" + << "engine->evaluate(\"false\")" ; } newRow(expr) << isBoolean.contains(expr); @@ -340,6 +420,7 @@ void tst_QScriptValue::isBoolean_test(const char*, const QScriptValue& value) { QFETCH(bool, expected); QCOMPARE(value.isBoolean(), expected); + QCOMPARE(value.isBoolean(), expected); } DEFINE_TEST_FUNCTION(isBoolean) @@ -397,6 +478,20 @@ void tst_QScriptValue::isNumber_makeData(const char* expr) << "QScriptValue(engine, qQNaN())" << "QScriptValue(engine, qInf())" << "QScriptValue(engine, -qInf())" + << "engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")" + << "engine->evaluate(\"122\")" + << "engine->evaluate(\"124\")" + << "engine->evaluate(\"0\")" + << "engine->evaluate(\"0.0\")" + << "engine->evaluate(\"123.0\")" + << "engine->evaluate(\"6.37e-8\")" + << "engine->evaluate(\"-6.37e-8\")" + << "engine->evaluate(\"0x43211234\")" + << "engine->evaluate(\"0x10000\")" + << "engine->evaluate(\"0x10001\")" + << "engine->evaluate(\"NaN\")" + << "engine->evaluate(\"Infinity\")" + << "engine->evaluate(\"-Infinity\")" ; } newRow(expr) << isNumber.contains(expr); @@ -406,6 +501,7 @@ void tst_QScriptValue::isNumber_test(const char*, const QScriptValue& value) { QFETCH(bool, expected); QCOMPARE(value.isNumber(), expected); + QCOMPARE(value.isNumber(), expected); } DEFINE_TEST_FUNCTION(isNumber) @@ -430,6 +526,7 @@ void tst_QScriptValue::isFunction_makeData(const char* expr) << "engine->evaluate(\"(function() { return 'ciao'; })\")" << "engine->evaluate(\"(function() { throw new Error('foo'); })\")" << "engine->evaluate(\"/foo/\")" + << "engine->newQMetaObject(&QObject::staticMetaObject)" ; } newRow(expr) << isFunction.contains(expr); @@ -439,6 +536,7 @@ void tst_QScriptValue::isFunction_test(const char*, const QScriptValue& value) { QFETCH(bool, expected); QCOMPARE(value.isFunction(), expected); + QCOMPARE(value.isFunction(), expected); } DEFINE_TEST_FUNCTION(isFunction) @@ -457,7 +555,9 @@ void tst_QScriptValue::isNull_makeData(const char* expr) isNull << "QScriptValue(QScriptValue::NullValue)" << "QScriptValue(0, QScriptValue::NullValue)" << "QScriptValue(engine, QScriptValue::NullValue)" + << "engine->evaluate(\"null\")" << "engine->nullValue()" + << "engine->newQObject(0)" ; } newRow(expr) << isNull.contains(expr); @@ -467,6 +567,7 @@ void tst_QScriptValue::isNull_test(const char*, const QScriptValue& value) { QFETCH(bool, expected); QCOMPARE(value.isNull(), expected); + QCOMPARE(value.isNull(), expected); } DEFINE_TEST_FUNCTION(isNull) @@ -512,6 +613,11 @@ void tst_QScriptValue::isString_makeData(const char* expr) << "QScriptValue(engine, QString(\"0\"))" << "QScriptValue(engine, QString(\"123\"))" << "QScriptValue(engine, QString(\"1.23\"))" + << "engine->evaluate(\"'ciao'\")" + << "engine->evaluate(\"''\")" + << "engine->evaluate(\"'0'\")" + << "engine->evaluate(\"'123'\")" + << "engine->evaluate(\"'12.4'\")" ; } newRow(expr) << isString.contains(expr); @@ -521,6 +627,7 @@ void tst_QScriptValue::isString_test(const char*, const QScriptValue& value) { QFETCH(bool, expected); QCOMPARE(value.isString(), expected); + QCOMPARE(value.isString(), expected); } DEFINE_TEST_FUNCTION(isString) @@ -540,6 +647,7 @@ void tst_QScriptValue::isUndefined_makeData(const char* expr) << "QScriptValue(0, QScriptValue::UndefinedValue)" << "QScriptValue(engine, QScriptValue::UndefinedValue)" << "engine->evaluate(\"{}\")" + << "engine->evaluate(\"undefined\")" << "engine->undefinedValue()" ; } @@ -550,12 +658,90 @@ void tst_QScriptValue::isUndefined_test(const char*, const QScriptValue& value) { QFETCH(bool, expected); QCOMPARE(value.isUndefined(), expected); + QCOMPARE(value.isUndefined(), expected); } DEFINE_TEST_FUNCTION(isUndefined) +void tst_QScriptValue::isVariant_initData() +{ + QTest::addColumn<bool>("expected"); + initScriptValues(); +} + +void tst_QScriptValue::isVariant_makeData(const char* expr) +{ + static QSet<QString> isVariant; + if (isVariant.isEmpty()) { + isVariant << "engine->newVariant(QVariant())" + << "engine->newVariant(QVariant(123))" + << "engine->newVariant(QVariant(false))" + ; + } + newRow(expr) << isVariant.contains(expr); +} + +void tst_QScriptValue::isVariant_test(const char*, const QScriptValue& value) +{ + QFETCH(bool, expected); + QCOMPARE(value.isVariant(), expected); + QCOMPARE(value.isVariant(), expected); +} + +DEFINE_TEST_FUNCTION(isVariant) + + +void tst_QScriptValue::isQObject_initData() +{ + QTest::addColumn<bool>("expected"); + initScriptValues(); +} + +void tst_QScriptValue::isQObject_makeData(const char* expr) +{ + static QSet<QString> isQObject; + if (isQObject.isEmpty()) { + isQObject << "engine->newQObject(engine)" + ; + } + newRow(expr) << isQObject.contains(expr); +} + +void tst_QScriptValue::isQObject_test(const char*, const QScriptValue& value) +{ + QFETCH(bool, expected); + QCOMPARE(value.isQObject(), expected); + QCOMPARE(value.isQObject(), expected); +} + +DEFINE_TEST_FUNCTION(isQObject) + +void tst_QScriptValue::isQMetaObject_initData() +{ + QTest::addColumn<bool>("expected"); + initScriptValues(); +} + +void tst_QScriptValue::isQMetaObject_makeData(const char* expr) +{ + static QSet<QString> isQMetaObject; + if (isQMetaObject.isEmpty()) { + isQMetaObject << "engine->newQMetaObject(&QObject::staticMetaObject)" + ; + } + newRow(expr) << isQMetaObject.contains(expr); +} + +void tst_QScriptValue::isQMetaObject_test(const char*, const QScriptValue& value) +{ + QFETCH(bool, expected); + QCOMPARE(value.isQMetaObject(), expected); + QCOMPARE(value.isQMetaObject(), expected); +} + +DEFINE_TEST_FUNCTION(isQMetaObject) void tst_QScriptValue::isObject_initData() @@ -585,6 +771,19 @@ void tst_QScriptValue::isObject_makeData(const char* expr) << "engine->evaluate(\"new Object()\")" << "engine->evaluate(\"new Array()\")" << "engine->evaluate(\"new Error()\")" + << "engine->evaluate(\"Undefined\")" + << "engine->evaluate(\"Null\")" + << "engine->evaluate(\"True\")" + << "engine->evaluate(\"False\")" + << "engine->newObject()" + << "engine->newArray()" + << "engine->newArray(10)" + << "engine->newDate(QDateTime())" + << "engine->newQMetaObject(&QObject::staticMetaObject)" + << "engine->newVariant(QVariant())" + << "engine->newVariant(QVariant(123))" + << "engine->newVariant(QVariant(false))" + << "engine->newQObject(engine)" ; } newRow(expr) << isObject.contains(expr); @@ -594,6 +793,7 @@ void tst_QScriptValue::isObject_test(const char*, const QScriptValue& value) { QFETCH(bool, expected); QCOMPARE(value.isObject(), expected); + QCOMPARE(value.isObject(), expected); } DEFINE_TEST_FUNCTION(isObject) @@ -610,6 +810,7 @@ void tst_QScriptValue::isDate_makeData(const char* expr) static QSet<QString> isDate; if (isDate.isEmpty()) { isDate << "engine->evaluate(\"Date.prototype\")" + << "engine->newDate(QDateTime())" ; } newRow(expr) << isDate.contains(expr); @@ -619,6 +820,7 @@ void tst_QScriptValue::isDate_test(const char*, const QScriptValue& value) { QFETCH(bool, expected); QCOMPARE(value.isDate(), expected); + QCOMPARE(value.isDate(), expected); } DEFINE_TEST_FUNCTION(isDate) @@ -644,6 +846,7 @@ void tst_QScriptValue::isRegExp_test(const char*, const QScriptValue& value) { QFETCH(bool, expected); QCOMPARE(value.isRegExp(), expected); + QCOMPARE(value.isRegExp(), expected); } DEFINE_TEST_FUNCTION(isRegExp) @@ -662,6 +865,8 @@ void tst_QScriptValue::isArray_makeData(const char* expr) isArray << "engine->evaluate(\"[]\")" << "engine->evaluate(\"Array.prototype\")" << "engine->evaluate(\"new Array()\")" + << "engine->newArray()" + << "engine->newArray(10)" ; } newRow(expr) << isArray.contains(expr); @@ -671,6 +876,7 @@ void tst_QScriptValue::isArray_test(const char*, const QScriptValue& value) { QFETCH(bool, expected); QCOMPARE(value.isArray(), expected); + QCOMPARE(value.isArray(), expected); } DEFINE_TEST_FUNCTION(isArray) @@ -688,6 +894,10 @@ void tst_QScriptValue::isError_makeData(const char* expr) if (isError.isEmpty()) { isError << "engine->evaluate(\"Error.prototype\")" << "engine->evaluate(\"new Error()\")" + << "engine->evaluate(\"Undefined\")" + << "engine->evaluate(\"Null\")" + << "engine->evaluate(\"True\")" + << "engine->evaluate(\"False\")" ; } newRow(expr) << isError.contains(expr); @@ -697,6 +907,7 @@ void tst_QScriptValue::isError_test(const char*, const QScriptValue& value) { QFETCH(bool, expected); QCOMPARE(value.isError(), expected); + QCOMPARE(value.isError(), expected); } DEFINE_TEST_FUNCTION(isError) @@ -816,8 +1027,45 @@ void tst_QScriptValue::toString_makeData(const char* expr) toString.insert("engine->evaluate(\"new Object()\")", "[object Object]"); toString.insert("engine->evaluate(\"new Array()\")", ""); toString.insert("engine->evaluate(\"new Error()\")", "Error: Unknown error"); + toString.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")", "22"); + toString.insert("engine->evaluate(\"Undefined\")", "ReferenceError: Can't find variable: Undefined"); + toString.insert("engine->evaluate(\"Null\")", "ReferenceError: Can't find variable: Null"); + toString.insert("engine->evaluate(\"True\")", "ReferenceError: Can't find variable: True"); + toString.insert("engine->evaluate(\"False\")", "ReferenceError: Can't find variable: False"); + toString.insert("engine->evaluate(\"undefined\")", "undefined"); + toString.insert("engine->evaluate(\"null\")", "null"); + toString.insert("engine->evaluate(\"true\")", "true"); + toString.insert("engine->evaluate(\"false\")", "false"); + toString.insert("engine->evaluate(\"122\")", "122"); + toString.insert("engine->evaluate(\"124\")", "124"); + toString.insert("engine->evaluate(\"0\")", "0"); + toString.insert("engine->evaluate(\"0.0\")", "0"); + toString.insert("engine->evaluate(\"123.0\")", "123"); + toString.insert("engine->evaluate(\"6.37e-8\")", "6.37e-8"); + toString.insert("engine->evaluate(\"-6.37e-8\")", "-6.37e-8"); + toString.insert("engine->evaluate(\"0x43211234\")", "1126240820"); + toString.insert("engine->evaluate(\"0x10000\")", "65536"); + toString.insert("engine->evaluate(\"0x10001\")", "65537"); + toString.insert("engine->evaluate(\"NaN\")", "NaN"); + toString.insert("engine->evaluate(\"Infinity\")", "Infinity"); + toString.insert("engine->evaluate(\"-Infinity\")", "-Infinity"); + toString.insert("engine->evaluate(\"'ciao'\")", "ciao"); + toString.insert("engine->evaluate(\"''\")", ""); + toString.insert("engine->evaluate(\"'0'\")", "0"); + toString.insert("engine->evaluate(\"'123'\")", "123"); + toString.insert("engine->evaluate(\"'12.4'\")", "12.4"); toString.insert("engine->nullValue()", "null"); toString.insert("engine->undefinedValue()", "undefined"); + toString.insert("engine->newObject()", "[object Object]"); + toString.insert("engine->newArray()", ""); + toString.insert("engine->newArray(10)", ",,,,,,,,,"); + toString.insert("engine->newDate(QDateTime())", "Invalid Date"); + toString.insert("engine->newQMetaObject(&QObject::staticMetaObject)", "[object QMetaObject]"); + toString.insert("engine->newVariant(QVariant())", "undefined"); + toString.insert("engine->newVariant(QVariant(123))", "123"); + toString.insert("engine->newVariant(QVariant(false))", "false"); + toString.insert("engine->newQObject(0)", "null"); + toString.insert("engine->newQObject(engine)", "QScriptEngine(name = \"\")"); } newRow(expr) << toString.value(expr); } @@ -826,6 +1074,7 @@ void tst_QScriptValue::toString_test(const char*, const QScriptValue& value) { QFETCH(QString, expected); QCOMPARE(value.toString(), expected); + QCOMPARE(value.toString(), expected); } DEFINE_TEST_FUNCTION(toString) @@ -944,8 +1193,45 @@ void tst_QScriptValue::toNumber_makeData(const char* expr) toNumber.insert("engine->evaluate(\"new Object()\")", qQNaN()); toNumber.insert("engine->evaluate(\"new Array()\")", 0); toNumber.insert("engine->evaluate(\"new Error()\")", qQNaN()); + toNumber.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")", 22); + toNumber.insert("engine->evaluate(\"Undefined\")", qQNaN()); + toNumber.insert("engine->evaluate(\"Null\")", qQNaN()); + toNumber.insert("engine->evaluate(\"True\")", qQNaN()); + toNumber.insert("engine->evaluate(\"False\")", qQNaN()); + toNumber.insert("engine->evaluate(\"undefined\")", qQNaN()); + toNumber.insert("engine->evaluate(\"null\")", 0); + toNumber.insert("engine->evaluate(\"true\")", 1); + toNumber.insert("engine->evaluate(\"false\")", 0); + toNumber.insert("engine->evaluate(\"122\")", 122); + toNumber.insert("engine->evaluate(\"124\")", 124); + toNumber.insert("engine->evaluate(\"0\")", 0); + toNumber.insert("engine->evaluate(\"0.0\")", 0); + toNumber.insert("engine->evaluate(\"123.0\")", 123); + toNumber.insert("engine->evaluate(\"6.37e-8\")", 6.369999999999999e-08); + toNumber.insert("engine->evaluate(\"-6.37e-8\")", -6.369999999999999e-08); + toNumber.insert("engine->evaluate(\"0x43211234\")", 1126240820); + toNumber.insert("engine->evaluate(\"0x10000\")", 65536); + toNumber.insert("engine->evaluate(\"0x10001\")", 65537); + toNumber.insert("engine->evaluate(\"NaN\")", qQNaN()); + toNumber.insert("engine->evaluate(\"Infinity\")", qInf()); + toNumber.insert("engine->evaluate(\"-Infinity\")", qInf()); + toNumber.insert("engine->evaluate(\"'ciao'\")", qQNaN()); + toNumber.insert("engine->evaluate(\"''\")", 0); + toNumber.insert("engine->evaluate(\"'0'\")", 0); + toNumber.insert("engine->evaluate(\"'123'\")", 123); + toNumber.insert("engine->evaluate(\"'12.4'\")", 12.4); toNumber.insert("engine->nullValue()", 0); toNumber.insert("engine->undefinedValue()", qQNaN()); + toNumber.insert("engine->newObject()", qQNaN()); + toNumber.insert("engine->newArray()", 0); + toNumber.insert("engine->newArray(10)", qQNaN()); + toNumber.insert("engine->newDate(QDateTime())", qQNaN()); + toNumber.insert("engine->newQMetaObject(&QObject::staticMetaObject)", qQNaN()); + toNumber.insert("engine->newVariant(QVariant())", qQNaN()); + toNumber.insert("engine->newVariant(QVariant(123))", 123); + toNumber.insert("engine->newVariant(QVariant(false))", 0); + toNumber.insert("engine->newQObject(0)", 0); + toNumber.insert("engine->newQObject(engine)", qQNaN()); } newRow(expr) << toNumber.value(expr); } @@ -959,9 +1245,11 @@ void tst_QScriptValue::toNumber_test(const char*, const QScriptValue& value) } if (qIsInf(expected)) { QVERIFY(qIsInf(value.toNumber())); + QVERIFY(qIsInf(value.toNumber())); return; } QCOMPARE(value.toNumber(), expected); + QCOMPARE(value.toNumber(), expected); } DEFINE_TEST_FUNCTION(toNumber) @@ -1080,8 +1368,45 @@ void tst_QScriptValue::toBool_makeData(const char* expr) toBool.insert("engine->evaluate(\"new Object()\")", true); toBool.insert("engine->evaluate(\"new Array()\")", true); toBool.insert("engine->evaluate(\"new Error()\")", true); + toBool.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")", true); + toBool.insert("engine->evaluate(\"Undefined\")", true); + toBool.insert("engine->evaluate(\"Null\")", true); + toBool.insert("engine->evaluate(\"True\")", true); + toBool.insert("engine->evaluate(\"False\")", true); + toBool.insert("engine->evaluate(\"undefined\")", false); + toBool.insert("engine->evaluate(\"null\")", false); + toBool.insert("engine->evaluate(\"true\")", true); + toBool.insert("engine->evaluate(\"false\")", false); + toBool.insert("engine->evaluate(\"122\")", true); + toBool.insert("engine->evaluate(\"124\")", true); + toBool.insert("engine->evaluate(\"0\")", false); + toBool.insert("engine->evaluate(\"0.0\")", false); + toBool.insert("engine->evaluate(\"123.0\")", true); + toBool.insert("engine->evaluate(\"6.37e-8\")", true); + toBool.insert("engine->evaluate(\"-6.37e-8\")", true); + toBool.insert("engine->evaluate(\"0x43211234\")", true); + toBool.insert("engine->evaluate(\"0x10000\")", true); + toBool.insert("engine->evaluate(\"0x10001\")", true); + toBool.insert("engine->evaluate(\"NaN\")", false); + toBool.insert("engine->evaluate(\"Infinity\")", true); + toBool.insert("engine->evaluate(\"-Infinity\")", true); + toBool.insert("engine->evaluate(\"'ciao'\")", true); + toBool.insert("engine->evaluate(\"''\")", false); + toBool.insert("engine->evaluate(\"'0'\")", true); + toBool.insert("engine->evaluate(\"'123'\")", true); + toBool.insert("engine->evaluate(\"'12.4'\")", true); toBool.insert("engine->nullValue()", false); toBool.insert("engine->undefinedValue()", false); + toBool.insert("engine->newObject()", true); + toBool.insert("engine->newArray()", true); + toBool.insert("engine->newArray(10)", true); + toBool.insert("engine->newDate(QDateTime())", true); + toBool.insert("engine->newQMetaObject(&QObject::staticMetaObject)", true); + toBool.insert("engine->newVariant(QVariant())", true); + toBool.insert("engine->newVariant(QVariant(123))", true); + toBool.insert("engine->newVariant(QVariant(false))", true); + toBool.insert("engine->newQObject(0)", false); + toBool.insert("engine->newQObject(engine)", true); } newRow(expr) << toBool.value(expr); } @@ -1090,6 +1415,7 @@ void tst_QScriptValue::toBool_test(const char*, const QScriptValue& value) { QFETCH(bool, expected); QCOMPARE(value.toBool(), expected); + QCOMPARE(value.toBool(), expected); } DEFINE_TEST_FUNCTION(toBool) @@ -1208,8 +1534,45 @@ void tst_QScriptValue::toBoolean_makeData(const char* expr) toBoolean.insert("engine->evaluate(\"new Object()\")", true); toBoolean.insert("engine->evaluate(\"new Array()\")", true); toBoolean.insert("engine->evaluate(\"new Error()\")", true); + toBoolean.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")", true); + toBoolean.insert("engine->evaluate(\"Undefined\")", true); + toBoolean.insert("engine->evaluate(\"Null\")", true); + toBoolean.insert("engine->evaluate(\"True\")", true); + toBoolean.insert("engine->evaluate(\"False\")", true); + toBoolean.insert("engine->evaluate(\"undefined\")", false); + toBoolean.insert("engine->evaluate(\"null\")", false); + toBoolean.insert("engine->evaluate(\"true\")", true); + toBoolean.insert("engine->evaluate(\"false\")", false); + toBoolean.insert("engine->evaluate(\"122\")", true); + toBoolean.insert("engine->evaluate(\"124\")", true); + toBoolean.insert("engine->evaluate(\"0\")", false); + toBoolean.insert("engine->evaluate(\"0.0\")", false); + toBoolean.insert("engine->evaluate(\"123.0\")", true); + toBoolean.insert("engine->evaluate(\"6.37e-8\")", true); + toBoolean.insert("engine->evaluate(\"-6.37e-8\")", true); + toBoolean.insert("engine->evaluate(\"0x43211234\")", true); + toBoolean.insert("engine->evaluate(\"0x10000\")", true); + toBoolean.insert("engine->evaluate(\"0x10001\")", true); + toBoolean.insert("engine->evaluate(\"NaN\")", false); + toBoolean.insert("engine->evaluate(\"Infinity\")", true); + toBoolean.insert("engine->evaluate(\"-Infinity\")", true); + toBoolean.insert("engine->evaluate(\"'ciao'\")", true); + toBoolean.insert("engine->evaluate(\"''\")", false); + toBoolean.insert("engine->evaluate(\"'0'\")", true); + toBoolean.insert("engine->evaluate(\"'123'\")", true); + toBoolean.insert("engine->evaluate(\"'12.4'\")", true); toBoolean.insert("engine->nullValue()", false); toBoolean.insert("engine->undefinedValue()", false); + toBoolean.insert("engine->newObject()", true); + toBoolean.insert("engine->newArray()", true); + toBoolean.insert("engine->newArray(10)", true); + toBoolean.insert("engine->newDate(QDateTime())", true); + toBoolean.insert("engine->newQMetaObject(&QObject::staticMetaObject)", true); + toBoolean.insert("engine->newVariant(QVariant())", true); + toBoolean.insert("engine->newVariant(QVariant(123))", true); + toBoolean.insert("engine->newVariant(QVariant(false))", true); + toBoolean.insert("engine->newQObject(0)", false); + toBoolean.insert("engine->newQObject(engine)", true); } newRow(expr) << toBoolean.value(expr); } @@ -1218,6 +1581,7 @@ void tst_QScriptValue::toBoolean_test(const char*, const QScriptValue& value) { QFETCH(bool, expected); QCOMPARE(value.toBoolean(), expected); + QCOMPARE(value.toBoolean(), expected); } DEFINE_TEST_FUNCTION(toBoolean) @@ -1336,8 +1700,45 @@ void tst_QScriptValue::toInteger_makeData(const char* expr) toInteger.insert("engine->evaluate(\"new Object()\")", 0); toInteger.insert("engine->evaluate(\"new Array()\")", 0); toInteger.insert("engine->evaluate(\"new Error()\")", 0); + toInteger.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")", 22); + toInteger.insert("engine->evaluate(\"Undefined\")", 0); + toInteger.insert("engine->evaluate(\"Null\")", 0); + toInteger.insert("engine->evaluate(\"True\")", 0); + toInteger.insert("engine->evaluate(\"False\")", 0); + toInteger.insert("engine->evaluate(\"undefined\")", 0); + toInteger.insert("engine->evaluate(\"null\")", 0); + toInteger.insert("engine->evaluate(\"true\")", 1); + toInteger.insert("engine->evaluate(\"false\")", 0); + toInteger.insert("engine->evaluate(\"122\")", 122); + toInteger.insert("engine->evaluate(\"124\")", 124); + toInteger.insert("engine->evaluate(\"0\")", 0); + toInteger.insert("engine->evaluate(\"0.0\")", 0); + toInteger.insert("engine->evaluate(\"123.0\")", 123); + toInteger.insert("engine->evaluate(\"6.37e-8\")", 0); + toInteger.insert("engine->evaluate(\"-6.37e-8\")", 0); + toInteger.insert("engine->evaluate(\"0x43211234\")", 1126240820); + toInteger.insert("engine->evaluate(\"0x10000\")", 65536); + toInteger.insert("engine->evaluate(\"0x10001\")", 65537); + toInteger.insert("engine->evaluate(\"NaN\")", 0); + toInteger.insert("engine->evaluate(\"Infinity\")", qInf()); + toInteger.insert("engine->evaluate(\"-Infinity\")", qInf()); + toInteger.insert("engine->evaluate(\"'ciao'\")", 0); + toInteger.insert("engine->evaluate(\"''\")", 0); + toInteger.insert("engine->evaluate(\"'0'\")", 0); + toInteger.insert("engine->evaluate(\"'123'\")", 123); + toInteger.insert("engine->evaluate(\"'12.4'\")", 12); toInteger.insert("engine->nullValue()", 0); toInteger.insert("engine->undefinedValue()", 0); + toInteger.insert("engine->newObject()", 0); + toInteger.insert("engine->newArray()", 0); + toInteger.insert("engine->newArray(10)", 0); + toInteger.insert("engine->newDate(QDateTime())", 0); + toInteger.insert("engine->newQMetaObject(&QObject::staticMetaObject)", 0); + toInteger.insert("engine->newVariant(QVariant())", 0); + toInteger.insert("engine->newVariant(QVariant(123))", 123); + toInteger.insert("engine->newVariant(QVariant(false))", 0); + toInteger.insert("engine->newQObject(0)", 0); + toInteger.insert("engine->newQObject(engine)", 0); } newRow(expr) << toInteger.value(expr); } @@ -1347,9 +1748,11 @@ void tst_QScriptValue::toInteger_test(const char*, const QScriptValue& value) QFETCH(qsreal, expected); if (qIsInf(expected)) { QVERIFY(qIsInf(value.toInteger())); + QVERIFY(qIsInf(value.toInteger())); return; } QCOMPARE(value.toInteger(), expected); + QCOMPARE(value.toInteger(), expected); } DEFINE_TEST_FUNCTION(toInteger) @@ -1468,8 +1871,45 @@ void tst_QScriptValue::toInt32_makeData(const char* expr) toInt32.insert("engine->evaluate(\"new Object()\")", 0); toInt32.insert("engine->evaluate(\"new Array()\")", 0); toInt32.insert("engine->evaluate(\"new Error()\")", 0); + toInt32.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")", 22); + toInt32.insert("engine->evaluate(\"Undefined\")", 0); + toInt32.insert("engine->evaluate(\"Null\")", 0); + toInt32.insert("engine->evaluate(\"True\")", 0); + toInt32.insert("engine->evaluate(\"False\")", 0); + toInt32.insert("engine->evaluate(\"undefined\")", 0); + toInt32.insert("engine->evaluate(\"null\")", 0); + toInt32.insert("engine->evaluate(\"true\")", 1); + toInt32.insert("engine->evaluate(\"false\")", 0); + toInt32.insert("engine->evaluate(\"122\")", 122); + toInt32.insert("engine->evaluate(\"124\")", 124); + toInt32.insert("engine->evaluate(\"0\")", 0); + toInt32.insert("engine->evaluate(\"0.0\")", 0); + toInt32.insert("engine->evaluate(\"123.0\")", 123); + toInt32.insert("engine->evaluate(\"6.37e-8\")", 0); + toInt32.insert("engine->evaluate(\"-6.37e-8\")", 0); + toInt32.insert("engine->evaluate(\"0x43211234\")", 1126240820); + toInt32.insert("engine->evaluate(\"0x10000\")", 65536); + toInt32.insert("engine->evaluate(\"0x10001\")", 65537); + toInt32.insert("engine->evaluate(\"NaN\")", 0); + toInt32.insert("engine->evaluate(\"Infinity\")", 0); + toInt32.insert("engine->evaluate(\"-Infinity\")", 0); + toInt32.insert("engine->evaluate(\"'ciao'\")", 0); + toInt32.insert("engine->evaluate(\"''\")", 0); + toInt32.insert("engine->evaluate(\"'0'\")", 0); + toInt32.insert("engine->evaluate(\"'123'\")", 123); + toInt32.insert("engine->evaluate(\"'12.4'\")", 12); toInt32.insert("engine->nullValue()", 0); toInt32.insert("engine->undefinedValue()", 0); + toInt32.insert("engine->newObject()", 0); + toInt32.insert("engine->newArray()", 0); + toInt32.insert("engine->newArray(10)", 0); + toInt32.insert("engine->newDate(QDateTime())", 0); + toInt32.insert("engine->newQMetaObject(&QObject::staticMetaObject)", 0); + toInt32.insert("engine->newVariant(QVariant())", 0); + toInt32.insert("engine->newVariant(QVariant(123))", 123); + toInt32.insert("engine->newVariant(QVariant(false))", 0); + toInt32.insert("engine->newQObject(0)", 0); + toInt32.insert("engine->newQObject(engine)", 0); } newRow(expr) << toInt32.value(expr); } @@ -1478,6 +1918,7 @@ void tst_QScriptValue::toInt32_test(const char*, const QScriptValue& value) { QFETCH(qint32, expected); QCOMPARE(value.toInt32(), expected); + QCOMPARE(value.toInt32(), expected); } DEFINE_TEST_FUNCTION(toInt32) @@ -1596,8 +2037,45 @@ void tst_QScriptValue::toUInt32_makeData(const char* expr) toUInt32.insert("engine->evaluate(\"new Object()\")", 0); toUInt32.insert("engine->evaluate(\"new Array()\")", 0); toUInt32.insert("engine->evaluate(\"new Error()\")", 0); + toUInt32.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")", 22); + toUInt32.insert("engine->evaluate(\"Undefined\")", 0); + toUInt32.insert("engine->evaluate(\"Null\")", 0); + toUInt32.insert("engine->evaluate(\"True\")", 0); + toUInt32.insert("engine->evaluate(\"False\")", 0); + toUInt32.insert("engine->evaluate(\"undefined\")", 0); + toUInt32.insert("engine->evaluate(\"null\")", 0); + toUInt32.insert("engine->evaluate(\"true\")", 1); + toUInt32.insert("engine->evaluate(\"false\")", 0); + toUInt32.insert("engine->evaluate(\"122\")", 122); + toUInt32.insert("engine->evaluate(\"124\")", 124); + toUInt32.insert("engine->evaluate(\"0\")", 0); + toUInt32.insert("engine->evaluate(\"0.0\")", 0); + toUInt32.insert("engine->evaluate(\"123.0\")", 123); + toUInt32.insert("engine->evaluate(\"6.37e-8\")", 0); + toUInt32.insert("engine->evaluate(\"-6.37e-8\")", 0); + toUInt32.insert("engine->evaluate(\"0x43211234\")", 1126240820); + toUInt32.insert("engine->evaluate(\"0x10000\")", 65536); + toUInt32.insert("engine->evaluate(\"0x10001\")", 65537); + toUInt32.insert("engine->evaluate(\"NaN\")", 0); + toUInt32.insert("engine->evaluate(\"Infinity\")", 0); + toUInt32.insert("engine->evaluate(\"-Infinity\")", 0); + toUInt32.insert("engine->evaluate(\"'ciao'\")", 0); + toUInt32.insert("engine->evaluate(\"''\")", 0); + toUInt32.insert("engine->evaluate(\"'0'\")", 0); + toUInt32.insert("engine->evaluate(\"'123'\")", 123); + toUInt32.insert("engine->evaluate(\"'12.4'\")", 12); toUInt32.insert("engine->nullValue()", 0); toUInt32.insert("engine->undefinedValue()", 0); + toUInt32.insert("engine->newObject()", 0); + toUInt32.insert("engine->newArray()", 0); + toUInt32.insert("engine->newArray(10)", 0); + toUInt32.insert("engine->newDate(QDateTime())", 0); + toUInt32.insert("engine->newQMetaObject(&QObject::staticMetaObject)", 0); + toUInt32.insert("engine->newVariant(QVariant())", 0); + toUInt32.insert("engine->newVariant(QVariant(123))", 123); + toUInt32.insert("engine->newVariant(QVariant(false))", 0); + toUInt32.insert("engine->newQObject(0)", 0); + toUInt32.insert("engine->newQObject(engine)", 0); } newRow(expr) << toUInt32.value(expr); } @@ -1606,6 +2084,7 @@ void tst_QScriptValue::toUInt32_test(const char*, const QScriptValue& value) { QFETCH(quint32, expected); QCOMPARE(value.toUInt32(), expected); + QCOMPARE(value.toUInt32(), expected); } DEFINE_TEST_FUNCTION(toUInt32) @@ -1724,8 +2203,45 @@ void tst_QScriptValue::toUInt16_makeData(const char* expr) toUInt16.insert("engine->evaluate(\"new Object()\")", 0); toUInt16.insert("engine->evaluate(\"new Array()\")", 0); toUInt16.insert("engine->evaluate(\"new Error()\")", 0); + toUInt16.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")", 22); + toUInt16.insert("engine->evaluate(\"Undefined\")", 0); + toUInt16.insert("engine->evaluate(\"Null\")", 0); + toUInt16.insert("engine->evaluate(\"True\")", 0); + toUInt16.insert("engine->evaluate(\"False\")", 0); + toUInt16.insert("engine->evaluate(\"undefined\")", 0); + toUInt16.insert("engine->evaluate(\"null\")", 0); + toUInt16.insert("engine->evaluate(\"true\")", 1); + toUInt16.insert("engine->evaluate(\"false\")", 0); + toUInt16.insert("engine->evaluate(\"122\")", 122); + toUInt16.insert("engine->evaluate(\"124\")", 124); + toUInt16.insert("engine->evaluate(\"0\")", 0); + toUInt16.insert("engine->evaluate(\"0.0\")", 0); + toUInt16.insert("engine->evaluate(\"123.0\")", 123); + toUInt16.insert("engine->evaluate(\"6.37e-8\")", 0); + toUInt16.insert("engine->evaluate(\"-6.37e-8\")", 0); + toUInt16.insert("engine->evaluate(\"0x43211234\")", 4660); + toUInt16.insert("engine->evaluate(\"0x10000\")", 0); + toUInt16.insert("engine->evaluate(\"0x10001\")", 1); + toUInt16.insert("engine->evaluate(\"NaN\")", 0); + toUInt16.insert("engine->evaluate(\"Infinity\")", 0); + toUInt16.insert("engine->evaluate(\"-Infinity\")", 0); + toUInt16.insert("engine->evaluate(\"'ciao'\")", 0); + toUInt16.insert("engine->evaluate(\"''\")", 0); + toUInt16.insert("engine->evaluate(\"'0'\")", 0); + toUInt16.insert("engine->evaluate(\"'123'\")", 123); + toUInt16.insert("engine->evaluate(\"'12.4'\")", 12); toUInt16.insert("engine->nullValue()", 0); toUInt16.insert("engine->undefinedValue()", 0); + toUInt16.insert("engine->newObject()", 0); + toUInt16.insert("engine->newArray()", 0); + toUInt16.insert("engine->newArray(10)", 0); + toUInt16.insert("engine->newDate(QDateTime())", 0); + toUInt16.insert("engine->newQMetaObject(&QObject::staticMetaObject)", 0); + toUInt16.insert("engine->newVariant(QVariant())", 0); + toUInt16.insert("engine->newVariant(QVariant(123))", 123); + toUInt16.insert("engine->newVariant(QVariant(false))", 0); + toUInt16.insert("engine->newQObject(0)", 0); + toUInt16.insert("engine->newQObject(engine)", 0); } newRow(expr) << toUInt16.value(expr); } @@ -1734,6 +2250,7 @@ void tst_QScriptValue::toUInt16_test(const char*, const QScriptValue& value) { QFETCH(quint16, expected); QCOMPARE(value.toUInt16(), expected); + QCOMPARE(value.toUInt16(), expected); } DEFINE_TEST_FUNCTION(toUInt16) @@ -1758,8 +2275,11 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(QScriptValue::UndefinedValue) <=> QScriptValue(engine, QScriptValue::UndefinedValue)"); equals.insert("QScriptValue(QScriptValue::UndefinedValue) <=> QScriptValue(engine, QScriptValue::NullValue)"); equals.insert("QScriptValue(QScriptValue::UndefinedValue) <=> engine->evaluate(\"{}\")"); + equals.insert("QScriptValue(QScriptValue::UndefinedValue) <=> engine->evaluate(\"undefined\")"); + equals.insert("QScriptValue(QScriptValue::UndefinedValue) <=> engine->evaluate(\"null\")"); equals.insert("QScriptValue(QScriptValue::UndefinedValue) <=> engine->nullValue()"); equals.insert("QScriptValue(QScriptValue::UndefinedValue) <=> engine->undefinedValue()"); + equals.insert("QScriptValue(QScriptValue::UndefinedValue) <=> engine->newQObject(0)"); equals.insert("QScriptValue(QScriptValue::NullValue) <=> QScriptValue(QScriptValue::UndefinedValue)"); equals.insert("QScriptValue(QScriptValue::NullValue) <=> QScriptValue(QScriptValue::NullValue)"); equals.insert("QScriptValue(QScriptValue::NullValue) <=> QScriptValue(0, QScriptValue::UndefinedValue)"); @@ -1767,11 +2287,15 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(QScriptValue::NullValue) <=> QScriptValue(engine, QScriptValue::UndefinedValue)"); equals.insert("QScriptValue(QScriptValue::NullValue) <=> QScriptValue(engine, QScriptValue::NullValue)"); equals.insert("QScriptValue(QScriptValue::NullValue) <=> engine->evaluate(\"{}\")"); + equals.insert("QScriptValue(QScriptValue::NullValue) <=> engine->evaluate(\"undefined\")"); + equals.insert("QScriptValue(QScriptValue::NullValue) <=> engine->evaluate(\"null\")"); equals.insert("QScriptValue(QScriptValue::NullValue) <=> engine->nullValue()"); equals.insert("QScriptValue(QScriptValue::NullValue) <=> engine->undefinedValue()"); + equals.insert("QScriptValue(QScriptValue::NullValue) <=> engine->newQObject(0)"); equals.insert("QScriptValue(true) <=> QScriptValue(true)"); equals.insert("QScriptValue(true) <=> QScriptValue(0, true)"); equals.insert("QScriptValue(true) <=> QScriptValue(engine, true)"); + equals.insert("QScriptValue(true) <=> engine->evaluate(\"true\")"); equals.insert("QScriptValue(false) <=> QScriptValue(false)"); equals.insert("QScriptValue(false) <=> QScriptValue(0)"); equals.insert("QScriptValue(false) <=> QScriptValue(0.0)"); @@ -1793,12 +2317,21 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(false) <=> engine->evaluate(\"[]\")"); equals.insert("QScriptValue(false) <=> engine->evaluate(\"Array.prototype\")"); equals.insert("QScriptValue(false) <=> engine->evaluate(\"new Array()\")"); + equals.insert("QScriptValue(false) <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(false) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(false) <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(false) <=> engine->evaluate(\"''\")"); + equals.insert("QScriptValue(false) <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(false) <=> engine->newArray()"); + equals.insert("QScriptValue(false) <=> engine->newVariant(QVariant(false))"); equals.insert("QScriptValue(int(122)) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(int(122)) <=> QScriptValue(0, int(122))"); equals.insert("QScriptValue(int(122)) <=> QScriptValue(engine, int(122))"); + equals.insert("QScriptValue(int(122)) <=> engine->evaluate(\"122\")"); equals.insert("QScriptValue(uint(124)) <=> QScriptValue(uint(124))"); equals.insert("QScriptValue(uint(124)) <=> QScriptValue(0, uint(124))"); equals.insert("QScriptValue(uint(124)) <=> QScriptValue(engine, uint(124))"); + equals.insert("QScriptValue(uint(124)) <=> engine->evaluate(\"124\")"); equals.insert("QScriptValue(0) <=> QScriptValue(false)"); equals.insert("QScriptValue(0) <=> QScriptValue(0)"); equals.insert("QScriptValue(0) <=> QScriptValue(0.0)"); @@ -1820,6 +2353,13 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(0) <=> engine->evaluate(\"[]\")"); equals.insert("QScriptValue(0) <=> engine->evaluate(\"Array.prototype\")"); equals.insert("QScriptValue(0) <=> engine->evaluate(\"new Array()\")"); + equals.insert("QScriptValue(0) <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(0) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(0) <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(0) <=> engine->evaluate(\"''\")"); + equals.insert("QScriptValue(0) <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(0) <=> engine->newArray()"); + equals.insert("QScriptValue(0) <=> engine->newVariant(QVariant(false))"); equals.insert("QScriptValue(0.0) <=> QScriptValue(false)"); equals.insert("QScriptValue(0.0) <=> QScriptValue(0)"); equals.insert("QScriptValue(0.0) <=> QScriptValue(0.0)"); @@ -1841,39 +2381,56 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(0.0) <=> engine->evaluate(\"[]\")"); equals.insert("QScriptValue(0.0) <=> engine->evaluate(\"Array.prototype\")"); equals.insert("QScriptValue(0.0) <=> engine->evaluate(\"new Array()\")"); + equals.insert("QScriptValue(0.0) <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(0.0) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(0.0) <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(0.0) <=> engine->evaluate(\"''\")"); + equals.insert("QScriptValue(0.0) <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(0.0) <=> engine->newArray()"); + equals.insert("QScriptValue(0.0) <=> engine->newVariant(QVariant(false))"); equals.insert("QScriptValue(123.0) <=> QScriptValue(123.0)"); equals.insert("QScriptValue(123.0) <=> QScriptValue(QString(\"123\"))"); equals.insert("QScriptValue(123.0) <=> QScriptValue(0, 123.0)"); equals.insert("QScriptValue(123.0) <=> QScriptValue(0, QString(\"123\"))"); equals.insert("QScriptValue(123.0) <=> QScriptValue(engine, 123.0)"); equals.insert("QScriptValue(123.0) <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("QScriptValue(123.0) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(123.0) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(123.0) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(6.37e-8) <=> QScriptValue(6.37e-8)"); equals.insert("QScriptValue(6.37e-8) <=> QScriptValue(0, 6.37e-8)"); equals.insert("QScriptValue(6.37e-8) <=> QScriptValue(engine, 6.37e-8)"); + equals.insert("QScriptValue(6.37e-8) <=> engine->evaluate(\"6.37e-8\")"); equals.insert("QScriptValue(-6.37e-8) <=> QScriptValue(-6.37e-8)"); equals.insert("QScriptValue(-6.37e-8) <=> QScriptValue(0, -6.37e-8)"); equals.insert("QScriptValue(-6.37e-8) <=> QScriptValue(engine, -6.37e-8)"); + equals.insert("QScriptValue(-6.37e-8) <=> engine->evaluate(\"-6.37e-8\")"); equals.insert("QScriptValue(0x43211234) <=> QScriptValue(0x43211234)"); equals.insert("QScriptValue(0x43211234) <=> QScriptValue(0, 0x43211234)"); equals.insert("QScriptValue(0x43211234) <=> QScriptValue(engine, 0x43211234)"); + equals.insert("QScriptValue(0x43211234) <=> engine->evaluate(\"0x43211234\")"); equals.insert("QScriptValue(0x10000) <=> QScriptValue(0x10000)"); equals.insert("QScriptValue(0x10000) <=> QScriptValue(0, 0x10000)"); equals.insert("QScriptValue(0x10000) <=> QScriptValue(engine, 0x10000)"); + equals.insert("QScriptValue(0x10000) <=> engine->evaluate(\"0x10000\")"); equals.insert("QScriptValue(0x10001) <=> QScriptValue(0x10001)"); equals.insert("QScriptValue(0x10001) <=> QScriptValue(0, 0x10001)"); equals.insert("QScriptValue(0x10001) <=> QScriptValue(engine, 0x10001)"); + equals.insert("QScriptValue(0x10001) <=> engine->evaluate(\"0x10001\")"); equals.insert("QScriptValue(qInf()) <=> QScriptValue(qInf())"); equals.insert("QScriptValue(qInf()) <=> QScriptValue(\"Infinity\")"); equals.insert("QScriptValue(qInf()) <=> QScriptValue(0, qInf())"); equals.insert("QScriptValue(qInf()) <=> QScriptValue(0, \"Infinity\")"); equals.insert("QScriptValue(qInf()) <=> QScriptValue(engine, qInf())"); equals.insert("QScriptValue(qInf()) <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("QScriptValue(qInf()) <=> engine->evaluate(\"Infinity\")"); equals.insert("QScriptValue(-qInf()) <=> QScriptValue(-qInf())"); equals.insert("QScriptValue(-qInf()) <=> QScriptValue(\"-Infinity\")"); equals.insert("QScriptValue(-qInf()) <=> QScriptValue(0, -qInf())"); equals.insert("QScriptValue(-qInf()) <=> QScriptValue(0, \"-Infinity\")"); equals.insert("QScriptValue(-qInf()) <=> QScriptValue(engine, -qInf())"); equals.insert("QScriptValue(-qInf()) <=> QScriptValue(engine, \"-Infinity\")"); + equals.insert("QScriptValue(-qInf()) <=> engine->evaluate(\"-Infinity\")"); equals.insert("QScriptValue(\"NaN\") <=> QScriptValue(\"NaN\")"); equals.insert("QScriptValue(\"NaN\") <=> QScriptValue(0, \"NaN\")"); equals.insert("QScriptValue(\"NaN\") <=> QScriptValue(engine, \"NaN\")"); @@ -1883,24 +2440,28 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(\"Infinity\") <=> QScriptValue(0, \"Infinity\")"); equals.insert("QScriptValue(\"Infinity\") <=> QScriptValue(engine, qInf())"); equals.insert("QScriptValue(\"Infinity\") <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("QScriptValue(\"Infinity\") <=> engine->evaluate(\"Infinity\")"); equals.insert("QScriptValue(\"-Infinity\") <=> QScriptValue(-qInf())"); equals.insert("QScriptValue(\"-Infinity\") <=> QScriptValue(\"-Infinity\")"); equals.insert("QScriptValue(\"-Infinity\") <=> QScriptValue(0, -qInf())"); equals.insert("QScriptValue(\"-Infinity\") <=> QScriptValue(0, \"-Infinity\")"); equals.insert("QScriptValue(\"-Infinity\") <=> QScriptValue(engine, -qInf())"); equals.insert("QScriptValue(\"-Infinity\") <=> QScriptValue(engine, \"-Infinity\")"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"-Infinity\")"); equals.insert("QScriptValue(\"ciao\") <=> QScriptValue(\"ciao\")"); equals.insert("QScriptValue(\"ciao\") <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); equals.insert("QScriptValue(\"ciao\") <=> QScriptValue(0, \"ciao\")"); equals.insert("QScriptValue(\"ciao\") <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); equals.insert("QScriptValue(\"ciao\") <=> QScriptValue(engine, \"ciao\")"); equals.insert("QScriptValue(\"ciao\") <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("QScriptValue(\"ciao\") <=> engine->evaluate(\"'ciao'\")"); equals.insert("QScriptValue(QString::fromLatin1(\"ciao\")) <=> QScriptValue(\"ciao\")"); equals.insert("QScriptValue(QString::fromLatin1(\"ciao\")) <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); equals.insert("QScriptValue(QString::fromLatin1(\"ciao\")) <=> QScriptValue(0, \"ciao\")"); equals.insert("QScriptValue(QString::fromLatin1(\"ciao\")) <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); equals.insert("QScriptValue(QString::fromLatin1(\"ciao\")) <=> QScriptValue(engine, \"ciao\")"); equals.insert("QScriptValue(QString::fromLatin1(\"ciao\")) <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("QScriptValue(QString::fromLatin1(\"ciao\")) <=> engine->evaluate(\"'ciao'\")"); equals.insert("QScriptValue(QString(\"\")) <=> QScriptValue(false)"); equals.insert("QScriptValue(QString(\"\")) <=> QScriptValue(0)"); equals.insert("QScriptValue(QString(\"\")) <=> QScriptValue(0.0)"); @@ -1919,6 +2480,12 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"[]\")"); equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"Array.prototype\")"); equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"new Array()\")"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"''\")"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->newArray()"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->newVariant(QVariant(false))"); equals.insert("QScriptValue(QString()) <=> QScriptValue(false)"); equals.insert("QScriptValue(QString()) <=> QScriptValue(0)"); equals.insert("QScriptValue(QString()) <=> QScriptValue(0.0)"); @@ -1937,6 +2504,12 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"[]\")"); equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"Array.prototype\")"); equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"new Array()\")"); + equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"''\")"); + equals.insert("QScriptValue(QString()) <=> engine->newArray()"); + equals.insert("QScriptValue(QString()) <=> engine->newVariant(QVariant(false))"); equals.insert("QScriptValue(QString(\"0\")) <=> QScriptValue(false)"); equals.insert("QScriptValue(QString(\"0\")) <=> QScriptValue(0)"); equals.insert("QScriptValue(QString(\"0\")) <=> QScriptValue(0.0)"); @@ -1949,13 +2522,22 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(QString(\"0\")) <=> QScriptValue(engine, 0)"); equals.insert("QScriptValue(QString(\"0\")) <=> QScriptValue(engine, 0.0)"); equals.insert("QScriptValue(QString(\"0\")) <=> QScriptValue(engine, QString(\"0\"))"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->newVariant(QVariant(false))"); equals.insert("QScriptValue(QString(\"123\")) <=> QScriptValue(123.0)"); equals.insert("QScriptValue(QString(\"123\")) <=> QScriptValue(QString(\"123\"))"); equals.insert("QScriptValue(QString(\"123\")) <=> QScriptValue(0, 123.0)"); equals.insert("QScriptValue(QString(\"123\")) <=> QScriptValue(0, QString(\"123\"))"); equals.insert("QScriptValue(QString(\"123\")) <=> QScriptValue(engine, 123.0)"); equals.insert("QScriptValue(QString(\"123\")) <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("QScriptValue(QString(\"123\")) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(QString(\"123\")) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(QString(\"123\")) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(QString(\"12.4\")) <=> QScriptValue(QString(\"12.4\"))"); + equals.insert("QScriptValue(QString(\"12.4\")) <=> engine->evaluate(\"'12.4'\")"); equals.insert("QScriptValue(0, QScriptValue::UndefinedValue) <=> QScriptValue(QScriptValue::UndefinedValue)"); equals.insert("QScriptValue(0, QScriptValue::UndefinedValue) <=> QScriptValue(QScriptValue::NullValue)"); equals.insert("QScriptValue(0, QScriptValue::UndefinedValue) <=> QScriptValue(0, QScriptValue::UndefinedValue)"); @@ -1963,8 +2545,11 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(0, QScriptValue::UndefinedValue) <=> QScriptValue(engine, QScriptValue::UndefinedValue)"); equals.insert("QScriptValue(0, QScriptValue::UndefinedValue) <=> QScriptValue(engine, QScriptValue::NullValue)"); equals.insert("QScriptValue(0, QScriptValue::UndefinedValue) <=> engine->evaluate(\"{}\")"); + equals.insert("QScriptValue(0, QScriptValue::UndefinedValue) <=> engine->evaluate(\"undefined\")"); + equals.insert("QScriptValue(0, QScriptValue::UndefinedValue) <=> engine->evaluate(\"null\")"); equals.insert("QScriptValue(0, QScriptValue::UndefinedValue) <=> engine->nullValue()"); equals.insert("QScriptValue(0, QScriptValue::UndefinedValue) <=> engine->undefinedValue()"); + equals.insert("QScriptValue(0, QScriptValue::UndefinedValue) <=> engine->newQObject(0)"); equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> QScriptValue(QScriptValue::UndefinedValue)"); equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> QScriptValue(QScriptValue::NullValue)"); equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> QScriptValue(0, QScriptValue::UndefinedValue)"); @@ -1972,11 +2557,15 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> QScriptValue(engine, QScriptValue::UndefinedValue)"); equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> QScriptValue(engine, QScriptValue::NullValue)"); equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> engine->evaluate(\"{}\")"); + equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> engine->evaluate(\"undefined\")"); + equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> engine->evaluate(\"null\")"); equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> engine->nullValue()"); equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> engine->undefinedValue()"); + equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> engine->newQObject(0)"); equals.insert("QScriptValue(0, true) <=> QScriptValue(true)"); equals.insert("QScriptValue(0, true) <=> QScriptValue(0, true)"); equals.insert("QScriptValue(0, true) <=> QScriptValue(engine, true)"); + equals.insert("QScriptValue(0, true) <=> engine->evaluate(\"true\")"); equals.insert("QScriptValue(0, false) <=> QScriptValue(false)"); equals.insert("QScriptValue(0, false) <=> QScriptValue(0)"); equals.insert("QScriptValue(0, false) <=> QScriptValue(0.0)"); @@ -1998,12 +2587,21 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(0, false) <=> engine->evaluate(\"[]\")"); equals.insert("QScriptValue(0, false) <=> engine->evaluate(\"Array.prototype\")"); equals.insert("QScriptValue(0, false) <=> engine->evaluate(\"new Array()\")"); + equals.insert("QScriptValue(0, false) <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(0, false) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(0, false) <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(0, false) <=> engine->evaluate(\"''\")"); + equals.insert("QScriptValue(0, false) <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(0, false) <=> engine->newArray()"); + equals.insert("QScriptValue(0, false) <=> engine->newVariant(QVariant(false))"); equals.insert("QScriptValue(0, int(122)) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(0, int(122)) <=> QScriptValue(0, int(122))"); equals.insert("QScriptValue(0, int(122)) <=> QScriptValue(engine, int(122))"); + equals.insert("QScriptValue(0, int(122)) <=> engine->evaluate(\"122\")"); equals.insert("QScriptValue(0, uint(124)) <=> QScriptValue(uint(124))"); equals.insert("QScriptValue(0, uint(124)) <=> QScriptValue(0, uint(124))"); equals.insert("QScriptValue(0, uint(124)) <=> QScriptValue(engine, uint(124))"); + equals.insert("QScriptValue(0, uint(124)) <=> engine->evaluate(\"124\")"); equals.insert("QScriptValue(0, 0) <=> QScriptValue(false)"); equals.insert("QScriptValue(0, 0) <=> QScriptValue(0)"); equals.insert("QScriptValue(0, 0) <=> QScriptValue(0.0)"); @@ -2025,6 +2623,13 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(0, 0) <=> engine->evaluate(\"[]\")"); equals.insert("QScriptValue(0, 0) <=> engine->evaluate(\"Array.prototype\")"); equals.insert("QScriptValue(0, 0) <=> engine->evaluate(\"new Array()\")"); + equals.insert("QScriptValue(0, 0) <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(0, 0) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(0, 0) <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(0, 0) <=> engine->evaluate(\"''\")"); + equals.insert("QScriptValue(0, 0) <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(0, 0) <=> engine->newArray()"); + equals.insert("QScriptValue(0, 0) <=> engine->newVariant(QVariant(false))"); equals.insert("QScriptValue(0, 0.0) <=> QScriptValue(false)"); equals.insert("QScriptValue(0, 0.0) <=> QScriptValue(0)"); equals.insert("QScriptValue(0, 0.0) <=> QScriptValue(0.0)"); @@ -2046,39 +2651,56 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(0, 0.0) <=> engine->evaluate(\"[]\")"); equals.insert("QScriptValue(0, 0.0) <=> engine->evaluate(\"Array.prototype\")"); equals.insert("QScriptValue(0, 0.0) <=> engine->evaluate(\"new Array()\")"); + equals.insert("QScriptValue(0, 0.0) <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(0, 0.0) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(0, 0.0) <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(0, 0.0) <=> engine->evaluate(\"''\")"); + equals.insert("QScriptValue(0, 0.0) <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(0, 0.0) <=> engine->newArray()"); + equals.insert("QScriptValue(0, 0.0) <=> engine->newVariant(QVariant(false))"); equals.insert("QScriptValue(0, 123.0) <=> QScriptValue(123.0)"); equals.insert("QScriptValue(0, 123.0) <=> QScriptValue(QString(\"123\"))"); equals.insert("QScriptValue(0, 123.0) <=> QScriptValue(0, 123.0)"); equals.insert("QScriptValue(0, 123.0) <=> QScriptValue(0, QString(\"123\"))"); equals.insert("QScriptValue(0, 123.0) <=> QScriptValue(engine, 123.0)"); equals.insert("QScriptValue(0, 123.0) <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("QScriptValue(0, 123.0) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(0, 123.0) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(0, 123.0) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(0, 6.37e-8) <=> QScriptValue(6.37e-8)"); equals.insert("QScriptValue(0, 6.37e-8) <=> QScriptValue(0, 6.37e-8)"); equals.insert("QScriptValue(0, 6.37e-8) <=> QScriptValue(engine, 6.37e-8)"); + equals.insert("QScriptValue(0, 6.37e-8) <=> engine->evaluate(\"6.37e-8\")"); equals.insert("QScriptValue(0, -6.37e-8) <=> QScriptValue(-6.37e-8)"); equals.insert("QScriptValue(0, -6.37e-8) <=> QScriptValue(0, -6.37e-8)"); equals.insert("QScriptValue(0, -6.37e-8) <=> QScriptValue(engine, -6.37e-8)"); + equals.insert("QScriptValue(0, -6.37e-8) <=> engine->evaluate(\"-6.37e-8\")"); equals.insert("QScriptValue(0, 0x43211234) <=> QScriptValue(0x43211234)"); equals.insert("QScriptValue(0, 0x43211234) <=> QScriptValue(0, 0x43211234)"); equals.insert("QScriptValue(0, 0x43211234) <=> QScriptValue(engine, 0x43211234)"); + equals.insert("QScriptValue(0, 0x43211234) <=> engine->evaluate(\"0x43211234\")"); equals.insert("QScriptValue(0, 0x10000) <=> QScriptValue(0x10000)"); equals.insert("QScriptValue(0, 0x10000) <=> QScriptValue(0, 0x10000)"); equals.insert("QScriptValue(0, 0x10000) <=> QScriptValue(engine, 0x10000)"); + equals.insert("QScriptValue(0, 0x10000) <=> engine->evaluate(\"0x10000\")"); equals.insert("QScriptValue(0, 0x10001) <=> QScriptValue(0x10001)"); equals.insert("QScriptValue(0, 0x10001) <=> QScriptValue(0, 0x10001)"); equals.insert("QScriptValue(0, 0x10001) <=> QScriptValue(engine, 0x10001)"); + equals.insert("QScriptValue(0, 0x10001) <=> engine->evaluate(\"0x10001\")"); equals.insert("QScriptValue(0, qInf()) <=> QScriptValue(qInf())"); equals.insert("QScriptValue(0, qInf()) <=> QScriptValue(\"Infinity\")"); equals.insert("QScriptValue(0, qInf()) <=> QScriptValue(0, qInf())"); equals.insert("QScriptValue(0, qInf()) <=> QScriptValue(0, \"Infinity\")"); equals.insert("QScriptValue(0, qInf()) <=> QScriptValue(engine, qInf())"); equals.insert("QScriptValue(0, qInf()) <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("QScriptValue(0, qInf()) <=> engine->evaluate(\"Infinity\")"); equals.insert("QScriptValue(0, -qInf()) <=> QScriptValue(-qInf())"); equals.insert("QScriptValue(0, -qInf()) <=> QScriptValue(\"-Infinity\")"); equals.insert("QScriptValue(0, -qInf()) <=> QScriptValue(0, -qInf())"); equals.insert("QScriptValue(0, -qInf()) <=> QScriptValue(0, \"-Infinity\")"); equals.insert("QScriptValue(0, -qInf()) <=> QScriptValue(engine, -qInf())"); equals.insert("QScriptValue(0, -qInf()) <=> QScriptValue(engine, \"-Infinity\")"); + equals.insert("QScriptValue(0, -qInf()) <=> engine->evaluate(\"-Infinity\")"); equals.insert("QScriptValue(0, \"NaN\") <=> QScriptValue(\"NaN\")"); equals.insert("QScriptValue(0, \"NaN\") <=> QScriptValue(0, \"NaN\")"); equals.insert("QScriptValue(0, \"NaN\") <=> QScriptValue(engine, \"NaN\")"); @@ -2088,24 +2710,28 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(0, \"Infinity\") <=> QScriptValue(0, \"Infinity\")"); equals.insert("QScriptValue(0, \"Infinity\") <=> QScriptValue(engine, qInf())"); equals.insert("QScriptValue(0, \"Infinity\") <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("QScriptValue(0, \"Infinity\") <=> engine->evaluate(\"Infinity\")"); equals.insert("QScriptValue(0, \"-Infinity\") <=> QScriptValue(-qInf())"); equals.insert("QScriptValue(0, \"-Infinity\") <=> QScriptValue(\"-Infinity\")"); equals.insert("QScriptValue(0, \"-Infinity\") <=> QScriptValue(0, -qInf())"); equals.insert("QScriptValue(0, \"-Infinity\") <=> QScriptValue(0, \"-Infinity\")"); equals.insert("QScriptValue(0, \"-Infinity\") <=> QScriptValue(engine, -qInf())"); equals.insert("QScriptValue(0, \"-Infinity\") <=> QScriptValue(engine, \"-Infinity\")"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"-Infinity\")"); equals.insert("QScriptValue(0, \"ciao\") <=> QScriptValue(\"ciao\")"); equals.insert("QScriptValue(0, \"ciao\") <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); equals.insert("QScriptValue(0, \"ciao\") <=> QScriptValue(0, \"ciao\")"); equals.insert("QScriptValue(0, \"ciao\") <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); equals.insert("QScriptValue(0, \"ciao\") <=> QScriptValue(engine, \"ciao\")"); equals.insert("QScriptValue(0, \"ciao\") <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("QScriptValue(0, \"ciao\") <=> engine->evaluate(\"'ciao'\")"); equals.insert("QScriptValue(0, QString::fromLatin1(\"ciao\")) <=> QScriptValue(\"ciao\")"); equals.insert("QScriptValue(0, QString::fromLatin1(\"ciao\")) <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); equals.insert("QScriptValue(0, QString::fromLatin1(\"ciao\")) <=> QScriptValue(0, \"ciao\")"); equals.insert("QScriptValue(0, QString::fromLatin1(\"ciao\")) <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); equals.insert("QScriptValue(0, QString::fromLatin1(\"ciao\")) <=> QScriptValue(engine, \"ciao\")"); equals.insert("QScriptValue(0, QString::fromLatin1(\"ciao\")) <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("QScriptValue(0, QString::fromLatin1(\"ciao\")) <=> engine->evaluate(\"'ciao'\")"); equals.insert("QScriptValue(0, QString(\"\")) <=> QScriptValue(false)"); equals.insert("QScriptValue(0, QString(\"\")) <=> QScriptValue(0)"); equals.insert("QScriptValue(0, QString(\"\")) <=> QScriptValue(0.0)"); @@ -2124,6 +2750,12 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"[]\")"); equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"Array.prototype\")"); equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"new Array()\")"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"''\")"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->newArray()"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->newVariant(QVariant(false))"); equals.insert("QScriptValue(0, QString()) <=> QScriptValue(false)"); equals.insert("QScriptValue(0, QString()) <=> QScriptValue(0)"); equals.insert("QScriptValue(0, QString()) <=> QScriptValue(0.0)"); @@ -2142,6 +2774,12 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"[]\")"); equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"Array.prototype\")"); equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"new Array()\")"); + equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"''\")"); + equals.insert("QScriptValue(0, QString()) <=> engine->newArray()"); + equals.insert("QScriptValue(0, QString()) <=> engine->newVariant(QVariant(false))"); equals.insert("QScriptValue(0, QString(\"0\")) <=> QScriptValue(false)"); equals.insert("QScriptValue(0, QString(\"0\")) <=> QScriptValue(0)"); equals.insert("QScriptValue(0, QString(\"0\")) <=> QScriptValue(0.0)"); @@ -2154,12 +2792,20 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(0, QString(\"0\")) <=> QScriptValue(engine, 0)"); equals.insert("QScriptValue(0, QString(\"0\")) <=> QScriptValue(engine, 0.0)"); equals.insert("QScriptValue(0, QString(\"0\")) <=> QScriptValue(engine, QString(\"0\"))"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->newVariant(QVariant(false))"); equals.insert("QScriptValue(0, QString(\"123\")) <=> QScriptValue(123.0)"); equals.insert("QScriptValue(0, QString(\"123\")) <=> QScriptValue(QString(\"123\"))"); equals.insert("QScriptValue(0, QString(\"123\")) <=> QScriptValue(0, 123.0)"); equals.insert("QScriptValue(0, QString(\"123\")) <=> QScriptValue(0, QString(\"123\"))"); equals.insert("QScriptValue(0, QString(\"123\")) <=> QScriptValue(engine, 123.0)"); equals.insert("QScriptValue(0, QString(\"123\")) <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("QScriptValue(0, QString(\"123\")) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(0, QString(\"123\")) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(0, QString(\"123\")) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(0, QString(\"12.3\")) <=> QScriptValue(0, QString(\"12.3\"))"); equals.insert("QScriptValue(engine, QScriptValue::UndefinedValue) <=> QScriptValue(QScriptValue::UndefinedValue)"); equals.insert("QScriptValue(engine, QScriptValue::UndefinedValue) <=> QScriptValue(QScriptValue::NullValue)"); @@ -2168,8 +2814,11 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(engine, QScriptValue::UndefinedValue) <=> QScriptValue(engine, QScriptValue::UndefinedValue)"); equals.insert("QScriptValue(engine, QScriptValue::UndefinedValue) <=> QScriptValue(engine, QScriptValue::NullValue)"); equals.insert("QScriptValue(engine, QScriptValue::UndefinedValue) <=> engine->evaluate(\"{}\")"); + equals.insert("QScriptValue(engine, QScriptValue::UndefinedValue) <=> engine->evaluate(\"undefined\")"); + equals.insert("QScriptValue(engine, QScriptValue::UndefinedValue) <=> engine->evaluate(\"null\")"); equals.insert("QScriptValue(engine, QScriptValue::UndefinedValue) <=> engine->nullValue()"); equals.insert("QScriptValue(engine, QScriptValue::UndefinedValue) <=> engine->undefinedValue()"); + equals.insert("QScriptValue(engine, QScriptValue::UndefinedValue) <=> engine->newQObject(0)"); equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> QScriptValue(QScriptValue::UndefinedValue)"); equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> QScriptValue(QScriptValue::NullValue)"); equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> QScriptValue(0, QScriptValue::UndefinedValue)"); @@ -2177,11 +2826,15 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> QScriptValue(engine, QScriptValue::UndefinedValue)"); equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> QScriptValue(engine, QScriptValue::NullValue)"); equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> engine->evaluate(\"{}\")"); + equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> engine->evaluate(\"undefined\")"); + equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> engine->evaluate(\"null\")"); equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> engine->nullValue()"); equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> engine->undefinedValue()"); + equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> engine->newQObject(0)"); equals.insert("QScriptValue(engine, true) <=> QScriptValue(true)"); equals.insert("QScriptValue(engine, true) <=> QScriptValue(0, true)"); equals.insert("QScriptValue(engine, true) <=> QScriptValue(engine, true)"); + equals.insert("QScriptValue(engine, true) <=> engine->evaluate(\"true\")"); equals.insert("QScriptValue(engine, false) <=> QScriptValue(false)"); equals.insert("QScriptValue(engine, false) <=> QScriptValue(0)"); equals.insert("QScriptValue(engine, false) <=> QScriptValue(0.0)"); @@ -2203,12 +2856,21 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(engine, false) <=> engine->evaluate(\"[]\")"); equals.insert("QScriptValue(engine, false) <=> engine->evaluate(\"Array.prototype\")"); equals.insert("QScriptValue(engine, false) <=> engine->evaluate(\"new Array()\")"); + equals.insert("QScriptValue(engine, false) <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(engine, false) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(engine, false) <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(engine, false) <=> engine->evaluate(\"''\")"); + equals.insert("QScriptValue(engine, false) <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(engine, false) <=> engine->newArray()"); + equals.insert("QScriptValue(engine, false) <=> engine->newVariant(QVariant(false))"); equals.insert("QScriptValue(engine, int(122)) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(engine, int(122)) <=> QScriptValue(0, int(122))"); equals.insert("QScriptValue(engine, int(122)) <=> QScriptValue(engine, int(122))"); + equals.insert("QScriptValue(engine, int(122)) <=> engine->evaluate(\"122\")"); equals.insert("QScriptValue(engine, uint(124)) <=> QScriptValue(uint(124))"); equals.insert("QScriptValue(engine, uint(124)) <=> QScriptValue(0, uint(124))"); equals.insert("QScriptValue(engine, uint(124)) <=> QScriptValue(engine, uint(124))"); + equals.insert("QScriptValue(engine, uint(124)) <=> engine->evaluate(\"124\")"); equals.insert("QScriptValue(engine, 0) <=> QScriptValue(false)"); equals.insert("QScriptValue(engine, 0) <=> QScriptValue(0)"); equals.insert("QScriptValue(engine, 0) <=> QScriptValue(0.0)"); @@ -2230,6 +2892,13 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(engine, 0) <=> engine->evaluate(\"[]\")"); equals.insert("QScriptValue(engine, 0) <=> engine->evaluate(\"Array.prototype\")"); equals.insert("QScriptValue(engine, 0) <=> engine->evaluate(\"new Array()\")"); + equals.insert("QScriptValue(engine, 0) <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(engine, 0) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(engine, 0) <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(engine, 0) <=> engine->evaluate(\"''\")"); + equals.insert("QScriptValue(engine, 0) <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(engine, 0) <=> engine->newArray()"); + equals.insert("QScriptValue(engine, 0) <=> engine->newVariant(QVariant(false))"); equals.insert("QScriptValue(engine, 0.0) <=> QScriptValue(false)"); equals.insert("QScriptValue(engine, 0.0) <=> QScriptValue(0)"); equals.insert("QScriptValue(engine, 0.0) <=> QScriptValue(0.0)"); @@ -2251,39 +2920,56 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(engine, 0.0) <=> engine->evaluate(\"[]\")"); equals.insert("QScriptValue(engine, 0.0) <=> engine->evaluate(\"Array.prototype\")"); equals.insert("QScriptValue(engine, 0.0) <=> engine->evaluate(\"new Array()\")"); + equals.insert("QScriptValue(engine, 0.0) <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(engine, 0.0) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(engine, 0.0) <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(engine, 0.0) <=> engine->evaluate(\"''\")"); + equals.insert("QScriptValue(engine, 0.0) <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(engine, 0.0) <=> engine->newArray()"); + equals.insert("QScriptValue(engine, 0.0) <=> engine->newVariant(QVariant(false))"); equals.insert("QScriptValue(engine, 123.0) <=> QScriptValue(123.0)"); equals.insert("QScriptValue(engine, 123.0) <=> QScriptValue(QString(\"123\"))"); equals.insert("QScriptValue(engine, 123.0) <=> QScriptValue(0, 123.0)"); equals.insert("QScriptValue(engine, 123.0) <=> QScriptValue(0, QString(\"123\"))"); equals.insert("QScriptValue(engine, 123.0) <=> QScriptValue(engine, 123.0)"); equals.insert("QScriptValue(engine, 123.0) <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("QScriptValue(engine, 123.0) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(engine, 123.0) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(engine, 123.0) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(engine, 6.37e-8) <=> QScriptValue(6.37e-8)"); equals.insert("QScriptValue(engine, 6.37e-8) <=> QScriptValue(0, 6.37e-8)"); equals.insert("QScriptValue(engine, 6.37e-8) <=> QScriptValue(engine, 6.37e-8)"); + equals.insert("QScriptValue(engine, 6.37e-8) <=> engine->evaluate(\"6.37e-8\")"); equals.insert("QScriptValue(engine, -6.37e-8) <=> QScriptValue(-6.37e-8)"); equals.insert("QScriptValue(engine, -6.37e-8) <=> QScriptValue(0, -6.37e-8)"); equals.insert("QScriptValue(engine, -6.37e-8) <=> QScriptValue(engine, -6.37e-8)"); + equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->evaluate(\"-6.37e-8\")"); equals.insert("QScriptValue(engine, 0x43211234) <=> QScriptValue(0x43211234)"); equals.insert("QScriptValue(engine, 0x43211234) <=> QScriptValue(0, 0x43211234)"); equals.insert("QScriptValue(engine, 0x43211234) <=> QScriptValue(engine, 0x43211234)"); + equals.insert("QScriptValue(engine, 0x43211234) <=> engine->evaluate(\"0x43211234\")"); equals.insert("QScriptValue(engine, 0x10000) <=> QScriptValue(0x10000)"); equals.insert("QScriptValue(engine, 0x10000) <=> QScriptValue(0, 0x10000)"); equals.insert("QScriptValue(engine, 0x10000) <=> QScriptValue(engine, 0x10000)"); + equals.insert("QScriptValue(engine, 0x10000) <=> engine->evaluate(\"0x10000\")"); equals.insert("QScriptValue(engine, 0x10001) <=> QScriptValue(0x10001)"); equals.insert("QScriptValue(engine, 0x10001) <=> QScriptValue(0, 0x10001)"); equals.insert("QScriptValue(engine, 0x10001) <=> QScriptValue(engine, 0x10001)"); + equals.insert("QScriptValue(engine, 0x10001) <=> engine->evaluate(\"0x10001\")"); equals.insert("QScriptValue(engine, qInf()) <=> QScriptValue(qInf())"); equals.insert("QScriptValue(engine, qInf()) <=> QScriptValue(\"Infinity\")"); equals.insert("QScriptValue(engine, qInf()) <=> QScriptValue(0, qInf())"); equals.insert("QScriptValue(engine, qInf()) <=> QScriptValue(0, \"Infinity\")"); equals.insert("QScriptValue(engine, qInf()) <=> QScriptValue(engine, qInf())"); equals.insert("QScriptValue(engine, qInf()) <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("QScriptValue(engine, qInf()) <=> engine->evaluate(\"Infinity\")"); equals.insert("QScriptValue(engine, -qInf()) <=> QScriptValue(-qInf())"); equals.insert("QScriptValue(engine, -qInf()) <=> QScriptValue(\"-Infinity\")"); equals.insert("QScriptValue(engine, -qInf()) <=> QScriptValue(0, -qInf())"); equals.insert("QScriptValue(engine, -qInf()) <=> QScriptValue(0, \"-Infinity\")"); equals.insert("QScriptValue(engine, -qInf()) <=> QScriptValue(engine, -qInf())"); equals.insert("QScriptValue(engine, -qInf()) <=> QScriptValue(engine, \"-Infinity\")"); + equals.insert("QScriptValue(engine, -qInf()) <=> engine->evaluate(\"-Infinity\")"); equals.insert("QScriptValue(engine, \"NaN\") <=> QScriptValue(\"NaN\")"); equals.insert("QScriptValue(engine, \"NaN\") <=> QScriptValue(0, \"NaN\")"); equals.insert("QScriptValue(engine, \"NaN\") <=> QScriptValue(engine, \"NaN\")"); @@ -2293,24 +2979,28 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(engine, \"Infinity\") <=> QScriptValue(0, \"Infinity\")"); equals.insert("QScriptValue(engine, \"Infinity\") <=> QScriptValue(engine, qInf())"); equals.insert("QScriptValue(engine, \"Infinity\") <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("QScriptValue(engine, \"Infinity\") <=> engine->evaluate(\"Infinity\")"); equals.insert("QScriptValue(engine, \"-Infinity\") <=> QScriptValue(-qInf())"); equals.insert("QScriptValue(engine, \"-Infinity\") <=> QScriptValue(\"-Infinity\")"); equals.insert("QScriptValue(engine, \"-Infinity\") <=> QScriptValue(0, -qInf())"); equals.insert("QScriptValue(engine, \"-Infinity\") <=> QScriptValue(0, \"-Infinity\")"); equals.insert("QScriptValue(engine, \"-Infinity\") <=> QScriptValue(engine, -qInf())"); equals.insert("QScriptValue(engine, \"-Infinity\") <=> QScriptValue(engine, \"-Infinity\")"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"-Infinity\")"); equals.insert("QScriptValue(engine, \"ciao\") <=> QScriptValue(\"ciao\")"); equals.insert("QScriptValue(engine, \"ciao\") <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); equals.insert("QScriptValue(engine, \"ciao\") <=> QScriptValue(0, \"ciao\")"); equals.insert("QScriptValue(engine, \"ciao\") <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); equals.insert("QScriptValue(engine, \"ciao\") <=> QScriptValue(engine, \"ciao\")"); equals.insert("QScriptValue(engine, \"ciao\") <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("QScriptValue(engine, \"ciao\") <=> engine->evaluate(\"'ciao'\")"); equals.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\")) <=> QScriptValue(\"ciao\")"); equals.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\")) <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); equals.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\")) <=> QScriptValue(0, \"ciao\")"); equals.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\")) <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); equals.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\")) <=> QScriptValue(engine, \"ciao\")"); equals.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\")) <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\")) <=> engine->evaluate(\"'ciao'\")"); equals.insert("QScriptValue(engine, QString(\"\")) <=> QScriptValue(false)"); equals.insert("QScriptValue(engine, QString(\"\")) <=> QScriptValue(0)"); equals.insert("QScriptValue(engine, QString(\"\")) <=> QScriptValue(0.0)"); @@ -2329,6 +3019,12 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"[]\")"); equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"Array.prototype\")"); equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"new Array()\")"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"''\")"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->newArray()"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->newVariant(QVariant(false))"); equals.insert("QScriptValue(engine, QString()) <=> QScriptValue(false)"); equals.insert("QScriptValue(engine, QString()) <=> QScriptValue(0)"); equals.insert("QScriptValue(engine, QString()) <=> QScriptValue(0.0)"); @@ -2347,6 +3043,12 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"[]\")"); equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"Array.prototype\")"); equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"new Array()\")"); + equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"''\")"); + equals.insert("QScriptValue(engine, QString()) <=> engine->newArray()"); + equals.insert("QScriptValue(engine, QString()) <=> engine->newVariant(QVariant(false))"); equals.insert("QScriptValue(engine, QString(\"0\")) <=> QScriptValue(false)"); equals.insert("QScriptValue(engine, QString(\"0\")) <=> QScriptValue(0)"); equals.insert("QScriptValue(engine, QString(\"0\")) <=> QScriptValue(0.0)"); @@ -2359,12 +3061,20 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("QScriptValue(engine, QString(\"0\")) <=> QScriptValue(engine, 0)"); equals.insert("QScriptValue(engine, QString(\"0\")) <=> QScriptValue(engine, 0.0)"); equals.insert("QScriptValue(engine, QString(\"0\")) <=> QScriptValue(engine, QString(\"0\"))"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->newVariant(QVariant(false))"); equals.insert("QScriptValue(engine, QString(\"123\")) <=> QScriptValue(123.0)"); equals.insert("QScriptValue(engine, QString(\"123\")) <=> QScriptValue(QString(\"123\"))"); equals.insert("QScriptValue(engine, QString(\"123\")) <=> QScriptValue(0, 123.0)"); equals.insert("QScriptValue(engine, QString(\"123\")) <=> QScriptValue(0, QString(\"123\"))"); equals.insert("QScriptValue(engine, QString(\"123\")) <=> QScriptValue(engine, 123.0)"); equals.insert("QScriptValue(engine, QString(\"123\")) <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("QScriptValue(engine, QString(\"123\")) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(engine, QString(\"123\")) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(engine, QString(\"123\")) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> QScriptValue(engine, QString(\"1.23\"))"); equals.insert("engine->evaluate(\"[]\") <=> QScriptValue(false)"); equals.insert("engine->evaluate(\"[]\") <=> QScriptValue(0)"); @@ -2382,6 +3092,10 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("engine->evaluate(\"[]\") <=> QScriptValue(engine, QString(\"\"))"); equals.insert("engine->evaluate(\"[]\") <=> QScriptValue(engine, QString())"); equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"[]\")"); + equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"false\")"); + equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"0\")"); + equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"0.0\")"); + equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"''\")"); equals.insert("engine->evaluate(\"{}\") <=> QScriptValue(QScriptValue::UndefinedValue)"); equals.insert("engine->evaluate(\"{}\") <=> QScriptValue(QScriptValue::NullValue)"); equals.insert("engine->evaluate(\"{}\") <=> QScriptValue(0, QScriptValue::UndefinedValue)"); @@ -2389,8 +3103,11 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("engine->evaluate(\"{}\") <=> QScriptValue(engine, QScriptValue::UndefinedValue)"); equals.insert("engine->evaluate(\"{}\") <=> QScriptValue(engine, QScriptValue::NullValue)"); equals.insert("engine->evaluate(\"{}\") <=> engine->evaluate(\"{}\")"); + equals.insert("engine->evaluate(\"{}\") <=> engine->evaluate(\"undefined\")"); + equals.insert("engine->evaluate(\"{}\") <=> engine->evaluate(\"null\")"); equals.insert("engine->evaluate(\"{}\") <=> engine->nullValue()"); equals.insert("engine->evaluate(\"{}\") <=> engine->undefinedValue()"); + equals.insert("engine->evaluate(\"{}\") <=> engine->newQObject(0)"); equals.insert("engine->evaluate(\"Object.prototype\") <=> engine->evaluate(\"Object.prototype\")"); equals.insert("engine->evaluate(\"Date.prototype\") <=> engine->evaluate(\"Date.prototype\")"); equals.insert("engine->evaluate(\"Array.prototype\") <=> QScriptValue(false)"); @@ -2409,6 +3126,10 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("engine->evaluate(\"Array.prototype\") <=> QScriptValue(engine, QString(\"\"))"); equals.insert("engine->evaluate(\"Array.prototype\") <=> QScriptValue(engine, QString())"); equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"Array.prototype\")"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"false\")"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"0\")"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"0.0\")"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"''\")"); equals.insert("engine->evaluate(\"Function.prototype\") <=> engine->evaluate(\"Function.prototype\")"); equals.insert("engine->evaluate(\"Error.prototype\") <=> engine->evaluate(\"Error.prototype\")"); equals.insert("engine->evaluate(\"Object\") <=> engine->evaluate(\"Object\")"); @@ -2436,7 +3157,238 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("engine->evaluate(\"new Array()\") <=> QScriptValue(engine, QString(\"\"))"); equals.insert("engine->evaluate(\"new Array()\") <=> QScriptValue(engine, QString())"); equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"new Array()\")"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"false\")"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"0\")"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"0.0\")"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"''\")"); equals.insert("engine->evaluate(\"new Error()\") <=> engine->evaluate(\"new Error()\")"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("engine->evaluate(\"Undefined\") <=> engine->evaluate(\"Undefined\")"); + equals.insert("engine->evaluate(\"Null\") <=> engine->evaluate(\"Null\")"); + equals.insert("engine->evaluate(\"True\") <=> engine->evaluate(\"True\")"); + equals.insert("engine->evaluate(\"False\") <=> engine->evaluate(\"False\")"); + equals.insert("engine->evaluate(\"undefined\") <=> QScriptValue(QScriptValue::UndefinedValue)"); + equals.insert("engine->evaluate(\"undefined\") <=> QScriptValue(QScriptValue::NullValue)"); + equals.insert("engine->evaluate(\"undefined\") <=> QScriptValue(0, QScriptValue::UndefinedValue)"); + equals.insert("engine->evaluate(\"undefined\") <=> QScriptValue(0, QScriptValue::NullValue)"); + equals.insert("engine->evaluate(\"undefined\") <=> QScriptValue(engine, QScriptValue::UndefinedValue)"); + equals.insert("engine->evaluate(\"undefined\") <=> QScriptValue(engine, QScriptValue::NullValue)"); + equals.insert("engine->evaluate(\"undefined\") <=> engine->evaluate(\"{}\")"); + equals.insert("engine->evaluate(\"undefined\") <=> engine->evaluate(\"undefined\")"); + equals.insert("engine->evaluate(\"undefined\") <=> engine->evaluate(\"null\")"); + equals.insert("engine->evaluate(\"undefined\") <=> engine->nullValue()"); + equals.insert("engine->evaluate(\"undefined\") <=> engine->undefinedValue()"); + equals.insert("engine->evaluate(\"undefined\") <=> engine->newQObject(0)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(QScriptValue::UndefinedValue)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(QScriptValue::NullValue)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(0, QScriptValue::UndefinedValue)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(0, QScriptValue::NullValue)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(engine, QScriptValue::UndefinedValue)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(engine, QScriptValue::NullValue)"); + equals.insert("engine->evaluate(\"null\") <=> engine->evaluate(\"{}\")"); + equals.insert("engine->evaluate(\"null\") <=> engine->evaluate(\"undefined\")"); + equals.insert("engine->evaluate(\"null\") <=> engine->evaluate(\"null\")"); + equals.insert("engine->evaluate(\"null\") <=> engine->nullValue()"); + equals.insert("engine->evaluate(\"null\") <=> engine->undefinedValue()"); + equals.insert("engine->evaluate(\"null\") <=> engine->newQObject(0)"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(true)"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(0, true)"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(engine, true)"); + equals.insert("engine->evaluate(\"true\") <=> engine->evaluate(\"true\")"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(false)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(0)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(0.0)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(QString(\"\"))"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(QString())"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(QString(\"0\"))"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(0, false)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(0, 0)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(0, 0.0)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(0, QString(\"\"))"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(0, QString())"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(0, QString(\"0\"))"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(engine, false)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(engine, 0)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(engine, 0.0)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(engine, QString(\"\"))"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(engine, QString())"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(engine, QString(\"0\"))"); + equals.insert("engine->evaluate(\"false\") <=> engine->evaluate(\"[]\")"); + equals.insert("engine->evaluate(\"false\") <=> engine->evaluate(\"Array.prototype\")"); + equals.insert("engine->evaluate(\"false\") <=> engine->evaluate(\"new Array()\")"); + equals.insert("engine->evaluate(\"false\") <=> engine->evaluate(\"false\")"); + equals.insert("engine->evaluate(\"false\") <=> engine->evaluate(\"0\")"); + equals.insert("engine->evaluate(\"false\") <=> engine->evaluate(\"0.0\")"); + equals.insert("engine->evaluate(\"false\") <=> engine->evaluate(\"''\")"); + equals.insert("engine->evaluate(\"false\") <=> engine->evaluate(\"'0'\")"); + equals.insert("engine->evaluate(\"false\") <=> engine->newArray()"); + equals.insert("engine->evaluate(\"false\") <=> engine->newVariant(QVariant(false))"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(int(122))"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(0, int(122))"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(engine, int(122))"); + equals.insert("engine->evaluate(\"122\") <=> engine->evaluate(\"122\")"); + equals.insert("engine->evaluate(\"124\") <=> QScriptValue(uint(124))"); + equals.insert("engine->evaluate(\"124\") <=> QScriptValue(0, uint(124))"); + equals.insert("engine->evaluate(\"124\") <=> QScriptValue(engine, uint(124))"); + equals.insert("engine->evaluate(\"124\") <=> engine->evaluate(\"124\")"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(false)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0.0)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(QString(\"\"))"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(QString())"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(QString(\"0\"))"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0, false)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0, 0)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0, 0.0)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0, QString(\"\"))"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0, QString())"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0, QString(\"0\"))"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(engine, false)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(engine, 0)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(engine, 0.0)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(engine, QString(\"\"))"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(engine, QString())"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(engine, QString(\"0\"))"); + equals.insert("engine->evaluate(\"0\") <=> engine->evaluate(\"[]\")"); + equals.insert("engine->evaluate(\"0\") <=> engine->evaluate(\"Array.prototype\")"); + equals.insert("engine->evaluate(\"0\") <=> engine->evaluate(\"new Array()\")"); + equals.insert("engine->evaluate(\"0\") <=> engine->evaluate(\"false\")"); + equals.insert("engine->evaluate(\"0\") <=> engine->evaluate(\"0\")"); + equals.insert("engine->evaluate(\"0\") <=> engine->evaluate(\"0.0\")"); + equals.insert("engine->evaluate(\"0\") <=> engine->evaluate(\"''\")"); + equals.insert("engine->evaluate(\"0\") <=> engine->evaluate(\"'0'\")"); + equals.insert("engine->evaluate(\"0\") <=> engine->newArray()"); + equals.insert("engine->evaluate(\"0\") <=> engine->newVariant(QVariant(false))"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(false)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0.0)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(QString(\"\"))"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(QString())"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(QString(\"0\"))"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0, false)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0, 0)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0, 0.0)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0, QString(\"\"))"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0, QString())"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0, QString(\"0\"))"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(engine, false)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(engine, 0)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(engine, 0.0)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(engine, QString(\"\"))"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(engine, QString())"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(engine, QString(\"0\"))"); + equals.insert("engine->evaluate(\"0.0\") <=> engine->evaluate(\"[]\")"); + equals.insert("engine->evaluate(\"0.0\") <=> engine->evaluate(\"Array.prototype\")"); + equals.insert("engine->evaluate(\"0.0\") <=> engine->evaluate(\"new Array()\")"); + equals.insert("engine->evaluate(\"0.0\") <=> engine->evaluate(\"false\")"); + equals.insert("engine->evaluate(\"0.0\") <=> engine->evaluate(\"0\")"); + equals.insert("engine->evaluate(\"0.0\") <=> engine->evaluate(\"0.0\")"); + equals.insert("engine->evaluate(\"0.0\") <=> engine->evaluate(\"''\")"); + equals.insert("engine->evaluate(\"0.0\") <=> engine->evaluate(\"'0'\")"); + equals.insert("engine->evaluate(\"0.0\") <=> engine->newArray()"); + equals.insert("engine->evaluate(\"0.0\") <=> engine->newVariant(QVariant(false))"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(123.0)"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(QString(\"123\"))"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(0, 123.0)"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(0, QString(\"123\"))"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(engine, 123.0)"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("engine->evaluate(\"123.0\") <=> engine->evaluate(\"123.0\")"); + equals.insert("engine->evaluate(\"123.0\") <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->evaluate(\"123.0\") <=> engine->newVariant(QVariant(123))"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(6.37e-8)"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(0, 6.37e-8)"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(engine, 6.37e-8)"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(-6.37e-8)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0, -6.37e-8)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(engine, -6.37e-8)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->evaluate(\"-6.37e-8\")"); + equals.insert("engine->evaluate(\"0x43211234\") <=> QScriptValue(0x43211234)"); + equals.insert("engine->evaluate(\"0x43211234\") <=> QScriptValue(0, 0x43211234)"); + equals.insert("engine->evaluate(\"0x43211234\") <=> QScriptValue(engine, 0x43211234)"); + equals.insert("engine->evaluate(\"0x43211234\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->evaluate(\"0x10000\") <=> QScriptValue(0x10000)"); + equals.insert("engine->evaluate(\"0x10000\") <=> QScriptValue(0, 0x10000)"); + equals.insert("engine->evaluate(\"0x10000\") <=> QScriptValue(engine, 0x10000)"); + equals.insert("engine->evaluate(\"0x10000\") <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->evaluate(\"0x10001\") <=> QScriptValue(0x10001)"); + equals.insert("engine->evaluate(\"0x10001\") <=> QScriptValue(0, 0x10001)"); + equals.insert("engine->evaluate(\"0x10001\") <=> QScriptValue(engine, 0x10001)"); + equals.insert("engine->evaluate(\"0x10001\") <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->evaluate(\"Infinity\") <=> QScriptValue(qInf())"); + equals.insert("engine->evaluate(\"Infinity\") <=> QScriptValue(\"Infinity\")"); + equals.insert("engine->evaluate(\"Infinity\") <=> QScriptValue(0, qInf())"); + equals.insert("engine->evaluate(\"Infinity\") <=> QScriptValue(0, \"Infinity\")"); + equals.insert("engine->evaluate(\"Infinity\") <=> QScriptValue(engine, qInf())"); + equals.insert("engine->evaluate(\"Infinity\") <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("engine->evaluate(\"Infinity\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(-qInf())"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(\"-Infinity\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0, -qInf())"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0, \"-Infinity\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(engine, -qInf())"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(engine, \"-Infinity\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->evaluate(\"-Infinity\")"); + equals.insert("engine->evaluate(\"'ciao'\") <=> QScriptValue(\"ciao\")"); + equals.insert("engine->evaluate(\"'ciao'\") <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"'ciao'\") <=> QScriptValue(0, \"ciao\")"); + equals.insert("engine->evaluate(\"'ciao'\") <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"'ciao'\") <=> QScriptValue(engine, \"ciao\")"); + equals.insert("engine->evaluate(\"'ciao'\") <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"'ciao'\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(false)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0.0)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(QString(\"\"))"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(QString())"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0, false)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0, 0)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0, 0.0)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0, QString(\"\"))"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0, QString())"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(engine, false)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(engine, 0)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(engine, 0.0)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(engine, QString(\"\"))"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(engine, QString())"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"[]\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"Array.prototype\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"new Array()\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"false\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"0\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"0.0\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"''\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->newArray()"); + equals.insert("engine->evaluate(\"''\") <=> engine->newVariant(QVariant(false))"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(false)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(0)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(0.0)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(QString(\"0\"))"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(0, false)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(0, 0)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(0, 0.0)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(0, QString(\"0\"))"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(engine, false)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(engine, 0)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(engine, 0.0)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(engine, QString(\"0\"))"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"false\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"0\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"0.0\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"'0'\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->newVariant(QVariant(false))"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(123.0)"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(QString(\"123\"))"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(0, 123.0)"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(0, QString(\"123\"))"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(engine, 123.0)"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->evaluate(\"123.0\")"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->newVariant(QVariant(123))"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(QString(\"12.4\"))"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"'12.4'\")"); equals.insert("engine->nullValue() <=> QScriptValue(QScriptValue::UndefinedValue)"); equals.insert("engine->nullValue() <=> QScriptValue(QScriptValue::NullValue)"); equals.insert("engine->nullValue() <=> QScriptValue(0, QScriptValue::UndefinedValue)"); @@ -2444,8 +3396,11 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("engine->nullValue() <=> QScriptValue(engine, QScriptValue::UndefinedValue)"); equals.insert("engine->nullValue() <=> QScriptValue(engine, QScriptValue::NullValue)"); equals.insert("engine->nullValue() <=> engine->evaluate(\"{}\")"); + equals.insert("engine->nullValue() <=> engine->evaluate(\"undefined\")"); + equals.insert("engine->nullValue() <=> engine->evaluate(\"null\")"); equals.insert("engine->nullValue() <=> engine->nullValue()"); equals.insert("engine->nullValue() <=> engine->undefinedValue()"); + equals.insert("engine->nullValue() <=> engine->newQObject(0)"); equals.insert("engine->undefinedValue() <=> QScriptValue(QScriptValue::UndefinedValue)"); equals.insert("engine->undefinedValue() <=> QScriptValue(QScriptValue::NullValue)"); equals.insert("engine->undefinedValue() <=> QScriptValue(0, QScriptValue::UndefinedValue)"); @@ -2453,8 +3408,82 @@ void tst_QScriptValue::equals_makeData(const char *expr) equals.insert("engine->undefinedValue() <=> QScriptValue(engine, QScriptValue::UndefinedValue)"); equals.insert("engine->undefinedValue() <=> QScriptValue(engine, QScriptValue::NullValue)"); equals.insert("engine->undefinedValue() <=> engine->evaluate(\"{}\")"); + equals.insert("engine->undefinedValue() <=> engine->evaluate(\"undefined\")"); + equals.insert("engine->undefinedValue() <=> engine->evaluate(\"null\")"); equals.insert("engine->undefinedValue() <=> engine->nullValue()"); equals.insert("engine->undefinedValue() <=> engine->undefinedValue()"); + equals.insert("engine->undefinedValue() <=> engine->newQObject(0)"); + equals.insert("engine->newObject() <=> engine->newObject()"); + equals.insert("engine->newArray() <=> QScriptValue(false)"); + equals.insert("engine->newArray() <=> QScriptValue(0)"); + equals.insert("engine->newArray() <=> QScriptValue(0.0)"); + equals.insert("engine->newArray() <=> QScriptValue(QString(\"\"))"); + equals.insert("engine->newArray() <=> QScriptValue(QString())"); + equals.insert("engine->newArray() <=> QScriptValue(0, false)"); + equals.insert("engine->newArray() <=> QScriptValue(0, 0)"); + equals.insert("engine->newArray() <=> QScriptValue(0, 0.0)"); + equals.insert("engine->newArray() <=> QScriptValue(0, QString(\"\"))"); + equals.insert("engine->newArray() <=> QScriptValue(0, QString())"); + equals.insert("engine->newArray() <=> QScriptValue(engine, false)"); + equals.insert("engine->newArray() <=> QScriptValue(engine, 0)"); + equals.insert("engine->newArray() <=> QScriptValue(engine, 0.0)"); + equals.insert("engine->newArray() <=> QScriptValue(engine, QString(\"\"))"); + equals.insert("engine->newArray() <=> QScriptValue(engine, QString())"); + equals.insert("engine->newArray() <=> engine->evaluate(\"false\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"0\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"0.0\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"''\")"); + equals.insert("engine->newArray() <=> engine->newArray()"); + equals.insert("engine->newArray(10) <=> engine->newArray(10)"); + equals.insert("engine->newDate(QDateTime()) <=> engine->newDate(QDateTime())"); + equals.insert("engine->newQMetaObject(&QObject::staticMetaObject) <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("engine->newVariant(QVariant()) <=> engine->newVariant(QVariant())"); + equals.insert("engine->newVariant(QVariant(123)) <=> QScriptValue(123.0)"); + equals.insert("engine->newVariant(QVariant(123)) <=> QScriptValue(QString(\"123\"))"); + equals.insert("engine->newVariant(QVariant(123)) <=> QScriptValue(0, 123.0)"); + equals.insert("engine->newVariant(QVariant(123)) <=> QScriptValue(0, QString(\"123\"))"); + equals.insert("engine->newVariant(QVariant(123)) <=> QScriptValue(engine, 123.0)"); + equals.insert("engine->newVariant(QVariant(123)) <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("engine->newVariant(QVariant(123)) <=> engine->evaluate(\"123.0\")"); + equals.insert("engine->newVariant(QVariant(123)) <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->newVariant(QVariant(123)) <=> engine->newVariant(QVariant(123))"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(false)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(0)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(0.0)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(QString(\"\"))"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(QString())"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(QString(\"0\"))"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(0, false)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(0, 0)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(0, 0.0)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(0, QString(\"\"))"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(0, QString())"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(0, QString(\"0\"))"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(engine, false)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(engine, 0)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(engine, 0.0)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(engine, QString(\"\"))"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(engine, QString())"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(engine, QString(\"0\"))"); + equals.insert("engine->newVariant(QVariant(false)) <=> engine->evaluate(\"false\")"); + equals.insert("engine->newVariant(QVariant(false)) <=> engine->evaluate(\"0\")"); + equals.insert("engine->newVariant(QVariant(false)) <=> engine->evaluate(\"0.0\")"); + equals.insert("engine->newVariant(QVariant(false)) <=> engine->evaluate(\"''\")"); + equals.insert("engine->newVariant(QVariant(false)) <=> engine->evaluate(\"'0'\")"); + equals.insert("engine->newVariant(QVariant(false)) <=> engine->newVariant(QVariant(false))"); + equals.insert("engine->newQObject(0) <=> QScriptValue(QScriptValue::UndefinedValue)"); + equals.insert("engine->newQObject(0) <=> QScriptValue(QScriptValue::NullValue)"); + equals.insert("engine->newQObject(0) <=> QScriptValue(0, QScriptValue::UndefinedValue)"); + equals.insert("engine->newQObject(0) <=> QScriptValue(0, QScriptValue::NullValue)"); + equals.insert("engine->newQObject(0) <=> QScriptValue(engine, QScriptValue::UndefinedValue)"); + equals.insert("engine->newQObject(0) <=> QScriptValue(engine, QScriptValue::NullValue)"); + equals.insert("engine->newQObject(0) <=> engine->evaluate(\"{}\")"); + equals.insert("engine->newQObject(0) <=> engine->evaluate(\"undefined\")"); + equals.insert("engine->newQObject(0) <=> engine->evaluate(\"null\")"); + equals.insert("engine->newQObject(0) <=> engine->nullValue()"); + equals.insert("engine->newQObject(0) <=> engine->undefinedValue()"); + equals.insert("engine->newQObject(0) <=> engine->newQObject(0)"); + equals.insert("engine->newQObject(engine) <=> engine->newQObject(engine)"); } QHash<QString, QScriptValue>::const_iterator it; for (it = m_values.constBegin(); it != m_values.constEnd(); ++it) { @@ -2489,59 +3518,78 @@ void tst_QScriptValue::strictlyEquals_makeData(const char *expr) equals.insert("QScriptValue(QScriptValue::UndefinedValue) <=> QScriptValue(0, QScriptValue::UndefinedValue)"); equals.insert("QScriptValue(QScriptValue::UndefinedValue) <=> QScriptValue(engine, QScriptValue::UndefinedValue)"); equals.insert("QScriptValue(QScriptValue::UndefinedValue) <=> engine->evaluate(\"{}\")"); + equals.insert("QScriptValue(QScriptValue::UndefinedValue) <=> engine->evaluate(\"undefined\")"); equals.insert("QScriptValue(QScriptValue::UndefinedValue) <=> engine->undefinedValue()"); equals.insert("QScriptValue(QScriptValue::NullValue) <=> QScriptValue(QScriptValue::NullValue)"); equals.insert("QScriptValue(QScriptValue::NullValue) <=> QScriptValue(0, QScriptValue::NullValue)"); equals.insert("QScriptValue(QScriptValue::NullValue) <=> QScriptValue(engine, QScriptValue::NullValue)"); + equals.insert("QScriptValue(QScriptValue::NullValue) <=> engine->evaluate(\"null\")"); equals.insert("QScriptValue(QScriptValue::NullValue) <=> engine->nullValue()"); + equals.insert("QScriptValue(QScriptValue::NullValue) <=> engine->newQObject(0)"); equals.insert("QScriptValue(true) <=> QScriptValue(true)"); equals.insert("QScriptValue(true) <=> QScriptValue(0, true)"); equals.insert("QScriptValue(true) <=> QScriptValue(engine, true)"); + equals.insert("QScriptValue(true) <=> engine->evaluate(\"true\")"); equals.insert("QScriptValue(false) <=> QScriptValue(false)"); equals.insert("QScriptValue(false) <=> QScriptValue(0, false)"); equals.insert("QScriptValue(false) <=> QScriptValue(engine, false)"); + equals.insert("QScriptValue(false) <=> engine->evaluate(\"false\")"); equals.insert("QScriptValue(int(122)) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(int(122)) <=> QScriptValue(0, int(122))"); equals.insert("QScriptValue(int(122)) <=> QScriptValue(engine, int(122))"); + equals.insert("QScriptValue(int(122)) <=> engine->evaluate(\"122\")"); equals.insert("QScriptValue(uint(124)) <=> QScriptValue(uint(124))"); equals.insert("QScriptValue(uint(124)) <=> QScriptValue(0, uint(124))"); equals.insert("QScriptValue(uint(124)) <=> QScriptValue(engine, uint(124))"); + equals.insert("QScriptValue(uint(124)) <=> engine->evaluate(\"124\")"); equals.insert("QScriptValue(0) <=> QScriptValue(0)"); equals.insert("QScriptValue(0) <=> QScriptValue(0.0)"); equals.insert("QScriptValue(0) <=> QScriptValue(0, 0)"); equals.insert("QScriptValue(0) <=> QScriptValue(0, 0.0)"); equals.insert("QScriptValue(0) <=> QScriptValue(engine, 0)"); equals.insert("QScriptValue(0) <=> QScriptValue(engine, 0.0)"); + equals.insert("QScriptValue(0) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(0) <=> engine->evaluate(\"0.0\")"); equals.insert("QScriptValue(0.0) <=> QScriptValue(0)"); equals.insert("QScriptValue(0.0) <=> QScriptValue(0.0)"); equals.insert("QScriptValue(0.0) <=> QScriptValue(0, 0)"); equals.insert("QScriptValue(0.0) <=> QScriptValue(0, 0.0)"); equals.insert("QScriptValue(0.0) <=> QScriptValue(engine, 0)"); equals.insert("QScriptValue(0.0) <=> QScriptValue(engine, 0.0)"); + equals.insert("QScriptValue(0.0) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(0.0) <=> engine->evaluate(\"0.0\")"); equals.insert("QScriptValue(123.0) <=> QScriptValue(123.0)"); equals.insert("QScriptValue(123.0) <=> QScriptValue(0, 123.0)"); equals.insert("QScriptValue(123.0) <=> QScriptValue(engine, 123.0)"); + equals.insert("QScriptValue(123.0) <=> engine->evaluate(\"123.0\")"); equals.insert("QScriptValue(6.37e-8) <=> QScriptValue(6.37e-8)"); equals.insert("QScriptValue(6.37e-8) <=> QScriptValue(0, 6.37e-8)"); equals.insert("QScriptValue(6.37e-8) <=> QScriptValue(engine, 6.37e-8)"); + equals.insert("QScriptValue(6.37e-8) <=> engine->evaluate(\"6.37e-8\")"); equals.insert("QScriptValue(-6.37e-8) <=> QScriptValue(-6.37e-8)"); equals.insert("QScriptValue(-6.37e-8) <=> QScriptValue(0, -6.37e-8)"); equals.insert("QScriptValue(-6.37e-8) <=> QScriptValue(engine, -6.37e-8)"); + equals.insert("QScriptValue(-6.37e-8) <=> engine->evaluate(\"-6.37e-8\")"); equals.insert("QScriptValue(0x43211234) <=> QScriptValue(0x43211234)"); equals.insert("QScriptValue(0x43211234) <=> QScriptValue(0, 0x43211234)"); equals.insert("QScriptValue(0x43211234) <=> QScriptValue(engine, 0x43211234)"); + equals.insert("QScriptValue(0x43211234) <=> engine->evaluate(\"0x43211234\")"); equals.insert("QScriptValue(0x10000) <=> QScriptValue(0x10000)"); equals.insert("QScriptValue(0x10000) <=> QScriptValue(0, 0x10000)"); equals.insert("QScriptValue(0x10000) <=> QScriptValue(engine, 0x10000)"); + equals.insert("QScriptValue(0x10000) <=> engine->evaluate(\"0x10000\")"); equals.insert("QScriptValue(0x10001) <=> QScriptValue(0x10001)"); equals.insert("QScriptValue(0x10001) <=> QScriptValue(0, 0x10001)"); equals.insert("QScriptValue(0x10001) <=> QScriptValue(engine, 0x10001)"); + equals.insert("QScriptValue(0x10001) <=> engine->evaluate(\"0x10001\")"); equals.insert("QScriptValue(qInf()) <=> QScriptValue(qInf())"); equals.insert("QScriptValue(qInf()) <=> QScriptValue(0, qInf())"); equals.insert("QScriptValue(qInf()) <=> QScriptValue(engine, qInf())"); + equals.insert("QScriptValue(qInf()) <=> engine->evaluate(\"Infinity\")"); equals.insert("QScriptValue(-qInf()) <=> QScriptValue(-qInf())"); equals.insert("QScriptValue(-qInf()) <=> QScriptValue(0, -qInf())"); equals.insert("QScriptValue(-qInf()) <=> QScriptValue(engine, -qInf())"); + equals.insert("QScriptValue(-qInf()) <=> engine->evaluate(\"-Infinity\")"); equals.insert("QScriptValue(\"NaN\") <=> QScriptValue(\"NaN\")"); equals.insert("QScriptValue(\"NaN\") <=> QScriptValue(0, \"NaN\")"); equals.insert("QScriptValue(\"NaN\") <=> QScriptValue(engine, \"NaN\")"); @@ -2557,88 +3605,114 @@ void tst_QScriptValue::strictlyEquals_makeData(const char *expr) equals.insert("QScriptValue(\"ciao\") <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); equals.insert("QScriptValue(\"ciao\") <=> QScriptValue(engine, \"ciao\")"); equals.insert("QScriptValue(\"ciao\") <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("QScriptValue(\"ciao\") <=> engine->evaluate(\"'ciao'\")"); equals.insert("QScriptValue(QString::fromLatin1(\"ciao\")) <=> QScriptValue(\"ciao\")"); equals.insert("QScriptValue(QString::fromLatin1(\"ciao\")) <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); equals.insert("QScriptValue(QString::fromLatin1(\"ciao\")) <=> QScriptValue(0, \"ciao\")"); equals.insert("QScriptValue(QString::fromLatin1(\"ciao\")) <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); equals.insert("QScriptValue(QString::fromLatin1(\"ciao\")) <=> QScriptValue(engine, \"ciao\")"); equals.insert("QScriptValue(QString::fromLatin1(\"ciao\")) <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("QScriptValue(QString::fromLatin1(\"ciao\")) <=> engine->evaluate(\"'ciao'\")"); equals.insert("QScriptValue(QString(\"\")) <=> QScriptValue(QString(\"\"))"); equals.insert("QScriptValue(QString(\"\")) <=> QScriptValue(QString())"); equals.insert("QScriptValue(QString(\"\")) <=> QScriptValue(0, QString(\"\"))"); equals.insert("QScriptValue(QString(\"\")) <=> QScriptValue(0, QString())"); equals.insert("QScriptValue(QString(\"\")) <=> QScriptValue(engine, QString(\"\"))"); equals.insert("QScriptValue(QString(\"\")) <=> QScriptValue(engine, QString())"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"''\")"); equals.insert("QScriptValue(QString()) <=> QScriptValue(QString(\"\"))"); equals.insert("QScriptValue(QString()) <=> QScriptValue(QString())"); equals.insert("QScriptValue(QString()) <=> QScriptValue(0, QString(\"\"))"); equals.insert("QScriptValue(QString()) <=> QScriptValue(0, QString())"); equals.insert("QScriptValue(QString()) <=> QScriptValue(engine, QString(\"\"))"); equals.insert("QScriptValue(QString()) <=> QScriptValue(engine, QString())"); + equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"''\")"); equals.insert("QScriptValue(QString(\"0\")) <=> QScriptValue(QString(\"0\"))"); equals.insert("QScriptValue(QString(\"0\")) <=> QScriptValue(0, QString(\"0\"))"); equals.insert("QScriptValue(QString(\"0\")) <=> QScriptValue(engine, QString(\"0\"))"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->evaluate(\"'0'\")"); equals.insert("QScriptValue(QString(\"123\")) <=> QScriptValue(QString(\"123\"))"); equals.insert("QScriptValue(QString(\"123\")) <=> QScriptValue(0, QString(\"123\"))"); equals.insert("QScriptValue(QString(\"123\")) <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("QScriptValue(QString(\"123\")) <=> engine->evaluate(\"'123'\")"); equals.insert("QScriptValue(QString(\"12.4\")) <=> QScriptValue(QString(\"12.4\"))"); + equals.insert("QScriptValue(QString(\"12.4\")) <=> engine->evaluate(\"'12.4'\")"); equals.insert("QScriptValue(0, QScriptValue::UndefinedValue) <=> QScriptValue(QScriptValue::UndefinedValue)"); equals.insert("QScriptValue(0, QScriptValue::UndefinedValue) <=> QScriptValue(0, QScriptValue::UndefinedValue)"); equals.insert("QScriptValue(0, QScriptValue::UndefinedValue) <=> QScriptValue(engine, QScriptValue::UndefinedValue)"); equals.insert("QScriptValue(0, QScriptValue::UndefinedValue) <=> engine->evaluate(\"{}\")"); + equals.insert("QScriptValue(0, QScriptValue::UndefinedValue) <=> engine->evaluate(\"undefined\")"); equals.insert("QScriptValue(0, QScriptValue::UndefinedValue) <=> engine->undefinedValue()"); equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> QScriptValue(QScriptValue::NullValue)"); equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> QScriptValue(0, QScriptValue::NullValue)"); equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> QScriptValue(engine, QScriptValue::NullValue)"); + equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> engine->evaluate(\"null\")"); equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> engine->nullValue()"); + equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> engine->newQObject(0)"); equals.insert("QScriptValue(0, true) <=> QScriptValue(true)"); equals.insert("QScriptValue(0, true) <=> QScriptValue(0, true)"); equals.insert("QScriptValue(0, true) <=> QScriptValue(engine, true)"); + equals.insert("QScriptValue(0, true) <=> engine->evaluate(\"true\")"); equals.insert("QScriptValue(0, false) <=> QScriptValue(false)"); equals.insert("QScriptValue(0, false) <=> QScriptValue(0, false)"); equals.insert("QScriptValue(0, false) <=> QScriptValue(engine, false)"); + equals.insert("QScriptValue(0, false) <=> engine->evaluate(\"false\")"); equals.insert("QScriptValue(0, int(122)) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(0, int(122)) <=> QScriptValue(0, int(122))"); equals.insert("QScriptValue(0, int(122)) <=> QScriptValue(engine, int(122))"); + equals.insert("QScriptValue(0, int(122)) <=> engine->evaluate(\"122\")"); equals.insert("QScriptValue(0, uint(124)) <=> QScriptValue(uint(124))"); equals.insert("QScriptValue(0, uint(124)) <=> QScriptValue(0, uint(124))"); equals.insert("QScriptValue(0, uint(124)) <=> QScriptValue(engine, uint(124))"); + equals.insert("QScriptValue(0, uint(124)) <=> engine->evaluate(\"124\")"); equals.insert("QScriptValue(0, 0) <=> QScriptValue(0)"); equals.insert("QScriptValue(0, 0) <=> QScriptValue(0.0)"); equals.insert("QScriptValue(0, 0) <=> QScriptValue(0, 0)"); equals.insert("QScriptValue(0, 0) <=> QScriptValue(0, 0.0)"); equals.insert("QScriptValue(0, 0) <=> QScriptValue(engine, 0)"); equals.insert("QScriptValue(0, 0) <=> QScriptValue(engine, 0.0)"); + equals.insert("QScriptValue(0, 0) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(0, 0) <=> engine->evaluate(\"0.0\")"); equals.insert("QScriptValue(0, 0.0) <=> QScriptValue(0)"); equals.insert("QScriptValue(0, 0.0) <=> QScriptValue(0.0)"); equals.insert("QScriptValue(0, 0.0) <=> QScriptValue(0, 0)"); equals.insert("QScriptValue(0, 0.0) <=> QScriptValue(0, 0.0)"); equals.insert("QScriptValue(0, 0.0) <=> QScriptValue(engine, 0)"); equals.insert("QScriptValue(0, 0.0) <=> QScriptValue(engine, 0.0)"); + equals.insert("QScriptValue(0, 0.0) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(0, 0.0) <=> engine->evaluate(\"0.0\")"); equals.insert("QScriptValue(0, 123.0) <=> QScriptValue(123.0)"); equals.insert("QScriptValue(0, 123.0) <=> QScriptValue(0, 123.0)"); equals.insert("QScriptValue(0, 123.0) <=> QScriptValue(engine, 123.0)"); + equals.insert("QScriptValue(0, 123.0) <=> engine->evaluate(\"123.0\")"); equals.insert("QScriptValue(0, 6.37e-8) <=> QScriptValue(6.37e-8)"); equals.insert("QScriptValue(0, 6.37e-8) <=> QScriptValue(0, 6.37e-8)"); equals.insert("QScriptValue(0, 6.37e-8) <=> QScriptValue(engine, 6.37e-8)"); + equals.insert("QScriptValue(0, 6.37e-8) <=> engine->evaluate(\"6.37e-8\")"); equals.insert("QScriptValue(0, -6.37e-8) <=> QScriptValue(-6.37e-8)"); equals.insert("QScriptValue(0, -6.37e-8) <=> QScriptValue(0, -6.37e-8)"); equals.insert("QScriptValue(0, -6.37e-8) <=> QScriptValue(engine, -6.37e-8)"); + equals.insert("QScriptValue(0, -6.37e-8) <=> engine->evaluate(\"-6.37e-8\")"); equals.insert("QScriptValue(0, 0x43211234) <=> QScriptValue(0x43211234)"); equals.insert("QScriptValue(0, 0x43211234) <=> QScriptValue(0, 0x43211234)"); equals.insert("QScriptValue(0, 0x43211234) <=> QScriptValue(engine, 0x43211234)"); + equals.insert("QScriptValue(0, 0x43211234) <=> engine->evaluate(\"0x43211234\")"); equals.insert("QScriptValue(0, 0x10000) <=> QScriptValue(0x10000)"); equals.insert("QScriptValue(0, 0x10000) <=> QScriptValue(0, 0x10000)"); equals.insert("QScriptValue(0, 0x10000) <=> QScriptValue(engine, 0x10000)"); + equals.insert("QScriptValue(0, 0x10000) <=> engine->evaluate(\"0x10000\")"); equals.insert("QScriptValue(0, 0x10001) <=> QScriptValue(0x10001)"); equals.insert("QScriptValue(0, 0x10001) <=> QScriptValue(0, 0x10001)"); equals.insert("QScriptValue(0, 0x10001) <=> QScriptValue(engine, 0x10001)"); + equals.insert("QScriptValue(0, 0x10001) <=> engine->evaluate(\"0x10001\")"); equals.insert("QScriptValue(0, qInf()) <=> QScriptValue(qInf())"); equals.insert("QScriptValue(0, qInf()) <=> QScriptValue(0, qInf())"); equals.insert("QScriptValue(0, qInf()) <=> QScriptValue(engine, qInf())"); + equals.insert("QScriptValue(0, qInf()) <=> engine->evaluate(\"Infinity\")"); equals.insert("QScriptValue(0, -qInf()) <=> QScriptValue(-qInf())"); equals.insert("QScriptValue(0, -qInf()) <=> QScriptValue(0, -qInf())"); equals.insert("QScriptValue(0, -qInf()) <=> QScriptValue(engine, -qInf())"); + equals.insert("QScriptValue(0, -qInf()) <=> engine->evaluate(\"-Infinity\")"); equals.insert("QScriptValue(0, \"NaN\") <=> QScriptValue(\"NaN\")"); equals.insert("QScriptValue(0, \"NaN\") <=> QScriptValue(0, \"NaN\")"); equals.insert("QScriptValue(0, \"NaN\") <=> QScriptValue(engine, \"NaN\")"); @@ -2654,88 +3728,113 @@ void tst_QScriptValue::strictlyEquals_makeData(const char *expr) equals.insert("QScriptValue(0, \"ciao\") <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); equals.insert("QScriptValue(0, \"ciao\") <=> QScriptValue(engine, \"ciao\")"); equals.insert("QScriptValue(0, \"ciao\") <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("QScriptValue(0, \"ciao\") <=> engine->evaluate(\"'ciao'\")"); equals.insert("QScriptValue(0, QString::fromLatin1(\"ciao\")) <=> QScriptValue(\"ciao\")"); equals.insert("QScriptValue(0, QString::fromLatin1(\"ciao\")) <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); equals.insert("QScriptValue(0, QString::fromLatin1(\"ciao\")) <=> QScriptValue(0, \"ciao\")"); equals.insert("QScriptValue(0, QString::fromLatin1(\"ciao\")) <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); equals.insert("QScriptValue(0, QString::fromLatin1(\"ciao\")) <=> QScriptValue(engine, \"ciao\")"); equals.insert("QScriptValue(0, QString::fromLatin1(\"ciao\")) <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("QScriptValue(0, QString::fromLatin1(\"ciao\")) <=> engine->evaluate(\"'ciao'\")"); equals.insert("QScriptValue(0, QString(\"\")) <=> QScriptValue(QString(\"\"))"); equals.insert("QScriptValue(0, QString(\"\")) <=> QScriptValue(QString())"); equals.insert("QScriptValue(0, QString(\"\")) <=> QScriptValue(0, QString(\"\"))"); equals.insert("QScriptValue(0, QString(\"\")) <=> QScriptValue(0, QString())"); equals.insert("QScriptValue(0, QString(\"\")) <=> QScriptValue(engine, QString(\"\"))"); equals.insert("QScriptValue(0, QString(\"\")) <=> QScriptValue(engine, QString())"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"''\")"); equals.insert("QScriptValue(0, QString()) <=> QScriptValue(QString(\"\"))"); equals.insert("QScriptValue(0, QString()) <=> QScriptValue(QString())"); equals.insert("QScriptValue(0, QString()) <=> QScriptValue(0, QString(\"\"))"); equals.insert("QScriptValue(0, QString()) <=> QScriptValue(0, QString())"); equals.insert("QScriptValue(0, QString()) <=> QScriptValue(engine, QString(\"\"))"); equals.insert("QScriptValue(0, QString()) <=> QScriptValue(engine, QString())"); + equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"''\")"); equals.insert("QScriptValue(0, QString(\"0\")) <=> QScriptValue(QString(\"0\"))"); equals.insert("QScriptValue(0, QString(\"0\")) <=> QScriptValue(0, QString(\"0\"))"); equals.insert("QScriptValue(0, QString(\"0\")) <=> QScriptValue(engine, QString(\"0\"))"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->evaluate(\"'0'\")"); equals.insert("QScriptValue(0, QString(\"123\")) <=> QScriptValue(QString(\"123\"))"); equals.insert("QScriptValue(0, QString(\"123\")) <=> QScriptValue(0, QString(\"123\"))"); equals.insert("QScriptValue(0, QString(\"123\")) <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("QScriptValue(0, QString(\"123\")) <=> engine->evaluate(\"'123'\")"); equals.insert("QScriptValue(0, QString(\"12.3\")) <=> QScriptValue(0, QString(\"12.3\"))"); equals.insert("QScriptValue(engine, QScriptValue::UndefinedValue) <=> QScriptValue(QScriptValue::UndefinedValue)"); equals.insert("QScriptValue(engine, QScriptValue::UndefinedValue) <=> QScriptValue(0, QScriptValue::UndefinedValue)"); equals.insert("QScriptValue(engine, QScriptValue::UndefinedValue) <=> QScriptValue(engine, QScriptValue::UndefinedValue)"); equals.insert("QScriptValue(engine, QScriptValue::UndefinedValue) <=> engine->evaluate(\"{}\")"); + equals.insert("QScriptValue(engine, QScriptValue::UndefinedValue) <=> engine->evaluate(\"undefined\")"); equals.insert("QScriptValue(engine, QScriptValue::UndefinedValue) <=> engine->undefinedValue()"); equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> QScriptValue(QScriptValue::NullValue)"); equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> QScriptValue(0, QScriptValue::NullValue)"); equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> QScriptValue(engine, QScriptValue::NullValue)"); + equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> engine->evaluate(\"null\")"); equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> engine->nullValue()"); + equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> engine->newQObject(0)"); equals.insert("QScriptValue(engine, true) <=> QScriptValue(true)"); equals.insert("QScriptValue(engine, true) <=> QScriptValue(0, true)"); equals.insert("QScriptValue(engine, true) <=> QScriptValue(engine, true)"); + equals.insert("QScriptValue(engine, true) <=> engine->evaluate(\"true\")"); equals.insert("QScriptValue(engine, false) <=> QScriptValue(false)"); equals.insert("QScriptValue(engine, false) <=> QScriptValue(0, false)"); equals.insert("QScriptValue(engine, false) <=> QScriptValue(engine, false)"); + equals.insert("QScriptValue(engine, false) <=> engine->evaluate(\"false\")"); equals.insert("QScriptValue(engine, int(122)) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(engine, int(122)) <=> QScriptValue(0, int(122))"); equals.insert("QScriptValue(engine, int(122)) <=> QScriptValue(engine, int(122))"); + equals.insert("QScriptValue(engine, int(122)) <=> engine->evaluate(\"122\")"); equals.insert("QScriptValue(engine, uint(124)) <=> QScriptValue(uint(124))"); equals.insert("QScriptValue(engine, uint(124)) <=> QScriptValue(0, uint(124))"); equals.insert("QScriptValue(engine, uint(124)) <=> QScriptValue(engine, uint(124))"); + equals.insert("QScriptValue(engine, uint(124)) <=> engine->evaluate(\"124\")"); equals.insert("QScriptValue(engine, 0) <=> QScriptValue(0)"); equals.insert("QScriptValue(engine, 0) <=> QScriptValue(0.0)"); equals.insert("QScriptValue(engine, 0) <=> QScriptValue(0, 0)"); equals.insert("QScriptValue(engine, 0) <=> QScriptValue(0, 0.0)"); equals.insert("QScriptValue(engine, 0) <=> QScriptValue(engine, 0)"); equals.insert("QScriptValue(engine, 0) <=> QScriptValue(engine, 0.0)"); + equals.insert("QScriptValue(engine, 0) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(engine, 0) <=> engine->evaluate(\"0.0\")"); equals.insert("QScriptValue(engine, 0.0) <=> QScriptValue(0)"); equals.insert("QScriptValue(engine, 0.0) <=> QScriptValue(0.0)"); equals.insert("QScriptValue(engine, 0.0) <=> QScriptValue(0, 0)"); equals.insert("QScriptValue(engine, 0.0) <=> QScriptValue(0, 0.0)"); equals.insert("QScriptValue(engine, 0.0) <=> QScriptValue(engine, 0)"); equals.insert("QScriptValue(engine, 0.0) <=> QScriptValue(engine, 0.0)"); + equals.insert("QScriptValue(engine, 0.0) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(engine, 0.0) <=> engine->evaluate(\"0.0\")"); equals.insert("QScriptValue(engine, 123.0) <=> QScriptValue(123.0)"); equals.insert("QScriptValue(engine, 123.0) <=> QScriptValue(0, 123.0)"); equals.insert("QScriptValue(engine, 123.0) <=> QScriptValue(engine, 123.0)"); + equals.insert("QScriptValue(engine, 123.0) <=> engine->evaluate(\"123.0\")"); equals.insert("QScriptValue(engine, 6.37e-8) <=> QScriptValue(6.37e-8)"); equals.insert("QScriptValue(engine, 6.37e-8) <=> QScriptValue(0, 6.37e-8)"); equals.insert("QScriptValue(engine, 6.37e-8) <=> QScriptValue(engine, 6.37e-8)"); + equals.insert("QScriptValue(engine, 6.37e-8) <=> engine->evaluate(\"6.37e-8\")"); equals.insert("QScriptValue(engine, -6.37e-8) <=> QScriptValue(-6.37e-8)"); equals.insert("QScriptValue(engine, -6.37e-8) <=> QScriptValue(0, -6.37e-8)"); equals.insert("QScriptValue(engine, -6.37e-8) <=> QScriptValue(engine, -6.37e-8)"); + equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->evaluate(\"-6.37e-8\")"); equals.insert("QScriptValue(engine, 0x43211234) <=> QScriptValue(0x43211234)"); equals.insert("QScriptValue(engine, 0x43211234) <=> QScriptValue(0, 0x43211234)"); equals.insert("QScriptValue(engine, 0x43211234) <=> QScriptValue(engine, 0x43211234)"); + equals.insert("QScriptValue(engine, 0x43211234) <=> engine->evaluate(\"0x43211234\")"); equals.insert("QScriptValue(engine, 0x10000) <=> QScriptValue(0x10000)"); equals.insert("QScriptValue(engine, 0x10000) <=> QScriptValue(0, 0x10000)"); equals.insert("QScriptValue(engine, 0x10000) <=> QScriptValue(engine, 0x10000)"); + equals.insert("QScriptValue(engine, 0x10000) <=> engine->evaluate(\"0x10000\")"); equals.insert("QScriptValue(engine, 0x10001) <=> QScriptValue(0x10001)"); equals.insert("QScriptValue(engine, 0x10001) <=> QScriptValue(0, 0x10001)"); equals.insert("QScriptValue(engine, 0x10001) <=> QScriptValue(engine, 0x10001)"); + equals.insert("QScriptValue(engine, 0x10001) <=> engine->evaluate(\"0x10001\")"); equals.insert("QScriptValue(engine, qInf()) <=> QScriptValue(qInf())"); equals.insert("QScriptValue(engine, qInf()) <=> QScriptValue(0, qInf())"); equals.insert("QScriptValue(engine, qInf()) <=> QScriptValue(engine, qInf())"); + equals.insert("QScriptValue(engine, qInf()) <=> engine->evaluate(\"Infinity\")"); equals.insert("QScriptValue(engine, -qInf()) <=> QScriptValue(-qInf())"); equals.insert("QScriptValue(engine, -qInf()) <=> QScriptValue(0, -qInf())"); equals.insert("QScriptValue(engine, -qInf()) <=> QScriptValue(engine, -qInf())"); + equals.insert("QScriptValue(engine, -qInf()) <=> engine->evaluate(\"-Infinity\")"); equals.insert("QScriptValue(engine, \"NaN\") <=> QScriptValue(\"NaN\")"); equals.insert("QScriptValue(engine, \"NaN\") <=> QScriptValue(0, \"NaN\")"); equals.insert("QScriptValue(engine, \"NaN\") <=> QScriptValue(engine, \"NaN\")"); @@ -2751,36 +3850,43 @@ void tst_QScriptValue::strictlyEquals_makeData(const char *expr) equals.insert("QScriptValue(engine, \"ciao\") <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); equals.insert("QScriptValue(engine, \"ciao\") <=> QScriptValue(engine, \"ciao\")"); equals.insert("QScriptValue(engine, \"ciao\") <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("QScriptValue(engine, \"ciao\") <=> engine->evaluate(\"'ciao'\")"); equals.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\")) <=> QScriptValue(\"ciao\")"); equals.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\")) <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); equals.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\")) <=> QScriptValue(0, \"ciao\")"); equals.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\")) <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); equals.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\")) <=> QScriptValue(engine, \"ciao\")"); equals.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\")) <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\")) <=> engine->evaluate(\"'ciao'\")"); equals.insert("QScriptValue(engine, QString(\"\")) <=> QScriptValue(QString(\"\"))"); equals.insert("QScriptValue(engine, QString(\"\")) <=> QScriptValue(QString())"); equals.insert("QScriptValue(engine, QString(\"\")) <=> QScriptValue(0, QString(\"\"))"); equals.insert("QScriptValue(engine, QString(\"\")) <=> QScriptValue(0, QString())"); equals.insert("QScriptValue(engine, QString(\"\")) <=> QScriptValue(engine, QString(\"\"))"); equals.insert("QScriptValue(engine, QString(\"\")) <=> QScriptValue(engine, QString())"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"''\")"); equals.insert("QScriptValue(engine, QString()) <=> QScriptValue(QString(\"\"))"); equals.insert("QScriptValue(engine, QString()) <=> QScriptValue(QString())"); equals.insert("QScriptValue(engine, QString()) <=> QScriptValue(0, QString(\"\"))"); equals.insert("QScriptValue(engine, QString()) <=> QScriptValue(0, QString())"); equals.insert("QScriptValue(engine, QString()) <=> QScriptValue(engine, QString(\"\"))"); equals.insert("QScriptValue(engine, QString()) <=> QScriptValue(engine, QString())"); + equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"''\")"); equals.insert("QScriptValue(engine, QString(\"0\")) <=> QScriptValue(QString(\"0\"))"); equals.insert("QScriptValue(engine, QString(\"0\")) <=> QScriptValue(0, QString(\"0\"))"); equals.insert("QScriptValue(engine, QString(\"0\")) <=> QScriptValue(engine, QString(\"0\"))"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->evaluate(\"'0'\")"); equals.insert("QScriptValue(engine, QString(\"123\")) <=> QScriptValue(QString(\"123\"))"); equals.insert("QScriptValue(engine, QString(\"123\")) <=> QScriptValue(0, QString(\"123\"))"); equals.insert("QScriptValue(engine, QString(\"123\")) <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("QScriptValue(engine, QString(\"123\")) <=> engine->evaluate(\"'123'\")"); equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> QScriptValue(engine, QString(\"1.23\"))"); equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"[]\")"); equals.insert("engine->evaluate(\"{}\") <=> QScriptValue(QScriptValue::UndefinedValue)"); equals.insert("engine->evaluate(\"{}\") <=> QScriptValue(0, QScriptValue::UndefinedValue)"); equals.insert("engine->evaluate(\"{}\") <=> QScriptValue(engine, QScriptValue::UndefinedValue)"); equals.insert("engine->evaluate(\"{}\") <=> engine->evaluate(\"{}\")"); + equals.insert("engine->evaluate(\"{}\") <=> engine->evaluate(\"undefined\")"); equals.insert("engine->evaluate(\"{}\") <=> engine->undefinedValue()"); equals.insert("engine->evaluate(\"Object.prototype\") <=> engine->evaluate(\"Object.prototype\")"); equals.insert("engine->evaluate(\"Date.prototype\") <=> engine->evaluate(\"Date.prototype\")"); @@ -2798,15 +3904,138 @@ void tst_QScriptValue::strictlyEquals_makeData(const char *expr) equals.insert("engine->evaluate(\"new Object()\") <=> engine->evaluate(\"new Object()\")"); equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"new Array()\")"); equals.insert("engine->evaluate(\"new Error()\") <=> engine->evaluate(\"new Error()\")"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("engine->evaluate(\"Undefined\") <=> engine->evaluate(\"Undefined\")"); + equals.insert("engine->evaluate(\"Null\") <=> engine->evaluate(\"Null\")"); + equals.insert("engine->evaluate(\"True\") <=> engine->evaluate(\"True\")"); + equals.insert("engine->evaluate(\"False\") <=> engine->evaluate(\"False\")"); + equals.insert("engine->evaluate(\"undefined\") <=> QScriptValue(QScriptValue::UndefinedValue)"); + equals.insert("engine->evaluate(\"undefined\") <=> QScriptValue(0, QScriptValue::UndefinedValue)"); + equals.insert("engine->evaluate(\"undefined\") <=> QScriptValue(engine, QScriptValue::UndefinedValue)"); + equals.insert("engine->evaluate(\"undefined\") <=> engine->evaluate(\"{}\")"); + equals.insert("engine->evaluate(\"undefined\") <=> engine->evaluate(\"undefined\")"); + equals.insert("engine->evaluate(\"undefined\") <=> engine->undefinedValue()"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(QScriptValue::NullValue)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(0, QScriptValue::NullValue)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(engine, QScriptValue::NullValue)"); + equals.insert("engine->evaluate(\"null\") <=> engine->evaluate(\"null\")"); + equals.insert("engine->evaluate(\"null\") <=> engine->nullValue()"); + equals.insert("engine->evaluate(\"null\") <=> engine->newQObject(0)"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(true)"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(0, true)"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(engine, true)"); + equals.insert("engine->evaluate(\"true\") <=> engine->evaluate(\"true\")"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(false)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(0, false)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(engine, false)"); + equals.insert("engine->evaluate(\"false\") <=> engine->evaluate(\"false\")"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(int(122))"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(0, int(122))"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(engine, int(122))"); + equals.insert("engine->evaluate(\"122\") <=> engine->evaluate(\"122\")"); + equals.insert("engine->evaluate(\"124\") <=> QScriptValue(uint(124))"); + equals.insert("engine->evaluate(\"124\") <=> QScriptValue(0, uint(124))"); + equals.insert("engine->evaluate(\"124\") <=> QScriptValue(engine, uint(124))"); + equals.insert("engine->evaluate(\"124\") <=> engine->evaluate(\"124\")"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0.0)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0, 0)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0, 0.0)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(engine, 0)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(engine, 0.0)"); + equals.insert("engine->evaluate(\"0\") <=> engine->evaluate(\"0\")"); + equals.insert("engine->evaluate(\"0\") <=> engine->evaluate(\"0.0\")"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0.0)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0, 0)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0, 0.0)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(engine, 0)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(engine, 0.0)"); + equals.insert("engine->evaluate(\"0.0\") <=> engine->evaluate(\"0\")"); + equals.insert("engine->evaluate(\"0.0\") <=> engine->evaluate(\"0.0\")"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(123.0)"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(0, 123.0)"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(engine, 123.0)"); + equals.insert("engine->evaluate(\"123.0\") <=> engine->evaluate(\"123.0\")"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(6.37e-8)"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(0, 6.37e-8)"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(engine, 6.37e-8)"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(-6.37e-8)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0, -6.37e-8)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(engine, -6.37e-8)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->evaluate(\"-6.37e-8\")"); + equals.insert("engine->evaluate(\"0x43211234\") <=> QScriptValue(0x43211234)"); + equals.insert("engine->evaluate(\"0x43211234\") <=> QScriptValue(0, 0x43211234)"); + equals.insert("engine->evaluate(\"0x43211234\") <=> QScriptValue(engine, 0x43211234)"); + equals.insert("engine->evaluate(\"0x43211234\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->evaluate(\"0x10000\") <=> QScriptValue(0x10000)"); + equals.insert("engine->evaluate(\"0x10000\") <=> QScriptValue(0, 0x10000)"); + equals.insert("engine->evaluate(\"0x10000\") <=> QScriptValue(engine, 0x10000)"); + equals.insert("engine->evaluate(\"0x10000\") <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->evaluate(\"0x10001\") <=> QScriptValue(0x10001)"); + equals.insert("engine->evaluate(\"0x10001\") <=> QScriptValue(0, 0x10001)"); + equals.insert("engine->evaluate(\"0x10001\") <=> QScriptValue(engine, 0x10001)"); + equals.insert("engine->evaluate(\"0x10001\") <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->evaluate(\"Infinity\") <=> QScriptValue(qInf())"); + equals.insert("engine->evaluate(\"Infinity\") <=> QScriptValue(0, qInf())"); + equals.insert("engine->evaluate(\"Infinity\") <=> QScriptValue(engine, qInf())"); + equals.insert("engine->evaluate(\"Infinity\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(-qInf())"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0, -qInf())"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(engine, -qInf())"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->evaluate(\"-Infinity\")"); + equals.insert("engine->evaluate(\"'ciao'\") <=> QScriptValue(\"ciao\")"); + equals.insert("engine->evaluate(\"'ciao'\") <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"'ciao'\") <=> QScriptValue(0, \"ciao\")"); + equals.insert("engine->evaluate(\"'ciao'\") <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"'ciao'\") <=> QScriptValue(engine, \"ciao\")"); + equals.insert("engine->evaluate(\"'ciao'\") <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"'ciao'\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(QString(\"\"))"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(QString())"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0, QString(\"\"))"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0, QString())"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(engine, QString(\"\"))"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(engine, QString())"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"''\")"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(QString(\"0\"))"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(0, QString(\"0\"))"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(engine, QString(\"0\"))"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"'0'\")"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(QString(\"123\"))"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(0, QString(\"123\"))"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(QString(\"12.4\"))"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"'12.4'\")"); equals.insert("engine->nullValue() <=> QScriptValue(QScriptValue::NullValue)"); equals.insert("engine->nullValue() <=> QScriptValue(0, QScriptValue::NullValue)"); equals.insert("engine->nullValue() <=> QScriptValue(engine, QScriptValue::NullValue)"); + equals.insert("engine->nullValue() <=> engine->evaluate(\"null\")"); equals.insert("engine->nullValue() <=> engine->nullValue()"); + equals.insert("engine->nullValue() <=> engine->newQObject(0)"); equals.insert("engine->undefinedValue() <=> QScriptValue(QScriptValue::UndefinedValue)"); equals.insert("engine->undefinedValue() <=> QScriptValue(0, QScriptValue::UndefinedValue)"); equals.insert("engine->undefinedValue() <=> QScriptValue(engine, QScriptValue::UndefinedValue)"); equals.insert("engine->undefinedValue() <=> engine->evaluate(\"{}\")"); + equals.insert("engine->undefinedValue() <=> engine->evaluate(\"undefined\")"); equals.insert("engine->undefinedValue() <=> engine->undefinedValue()"); + equals.insert("engine->newObject() <=> engine->newObject()"); + equals.insert("engine->newArray() <=> engine->newArray()"); + equals.insert("engine->newArray(10) <=> engine->newArray(10)"); + equals.insert("engine->newDate(QDateTime()) <=> engine->newDate(QDateTime())"); + equals.insert("engine->newQMetaObject(&QObject::staticMetaObject) <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("engine->newVariant(QVariant()) <=> engine->newVariant(QVariant())"); + equals.insert("engine->newVariant(QVariant(123)) <=> engine->newVariant(QVariant(123))"); + equals.insert("engine->newVariant(QVariant(false)) <=> engine->newVariant(QVariant(false))"); + equals.insert("engine->newQObject(0) <=> QScriptValue(QScriptValue::NullValue)"); + equals.insert("engine->newQObject(0) <=> QScriptValue(0, QScriptValue::NullValue)"); + equals.insert("engine->newQObject(0) <=> QScriptValue(engine, QScriptValue::NullValue)"); + equals.insert("engine->newQObject(0) <=> engine->evaluate(\"null\")"); + equals.insert("engine->newQObject(0) <=> engine->nullValue()"); + equals.insert("engine->newQObject(0) <=> engine->newQObject(0)"); + equals.insert("engine->newQObject(engine) <=> engine->newQObject(engine)"); } QHash<QString, QScriptValue>::const_iterator it; for (it = m_values.constBegin(); it != m_values.constEnd(); ++it) { @@ -2872,6 +4101,19 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(QScriptValue::NullValue) <=> QScriptValue(engine, \"Infinity\")"); equals.insert("QScriptValue(QScriptValue::NullValue) <=> QScriptValue(engine, QString(\"123\"))"); equals.insert("QScriptValue(QScriptValue::NullValue) <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("QScriptValue(QScriptValue::NullValue) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(QScriptValue::NullValue) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(QScriptValue::NullValue) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(QScriptValue::NullValue) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(QScriptValue::NullValue) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(QScriptValue::NullValue) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(QScriptValue::NullValue) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(QScriptValue::NullValue) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(QScriptValue::NullValue) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(QScriptValue::NullValue) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(QScriptValue::NullValue) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(QScriptValue::NullValue) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(QScriptValue::NullValue) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(true) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(true) <=> QScriptValue(uint(124))"); equals.insert("QScriptValue(true) <=> QScriptValue(123.0)"); @@ -2902,6 +4144,17 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(true) <=> QScriptValue(engine, \"Infinity\")"); equals.insert("QScriptValue(true) <=> QScriptValue(engine, QString(\"123\"))"); equals.insert("QScriptValue(true) <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("QScriptValue(true) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(true) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(true) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(true) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(true) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(true) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(true) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(true) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(true) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(true) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(true) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(false) <=> QScriptValue(true)"); equals.insert("QScriptValue(false) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(false) <=> QScriptValue(uint(124))"); @@ -2938,6 +4191,19 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(false) <=> QScriptValue(engine, \"Infinity\")"); equals.insert("QScriptValue(false) <=> QScriptValue(engine, QString(\"123\"))"); equals.insert("QScriptValue(false) <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("QScriptValue(false) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(false) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(false) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(false) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(false) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(false) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(false) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(false) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(false) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(false) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(false) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(false) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(false) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(int(122)) <=> QScriptValue(uint(124))"); equals.insert("QScriptValue(int(122)) <=> QScriptValue(123.0)"); equals.insert("QScriptValue(int(122)) <=> QScriptValue(0x43211234)"); @@ -2962,6 +4228,14 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(int(122)) <=> QScriptValue(engine, qInf())"); equals.insert("QScriptValue(int(122)) <=> QScriptValue(engine, \"Infinity\")"); equals.insert("QScriptValue(int(122)) <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("QScriptValue(int(122)) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(int(122)) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(int(122)) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(int(122)) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(int(122)) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(int(122)) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(int(122)) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(int(122)) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(uint(124)) <=> QScriptValue(0x43211234)"); equals.insert("QScriptValue(uint(124)) <=> QScriptValue(0x10000)"); equals.insert("QScriptValue(uint(124)) <=> QScriptValue(0x10001)"); @@ -2977,6 +4251,10 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(uint(124)) <=> QScriptValue(engine, 0x10001)"); equals.insert("QScriptValue(uint(124)) <=> QScriptValue(engine, qInf())"); equals.insert("QScriptValue(uint(124)) <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("QScriptValue(uint(124)) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(uint(124)) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(uint(124)) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(uint(124)) <=> engine->evaluate(\"Infinity\")"); equals.insert("QScriptValue(0) <=> QScriptValue(true)"); equals.insert("QScriptValue(0) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(0) <=> QScriptValue(uint(124))"); @@ -3013,6 +4291,19 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(0) <=> QScriptValue(engine, \"Infinity\")"); equals.insert("QScriptValue(0) <=> QScriptValue(engine, QString(\"123\"))"); equals.insert("QScriptValue(0) <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("QScriptValue(0) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(0) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(0) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(0) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(0) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(0) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(0) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(0) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(0) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(0) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(0) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(0) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(0) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(0.0) <=> QScriptValue(true)"); equals.insert("QScriptValue(0.0) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(0.0) <=> QScriptValue(uint(124))"); @@ -3049,6 +4340,19 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(0.0) <=> QScriptValue(engine, \"Infinity\")"); equals.insert("QScriptValue(0.0) <=> QScriptValue(engine, QString(\"123\"))"); equals.insert("QScriptValue(0.0) <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("QScriptValue(0.0) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(0.0) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(0.0) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(0.0) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(0.0) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(0.0) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(0.0) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(0.0) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(0.0) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(0.0) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(0.0) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(0.0) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(0.0) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(123.0) <=> QScriptValue(uint(124))"); equals.insert("QScriptValue(123.0) <=> QScriptValue(0x43211234)"); equals.insert("QScriptValue(123.0) <=> QScriptValue(0x10000)"); @@ -3067,6 +4371,11 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(123.0) <=> QScriptValue(engine, 0x10001)"); equals.insert("QScriptValue(123.0) <=> QScriptValue(engine, qInf())"); equals.insert("QScriptValue(123.0) <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("QScriptValue(123.0) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(123.0) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(123.0) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(123.0) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(123.0) <=> engine->evaluate(\"Infinity\")"); equals.insert("QScriptValue(6.37e-8) <=> QScriptValue(true)"); equals.insert("QScriptValue(6.37e-8) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(6.37e-8) <=> QScriptValue(uint(124))"); @@ -3100,6 +4409,18 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(6.37e-8) <=> QScriptValue(engine, \"Infinity\")"); equals.insert("QScriptValue(6.37e-8) <=> QScriptValue(engine, QString(\"123\"))"); equals.insert("QScriptValue(6.37e-8) <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("QScriptValue(6.37e-8) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(6.37e-8) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(6.37e-8) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(6.37e-8) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(6.37e-8) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(6.37e-8) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(6.37e-8) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(6.37e-8) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(6.37e-8) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(6.37e-8) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(6.37e-8) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(6.37e-8) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(-6.37e-8) <=> QScriptValue(QScriptValue::NullValue)"); equals.insert("QScriptValue(-6.37e-8) <=> QScriptValue(true)"); equals.insert("QScriptValue(-6.37e-8) <=> QScriptValue(false)"); @@ -3160,13 +4481,36 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(-6.37e-8) <=> engine->evaluate(\"[]\")"); equals.insert("QScriptValue(-6.37e-8) <=> engine->evaluate(\"Array.prototype\")"); equals.insert("QScriptValue(-6.37e-8) <=> engine->evaluate(\"new Array()\")"); + equals.insert("QScriptValue(-6.37e-8) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(-6.37e-8) <=> engine->evaluate(\"null\")"); + equals.insert("QScriptValue(-6.37e-8) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(-6.37e-8) <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(-6.37e-8) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(-6.37e-8) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(-6.37e-8) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(-6.37e-8) <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(-6.37e-8) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(-6.37e-8) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(-6.37e-8) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(-6.37e-8) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(-6.37e-8) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(-6.37e-8) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(-6.37e-8) <=> engine->evaluate(\"''\")"); + equals.insert("QScriptValue(-6.37e-8) <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(-6.37e-8) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(-6.37e-8) <=> engine->evaluate(\"'12.4'\")"); equals.insert("QScriptValue(-6.37e-8) <=> engine->nullValue()"); + equals.insert("QScriptValue(-6.37e-8) <=> engine->newArray()"); + equals.insert("QScriptValue(-6.37e-8) <=> engine->newVariant(QVariant(123))"); + equals.insert("QScriptValue(-6.37e-8) <=> engine->newVariant(QVariant(false))"); + equals.insert("QScriptValue(-6.37e-8) <=> engine->newQObject(0)"); equals.insert("QScriptValue(0x43211234) <=> QScriptValue(qInf())"); equals.insert("QScriptValue(0x43211234) <=> QScriptValue(\"Infinity\")"); equals.insert("QScriptValue(0x43211234) <=> QScriptValue(0, qInf())"); equals.insert("QScriptValue(0x43211234) <=> QScriptValue(0, \"Infinity\")"); equals.insert("QScriptValue(0x43211234) <=> QScriptValue(engine, qInf())"); equals.insert("QScriptValue(0x43211234) <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("QScriptValue(0x43211234) <=> engine->evaluate(\"Infinity\")"); equals.insert("QScriptValue(0x10000) <=> QScriptValue(0x43211234)"); equals.insert("QScriptValue(0x10000) <=> QScriptValue(0x10001)"); equals.insert("QScriptValue(0x10000) <=> QScriptValue(qInf())"); @@ -3179,6 +4523,9 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(0x10000) <=> QScriptValue(engine, 0x10001)"); equals.insert("QScriptValue(0x10000) <=> QScriptValue(engine, qInf())"); equals.insert("QScriptValue(0x10000) <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("QScriptValue(0x10000) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(0x10000) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(0x10000) <=> engine->evaluate(\"Infinity\")"); equals.insert("QScriptValue(0x10001) <=> QScriptValue(0x43211234)"); equals.insert("QScriptValue(0x10001) <=> QScriptValue(qInf())"); equals.insert("QScriptValue(0x10001) <=> QScriptValue(\"Infinity\")"); @@ -3188,6 +4535,8 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(0x10001) <=> QScriptValue(engine, 0x43211234)"); equals.insert("QScriptValue(0x10001) <=> QScriptValue(engine, qInf())"); equals.insert("QScriptValue(0x10001) <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("QScriptValue(0x10001) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(0x10001) <=> engine->evaluate(\"Infinity\")"); equals.insert("QScriptValue(-qInf()) <=> QScriptValue(QScriptValue::NullValue)"); equals.insert("QScriptValue(-qInf()) <=> QScriptValue(true)"); equals.insert("QScriptValue(-qInf()) <=> QScriptValue(false)"); @@ -3251,7 +4600,30 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(-qInf()) <=> engine->evaluate(\"[]\")"); equals.insert("QScriptValue(-qInf()) <=> engine->evaluate(\"Array.prototype\")"); equals.insert("QScriptValue(-qInf()) <=> engine->evaluate(\"new Array()\")"); + equals.insert("QScriptValue(-qInf()) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(-qInf()) <=> engine->evaluate(\"null\")"); + equals.insert("QScriptValue(-qInf()) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(-qInf()) <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(-qInf()) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(-qInf()) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(-qInf()) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(-qInf()) <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(-qInf()) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(-qInf()) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(-qInf()) <=> engine->evaluate(\"-6.37e-8\")"); + equals.insert("QScriptValue(-qInf()) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(-qInf()) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(-qInf()) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(-qInf()) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(-qInf()) <=> engine->evaluate(\"''\")"); + equals.insert("QScriptValue(-qInf()) <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(-qInf()) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(-qInf()) <=> engine->evaluate(\"'12.4'\")"); equals.insert("QScriptValue(-qInf()) <=> engine->nullValue()"); + equals.insert("QScriptValue(-qInf()) <=> engine->newArray()"); + equals.insert("QScriptValue(-qInf()) <=> engine->newVariant(QVariant(123))"); + equals.insert("QScriptValue(-qInf()) <=> engine->newVariant(QVariant(false))"); + equals.insert("QScriptValue(-qInf()) <=> engine->newQObject(0)"); equals.insert("QScriptValue(\"NaN\") <=> QScriptValue(\"ciao\")"); equals.insert("QScriptValue(\"NaN\") <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); equals.insert("QScriptValue(\"NaN\") <=> QScriptValue(0, \"ciao\")"); @@ -3268,6 +4640,14 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(\"NaN\") <=> engine->evaluate(\"(function() { return 'ciao'; })\")"); equals.insert("QScriptValue(\"NaN\") <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); equals.insert("QScriptValue(\"NaN\") <=> engine->evaluate(\"new Object()\")"); + equals.insert("QScriptValue(\"NaN\") <=> engine->evaluate(\"Undefined\")"); + equals.insert("QScriptValue(\"NaN\") <=> engine->evaluate(\"Null\")"); + equals.insert("QScriptValue(\"NaN\") <=> engine->evaluate(\"True\")"); + equals.insert("QScriptValue(\"NaN\") <=> engine->evaluate(\"False\")"); + equals.insert("QScriptValue(\"NaN\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("QScriptValue(\"NaN\") <=> engine->newObject()"); + equals.insert("QScriptValue(\"NaN\") <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("QScriptValue(\"NaN\") <=> engine->newQObject(engine)"); equals.insert("QScriptValue(\"Infinity\") <=> QScriptValue(\"NaN\")"); equals.insert("QScriptValue(\"Infinity\") <=> QScriptValue(\"ciao\")"); equals.insert("QScriptValue(\"Infinity\") <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); @@ -3287,6 +4667,14 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(\"Infinity\") <=> engine->evaluate(\"(function() { return 'ciao'; })\")"); equals.insert("QScriptValue(\"Infinity\") <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); equals.insert("QScriptValue(\"Infinity\") <=> engine->evaluate(\"new Object()\")"); + equals.insert("QScriptValue(\"Infinity\") <=> engine->evaluate(\"Undefined\")"); + equals.insert("QScriptValue(\"Infinity\") <=> engine->evaluate(\"Null\")"); + equals.insert("QScriptValue(\"Infinity\") <=> engine->evaluate(\"True\")"); + equals.insert("QScriptValue(\"Infinity\") <=> engine->evaluate(\"False\")"); + equals.insert("QScriptValue(\"Infinity\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("QScriptValue(\"Infinity\") <=> engine->newObject()"); + equals.insert("QScriptValue(\"Infinity\") <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("QScriptValue(\"Infinity\") <=> engine->newQObject(engine)"); equals.insert("QScriptValue(\"-Infinity\") <=> QScriptValue(QScriptValue::NullValue)"); equals.insert("QScriptValue(\"-Infinity\") <=> QScriptValue(true)"); equals.insert("QScriptValue(\"-Infinity\") <=> QScriptValue(false)"); @@ -3363,7 +4751,36 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"/foo/\")"); equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"new Object()\")"); equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"new Error()\")"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"Undefined\")"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"Null\")"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"True\")"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"False\")"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"null\")"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"-6.37e-8\")"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->evaluate(\"'12.4'\")"); equals.insert("QScriptValue(\"-Infinity\") <=> engine->nullValue()"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->newObject()"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->newVariant(QVariant(123))"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->newVariant(QVariant(false))"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->newQObject(0)"); + equals.insert("QScriptValue(\"-Infinity\") <=> engine->newQObject(engine)"); equals.insert("QScriptValue(\"ciao\") <=> engine->evaluate(\"Function.prototype\")"); equals.insert("QScriptValue(\"ciao\") <=> engine->evaluate(\"Object\")"); equals.insert("QScriptValue(\"ciao\") <=> engine->evaluate(\"Array\")"); @@ -3444,6 +4861,29 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"/foo/\")"); equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"new Object()\")"); equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"new Error()\")"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"Undefined\")"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"Null\")"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"True\")"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"False\")"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"'ciao'\")"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->newObject()"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->newArray(10)"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->newVariant(QVariant(123))"); + equals.insert("QScriptValue(QString(\"\")) <=> engine->newQObject(engine)"); equals.insert("QScriptValue(QString()) <=> QScriptValue(true)"); equals.insert("QScriptValue(QString()) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(QString()) <=> QScriptValue(uint(124))"); @@ -3508,6 +4948,29 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"/foo/\")"); equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"new Object()\")"); equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"new Error()\")"); + equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"Undefined\")"); + equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"Null\")"); + equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"True\")"); + equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"False\")"); + equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"'ciao'\")"); + equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(QString()) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(QString()) <=> engine->newObject()"); + equals.insert("QScriptValue(QString()) <=> engine->newArray(10)"); + equals.insert("QScriptValue(QString()) <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("QScriptValue(QString()) <=> engine->newVariant(QVariant(123))"); + equals.insert("QScriptValue(QString()) <=> engine->newQObject(engine)"); equals.insert("QScriptValue(QString(\"0\")) <=> QScriptValue(true)"); equals.insert("QScriptValue(QString(\"0\")) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(QString(\"0\")) <=> QScriptValue(uint(124))"); @@ -3565,6 +5028,27 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(QString(\"0\")) <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); equals.insert("QScriptValue(QString(\"0\")) <=> engine->evaluate(\"new Object()\")"); equals.insert("QScriptValue(QString(\"0\")) <=> engine->evaluate(\"new Error()\")"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->evaluate(\"Undefined\")"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->evaluate(\"Null\")"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->evaluate(\"True\")"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->evaluate(\"False\")"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->evaluate(\"'ciao'\")"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->newObject()"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->newVariant(QVariant(123))"); + equals.insert("QScriptValue(QString(\"0\")) <=> engine->newQObject(engine)"); equals.insert("QScriptValue(QString(\"123\")) <=> QScriptValue(uint(124))"); equals.insert("QScriptValue(QString(\"123\")) <=> QScriptValue(0x43211234)"); equals.insert("QScriptValue(QString(\"123\")) <=> QScriptValue(0x10000)"); @@ -3604,6 +5088,19 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(QString(\"123\")) <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); equals.insert("QScriptValue(QString(\"123\")) <=> engine->evaluate(\"new Object()\")"); equals.insert("QScriptValue(QString(\"123\")) <=> engine->evaluate(\"new Error()\")"); + equals.insert("QScriptValue(QString(\"123\")) <=> engine->evaluate(\"Undefined\")"); + equals.insert("QScriptValue(QString(\"123\")) <=> engine->evaluate(\"Null\")"); + equals.insert("QScriptValue(QString(\"123\")) <=> engine->evaluate(\"True\")"); + equals.insert("QScriptValue(QString(\"123\")) <=> engine->evaluate(\"False\")"); + equals.insert("QScriptValue(QString(\"123\")) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(QString(\"123\")) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(QString(\"123\")) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(QString(\"123\")) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(QString(\"123\")) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(QString(\"123\")) <=> engine->evaluate(\"'ciao'\")"); + equals.insert("QScriptValue(QString(\"123\")) <=> engine->newObject()"); + equals.insert("QScriptValue(QString(\"123\")) <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("QScriptValue(QString(\"123\")) <=> engine->newQObject(engine)"); equals.insert("QScriptValue(QString(\"12.4\")) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(QString(\"12.4\")) <=> QScriptValue(uint(124))"); equals.insert("QScriptValue(QString(\"12.4\")) <=> QScriptValue(123.0)"); @@ -3652,6 +5149,24 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(QString(\"12.4\")) <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); equals.insert("QScriptValue(QString(\"12.4\")) <=> engine->evaluate(\"new Object()\")"); equals.insert("QScriptValue(QString(\"12.4\")) <=> engine->evaluate(\"new Error()\")"); + equals.insert("QScriptValue(QString(\"12.4\")) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(QString(\"12.4\")) <=> engine->evaluate(\"Undefined\")"); + equals.insert("QScriptValue(QString(\"12.4\")) <=> engine->evaluate(\"Null\")"); + equals.insert("QScriptValue(QString(\"12.4\")) <=> engine->evaluate(\"True\")"); + equals.insert("QScriptValue(QString(\"12.4\")) <=> engine->evaluate(\"False\")"); + equals.insert("QScriptValue(QString(\"12.4\")) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(QString(\"12.4\")) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(QString(\"12.4\")) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(QString(\"12.4\")) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(QString(\"12.4\")) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(QString(\"12.4\")) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(QString(\"12.4\")) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(QString(\"12.4\")) <=> engine->evaluate(\"'ciao'\")"); + equals.insert("QScriptValue(QString(\"12.4\")) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(QString(\"12.4\")) <=> engine->newObject()"); + equals.insert("QScriptValue(QString(\"12.4\")) <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("QScriptValue(QString(\"12.4\")) <=> engine->newVariant(QVariant(123))"); + equals.insert("QScriptValue(QString(\"12.4\")) <=> engine->newQObject(engine)"); equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> QScriptValue(true)"); equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> QScriptValue(uint(124))"); @@ -3688,6 +5203,19 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> QScriptValue(engine, \"Infinity\")"); equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> QScriptValue(engine, QString(\"123\"))"); equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(0, QScriptValue::NullValue) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(0, true) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(0, true) <=> QScriptValue(uint(124))"); equals.insert("QScriptValue(0, true) <=> QScriptValue(123.0)"); @@ -3718,6 +5246,17 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(0, true) <=> QScriptValue(engine, \"Infinity\")"); equals.insert("QScriptValue(0, true) <=> QScriptValue(engine, QString(\"123\"))"); equals.insert("QScriptValue(0, true) <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("QScriptValue(0, true) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(0, true) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(0, true) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(0, true) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(0, true) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(0, true) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(0, true) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(0, true) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(0, true) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(0, true) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(0, true) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(0, false) <=> QScriptValue(true)"); equals.insert("QScriptValue(0, false) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(0, false) <=> QScriptValue(uint(124))"); @@ -3754,6 +5293,19 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(0, false) <=> QScriptValue(engine, \"Infinity\")"); equals.insert("QScriptValue(0, false) <=> QScriptValue(engine, QString(\"123\"))"); equals.insert("QScriptValue(0, false) <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("QScriptValue(0, false) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(0, false) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(0, false) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(0, false) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(0, false) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(0, false) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(0, false) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(0, false) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(0, false) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(0, false) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(0, false) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(0, false) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(0, false) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(0, int(122)) <=> QScriptValue(uint(124))"); equals.insert("QScriptValue(0, int(122)) <=> QScriptValue(123.0)"); equals.insert("QScriptValue(0, int(122)) <=> QScriptValue(0x43211234)"); @@ -3778,6 +5330,14 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(0, int(122)) <=> QScriptValue(engine, qInf())"); equals.insert("QScriptValue(0, int(122)) <=> QScriptValue(engine, \"Infinity\")"); equals.insert("QScriptValue(0, int(122)) <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("QScriptValue(0, int(122)) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(0, int(122)) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(0, int(122)) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(0, int(122)) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(0, int(122)) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(0, int(122)) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(0, int(122)) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(0, int(122)) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(0, uint(124)) <=> QScriptValue(0x43211234)"); equals.insert("QScriptValue(0, uint(124)) <=> QScriptValue(0x10000)"); equals.insert("QScriptValue(0, uint(124)) <=> QScriptValue(0x10001)"); @@ -3793,6 +5353,10 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(0, uint(124)) <=> QScriptValue(engine, 0x10001)"); equals.insert("QScriptValue(0, uint(124)) <=> QScriptValue(engine, qInf())"); equals.insert("QScriptValue(0, uint(124)) <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("QScriptValue(0, uint(124)) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(0, uint(124)) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(0, uint(124)) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(0, uint(124)) <=> engine->evaluate(\"Infinity\")"); equals.insert("QScriptValue(0, 0) <=> QScriptValue(true)"); equals.insert("QScriptValue(0, 0) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(0, 0) <=> QScriptValue(uint(124))"); @@ -3829,6 +5393,19 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(0, 0) <=> QScriptValue(engine, \"Infinity\")"); equals.insert("QScriptValue(0, 0) <=> QScriptValue(engine, QString(\"123\"))"); equals.insert("QScriptValue(0, 0) <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("QScriptValue(0, 0) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(0, 0) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(0, 0) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(0, 0) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(0, 0) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(0, 0) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(0, 0) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(0, 0) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(0, 0) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(0, 0) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(0, 0) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(0, 0) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(0, 0) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(0, 0.0) <=> QScriptValue(true)"); equals.insert("QScriptValue(0, 0.0) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(0, 0.0) <=> QScriptValue(uint(124))"); @@ -3865,6 +5442,19 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(0, 0.0) <=> QScriptValue(engine, \"Infinity\")"); equals.insert("QScriptValue(0, 0.0) <=> QScriptValue(engine, QString(\"123\"))"); equals.insert("QScriptValue(0, 0.0) <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("QScriptValue(0, 0.0) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(0, 0.0) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(0, 0.0) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(0, 0.0) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(0, 0.0) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(0, 0.0) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(0, 0.0) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(0, 0.0) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(0, 0.0) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(0, 0.0) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(0, 0.0) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(0, 0.0) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(0, 0.0) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(0, 123.0) <=> QScriptValue(uint(124))"); equals.insert("QScriptValue(0, 123.0) <=> QScriptValue(0x43211234)"); equals.insert("QScriptValue(0, 123.0) <=> QScriptValue(0x10000)"); @@ -3883,6 +5473,11 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(0, 123.0) <=> QScriptValue(engine, 0x10001)"); equals.insert("QScriptValue(0, 123.0) <=> QScriptValue(engine, qInf())"); equals.insert("QScriptValue(0, 123.0) <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("QScriptValue(0, 123.0) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(0, 123.0) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(0, 123.0) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(0, 123.0) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(0, 123.0) <=> engine->evaluate(\"Infinity\")"); equals.insert("QScriptValue(0, 6.37e-8) <=> QScriptValue(true)"); equals.insert("QScriptValue(0, 6.37e-8) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(0, 6.37e-8) <=> QScriptValue(uint(124))"); @@ -3916,6 +5511,18 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(0, 6.37e-8) <=> QScriptValue(engine, \"Infinity\")"); equals.insert("QScriptValue(0, 6.37e-8) <=> QScriptValue(engine, QString(\"123\"))"); equals.insert("QScriptValue(0, 6.37e-8) <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("QScriptValue(0, 6.37e-8) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(0, 6.37e-8) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(0, 6.37e-8) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(0, 6.37e-8) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(0, 6.37e-8) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(0, 6.37e-8) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(0, 6.37e-8) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(0, 6.37e-8) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(0, 6.37e-8) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(0, 6.37e-8) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(0, 6.37e-8) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(0, 6.37e-8) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(0, -6.37e-8) <=> QScriptValue(QScriptValue::NullValue)"); equals.insert("QScriptValue(0, -6.37e-8) <=> QScriptValue(true)"); equals.insert("QScriptValue(0, -6.37e-8) <=> QScriptValue(false)"); @@ -3976,13 +5583,36 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(0, -6.37e-8) <=> engine->evaluate(\"[]\")"); equals.insert("QScriptValue(0, -6.37e-8) <=> engine->evaluate(\"Array.prototype\")"); equals.insert("QScriptValue(0, -6.37e-8) <=> engine->evaluate(\"new Array()\")"); + equals.insert("QScriptValue(0, -6.37e-8) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(0, -6.37e-8) <=> engine->evaluate(\"null\")"); + equals.insert("QScriptValue(0, -6.37e-8) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(0, -6.37e-8) <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(0, -6.37e-8) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(0, -6.37e-8) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(0, -6.37e-8) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(0, -6.37e-8) <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(0, -6.37e-8) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(0, -6.37e-8) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(0, -6.37e-8) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(0, -6.37e-8) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(0, -6.37e-8) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(0, -6.37e-8) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(0, -6.37e-8) <=> engine->evaluate(\"''\")"); + equals.insert("QScriptValue(0, -6.37e-8) <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(0, -6.37e-8) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(0, -6.37e-8) <=> engine->evaluate(\"'12.4'\")"); equals.insert("QScriptValue(0, -6.37e-8) <=> engine->nullValue()"); + equals.insert("QScriptValue(0, -6.37e-8) <=> engine->newArray()"); + equals.insert("QScriptValue(0, -6.37e-8) <=> engine->newVariant(QVariant(123))"); + equals.insert("QScriptValue(0, -6.37e-8) <=> engine->newVariant(QVariant(false))"); + equals.insert("QScriptValue(0, -6.37e-8) <=> engine->newQObject(0)"); equals.insert("QScriptValue(0, 0x43211234) <=> QScriptValue(qInf())"); equals.insert("QScriptValue(0, 0x43211234) <=> QScriptValue(\"Infinity\")"); equals.insert("QScriptValue(0, 0x43211234) <=> QScriptValue(0, qInf())"); equals.insert("QScriptValue(0, 0x43211234) <=> QScriptValue(0, \"Infinity\")"); equals.insert("QScriptValue(0, 0x43211234) <=> QScriptValue(engine, qInf())"); equals.insert("QScriptValue(0, 0x43211234) <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("QScriptValue(0, 0x43211234) <=> engine->evaluate(\"Infinity\")"); equals.insert("QScriptValue(0, 0x10000) <=> QScriptValue(0x43211234)"); equals.insert("QScriptValue(0, 0x10000) <=> QScriptValue(0x10001)"); equals.insert("QScriptValue(0, 0x10000) <=> QScriptValue(qInf())"); @@ -3995,6 +5625,9 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(0, 0x10000) <=> QScriptValue(engine, 0x10001)"); equals.insert("QScriptValue(0, 0x10000) <=> QScriptValue(engine, qInf())"); equals.insert("QScriptValue(0, 0x10000) <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("QScriptValue(0, 0x10000) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(0, 0x10000) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(0, 0x10000) <=> engine->evaluate(\"Infinity\")"); equals.insert("QScriptValue(0, 0x10001) <=> QScriptValue(0x43211234)"); equals.insert("QScriptValue(0, 0x10001) <=> QScriptValue(qInf())"); equals.insert("QScriptValue(0, 0x10001) <=> QScriptValue(\"Infinity\")"); @@ -4004,6 +5637,8 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(0, 0x10001) <=> QScriptValue(engine, 0x43211234)"); equals.insert("QScriptValue(0, 0x10001) <=> QScriptValue(engine, qInf())"); equals.insert("QScriptValue(0, 0x10001) <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("QScriptValue(0, 0x10001) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(0, 0x10001) <=> engine->evaluate(\"Infinity\")"); equals.insert("QScriptValue(0, -qInf()) <=> QScriptValue(QScriptValue::NullValue)"); equals.insert("QScriptValue(0, -qInf()) <=> QScriptValue(true)"); equals.insert("QScriptValue(0, -qInf()) <=> QScriptValue(false)"); @@ -4067,7 +5702,30 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(0, -qInf()) <=> engine->evaluate(\"[]\")"); equals.insert("QScriptValue(0, -qInf()) <=> engine->evaluate(\"Array.prototype\")"); equals.insert("QScriptValue(0, -qInf()) <=> engine->evaluate(\"new Array()\")"); + equals.insert("QScriptValue(0, -qInf()) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(0, -qInf()) <=> engine->evaluate(\"null\")"); + equals.insert("QScriptValue(0, -qInf()) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(0, -qInf()) <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(0, -qInf()) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(0, -qInf()) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(0, -qInf()) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(0, -qInf()) <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(0, -qInf()) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(0, -qInf()) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(0, -qInf()) <=> engine->evaluate(\"-6.37e-8\")"); + equals.insert("QScriptValue(0, -qInf()) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(0, -qInf()) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(0, -qInf()) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(0, -qInf()) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(0, -qInf()) <=> engine->evaluate(\"''\")"); + equals.insert("QScriptValue(0, -qInf()) <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(0, -qInf()) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(0, -qInf()) <=> engine->evaluate(\"'12.4'\")"); equals.insert("QScriptValue(0, -qInf()) <=> engine->nullValue()"); + equals.insert("QScriptValue(0, -qInf()) <=> engine->newArray()"); + equals.insert("QScriptValue(0, -qInf()) <=> engine->newVariant(QVariant(123))"); + equals.insert("QScriptValue(0, -qInf()) <=> engine->newVariant(QVariant(false))"); + equals.insert("QScriptValue(0, -qInf()) <=> engine->newQObject(0)"); equals.insert("QScriptValue(0, \"NaN\") <=> QScriptValue(\"ciao\")"); equals.insert("QScriptValue(0, \"NaN\") <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); equals.insert("QScriptValue(0, \"NaN\") <=> QScriptValue(0, \"ciao\")"); @@ -4084,6 +5742,14 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(0, \"NaN\") <=> engine->evaluate(\"(function() { return 'ciao'; })\")"); equals.insert("QScriptValue(0, \"NaN\") <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); equals.insert("QScriptValue(0, \"NaN\") <=> engine->evaluate(\"new Object()\")"); + equals.insert("QScriptValue(0, \"NaN\") <=> engine->evaluate(\"Undefined\")"); + equals.insert("QScriptValue(0, \"NaN\") <=> engine->evaluate(\"Null\")"); + equals.insert("QScriptValue(0, \"NaN\") <=> engine->evaluate(\"True\")"); + equals.insert("QScriptValue(0, \"NaN\") <=> engine->evaluate(\"False\")"); + equals.insert("QScriptValue(0, \"NaN\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("QScriptValue(0, \"NaN\") <=> engine->newObject()"); + equals.insert("QScriptValue(0, \"NaN\") <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("QScriptValue(0, \"NaN\") <=> engine->newQObject(engine)"); equals.insert("QScriptValue(0, \"Infinity\") <=> QScriptValue(\"NaN\")"); equals.insert("QScriptValue(0, \"Infinity\") <=> QScriptValue(\"ciao\")"); equals.insert("QScriptValue(0, \"Infinity\") <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); @@ -4103,6 +5769,14 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(0, \"Infinity\") <=> engine->evaluate(\"(function() { return 'ciao'; })\")"); equals.insert("QScriptValue(0, \"Infinity\") <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); equals.insert("QScriptValue(0, \"Infinity\") <=> engine->evaluate(\"new Object()\")"); + equals.insert("QScriptValue(0, \"Infinity\") <=> engine->evaluate(\"Undefined\")"); + equals.insert("QScriptValue(0, \"Infinity\") <=> engine->evaluate(\"Null\")"); + equals.insert("QScriptValue(0, \"Infinity\") <=> engine->evaluate(\"True\")"); + equals.insert("QScriptValue(0, \"Infinity\") <=> engine->evaluate(\"False\")"); + equals.insert("QScriptValue(0, \"Infinity\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("QScriptValue(0, \"Infinity\") <=> engine->newObject()"); + equals.insert("QScriptValue(0, \"Infinity\") <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("QScriptValue(0, \"Infinity\") <=> engine->newQObject(engine)"); equals.insert("QScriptValue(0, \"-Infinity\") <=> QScriptValue(QScriptValue::NullValue)"); equals.insert("QScriptValue(0, \"-Infinity\") <=> QScriptValue(true)"); equals.insert("QScriptValue(0, \"-Infinity\") <=> QScriptValue(false)"); @@ -4179,7 +5853,36 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"/foo/\")"); equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"new Object()\")"); equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"new Error()\")"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"Undefined\")"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"Null\")"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"True\")"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"False\")"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"null\")"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"-6.37e-8\")"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->evaluate(\"'12.4'\")"); equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->nullValue()"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->newObject()"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->newVariant(QVariant(123))"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->newVariant(QVariant(false))"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->newQObject(0)"); + equals.insert("QScriptValue(0, \"-Infinity\") <=> engine->newQObject(engine)"); equals.insert("QScriptValue(0, \"ciao\") <=> engine->evaluate(\"Function.prototype\")"); equals.insert("QScriptValue(0, \"ciao\") <=> engine->evaluate(\"Object\")"); equals.insert("QScriptValue(0, \"ciao\") <=> engine->evaluate(\"Array\")"); @@ -4260,6 +5963,29 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"/foo/\")"); equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"new Object()\")"); equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"new Error()\")"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"Undefined\")"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"Null\")"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"True\")"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"False\")"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"'ciao'\")"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->newObject()"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->newArray(10)"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->newVariant(QVariant(123))"); + equals.insert("QScriptValue(0, QString(\"\")) <=> engine->newQObject(engine)"); equals.insert("QScriptValue(0, QString()) <=> QScriptValue(true)"); equals.insert("QScriptValue(0, QString()) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(0, QString()) <=> QScriptValue(uint(124))"); @@ -4324,6 +6050,29 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"/foo/\")"); equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"new Object()\")"); equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"new Error()\")"); + equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"Undefined\")"); + equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"Null\")"); + equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"True\")"); + equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"False\")"); + equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"'ciao'\")"); + equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(0, QString()) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(0, QString()) <=> engine->newObject()"); + equals.insert("QScriptValue(0, QString()) <=> engine->newArray(10)"); + equals.insert("QScriptValue(0, QString()) <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("QScriptValue(0, QString()) <=> engine->newVariant(QVariant(123))"); + equals.insert("QScriptValue(0, QString()) <=> engine->newQObject(engine)"); equals.insert("QScriptValue(0, QString(\"0\")) <=> QScriptValue(true)"); equals.insert("QScriptValue(0, QString(\"0\")) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(0, QString(\"0\")) <=> QScriptValue(uint(124))"); @@ -4381,6 +6130,27 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->evaluate(\"new Object()\")"); equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->evaluate(\"new Error()\")"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->evaluate(\"Undefined\")"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->evaluate(\"Null\")"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->evaluate(\"True\")"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->evaluate(\"False\")"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->evaluate(\"'ciao'\")"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->newObject()"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->newVariant(QVariant(123))"); + equals.insert("QScriptValue(0, QString(\"0\")) <=> engine->newQObject(engine)"); equals.insert("QScriptValue(0, QString(\"123\")) <=> QScriptValue(uint(124))"); equals.insert("QScriptValue(0, QString(\"123\")) <=> QScriptValue(0x43211234)"); equals.insert("QScriptValue(0, QString(\"123\")) <=> QScriptValue(0x10000)"); @@ -4420,6 +6190,19 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(0, QString(\"123\")) <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); equals.insert("QScriptValue(0, QString(\"123\")) <=> engine->evaluate(\"new Object()\")"); equals.insert("QScriptValue(0, QString(\"123\")) <=> engine->evaluate(\"new Error()\")"); + equals.insert("QScriptValue(0, QString(\"123\")) <=> engine->evaluate(\"Undefined\")"); + equals.insert("QScriptValue(0, QString(\"123\")) <=> engine->evaluate(\"Null\")"); + equals.insert("QScriptValue(0, QString(\"123\")) <=> engine->evaluate(\"True\")"); + equals.insert("QScriptValue(0, QString(\"123\")) <=> engine->evaluate(\"False\")"); + equals.insert("QScriptValue(0, QString(\"123\")) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(0, QString(\"123\")) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(0, QString(\"123\")) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(0, QString(\"123\")) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(0, QString(\"123\")) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(0, QString(\"123\")) <=> engine->evaluate(\"'ciao'\")"); + equals.insert("QScriptValue(0, QString(\"123\")) <=> engine->newObject()"); + equals.insert("QScriptValue(0, QString(\"123\")) <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("QScriptValue(0, QString(\"123\")) <=> engine->newQObject(engine)"); equals.insert("QScriptValue(0, QString(\"12.3\")) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(0, QString(\"12.3\")) <=> QScriptValue(uint(124))"); equals.insert("QScriptValue(0, QString(\"12.3\")) <=> QScriptValue(123.0)"); @@ -4469,6 +6252,25 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(0, QString(\"12.3\")) <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); equals.insert("QScriptValue(0, QString(\"12.3\")) <=> engine->evaluate(\"new Object()\")"); equals.insert("QScriptValue(0, QString(\"12.3\")) <=> engine->evaluate(\"new Error()\")"); + equals.insert("QScriptValue(0, QString(\"12.3\")) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(0, QString(\"12.3\")) <=> engine->evaluate(\"Undefined\")"); + equals.insert("QScriptValue(0, QString(\"12.3\")) <=> engine->evaluate(\"Null\")"); + equals.insert("QScriptValue(0, QString(\"12.3\")) <=> engine->evaluate(\"True\")"); + equals.insert("QScriptValue(0, QString(\"12.3\")) <=> engine->evaluate(\"False\")"); + equals.insert("QScriptValue(0, QString(\"12.3\")) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(0, QString(\"12.3\")) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(0, QString(\"12.3\")) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(0, QString(\"12.3\")) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(0, QString(\"12.3\")) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(0, QString(\"12.3\")) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(0, QString(\"12.3\")) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(0, QString(\"12.3\")) <=> engine->evaluate(\"'ciao'\")"); + equals.insert("QScriptValue(0, QString(\"12.3\")) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(0, QString(\"12.3\")) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(0, QString(\"12.3\")) <=> engine->newObject()"); + equals.insert("QScriptValue(0, QString(\"12.3\")) <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("QScriptValue(0, QString(\"12.3\")) <=> engine->newVariant(QVariant(123))"); + equals.insert("QScriptValue(0, QString(\"12.3\")) <=> engine->newQObject(engine)"); equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> QScriptValue(true)"); equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> QScriptValue(uint(124))"); @@ -4505,6 +6307,19 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> QScriptValue(engine, \"Infinity\")"); equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> QScriptValue(engine, QString(\"123\"))"); equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(engine, QScriptValue::NullValue) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(engine, true) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(engine, true) <=> QScriptValue(uint(124))"); equals.insert("QScriptValue(engine, true) <=> QScriptValue(123.0)"); @@ -4535,6 +6350,17 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(engine, true) <=> QScriptValue(engine, \"Infinity\")"); equals.insert("QScriptValue(engine, true) <=> QScriptValue(engine, QString(\"123\"))"); equals.insert("QScriptValue(engine, true) <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("QScriptValue(engine, true) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(engine, true) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(engine, true) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(engine, true) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(engine, true) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(engine, true) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(engine, true) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(engine, true) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(engine, true) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(engine, true) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(engine, true) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(engine, false) <=> QScriptValue(true)"); equals.insert("QScriptValue(engine, false) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(engine, false) <=> QScriptValue(uint(124))"); @@ -4571,6 +6397,19 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(engine, false) <=> QScriptValue(engine, \"Infinity\")"); equals.insert("QScriptValue(engine, false) <=> QScriptValue(engine, QString(\"123\"))"); equals.insert("QScriptValue(engine, false) <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("QScriptValue(engine, false) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(engine, false) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(engine, false) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(engine, false) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(engine, false) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(engine, false) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(engine, false) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(engine, false) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(engine, false) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(engine, false) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(engine, false) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(engine, false) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(engine, false) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(engine, int(122)) <=> QScriptValue(uint(124))"); equals.insert("QScriptValue(engine, int(122)) <=> QScriptValue(123.0)"); equals.insert("QScriptValue(engine, int(122)) <=> QScriptValue(0x43211234)"); @@ -4595,6 +6434,14 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(engine, int(122)) <=> QScriptValue(engine, qInf())"); equals.insert("QScriptValue(engine, int(122)) <=> QScriptValue(engine, \"Infinity\")"); equals.insert("QScriptValue(engine, int(122)) <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("QScriptValue(engine, int(122)) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(engine, int(122)) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(engine, int(122)) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(engine, int(122)) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(engine, int(122)) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(engine, int(122)) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(engine, int(122)) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(engine, int(122)) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(engine, uint(124)) <=> QScriptValue(0x43211234)"); equals.insert("QScriptValue(engine, uint(124)) <=> QScriptValue(0x10000)"); equals.insert("QScriptValue(engine, uint(124)) <=> QScriptValue(0x10001)"); @@ -4610,6 +6457,10 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(engine, uint(124)) <=> QScriptValue(engine, 0x10001)"); equals.insert("QScriptValue(engine, uint(124)) <=> QScriptValue(engine, qInf())"); equals.insert("QScriptValue(engine, uint(124)) <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("QScriptValue(engine, uint(124)) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(engine, uint(124)) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(engine, uint(124)) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(engine, uint(124)) <=> engine->evaluate(\"Infinity\")"); equals.insert("QScriptValue(engine, 0) <=> QScriptValue(true)"); equals.insert("QScriptValue(engine, 0) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(engine, 0) <=> QScriptValue(uint(124))"); @@ -4646,6 +6497,19 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(engine, 0) <=> QScriptValue(engine, \"Infinity\")"); equals.insert("QScriptValue(engine, 0) <=> QScriptValue(engine, QString(\"123\"))"); equals.insert("QScriptValue(engine, 0) <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("QScriptValue(engine, 0) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(engine, 0) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(engine, 0) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(engine, 0) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(engine, 0) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(engine, 0) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(engine, 0) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(engine, 0) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(engine, 0) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(engine, 0) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(engine, 0) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(engine, 0) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(engine, 0) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(engine, 0.0) <=> QScriptValue(true)"); equals.insert("QScriptValue(engine, 0.0) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(engine, 0.0) <=> QScriptValue(uint(124))"); @@ -4682,6 +6546,19 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(engine, 0.0) <=> QScriptValue(engine, \"Infinity\")"); equals.insert("QScriptValue(engine, 0.0) <=> QScriptValue(engine, QString(\"123\"))"); equals.insert("QScriptValue(engine, 0.0) <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("QScriptValue(engine, 0.0) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(engine, 0.0) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(engine, 0.0) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(engine, 0.0) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(engine, 0.0) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(engine, 0.0) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(engine, 0.0) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(engine, 0.0) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(engine, 0.0) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(engine, 0.0) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(engine, 0.0) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(engine, 0.0) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(engine, 0.0) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(engine, 123.0) <=> QScriptValue(uint(124))"); equals.insert("QScriptValue(engine, 123.0) <=> QScriptValue(0x43211234)"); equals.insert("QScriptValue(engine, 123.0) <=> QScriptValue(0x10000)"); @@ -4700,6 +6577,11 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(engine, 123.0) <=> QScriptValue(engine, 0x10001)"); equals.insert("QScriptValue(engine, 123.0) <=> QScriptValue(engine, qInf())"); equals.insert("QScriptValue(engine, 123.0) <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("QScriptValue(engine, 123.0) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(engine, 123.0) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(engine, 123.0) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(engine, 123.0) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(engine, 123.0) <=> engine->evaluate(\"Infinity\")"); equals.insert("QScriptValue(engine, 6.37e-8) <=> QScriptValue(true)"); equals.insert("QScriptValue(engine, 6.37e-8) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(engine, 6.37e-8) <=> QScriptValue(uint(124))"); @@ -4733,6 +6615,18 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(engine, 6.37e-8) <=> QScriptValue(engine, \"Infinity\")"); equals.insert("QScriptValue(engine, 6.37e-8) <=> QScriptValue(engine, QString(\"123\"))"); equals.insert("QScriptValue(engine, 6.37e-8) <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("QScriptValue(engine, 6.37e-8) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(engine, 6.37e-8) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(engine, 6.37e-8) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(engine, 6.37e-8) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(engine, 6.37e-8) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(engine, 6.37e-8) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(engine, 6.37e-8) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(engine, 6.37e-8) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(engine, 6.37e-8) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(engine, 6.37e-8) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(engine, 6.37e-8) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(engine, 6.37e-8) <=> engine->newVariant(QVariant(123))"); equals.insert("QScriptValue(engine, -6.37e-8) <=> QScriptValue(QScriptValue::NullValue)"); equals.insert("QScriptValue(engine, -6.37e-8) <=> QScriptValue(true)"); equals.insert("QScriptValue(engine, -6.37e-8) <=> QScriptValue(false)"); @@ -4793,13 +6687,36 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->evaluate(\"[]\")"); equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->evaluate(\"Array.prototype\")"); equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->evaluate(\"new Array()\")"); + equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->evaluate(\"null\")"); + equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->evaluate(\"''\")"); + equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->evaluate(\"'12.4'\")"); equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->nullValue()"); + equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->newArray()"); + equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->newVariant(QVariant(123))"); + equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->newVariant(QVariant(false))"); + equals.insert("QScriptValue(engine, -6.37e-8) <=> engine->newQObject(0)"); equals.insert("QScriptValue(engine, 0x43211234) <=> QScriptValue(qInf())"); equals.insert("QScriptValue(engine, 0x43211234) <=> QScriptValue(\"Infinity\")"); equals.insert("QScriptValue(engine, 0x43211234) <=> QScriptValue(0, qInf())"); equals.insert("QScriptValue(engine, 0x43211234) <=> QScriptValue(0, \"Infinity\")"); equals.insert("QScriptValue(engine, 0x43211234) <=> QScriptValue(engine, qInf())"); equals.insert("QScriptValue(engine, 0x43211234) <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("QScriptValue(engine, 0x43211234) <=> engine->evaluate(\"Infinity\")"); equals.insert("QScriptValue(engine, 0x10000) <=> QScriptValue(0x43211234)"); equals.insert("QScriptValue(engine, 0x10000) <=> QScriptValue(0x10001)"); equals.insert("QScriptValue(engine, 0x10000) <=> QScriptValue(qInf())"); @@ -4812,6 +6729,9 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(engine, 0x10000) <=> QScriptValue(engine, 0x10001)"); equals.insert("QScriptValue(engine, 0x10000) <=> QScriptValue(engine, qInf())"); equals.insert("QScriptValue(engine, 0x10000) <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("QScriptValue(engine, 0x10000) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(engine, 0x10000) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(engine, 0x10000) <=> engine->evaluate(\"Infinity\")"); equals.insert("QScriptValue(engine, 0x10001) <=> QScriptValue(0x43211234)"); equals.insert("QScriptValue(engine, 0x10001) <=> QScriptValue(qInf())"); equals.insert("QScriptValue(engine, 0x10001) <=> QScriptValue(\"Infinity\")"); @@ -4821,6 +6741,8 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(engine, 0x10001) <=> QScriptValue(engine, 0x43211234)"); equals.insert("QScriptValue(engine, 0x10001) <=> QScriptValue(engine, qInf())"); equals.insert("QScriptValue(engine, 0x10001) <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("QScriptValue(engine, 0x10001) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(engine, 0x10001) <=> engine->evaluate(\"Infinity\")"); equals.insert("QScriptValue(engine, -qInf()) <=> QScriptValue(QScriptValue::NullValue)"); equals.insert("QScriptValue(engine, -qInf()) <=> QScriptValue(true)"); equals.insert("QScriptValue(engine, -qInf()) <=> QScriptValue(false)"); @@ -4884,7 +6806,30 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(engine, -qInf()) <=> engine->evaluate(\"[]\")"); equals.insert("QScriptValue(engine, -qInf()) <=> engine->evaluate(\"Array.prototype\")"); equals.insert("QScriptValue(engine, -qInf()) <=> engine->evaluate(\"new Array()\")"); + equals.insert("QScriptValue(engine, -qInf()) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(engine, -qInf()) <=> engine->evaluate(\"null\")"); + equals.insert("QScriptValue(engine, -qInf()) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(engine, -qInf()) <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(engine, -qInf()) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(engine, -qInf()) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(engine, -qInf()) <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(engine, -qInf()) <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(engine, -qInf()) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(engine, -qInf()) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(engine, -qInf()) <=> engine->evaluate(\"-6.37e-8\")"); + equals.insert("QScriptValue(engine, -qInf()) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(engine, -qInf()) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(engine, -qInf()) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(engine, -qInf()) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(engine, -qInf()) <=> engine->evaluate(\"''\")"); + equals.insert("QScriptValue(engine, -qInf()) <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(engine, -qInf()) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(engine, -qInf()) <=> engine->evaluate(\"'12.4'\")"); equals.insert("QScriptValue(engine, -qInf()) <=> engine->nullValue()"); + equals.insert("QScriptValue(engine, -qInf()) <=> engine->newArray()"); + equals.insert("QScriptValue(engine, -qInf()) <=> engine->newVariant(QVariant(123))"); + equals.insert("QScriptValue(engine, -qInf()) <=> engine->newVariant(QVariant(false))"); + equals.insert("QScriptValue(engine, -qInf()) <=> engine->newQObject(0)"); equals.insert("QScriptValue(engine, \"NaN\") <=> QScriptValue(\"ciao\")"); equals.insert("QScriptValue(engine, \"NaN\") <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); equals.insert("QScriptValue(engine, \"NaN\") <=> QScriptValue(0, \"ciao\")"); @@ -4901,6 +6846,14 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(engine, \"NaN\") <=> engine->evaluate(\"(function() { return 'ciao'; })\")"); equals.insert("QScriptValue(engine, \"NaN\") <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); equals.insert("QScriptValue(engine, \"NaN\") <=> engine->evaluate(\"new Object()\")"); + equals.insert("QScriptValue(engine, \"NaN\") <=> engine->evaluate(\"Undefined\")"); + equals.insert("QScriptValue(engine, \"NaN\") <=> engine->evaluate(\"Null\")"); + equals.insert("QScriptValue(engine, \"NaN\") <=> engine->evaluate(\"True\")"); + equals.insert("QScriptValue(engine, \"NaN\") <=> engine->evaluate(\"False\")"); + equals.insert("QScriptValue(engine, \"NaN\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("QScriptValue(engine, \"NaN\") <=> engine->newObject()"); + equals.insert("QScriptValue(engine, \"NaN\") <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("QScriptValue(engine, \"NaN\") <=> engine->newQObject(engine)"); equals.insert("QScriptValue(engine, \"Infinity\") <=> QScriptValue(\"NaN\")"); equals.insert("QScriptValue(engine, \"Infinity\") <=> QScriptValue(\"ciao\")"); equals.insert("QScriptValue(engine, \"Infinity\") <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); @@ -4920,6 +6873,14 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(engine, \"Infinity\") <=> engine->evaluate(\"(function() { return 'ciao'; })\")"); equals.insert("QScriptValue(engine, \"Infinity\") <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); equals.insert("QScriptValue(engine, \"Infinity\") <=> engine->evaluate(\"new Object()\")"); + equals.insert("QScriptValue(engine, \"Infinity\") <=> engine->evaluate(\"Undefined\")"); + equals.insert("QScriptValue(engine, \"Infinity\") <=> engine->evaluate(\"Null\")"); + equals.insert("QScriptValue(engine, \"Infinity\") <=> engine->evaluate(\"True\")"); + equals.insert("QScriptValue(engine, \"Infinity\") <=> engine->evaluate(\"False\")"); + equals.insert("QScriptValue(engine, \"Infinity\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("QScriptValue(engine, \"Infinity\") <=> engine->newObject()"); + equals.insert("QScriptValue(engine, \"Infinity\") <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("QScriptValue(engine, \"Infinity\") <=> engine->newQObject(engine)"); equals.insert("QScriptValue(engine, \"-Infinity\") <=> QScriptValue(QScriptValue::NullValue)"); equals.insert("QScriptValue(engine, \"-Infinity\") <=> QScriptValue(true)"); equals.insert("QScriptValue(engine, \"-Infinity\") <=> QScriptValue(false)"); @@ -4996,7 +6957,36 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"/foo/\")"); equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"new Object()\")"); equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"new Error()\")"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"Undefined\")"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"Null\")"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"True\")"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"False\")"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"null\")"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"false\")"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"0\")"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"0.0\")"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"-6.37e-8\")"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->evaluate(\"'12.4'\")"); equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->nullValue()"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->newObject()"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->newVariant(QVariant(123))"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->newVariant(QVariant(false))"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->newQObject(0)"); + equals.insert("QScriptValue(engine, \"-Infinity\") <=> engine->newQObject(engine)"); equals.insert("QScriptValue(engine, \"ciao\") <=> engine->evaluate(\"Function.prototype\")"); equals.insert("QScriptValue(engine, \"ciao\") <=> engine->evaluate(\"Object\")"); equals.insert("QScriptValue(engine, \"ciao\") <=> engine->evaluate(\"Array\")"); @@ -5077,6 +7067,29 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"/foo/\")"); equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"new Object()\")"); equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"new Error()\")"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"Undefined\")"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"Null\")"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"True\")"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"False\")"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"'ciao'\")"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->newObject()"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->newArray(10)"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->newVariant(QVariant(123))"); + equals.insert("QScriptValue(engine, QString(\"\")) <=> engine->newQObject(engine)"); equals.insert("QScriptValue(engine, QString()) <=> QScriptValue(true)"); equals.insert("QScriptValue(engine, QString()) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(engine, QString()) <=> QScriptValue(uint(124))"); @@ -5141,6 +7154,29 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"/foo/\")"); equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"new Object()\")"); equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"new Error()\")"); + equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"Undefined\")"); + equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"Null\")"); + equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"True\")"); + equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"False\")"); + equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"'ciao'\")"); + equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"'0'\")"); + equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(engine, QString()) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(engine, QString()) <=> engine->newObject()"); + equals.insert("QScriptValue(engine, QString()) <=> engine->newArray(10)"); + equals.insert("QScriptValue(engine, QString()) <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("QScriptValue(engine, QString()) <=> engine->newVariant(QVariant(123))"); + equals.insert("QScriptValue(engine, QString()) <=> engine->newQObject(engine)"); equals.insert("QScriptValue(engine, QString(\"0\")) <=> QScriptValue(true)"); equals.insert("QScriptValue(engine, QString(\"0\")) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(engine, QString(\"0\")) <=> QScriptValue(uint(124))"); @@ -5198,6 +7234,27 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->evaluate(\"new Object()\")"); equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->evaluate(\"new Error()\")"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->evaluate(\"Undefined\")"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->evaluate(\"Null\")"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->evaluate(\"True\")"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->evaluate(\"False\")"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->evaluate(\"true\")"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->evaluate(\"'ciao'\")"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->newObject()"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->newVariant(QVariant(123))"); + equals.insert("QScriptValue(engine, QString(\"0\")) <=> engine->newQObject(engine)"); equals.insert("QScriptValue(engine, QString(\"123\")) <=> QScriptValue(uint(124))"); equals.insert("QScriptValue(engine, QString(\"123\")) <=> QScriptValue(0x43211234)"); equals.insert("QScriptValue(engine, QString(\"123\")) <=> QScriptValue(0x10000)"); @@ -5237,6 +7294,19 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(engine, QString(\"123\")) <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); equals.insert("QScriptValue(engine, QString(\"123\")) <=> engine->evaluate(\"new Object()\")"); equals.insert("QScriptValue(engine, QString(\"123\")) <=> engine->evaluate(\"new Error()\")"); + equals.insert("QScriptValue(engine, QString(\"123\")) <=> engine->evaluate(\"Undefined\")"); + equals.insert("QScriptValue(engine, QString(\"123\")) <=> engine->evaluate(\"Null\")"); + equals.insert("QScriptValue(engine, QString(\"123\")) <=> engine->evaluate(\"True\")"); + equals.insert("QScriptValue(engine, QString(\"123\")) <=> engine->evaluate(\"False\")"); + equals.insert("QScriptValue(engine, QString(\"123\")) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(engine, QString(\"123\")) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(engine, QString(\"123\")) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(engine, QString(\"123\")) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(engine, QString(\"123\")) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(engine, QString(\"123\")) <=> engine->evaluate(\"'ciao'\")"); + equals.insert("QScriptValue(engine, QString(\"123\")) <=> engine->newObject()"); + equals.insert("QScriptValue(engine, QString(\"123\")) <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("QScriptValue(engine, QString(\"123\")) <=> engine->newQObject(engine)"); equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> QScriptValue(int(122))"); equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> QScriptValue(uint(124))"); equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> QScriptValue(123.0)"); @@ -5287,6 +7357,25 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> engine->evaluate(\"new Object()\")"); equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> engine->evaluate(\"new Error()\")"); + equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> engine->evaluate(\"Undefined\")"); + equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> engine->evaluate(\"Null\")"); + equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> engine->evaluate(\"True\")"); + equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> engine->evaluate(\"False\")"); + equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> engine->evaluate(\"122\")"); + equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> engine->evaluate(\"124\")"); + equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> engine->evaluate(\"123.0\")"); + equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> engine->evaluate(\"0x10000\")"); + equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> engine->evaluate(\"0x10001\")"); + equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> engine->evaluate(\"Infinity\")"); + equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> engine->evaluate(\"'ciao'\")"); + equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> engine->evaluate(\"'123'\")"); + equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> engine->newObject()"); + equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> engine->newVariant(QVariant(123))"); + equals.insert("QScriptValue(engine, QString(\"1.23\")) <=> engine->newQObject(engine)"); equals.insert("engine->evaluate(\"[]\") <=> QScriptValue(true)"); equals.insert("engine->evaluate(\"[]\") <=> QScriptValue(int(122))"); equals.insert("engine->evaluate(\"[]\") <=> QScriptValue(uint(124))"); @@ -5351,6 +7440,29 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"/foo/\")"); equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"new Object()\")"); equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"new Error()\")"); + equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"Undefined\")"); + equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"Null\")"); + equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"True\")"); + equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"False\")"); + equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"true\")"); + equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"122\")"); + equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"124\")"); + equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"123.0\")"); + equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"'0'\")"); + equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->evaluate(\"[]\") <=> engine->evaluate(\"'12.4'\")"); + equals.insert("engine->evaluate(\"[]\") <=> engine->newObject()"); + equals.insert("engine->evaluate(\"[]\") <=> engine->newArray(10)"); + equals.insert("engine->evaluate(\"[]\") <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("engine->evaluate(\"[]\") <=> engine->newVariant(QVariant(123))"); + equals.insert("engine->evaluate(\"[]\") <=> engine->newQObject(engine)"); equals.insert("engine->evaluate(\"Object.prototype\") <=> QScriptValue(\"ciao\")"); equals.insert("engine->evaluate(\"Object.prototype\") <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); equals.insert("engine->evaluate(\"Object.prototype\") <=> QScriptValue(0, \"ciao\")"); @@ -5365,6 +7477,8 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("engine->evaluate(\"Object.prototype\") <=> engine->evaluate(\"(function() { return 1; })\")"); equals.insert("engine->evaluate(\"Object.prototype\") <=> engine->evaluate(\"(function() { return 'ciao'; })\")"); equals.insert("engine->evaluate(\"Object.prototype\") <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); + equals.insert("engine->evaluate(\"Object.prototype\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("engine->evaluate(\"Object.prototype\") <=> engine->newQMetaObject(&QObject::staticMetaObject)"); equals.insert("engine->evaluate(\"Array.prototype\") <=> QScriptValue(true)"); equals.insert("engine->evaluate(\"Array.prototype\") <=> QScriptValue(int(122))"); equals.insert("engine->evaluate(\"Array.prototype\") <=> QScriptValue(uint(124))"); @@ -5429,6 +7543,29 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"/foo/\")"); equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"new Object()\")"); equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"new Error()\")"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"Undefined\")"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"Null\")"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"True\")"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"False\")"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"true\")"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"122\")"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"124\")"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"123.0\")"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"'0'\")"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->evaluate(\"'12.4'\")"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->newObject()"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->newArray(10)"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->newVariant(QVariant(123))"); + equals.insert("engine->evaluate(\"Array.prototype\") <=> engine->newQObject(engine)"); equals.insert("engine->evaluate(\"Function.prototype\") <=> engine->evaluate(\"Object\")"); equals.insert("engine->evaluate(\"Function.prototype\") <=> engine->evaluate(\"Array\")"); equals.insert("engine->evaluate(\"Function.prototype\") <=> engine->evaluate(\"Number\")"); @@ -5458,6 +7595,14 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("engine->evaluate(\"Error.prototype\") <=> engine->evaluate(\"(function() { return 'ciao'; })\")"); equals.insert("engine->evaluate(\"Error.prototype\") <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); equals.insert("engine->evaluate(\"Error.prototype\") <=> engine->evaluate(\"new Object()\")"); + equals.insert("engine->evaluate(\"Error.prototype\") <=> engine->evaluate(\"Undefined\")"); + equals.insert("engine->evaluate(\"Error.prototype\") <=> engine->evaluate(\"Null\")"); + equals.insert("engine->evaluate(\"Error.prototype\") <=> engine->evaluate(\"True\")"); + equals.insert("engine->evaluate(\"Error.prototype\") <=> engine->evaluate(\"False\")"); + equals.insert("engine->evaluate(\"Error.prototype\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("engine->evaluate(\"Error.prototype\") <=> engine->newObject()"); + equals.insert("engine->evaluate(\"Error.prototype\") <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("engine->evaluate(\"Error.prototype\") <=> engine->newQObject(engine)"); equals.insert("engine->evaluate(\"Array\") <=> engine->evaluate(\"Object\")"); equals.insert("engine->evaluate(\"Array\") <=> engine->evaluate(\"Number\")"); equals.insert("engine->evaluate(\"Array\") <=> engine->evaluate(\"Function\")"); @@ -5512,6 +7657,17 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("engine->evaluate(\"/foo/\") <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); equals.insert("engine->evaluate(\"/foo/\") <=> engine->evaluate(\"new Object()\")"); equals.insert("engine->evaluate(\"/foo/\") <=> engine->evaluate(\"new Error()\")"); + equals.insert("engine->evaluate(\"/foo/\") <=> engine->evaluate(\"Undefined\")"); + equals.insert("engine->evaluate(\"/foo/\") <=> engine->evaluate(\"Null\")"); + equals.insert("engine->evaluate(\"/foo/\") <=> engine->evaluate(\"True\")"); + equals.insert("engine->evaluate(\"/foo/\") <=> engine->evaluate(\"False\")"); + equals.insert("engine->evaluate(\"/foo/\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("engine->evaluate(\"/foo/\") <=> engine->evaluate(\"'0'\")"); + equals.insert("engine->evaluate(\"/foo/\") <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->evaluate(\"/foo/\") <=> engine->evaluate(\"'12.4'\")"); + equals.insert("engine->evaluate(\"/foo/\") <=> engine->newObject()"); + equals.insert("engine->evaluate(\"/foo/\") <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("engine->evaluate(\"/foo/\") <=> engine->newQObject(engine)"); equals.insert("engine->evaluate(\"new Object()\") <=> QScriptValue(\"ciao\")"); equals.insert("engine->evaluate(\"new Object()\") <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); equals.insert("engine->evaluate(\"new Object()\") <=> QScriptValue(0, \"ciao\")"); @@ -5526,6 +7682,8 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("engine->evaluate(\"new Object()\") <=> engine->evaluate(\"(function() { return 1; })\")"); equals.insert("engine->evaluate(\"new Object()\") <=> engine->evaluate(\"(function() { return 'ciao'; })\")"); equals.insert("engine->evaluate(\"new Object()\") <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); + equals.insert("engine->evaluate(\"new Object()\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("engine->evaluate(\"new Object()\") <=> engine->newQMetaObject(&QObject::staticMetaObject)"); equals.insert("engine->evaluate(\"new Array()\") <=> QScriptValue(true)"); equals.insert("engine->evaluate(\"new Array()\") <=> QScriptValue(int(122))"); equals.insert("engine->evaluate(\"new Array()\") <=> QScriptValue(uint(124))"); @@ -5590,6 +7748,29 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"/foo/\")"); equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"new Object()\")"); equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"new Error()\")"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"Undefined\")"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"Null\")"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"True\")"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"False\")"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"true\")"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"122\")"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"124\")"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"123.0\")"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"'0'\")"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"'12.4'\")"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->newObject()"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->newArray(10)"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->newVariant(QVariant(123))"); + equals.insert("engine->evaluate(\"new Array()\") <=> engine->newQObject(engine)"); equals.insert("engine->evaluate(\"new Error()\") <=> QScriptValue(\"NaN\")"); equals.insert("engine->evaluate(\"new Error()\") <=> QScriptValue(\"Infinity\")"); equals.insert("engine->evaluate(\"new Error()\") <=> QScriptValue(\"ciao\")"); @@ -5612,6 +7793,982 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("engine->evaluate(\"new Error()\") <=> engine->evaluate(\"(function() { return 'ciao'; })\")"); equals.insert("engine->evaluate(\"new Error()\") <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); equals.insert("engine->evaluate(\"new Error()\") <=> engine->evaluate(\"new Object()\")"); + equals.insert("engine->evaluate(\"new Error()\") <=> engine->evaluate(\"Undefined\")"); + equals.insert("engine->evaluate(\"new Error()\") <=> engine->evaluate(\"Null\")"); + equals.insert("engine->evaluate(\"new Error()\") <=> engine->evaluate(\"True\")"); + equals.insert("engine->evaluate(\"new Error()\") <=> engine->evaluate(\"False\")"); + equals.insert("engine->evaluate(\"new Error()\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("engine->evaluate(\"new Error()\") <=> engine->newObject()"); + equals.insert("engine->evaluate(\"new Error()\") <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("engine->evaluate(\"new Error()\") <=> engine->newQObject(engine)"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(int(122))"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(uint(124))"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(123.0)"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(0x43211234)"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(0x10000)"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(0x10001)"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(qInf())"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(\"Infinity\")"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(QString(\"123\"))"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(0, int(122))"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(0, uint(124))"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(0, 123.0)"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(0, 0x43211234)"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(0, 0x10000)"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(0, 0x10001)"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(0, qInf())"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(0, \"Infinity\")"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(0, QString(\"123\"))"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(engine, int(122))"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(engine, uint(124))"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(engine, 123.0)"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(engine, 0x43211234)"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(engine, 0x10000)"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(engine, 0x10001)"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(engine, qInf())"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> engine->evaluate(\"122\")"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> engine->evaluate(\"124\")"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> engine->evaluate(\"123.0\")"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\") <=> engine->newVariant(QVariant(123))"); + equals.insert("engine->evaluate(\"Undefined\") <=> QScriptValue(\"ciao\")"); + equals.insert("engine->evaluate(\"Undefined\") <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"Undefined\") <=> QScriptValue(0, \"ciao\")"); + equals.insert("engine->evaluate(\"Undefined\") <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"Undefined\") <=> QScriptValue(engine, \"ciao\")"); + equals.insert("engine->evaluate(\"Undefined\") <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"Undefined\") <=> engine->evaluate(\"Object.prototype\")"); + equals.insert("engine->evaluate(\"Undefined\") <=> engine->evaluate(\"Function.prototype\")"); + equals.insert("engine->evaluate(\"Undefined\") <=> engine->evaluate(\"Object\")"); + equals.insert("engine->evaluate(\"Undefined\") <=> engine->evaluate(\"Array\")"); + equals.insert("engine->evaluate(\"Undefined\") <=> engine->evaluate(\"Number\")"); + equals.insert("engine->evaluate(\"Undefined\") <=> engine->evaluate(\"Function\")"); + equals.insert("engine->evaluate(\"Undefined\") <=> engine->evaluate(\"(function() { return 1; })\")"); + equals.insert("engine->evaluate(\"Undefined\") <=> engine->evaluate(\"(function() { return 'ciao'; })\")"); + equals.insert("engine->evaluate(\"Undefined\") <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); + equals.insert("engine->evaluate(\"Undefined\") <=> engine->evaluate(\"new Object()\")"); + equals.insert("engine->evaluate(\"Undefined\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("engine->evaluate(\"Undefined\") <=> engine->newObject()"); + equals.insert("engine->evaluate(\"Undefined\") <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("engine->evaluate(\"Null\") <=> QScriptValue(\"ciao\")"); + equals.insert("engine->evaluate(\"Null\") <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"Null\") <=> QScriptValue(0, \"ciao\")"); + equals.insert("engine->evaluate(\"Null\") <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"Null\") <=> QScriptValue(engine, \"ciao\")"); + equals.insert("engine->evaluate(\"Null\") <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"Null\") <=> engine->evaluate(\"Object.prototype\")"); + equals.insert("engine->evaluate(\"Null\") <=> engine->evaluate(\"Function.prototype\")"); + equals.insert("engine->evaluate(\"Null\") <=> engine->evaluate(\"Object\")"); + equals.insert("engine->evaluate(\"Null\") <=> engine->evaluate(\"Array\")"); + equals.insert("engine->evaluate(\"Null\") <=> engine->evaluate(\"Number\")"); + equals.insert("engine->evaluate(\"Null\") <=> engine->evaluate(\"Function\")"); + equals.insert("engine->evaluate(\"Null\") <=> engine->evaluate(\"(function() { return 1; })\")"); + equals.insert("engine->evaluate(\"Null\") <=> engine->evaluate(\"(function() { return 'ciao'; })\")"); + equals.insert("engine->evaluate(\"Null\") <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); + equals.insert("engine->evaluate(\"Null\") <=> engine->evaluate(\"new Object()\")"); + equals.insert("engine->evaluate(\"Null\") <=> engine->evaluate(\"Undefined\")"); + equals.insert("engine->evaluate(\"Null\") <=> engine->evaluate(\"True\")"); + equals.insert("engine->evaluate(\"Null\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("engine->evaluate(\"Null\") <=> engine->newObject()"); + equals.insert("engine->evaluate(\"Null\") <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("engine->evaluate(\"True\") <=> QScriptValue(\"ciao\")"); + equals.insert("engine->evaluate(\"True\") <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"True\") <=> QScriptValue(0, \"ciao\")"); + equals.insert("engine->evaluate(\"True\") <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"True\") <=> QScriptValue(engine, \"ciao\")"); + equals.insert("engine->evaluate(\"True\") <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"True\") <=> engine->evaluate(\"Object.prototype\")"); + equals.insert("engine->evaluate(\"True\") <=> engine->evaluate(\"Function.prototype\")"); + equals.insert("engine->evaluate(\"True\") <=> engine->evaluate(\"Object\")"); + equals.insert("engine->evaluate(\"True\") <=> engine->evaluate(\"Array\")"); + equals.insert("engine->evaluate(\"True\") <=> engine->evaluate(\"Number\")"); + equals.insert("engine->evaluate(\"True\") <=> engine->evaluate(\"Function\")"); + equals.insert("engine->evaluate(\"True\") <=> engine->evaluate(\"(function() { return 1; })\")"); + equals.insert("engine->evaluate(\"True\") <=> engine->evaluate(\"(function() { return 'ciao'; })\")"); + equals.insert("engine->evaluate(\"True\") <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); + equals.insert("engine->evaluate(\"True\") <=> engine->evaluate(\"new Object()\")"); + equals.insert("engine->evaluate(\"True\") <=> engine->evaluate(\"Undefined\")"); + equals.insert("engine->evaluate(\"True\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("engine->evaluate(\"True\") <=> engine->newObject()"); + equals.insert("engine->evaluate(\"True\") <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("engine->evaluate(\"False\") <=> QScriptValue(\"ciao\")"); + equals.insert("engine->evaluate(\"False\") <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"False\") <=> QScriptValue(0, \"ciao\")"); + equals.insert("engine->evaluate(\"False\") <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"False\") <=> QScriptValue(engine, \"ciao\")"); + equals.insert("engine->evaluate(\"False\") <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"False\") <=> engine->evaluate(\"Object.prototype\")"); + equals.insert("engine->evaluate(\"False\") <=> engine->evaluate(\"Function.prototype\")"); + equals.insert("engine->evaluate(\"False\") <=> engine->evaluate(\"Object\")"); + equals.insert("engine->evaluate(\"False\") <=> engine->evaluate(\"Array\")"); + equals.insert("engine->evaluate(\"False\") <=> engine->evaluate(\"Number\")"); + equals.insert("engine->evaluate(\"False\") <=> engine->evaluate(\"Function\")"); + equals.insert("engine->evaluate(\"False\") <=> engine->evaluate(\"(function() { return 1; })\")"); + equals.insert("engine->evaluate(\"False\") <=> engine->evaluate(\"(function() { return 'ciao'; })\")"); + equals.insert("engine->evaluate(\"False\") <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); + equals.insert("engine->evaluate(\"False\") <=> engine->evaluate(\"new Object()\")"); + equals.insert("engine->evaluate(\"False\") <=> engine->evaluate(\"Undefined\")"); + equals.insert("engine->evaluate(\"False\") <=> engine->evaluate(\"Null\")"); + equals.insert("engine->evaluate(\"False\") <=> engine->evaluate(\"True\")"); + equals.insert("engine->evaluate(\"False\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("engine->evaluate(\"False\") <=> engine->newObject()"); + equals.insert("engine->evaluate(\"False\") <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(true)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(int(122))"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(uint(124))"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(123.0)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(6.37e-8)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(0x43211234)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(0x10000)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(0x10001)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(qInf())"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(\"Infinity\")"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(QString(\"123\"))"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(QString(\"12.4\"))"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(0, true)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(0, int(122))"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(0, uint(124))"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(0, 123.0)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(0, 6.37e-8)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(0, 0x43211234)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(0, 0x10000)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(0, 0x10001)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(0, qInf())"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(0, \"Infinity\")"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(0, QString(\"123\"))"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(0, QString(\"12.3\"))"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(engine, true)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(engine, int(122))"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(engine, uint(124))"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(engine, 123.0)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(engine, 6.37e-8)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(engine, 0x43211234)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(engine, 0x10000)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(engine, 0x10001)"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(engine, qInf())"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("engine->evaluate(\"null\") <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("engine->evaluate(\"null\") <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("engine->evaluate(\"null\") <=> engine->evaluate(\"true\")"); + equals.insert("engine->evaluate(\"null\") <=> engine->evaluate(\"122\")"); + equals.insert("engine->evaluate(\"null\") <=> engine->evaluate(\"124\")"); + equals.insert("engine->evaluate(\"null\") <=> engine->evaluate(\"123.0\")"); + equals.insert("engine->evaluate(\"null\") <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("engine->evaluate(\"null\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->evaluate(\"null\") <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->evaluate(\"null\") <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->evaluate(\"null\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->evaluate(\"null\") <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->evaluate(\"null\") <=> engine->evaluate(\"'12.4'\")"); + equals.insert("engine->evaluate(\"null\") <=> engine->newVariant(QVariant(123))"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(int(122))"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(uint(124))"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(123.0)"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(0x43211234)"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(0x10000)"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(0x10001)"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(qInf())"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(\"Infinity\")"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(QString(\"123\"))"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(QString(\"12.4\"))"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(0, int(122))"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(0, uint(124))"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(0, 123.0)"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(0, 0x43211234)"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(0, 0x10000)"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(0, 0x10001)"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(0, qInf())"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(0, \"Infinity\")"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(0, QString(\"123\"))"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(0, QString(\"12.3\"))"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(engine, int(122))"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(engine, uint(124))"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(engine, 123.0)"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(engine, 0x43211234)"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(engine, 0x10000)"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(engine, 0x10001)"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(engine, qInf())"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("engine->evaluate(\"true\") <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("engine->evaluate(\"true\") <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("engine->evaluate(\"true\") <=> engine->evaluate(\"122\")"); + equals.insert("engine->evaluate(\"true\") <=> engine->evaluate(\"124\")"); + equals.insert("engine->evaluate(\"true\") <=> engine->evaluate(\"123.0\")"); + equals.insert("engine->evaluate(\"true\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->evaluate(\"true\") <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->evaluate(\"true\") <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->evaluate(\"true\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->evaluate(\"true\") <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->evaluate(\"true\") <=> engine->evaluate(\"'12.4'\")"); + equals.insert("engine->evaluate(\"true\") <=> engine->newVariant(QVariant(123))"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(true)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(int(122))"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(uint(124))"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(123.0)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(6.37e-8)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(0x43211234)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(0x10000)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(0x10001)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(qInf())"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(\"Infinity\")"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(QString(\"123\"))"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(QString(\"12.4\"))"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(0, true)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(0, int(122))"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(0, uint(124))"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(0, 123.0)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(0, 6.37e-8)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(0, 0x43211234)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(0, 0x10000)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(0, 0x10001)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(0, qInf())"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(0, \"Infinity\")"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(0, QString(\"123\"))"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(0, QString(\"12.3\"))"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(engine, true)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(engine, int(122))"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(engine, uint(124))"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(engine, 123.0)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(engine, 6.37e-8)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(engine, 0x43211234)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(engine, 0x10000)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(engine, 0x10001)"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(engine, qInf())"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("engine->evaluate(\"false\") <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("engine->evaluate(\"false\") <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("engine->evaluate(\"false\") <=> engine->evaluate(\"true\")"); + equals.insert("engine->evaluate(\"false\") <=> engine->evaluate(\"122\")"); + equals.insert("engine->evaluate(\"false\") <=> engine->evaluate(\"124\")"); + equals.insert("engine->evaluate(\"false\") <=> engine->evaluate(\"123.0\")"); + equals.insert("engine->evaluate(\"false\") <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("engine->evaluate(\"false\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->evaluate(\"false\") <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->evaluate(\"false\") <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->evaluate(\"false\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->evaluate(\"false\") <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->evaluate(\"false\") <=> engine->evaluate(\"'12.4'\")"); + equals.insert("engine->evaluate(\"false\") <=> engine->newVariant(QVariant(123))"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(uint(124))"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(123.0)"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(0x43211234)"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(0x10000)"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(0x10001)"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(qInf())"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(\"Infinity\")"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(QString(\"123\"))"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(0, uint(124))"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(0, 123.0)"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(0, 0x43211234)"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(0, 0x10000)"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(0, 0x10001)"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(0, qInf())"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(0, \"Infinity\")"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(0, QString(\"123\"))"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(engine, uint(124))"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(engine, 123.0)"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(engine, 0x43211234)"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(engine, 0x10000)"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(engine, 0x10001)"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(engine, qInf())"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("engine->evaluate(\"122\") <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("engine->evaluate(\"122\") <=> engine->evaluate(\"124\")"); + equals.insert("engine->evaluate(\"122\") <=> engine->evaluate(\"123.0\")"); + equals.insert("engine->evaluate(\"122\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->evaluate(\"122\") <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->evaluate(\"122\") <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->evaluate(\"122\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->evaluate(\"122\") <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->evaluate(\"122\") <=> engine->newVariant(QVariant(123))"); + equals.insert("engine->evaluate(\"124\") <=> QScriptValue(0x43211234)"); + equals.insert("engine->evaluate(\"124\") <=> QScriptValue(0x10000)"); + equals.insert("engine->evaluate(\"124\") <=> QScriptValue(0x10001)"); + equals.insert("engine->evaluate(\"124\") <=> QScriptValue(qInf())"); + equals.insert("engine->evaluate(\"124\") <=> QScriptValue(\"Infinity\")"); + equals.insert("engine->evaluate(\"124\") <=> QScriptValue(0, 0x43211234)"); + equals.insert("engine->evaluate(\"124\") <=> QScriptValue(0, 0x10000)"); + equals.insert("engine->evaluate(\"124\") <=> QScriptValue(0, 0x10001)"); + equals.insert("engine->evaluate(\"124\") <=> QScriptValue(0, qInf())"); + equals.insert("engine->evaluate(\"124\") <=> QScriptValue(0, \"Infinity\")"); + equals.insert("engine->evaluate(\"124\") <=> QScriptValue(engine, 0x43211234)"); + equals.insert("engine->evaluate(\"124\") <=> QScriptValue(engine, 0x10000)"); + equals.insert("engine->evaluate(\"124\") <=> QScriptValue(engine, 0x10001)"); + equals.insert("engine->evaluate(\"124\") <=> QScriptValue(engine, qInf())"); + equals.insert("engine->evaluate(\"124\") <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("engine->evaluate(\"124\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->evaluate(\"124\") <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->evaluate(\"124\") <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->evaluate(\"124\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(true)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(int(122))"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(uint(124))"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(123.0)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(6.37e-8)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0x43211234)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0x10000)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0x10001)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(qInf())"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(\"Infinity\")"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(QString(\"123\"))"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(QString(\"12.4\"))"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0, true)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0, int(122))"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0, uint(124))"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0, 123.0)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0, 6.37e-8)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0, 0x43211234)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0, 0x10000)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0, 0x10001)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0, qInf())"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0, \"Infinity\")"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0, QString(\"123\"))"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(0, QString(\"12.3\"))"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(engine, true)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(engine, int(122))"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(engine, uint(124))"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(engine, 123.0)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(engine, 6.37e-8)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(engine, 0x43211234)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(engine, 0x10000)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(engine, 0x10001)"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(engine, qInf())"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("engine->evaluate(\"0\") <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("engine->evaluate(\"0\") <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("engine->evaluate(\"0\") <=> engine->evaluate(\"true\")"); + equals.insert("engine->evaluate(\"0\") <=> engine->evaluate(\"122\")"); + equals.insert("engine->evaluate(\"0\") <=> engine->evaluate(\"124\")"); + equals.insert("engine->evaluate(\"0\") <=> engine->evaluate(\"123.0\")"); + equals.insert("engine->evaluate(\"0\") <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("engine->evaluate(\"0\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->evaluate(\"0\") <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->evaluate(\"0\") <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->evaluate(\"0\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->evaluate(\"0\") <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->evaluate(\"0\") <=> engine->evaluate(\"'12.4'\")"); + equals.insert("engine->evaluate(\"0\") <=> engine->newVariant(QVariant(123))"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(true)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(int(122))"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(uint(124))"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(123.0)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(6.37e-8)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0x43211234)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0x10000)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0x10001)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(qInf())"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(\"Infinity\")"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(QString(\"123\"))"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(QString(\"12.4\"))"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0, true)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0, int(122))"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0, uint(124))"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0, 123.0)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0, 6.37e-8)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0, 0x43211234)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0, 0x10000)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0, 0x10001)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0, qInf())"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0, \"Infinity\")"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0, QString(\"123\"))"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(0, QString(\"12.3\"))"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(engine, true)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(engine, int(122))"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(engine, uint(124))"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(engine, 123.0)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(engine, 6.37e-8)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(engine, 0x43211234)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(engine, 0x10000)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(engine, 0x10001)"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(engine, qInf())"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("engine->evaluate(\"0.0\") <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("engine->evaluate(\"0.0\") <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("engine->evaluate(\"0.0\") <=> engine->evaluate(\"true\")"); + equals.insert("engine->evaluate(\"0.0\") <=> engine->evaluate(\"122\")"); + equals.insert("engine->evaluate(\"0.0\") <=> engine->evaluate(\"124\")"); + equals.insert("engine->evaluate(\"0.0\") <=> engine->evaluate(\"123.0\")"); + equals.insert("engine->evaluate(\"0.0\") <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("engine->evaluate(\"0.0\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->evaluate(\"0.0\") <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->evaluate(\"0.0\") <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->evaluate(\"0.0\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->evaluate(\"0.0\") <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->evaluate(\"0.0\") <=> engine->evaluate(\"'12.4'\")"); + equals.insert("engine->evaluate(\"0.0\") <=> engine->newVariant(QVariant(123))"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(uint(124))"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(0x43211234)"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(0x10000)"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(0x10001)"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(qInf())"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(\"Infinity\")"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(0, uint(124))"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(0, 0x43211234)"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(0, 0x10000)"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(0, 0x10001)"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(0, qInf())"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(0, \"Infinity\")"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(engine, uint(124))"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(engine, 0x43211234)"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(engine, 0x10000)"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(engine, 0x10001)"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(engine, qInf())"); + equals.insert("engine->evaluate(\"123.0\") <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("engine->evaluate(\"123.0\") <=> engine->evaluate(\"124\")"); + equals.insert("engine->evaluate(\"123.0\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->evaluate(\"123.0\") <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->evaluate(\"123.0\") <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->evaluate(\"123.0\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(true)"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(int(122))"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(uint(124))"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(123.0)"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(0x43211234)"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(0x10000)"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(0x10001)"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(qInf())"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(\"Infinity\")"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(QString(\"123\"))"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(QString(\"12.4\"))"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(0, true)"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(0, int(122))"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(0, uint(124))"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(0, 123.0)"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(0, 0x43211234)"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(0, 0x10000)"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(0, 0x10001)"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(0, qInf())"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(0, \"Infinity\")"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(0, QString(\"123\"))"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(0, QString(\"12.3\"))"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(engine, true)"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(engine, int(122))"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(engine, uint(124))"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(engine, 123.0)"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(engine, 0x43211234)"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(engine, 0x10000)"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(engine, 0x10001)"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(engine, qInf())"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> engine->evaluate(\"true\")"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> engine->evaluate(\"122\")"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> engine->evaluate(\"124\")"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> engine->evaluate(\"123.0\")"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> engine->evaluate(\"'12.4'\")"); + equals.insert("engine->evaluate(\"6.37e-8\") <=> engine->newVariant(QVariant(123))"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(QScriptValue::NullValue)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(true)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(false)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(int(122))"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(uint(124))"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0.0)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(123.0)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(6.37e-8)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0x43211234)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0x10000)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0x10001)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(qInf())"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(\"Infinity\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(QString(\"\"))"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(QString())"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(QString(\"0\"))"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(QString(\"123\"))"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(QString(\"12.4\"))"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0, QScriptValue::NullValue)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0, true)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0, false)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0, int(122))"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0, uint(124))"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0, 0)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0, 0.0)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0, 123.0)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0, 6.37e-8)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0, 0x43211234)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0, 0x10000)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0, 0x10001)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0, qInf())"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0, \"Infinity\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0, QString(\"\"))"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0, QString())"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0, QString(\"0\"))"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0, QString(\"123\"))"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(0, QString(\"12.3\"))"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(engine, QScriptValue::NullValue)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(engine, true)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(engine, false)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(engine, int(122))"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(engine, uint(124))"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(engine, 0)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(engine, 0.0)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(engine, 123.0)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(engine, 6.37e-8)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(engine, 0x43211234)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(engine, 0x10000)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(engine, 0x10001)"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(engine, qInf())"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(engine, QString(\"\"))"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(engine, QString())"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(engine, QString(\"0\"))"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->evaluate(\"[]\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->evaluate(\"Array.prototype\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->evaluate(\"new Array()\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->evaluate(\"null\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->evaluate(\"true\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->evaluate(\"false\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->evaluate(\"122\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->evaluate(\"124\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->evaluate(\"0\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->evaluate(\"0.0\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->evaluate(\"123.0\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->evaluate(\"''\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->evaluate(\"'0'\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->evaluate(\"'12.4'\")"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->nullValue()"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->newArray()"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->newVariant(QVariant(123))"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->newVariant(QVariant(false))"); + equals.insert("engine->evaluate(\"-6.37e-8\") <=> engine->newQObject(0)"); + equals.insert("engine->evaluate(\"0x43211234\") <=> QScriptValue(qInf())"); + equals.insert("engine->evaluate(\"0x43211234\") <=> QScriptValue(\"Infinity\")"); + equals.insert("engine->evaluate(\"0x43211234\") <=> QScriptValue(0, qInf())"); + equals.insert("engine->evaluate(\"0x43211234\") <=> QScriptValue(0, \"Infinity\")"); + equals.insert("engine->evaluate(\"0x43211234\") <=> QScriptValue(engine, qInf())"); + equals.insert("engine->evaluate(\"0x43211234\") <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("engine->evaluate(\"0x43211234\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->evaluate(\"0x10000\") <=> QScriptValue(0x43211234)"); + equals.insert("engine->evaluate(\"0x10000\") <=> QScriptValue(0x10001)"); + equals.insert("engine->evaluate(\"0x10000\") <=> QScriptValue(qInf())"); + equals.insert("engine->evaluate(\"0x10000\") <=> QScriptValue(\"Infinity\")"); + equals.insert("engine->evaluate(\"0x10000\") <=> QScriptValue(0, 0x43211234)"); + equals.insert("engine->evaluate(\"0x10000\") <=> QScriptValue(0, 0x10001)"); + equals.insert("engine->evaluate(\"0x10000\") <=> QScriptValue(0, qInf())"); + equals.insert("engine->evaluate(\"0x10000\") <=> QScriptValue(0, \"Infinity\")"); + equals.insert("engine->evaluate(\"0x10000\") <=> QScriptValue(engine, 0x43211234)"); + equals.insert("engine->evaluate(\"0x10000\") <=> QScriptValue(engine, 0x10001)"); + equals.insert("engine->evaluate(\"0x10000\") <=> QScriptValue(engine, qInf())"); + equals.insert("engine->evaluate(\"0x10000\") <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("engine->evaluate(\"0x10000\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->evaluate(\"0x10000\") <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->evaluate(\"0x10000\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->evaluate(\"0x10001\") <=> QScriptValue(0x43211234)"); + equals.insert("engine->evaluate(\"0x10001\") <=> QScriptValue(qInf())"); + equals.insert("engine->evaluate(\"0x10001\") <=> QScriptValue(\"Infinity\")"); + equals.insert("engine->evaluate(\"0x10001\") <=> QScriptValue(0, 0x43211234)"); + equals.insert("engine->evaluate(\"0x10001\") <=> QScriptValue(0, qInf())"); + equals.insert("engine->evaluate(\"0x10001\") <=> QScriptValue(0, \"Infinity\")"); + equals.insert("engine->evaluate(\"0x10001\") <=> QScriptValue(engine, 0x43211234)"); + equals.insert("engine->evaluate(\"0x10001\") <=> QScriptValue(engine, qInf())"); + equals.insert("engine->evaluate(\"0x10001\") <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("engine->evaluate(\"0x10001\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->evaluate(\"0x10001\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(QScriptValue::NullValue)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(true)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(false)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(int(122))"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(uint(124))"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0.0)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(123.0)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(6.37e-8)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(-6.37e-8)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0x43211234)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0x10000)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0x10001)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(qInf())"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(\"Infinity\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(QString(\"\"))"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(QString())"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(QString(\"0\"))"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(QString(\"123\"))"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(QString(\"12.4\"))"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0, QScriptValue::NullValue)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0, true)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0, false)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0, int(122))"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0, uint(124))"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0, 0)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0, 0.0)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0, 123.0)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0, 6.37e-8)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0, -6.37e-8)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0, 0x43211234)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0, 0x10000)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0, 0x10001)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0, qInf())"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0, \"Infinity\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0, QString(\"\"))"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0, QString())"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0, QString(\"0\"))"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0, QString(\"123\"))"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(0, QString(\"12.3\"))"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(engine, QScriptValue::NullValue)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(engine, true)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(engine, false)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(engine, int(122))"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(engine, uint(124))"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(engine, 0)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(engine, 0.0)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(engine, 123.0)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(engine, 6.37e-8)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(engine, -6.37e-8)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(engine, 0x43211234)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(engine, 0x10000)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(engine, 0x10001)"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(engine, qInf())"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(engine, QString(\"\"))"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(engine, QString())"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(engine, QString(\"0\"))"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("engine->evaluate(\"-Infinity\") <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->evaluate(\"[]\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->evaluate(\"Array.prototype\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->evaluate(\"new Array()\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->evaluate(\"null\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->evaluate(\"true\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->evaluate(\"false\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->evaluate(\"122\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->evaluate(\"124\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->evaluate(\"0\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->evaluate(\"0.0\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->evaluate(\"123.0\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->evaluate(\"-6.37e-8\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->evaluate(\"''\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->evaluate(\"'0'\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->evaluate(\"'12.4'\")"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->nullValue()"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->newArray()"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->newVariant(QVariant(123))"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->newVariant(QVariant(false))"); + equals.insert("engine->evaluate(\"-Infinity\") <=> engine->newQObject(0)"); + equals.insert("engine->evaluate(\"'ciao'\") <=> engine->evaluate(\"Function.prototype\")"); + equals.insert("engine->evaluate(\"'ciao'\") <=> engine->evaluate(\"Object\")"); + equals.insert("engine->evaluate(\"'ciao'\") <=> engine->evaluate(\"Array\")"); + equals.insert("engine->evaluate(\"'ciao'\") <=> engine->evaluate(\"Number\")"); + equals.insert("engine->evaluate(\"'ciao'\") <=> engine->evaluate(\"Function\")"); + equals.insert("engine->evaluate(\"'ciao'\") <=> engine->evaluate(\"(function() { return 1; })\")"); + equals.insert("engine->evaluate(\"'ciao'\") <=> engine->evaluate(\"(function() { return 'ciao'; })\")"); + equals.insert("engine->evaluate(\"'ciao'\") <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(true)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(int(122))"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(uint(124))"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(123.0)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(6.37e-8)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0x43211234)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0x10000)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0x10001)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(qInf())"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(\"NaN\")"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(\"Infinity\")"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(\"-Infinity\")"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(\"ciao\")"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(QString(\"0\"))"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(QString(\"123\"))"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(QString(\"12.4\"))"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0, true)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0, int(122))"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0, uint(124))"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0, 123.0)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0, 6.37e-8)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0, 0x43211234)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0, 0x10000)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0, 0x10001)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0, qInf())"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0, \"NaN\")"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0, \"Infinity\")"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0, \"-Infinity\")"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0, \"ciao\")"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0, QString(\"0\"))"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0, QString(\"123\"))"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(0, QString(\"12.3\"))"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(engine, true)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(engine, int(122))"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(engine, uint(124))"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(engine, 123.0)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(engine, 6.37e-8)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(engine, 0x43211234)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(engine, 0x10000)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(engine, 0x10001)"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(engine, qInf())"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(engine, \"NaN\")"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(engine, \"-Infinity\")"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(engine, \"ciao\")"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(engine, QString(\"0\"))"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("engine->evaluate(\"''\") <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"Object.prototype\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"Function.prototype\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"Error.prototype\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"Object\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"Array\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"Number\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"Function\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"(function() { return 1; })\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"(function() { return 'ciao'; })\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"/foo/\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"new Object()\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"new Error()\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"Undefined\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"Null\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"True\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"False\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"true\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"122\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"124\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"123.0\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"'0'\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->evaluate(\"'12.4'\")"); + equals.insert("engine->evaluate(\"''\") <=> engine->newObject()"); + equals.insert("engine->evaluate(\"''\") <=> engine->newArray(10)"); + equals.insert("engine->evaluate(\"''\") <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("engine->evaluate(\"''\") <=> engine->newVariant(QVariant(123))"); + equals.insert("engine->evaluate(\"''\") <=> engine->newQObject(engine)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(true)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(int(122))"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(uint(124))"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(123.0)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(6.37e-8)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(0x43211234)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(0x10000)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(0x10001)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(qInf())"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(\"NaN\")"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(\"Infinity\")"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(\"ciao\")"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(QString(\"123\"))"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(QString(\"12.4\"))"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(0, true)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(0, int(122))"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(0, uint(124))"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(0, 123.0)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(0, 6.37e-8)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(0, 0x43211234)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(0, 0x10000)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(0, 0x10001)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(0, qInf())"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(0, \"NaN\")"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(0, \"Infinity\")"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(0, \"ciao\")"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(0, QString(\"123\"))"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(0, QString(\"12.3\"))"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(engine, true)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(engine, int(122))"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(engine, uint(124))"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(engine, 123.0)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(engine, 6.37e-8)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(engine, 0x43211234)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(engine, 0x10000)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(engine, 0x10001)"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(engine, qInf())"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(engine, \"NaN\")"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(engine, \"ciao\")"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("engine->evaluate(\"'0'\") <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"Object.prototype\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"Function.prototype\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"Error.prototype\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"Object\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"Array\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"Number\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"Function\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"(function() { return 1; })\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"(function() { return 'ciao'; })\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"new Object()\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"new Error()\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"Undefined\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"Null\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"True\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"False\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"true\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"122\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"124\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"123.0\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->evaluate(\"'12.4'\")"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->newObject()"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->newVariant(QVariant(123))"); + equals.insert("engine->evaluate(\"'0'\") <=> engine->newQObject(engine)"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(uint(124))"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(0x43211234)"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(0x10000)"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(0x10001)"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(qInf())"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(\"NaN\")"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(\"Infinity\")"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(\"ciao\")"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(0, uint(124))"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(0, 0x43211234)"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(0, 0x10000)"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(0, 0x10001)"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(0, qInf())"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(0, \"NaN\")"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(0, \"Infinity\")"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(0, \"ciao\")"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(engine, uint(124))"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(engine, 0x43211234)"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(engine, 0x10000)"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(engine, 0x10001)"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(engine, qInf())"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(engine, \"NaN\")"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(engine, \"ciao\")"); + equals.insert("engine->evaluate(\"'123'\") <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->evaluate(\"Object.prototype\")"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->evaluate(\"Function.prototype\")"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->evaluate(\"Error.prototype\")"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->evaluate(\"Object\")"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->evaluate(\"Array\")"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->evaluate(\"Number\")"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->evaluate(\"Function\")"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->evaluate(\"(function() { return 1; })\")"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->evaluate(\"(function() { return 'ciao'; })\")"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->evaluate(\"new Object()\")"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->evaluate(\"new Error()\")"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->evaluate(\"Undefined\")"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->evaluate(\"Null\")"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->evaluate(\"True\")"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->evaluate(\"False\")"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->evaluate(\"124\")"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->newObject()"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("engine->evaluate(\"'123'\") <=> engine->newQObject(engine)"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(int(122))"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(uint(124))"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(123.0)"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(0x43211234)"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(0x10000)"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(0x10001)"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(qInf())"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(\"NaN\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(\"Infinity\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(\"ciao\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(QString(\"123\"))"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(0, int(122))"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(0, uint(124))"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(0, 123.0)"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(0, 0x43211234)"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(0, 0x10000)"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(0, 0x10001)"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(0, qInf())"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(0, \"NaN\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(0, \"Infinity\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(0, \"ciao\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(0, QString(\"123\"))"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(engine, int(122))"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(engine, uint(124))"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(engine, 123.0)"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(engine, 0x43211234)"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(engine, 0x10000)"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(engine, 0x10001)"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(engine, qInf())"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(engine, \"NaN\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(engine, \"ciao\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->evaluate(\"'12.4'\") <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"Object.prototype\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"Function.prototype\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"Error.prototype\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"Object\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"Array\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"Number\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"Function\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"(function() { return 1; })\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"(function() { return 'ciao'; })\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"new Object()\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"new Error()\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"Undefined\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"Null\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"True\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"False\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"122\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"124\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"123.0\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"'ciao'\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->newObject()"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->newVariant(QVariant(123))"); + equals.insert("engine->evaluate(\"'12.4'\") <=> engine->newQObject(engine)"); equals.insert("engine->nullValue() <=> QScriptValue(true)"); equals.insert("engine->nullValue() <=> QScriptValue(int(122))"); equals.insert("engine->nullValue() <=> QScriptValue(uint(124))"); @@ -5648,6 +8805,329 @@ void tst_QScriptValue::lessThan_makeData(const char *expr) equals.insert("engine->nullValue() <=> QScriptValue(engine, \"Infinity\")"); equals.insert("engine->nullValue() <=> QScriptValue(engine, QString(\"123\"))"); equals.insert("engine->nullValue() <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("engine->nullValue() <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("engine->nullValue() <=> engine->evaluate(\"true\")"); + equals.insert("engine->nullValue() <=> engine->evaluate(\"122\")"); + equals.insert("engine->nullValue() <=> engine->evaluate(\"124\")"); + equals.insert("engine->nullValue() <=> engine->evaluate(\"123.0\")"); + equals.insert("engine->nullValue() <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("engine->nullValue() <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->nullValue() <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->nullValue() <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->nullValue() <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->nullValue() <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->nullValue() <=> engine->evaluate(\"'12.4'\")"); + equals.insert("engine->nullValue() <=> engine->newVariant(QVariant(123))"); + equals.insert("engine->newObject() <=> QScriptValue(\"ciao\")"); + equals.insert("engine->newObject() <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->newObject() <=> QScriptValue(0, \"ciao\")"); + equals.insert("engine->newObject() <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->newObject() <=> QScriptValue(engine, \"ciao\")"); + equals.insert("engine->newObject() <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->newObject() <=> engine->evaluate(\"Function.prototype\")"); + equals.insert("engine->newObject() <=> engine->evaluate(\"Object\")"); + equals.insert("engine->newObject() <=> engine->evaluate(\"Array\")"); + equals.insert("engine->newObject() <=> engine->evaluate(\"Number\")"); + equals.insert("engine->newObject() <=> engine->evaluate(\"Function\")"); + equals.insert("engine->newObject() <=> engine->evaluate(\"(function() { return 1; })\")"); + equals.insert("engine->newObject() <=> engine->evaluate(\"(function() { return 'ciao'; })\")"); + equals.insert("engine->newObject() <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); + equals.insert("engine->newObject() <=> engine->evaluate(\"'ciao'\")"); + equals.insert("engine->newObject() <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("engine->newArray() <=> QScriptValue(true)"); + equals.insert("engine->newArray() <=> QScriptValue(int(122))"); + equals.insert("engine->newArray() <=> QScriptValue(uint(124))"); + equals.insert("engine->newArray() <=> QScriptValue(123.0)"); + equals.insert("engine->newArray() <=> QScriptValue(6.37e-8)"); + equals.insert("engine->newArray() <=> QScriptValue(0x43211234)"); + equals.insert("engine->newArray() <=> QScriptValue(0x10000)"); + equals.insert("engine->newArray() <=> QScriptValue(0x10001)"); + equals.insert("engine->newArray() <=> QScriptValue(qInf())"); + equals.insert("engine->newArray() <=> QScriptValue(\"NaN\")"); + equals.insert("engine->newArray() <=> QScriptValue(\"Infinity\")"); + equals.insert("engine->newArray() <=> QScriptValue(\"-Infinity\")"); + equals.insert("engine->newArray() <=> QScriptValue(\"ciao\")"); + equals.insert("engine->newArray() <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->newArray() <=> QScriptValue(QString(\"0\"))"); + equals.insert("engine->newArray() <=> QScriptValue(QString(\"123\"))"); + equals.insert("engine->newArray() <=> QScriptValue(QString(\"12.4\"))"); + equals.insert("engine->newArray() <=> QScriptValue(0, true)"); + equals.insert("engine->newArray() <=> QScriptValue(0, int(122))"); + equals.insert("engine->newArray() <=> QScriptValue(0, uint(124))"); + equals.insert("engine->newArray() <=> QScriptValue(0, 123.0)"); + equals.insert("engine->newArray() <=> QScriptValue(0, 6.37e-8)"); + equals.insert("engine->newArray() <=> QScriptValue(0, 0x43211234)"); + equals.insert("engine->newArray() <=> QScriptValue(0, 0x10000)"); + equals.insert("engine->newArray() <=> QScriptValue(0, 0x10001)"); + equals.insert("engine->newArray() <=> QScriptValue(0, qInf())"); + equals.insert("engine->newArray() <=> QScriptValue(0, \"NaN\")"); + equals.insert("engine->newArray() <=> QScriptValue(0, \"Infinity\")"); + equals.insert("engine->newArray() <=> QScriptValue(0, \"-Infinity\")"); + equals.insert("engine->newArray() <=> QScriptValue(0, \"ciao\")"); + equals.insert("engine->newArray() <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->newArray() <=> QScriptValue(0, QString(\"0\"))"); + equals.insert("engine->newArray() <=> QScriptValue(0, QString(\"123\"))"); + equals.insert("engine->newArray() <=> QScriptValue(0, QString(\"12.3\"))"); + equals.insert("engine->newArray() <=> QScriptValue(engine, true)"); + equals.insert("engine->newArray() <=> QScriptValue(engine, int(122))"); + equals.insert("engine->newArray() <=> QScriptValue(engine, uint(124))"); + equals.insert("engine->newArray() <=> QScriptValue(engine, 123.0)"); + equals.insert("engine->newArray() <=> QScriptValue(engine, 6.37e-8)"); + equals.insert("engine->newArray() <=> QScriptValue(engine, 0x43211234)"); + equals.insert("engine->newArray() <=> QScriptValue(engine, 0x10000)"); + equals.insert("engine->newArray() <=> QScriptValue(engine, 0x10001)"); + equals.insert("engine->newArray() <=> QScriptValue(engine, qInf())"); + equals.insert("engine->newArray() <=> QScriptValue(engine, \"NaN\")"); + equals.insert("engine->newArray() <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("engine->newArray() <=> QScriptValue(engine, \"-Infinity\")"); + equals.insert("engine->newArray() <=> QScriptValue(engine, \"ciao\")"); + equals.insert("engine->newArray() <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->newArray() <=> QScriptValue(engine, QString(\"0\"))"); + equals.insert("engine->newArray() <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("engine->newArray() <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("engine->newArray() <=> engine->evaluate(\"Object.prototype\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"Function.prototype\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"Error.prototype\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"Object\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"Array\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"Number\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"Function\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"(function() { return 1; })\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"(function() { return 'ciao'; })\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"/foo/\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"new Object()\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"new Error()\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"Undefined\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"Null\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"True\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"False\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"true\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"122\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"124\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"123.0\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"'ciao'\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"'0'\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"'12.4'\")"); + equals.insert("engine->newArray() <=> engine->newObject()"); + equals.insert("engine->newArray() <=> engine->newArray(10)"); + equals.insert("engine->newArray() <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("engine->newArray() <=> engine->newVariant(QVariant(123))"); + equals.insert("engine->newArray() <=> engine->newQObject(engine)"); + equals.insert("engine->newArray(10) <=> QScriptValue(\"NaN\")"); + equals.insert("engine->newArray(10) <=> QScriptValue(\"Infinity\")"); + equals.insert("engine->newArray(10) <=> QScriptValue(\"-Infinity\")"); + equals.insert("engine->newArray(10) <=> QScriptValue(\"ciao\")"); + equals.insert("engine->newArray(10) <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->newArray(10) <=> QScriptValue(QString(\"0\"))"); + equals.insert("engine->newArray(10) <=> QScriptValue(QString(\"123\"))"); + equals.insert("engine->newArray(10) <=> QScriptValue(QString(\"12.4\"))"); + equals.insert("engine->newArray(10) <=> QScriptValue(0, \"NaN\")"); + equals.insert("engine->newArray(10) <=> QScriptValue(0, \"Infinity\")"); + equals.insert("engine->newArray(10) <=> QScriptValue(0, \"-Infinity\")"); + equals.insert("engine->newArray(10) <=> QScriptValue(0, \"ciao\")"); + equals.insert("engine->newArray(10) <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->newArray(10) <=> QScriptValue(0, QString(\"0\"))"); + equals.insert("engine->newArray(10) <=> QScriptValue(0, QString(\"123\"))"); + equals.insert("engine->newArray(10) <=> QScriptValue(0, QString(\"12.3\"))"); + equals.insert("engine->newArray(10) <=> QScriptValue(engine, \"NaN\")"); + equals.insert("engine->newArray(10) <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("engine->newArray(10) <=> QScriptValue(engine, \"-Infinity\")"); + equals.insert("engine->newArray(10) <=> QScriptValue(engine, \"ciao\")"); + equals.insert("engine->newArray(10) <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->newArray(10) <=> QScriptValue(engine, QString(\"0\"))"); + equals.insert("engine->newArray(10) <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("engine->newArray(10) <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("engine->newArray(10) <=> engine->evaluate(\"Object.prototype\")"); + equals.insert("engine->newArray(10) <=> engine->evaluate(\"Function.prototype\")"); + equals.insert("engine->newArray(10) <=> engine->evaluate(\"Error.prototype\")"); + equals.insert("engine->newArray(10) <=> engine->evaluate(\"Object\")"); + equals.insert("engine->newArray(10) <=> engine->evaluate(\"Array\")"); + equals.insert("engine->newArray(10) <=> engine->evaluate(\"Number\")"); + equals.insert("engine->newArray(10) <=> engine->evaluate(\"Function\")"); + equals.insert("engine->newArray(10) <=> engine->evaluate(\"(function() { return 1; })\")"); + equals.insert("engine->newArray(10) <=> engine->evaluate(\"(function() { return 'ciao'; })\")"); + equals.insert("engine->newArray(10) <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); + equals.insert("engine->newArray(10) <=> engine->evaluate(\"/foo/\")"); + equals.insert("engine->newArray(10) <=> engine->evaluate(\"new Object()\")"); + equals.insert("engine->newArray(10) <=> engine->evaluate(\"new Error()\")"); + equals.insert("engine->newArray(10) <=> engine->evaluate(\"Undefined\")"); + equals.insert("engine->newArray(10) <=> engine->evaluate(\"Null\")"); + equals.insert("engine->newArray(10) <=> engine->evaluate(\"True\")"); + equals.insert("engine->newArray(10) <=> engine->evaluate(\"False\")"); + equals.insert("engine->newArray(10) <=> engine->evaluate(\"'ciao'\")"); + equals.insert("engine->newArray(10) <=> engine->evaluate(\"'0'\")"); + equals.insert("engine->newArray(10) <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->newArray(10) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("engine->newArray(10) <=> engine->newObject()"); + equals.insert("engine->newArray(10) <=> engine->newQMetaObject(&QObject::staticMetaObject)"); + equals.insert("engine->newArray(10) <=> engine->newQObject(engine)"); + equals.insert("engine->newQMetaObject(&QObject::staticMetaObject) <=> QScriptValue(\"ciao\")"); + equals.insert("engine->newQMetaObject(&QObject::staticMetaObject) <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->newQMetaObject(&QObject::staticMetaObject) <=> QScriptValue(0, \"ciao\")"); + equals.insert("engine->newQMetaObject(&QObject::staticMetaObject) <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->newQMetaObject(&QObject::staticMetaObject) <=> QScriptValue(engine, \"ciao\")"); + equals.insert("engine->newQMetaObject(&QObject::staticMetaObject) <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->newQMetaObject(&QObject::staticMetaObject) <=> engine->evaluate(\"Function.prototype\")"); + equals.insert("engine->newQMetaObject(&QObject::staticMetaObject) <=> engine->evaluate(\"Object\")"); + equals.insert("engine->newQMetaObject(&QObject::staticMetaObject) <=> engine->evaluate(\"Array\")"); + equals.insert("engine->newQMetaObject(&QObject::staticMetaObject) <=> engine->evaluate(\"Number\")"); + equals.insert("engine->newQMetaObject(&QObject::staticMetaObject) <=> engine->evaluate(\"Function\")"); + equals.insert("engine->newQMetaObject(&QObject::staticMetaObject) <=> engine->evaluate(\"(function() { return 1; })\")"); + equals.insert("engine->newQMetaObject(&QObject::staticMetaObject) <=> engine->evaluate(\"(function() { return 'ciao'; })\")"); + equals.insert("engine->newQMetaObject(&QObject::staticMetaObject) <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); + equals.insert("engine->newQMetaObject(&QObject::staticMetaObject) <=> engine->evaluate(\"'ciao'\")"); + equals.insert("engine->newVariant(QVariant(123)) <=> QScriptValue(uint(124))"); + equals.insert("engine->newVariant(QVariant(123)) <=> QScriptValue(0x43211234)"); + equals.insert("engine->newVariant(QVariant(123)) <=> QScriptValue(0x10000)"); + equals.insert("engine->newVariant(QVariant(123)) <=> QScriptValue(0x10001)"); + equals.insert("engine->newVariant(QVariant(123)) <=> QScriptValue(qInf())"); + equals.insert("engine->newVariant(QVariant(123)) <=> QScriptValue(\"Infinity\")"); + equals.insert("engine->newVariant(QVariant(123)) <=> QScriptValue(0, uint(124))"); + equals.insert("engine->newVariant(QVariant(123)) <=> QScriptValue(0, 0x43211234)"); + equals.insert("engine->newVariant(QVariant(123)) <=> QScriptValue(0, 0x10000)"); + equals.insert("engine->newVariant(QVariant(123)) <=> QScriptValue(0, 0x10001)"); + equals.insert("engine->newVariant(QVariant(123)) <=> QScriptValue(0, qInf())"); + equals.insert("engine->newVariant(QVariant(123)) <=> QScriptValue(0, \"Infinity\")"); + equals.insert("engine->newVariant(QVariant(123)) <=> QScriptValue(engine, uint(124))"); + equals.insert("engine->newVariant(QVariant(123)) <=> QScriptValue(engine, 0x43211234)"); + equals.insert("engine->newVariant(QVariant(123)) <=> QScriptValue(engine, 0x10000)"); + equals.insert("engine->newVariant(QVariant(123)) <=> QScriptValue(engine, 0x10001)"); + equals.insert("engine->newVariant(QVariant(123)) <=> QScriptValue(engine, qInf())"); + equals.insert("engine->newVariant(QVariant(123)) <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("engine->newVariant(QVariant(123)) <=> engine->evaluate(\"124\")"); + equals.insert("engine->newVariant(QVariant(123)) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->newVariant(QVariant(123)) <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->newVariant(QVariant(123)) <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->newVariant(QVariant(123)) <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(true)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(int(122))"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(uint(124))"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(123.0)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(6.37e-8)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(0x43211234)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(0x10000)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(0x10001)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(qInf())"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(\"Infinity\")"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(QString(\"123\"))"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(QString(\"12.4\"))"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(0, true)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(0, int(122))"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(0, uint(124))"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(0, 123.0)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(0, 6.37e-8)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(0, 0x43211234)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(0, 0x10000)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(0, 0x10001)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(0, qInf())"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(0, \"Infinity\")"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(0, QString(\"123\"))"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(0, QString(\"12.3\"))"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(engine, true)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(engine, int(122))"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(engine, uint(124))"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(engine, 123.0)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(engine, 6.37e-8)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(engine, 0x43211234)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(engine, 0x10000)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(engine, 0x10001)"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(engine, qInf())"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("engine->newVariant(QVariant(false)) <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("engine->newVariant(QVariant(false)) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("engine->newVariant(QVariant(false)) <=> engine->evaluate(\"true\")"); + equals.insert("engine->newVariant(QVariant(false)) <=> engine->evaluate(\"122\")"); + equals.insert("engine->newVariant(QVariant(false)) <=> engine->evaluate(\"124\")"); + equals.insert("engine->newVariant(QVariant(false)) <=> engine->evaluate(\"123.0\")"); + equals.insert("engine->newVariant(QVariant(false)) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("engine->newVariant(QVariant(false)) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->newVariant(QVariant(false)) <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->newVariant(QVariant(false)) <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->newVariant(QVariant(false)) <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->newVariant(QVariant(false)) <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->newVariant(QVariant(false)) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("engine->newVariant(QVariant(false)) <=> engine->newVariant(QVariant(123))"); + equals.insert("engine->newQObject(0) <=> QScriptValue(true)"); + equals.insert("engine->newQObject(0) <=> QScriptValue(int(122))"); + equals.insert("engine->newQObject(0) <=> QScriptValue(uint(124))"); + equals.insert("engine->newQObject(0) <=> QScriptValue(123.0)"); + equals.insert("engine->newQObject(0) <=> QScriptValue(6.37e-8)"); + equals.insert("engine->newQObject(0) <=> QScriptValue(0x43211234)"); + equals.insert("engine->newQObject(0) <=> QScriptValue(0x10000)"); + equals.insert("engine->newQObject(0) <=> QScriptValue(0x10001)"); + equals.insert("engine->newQObject(0) <=> QScriptValue(qInf())"); + equals.insert("engine->newQObject(0) <=> QScriptValue(\"Infinity\")"); + equals.insert("engine->newQObject(0) <=> QScriptValue(QString(\"123\"))"); + equals.insert("engine->newQObject(0) <=> QScriptValue(QString(\"12.4\"))"); + equals.insert("engine->newQObject(0) <=> QScriptValue(0, true)"); + equals.insert("engine->newQObject(0) <=> QScriptValue(0, int(122))"); + equals.insert("engine->newQObject(0) <=> QScriptValue(0, uint(124))"); + equals.insert("engine->newQObject(0) <=> QScriptValue(0, 123.0)"); + equals.insert("engine->newQObject(0) <=> QScriptValue(0, 6.37e-8)"); + equals.insert("engine->newQObject(0) <=> QScriptValue(0, 0x43211234)"); + equals.insert("engine->newQObject(0) <=> QScriptValue(0, 0x10000)"); + equals.insert("engine->newQObject(0) <=> QScriptValue(0, 0x10001)"); + equals.insert("engine->newQObject(0) <=> QScriptValue(0, qInf())"); + equals.insert("engine->newQObject(0) <=> QScriptValue(0, \"Infinity\")"); + equals.insert("engine->newQObject(0) <=> QScriptValue(0, QString(\"123\"))"); + equals.insert("engine->newQObject(0) <=> QScriptValue(0, QString(\"12.3\"))"); + equals.insert("engine->newQObject(0) <=> QScriptValue(engine, true)"); + equals.insert("engine->newQObject(0) <=> QScriptValue(engine, int(122))"); + equals.insert("engine->newQObject(0) <=> QScriptValue(engine, uint(124))"); + equals.insert("engine->newQObject(0) <=> QScriptValue(engine, 123.0)"); + equals.insert("engine->newQObject(0) <=> QScriptValue(engine, 6.37e-8)"); + equals.insert("engine->newQObject(0) <=> QScriptValue(engine, 0x43211234)"); + equals.insert("engine->newQObject(0) <=> QScriptValue(engine, 0x10000)"); + equals.insert("engine->newQObject(0) <=> QScriptValue(engine, 0x10001)"); + equals.insert("engine->newQObject(0) <=> QScriptValue(engine, qInf())"); + equals.insert("engine->newQObject(0) <=> QScriptValue(engine, \"Infinity\")"); + equals.insert("engine->newQObject(0) <=> QScriptValue(engine, QString(\"123\"))"); + equals.insert("engine->newQObject(0) <=> QScriptValue(engine, QString(\"1.23\"))"); + equals.insert("engine->newQObject(0) <=> engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"); + equals.insert("engine->newQObject(0) <=> engine->evaluate(\"true\")"); + equals.insert("engine->newQObject(0) <=> engine->evaluate(\"122\")"); + equals.insert("engine->newQObject(0) <=> engine->evaluate(\"124\")"); + equals.insert("engine->newQObject(0) <=> engine->evaluate(\"123.0\")"); + equals.insert("engine->newQObject(0) <=> engine->evaluate(\"6.37e-8\")"); + equals.insert("engine->newQObject(0) <=> engine->evaluate(\"0x43211234\")"); + equals.insert("engine->newQObject(0) <=> engine->evaluate(\"0x10000\")"); + equals.insert("engine->newQObject(0) <=> engine->evaluate(\"0x10001\")"); + equals.insert("engine->newQObject(0) <=> engine->evaluate(\"Infinity\")"); + equals.insert("engine->newQObject(0) <=> engine->evaluate(\"'123'\")"); + equals.insert("engine->newQObject(0) <=> engine->evaluate(\"'12.4'\")"); + equals.insert("engine->newQObject(0) <=> engine->newVariant(QVariant(123))"); + equals.insert("engine->newQObject(engine) <=> QScriptValue(\"ciao\")"); + equals.insert("engine->newQObject(engine) <=> QScriptValue(QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->newQObject(engine) <=> QScriptValue(0, \"ciao\")"); + equals.insert("engine->newQObject(engine) <=> QScriptValue(0, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->newQObject(engine) <=> QScriptValue(engine, \"ciao\")"); + equals.insert("engine->newQObject(engine) <=> QScriptValue(engine, QString::fromLatin1(\"ciao\"))"); + equals.insert("engine->newQObject(engine) <=> engine->evaluate(\"Object.prototype\")"); + equals.insert("engine->newQObject(engine) <=> engine->evaluate(\"Function.prototype\")"); + equals.insert("engine->newQObject(engine) <=> engine->evaluate(\"Object\")"); + equals.insert("engine->newQObject(engine) <=> engine->evaluate(\"Array\")"); + equals.insert("engine->newQObject(engine) <=> engine->evaluate(\"Number\")"); + equals.insert("engine->newQObject(engine) <=> engine->evaluate(\"Function\")"); + equals.insert("engine->newQObject(engine) <=> engine->evaluate(\"(function() { return 1; })\")"); + equals.insert("engine->newQObject(engine) <=> engine->evaluate(\"(function() { return 'ciao'; })\")"); + equals.insert("engine->newQObject(engine) <=> engine->evaluate(\"(function() { throw new Error('foo'); })\")"); + equals.insert("engine->newQObject(engine) <=> engine->evaluate(\"new Object()\")"); + equals.insert("engine->newQObject(engine) <=> engine->evaluate(\"Undefined\")"); + equals.insert("engine->newQObject(engine) <=> engine->evaluate(\"Null\")"); + equals.insert("engine->newQObject(engine) <=> engine->evaluate(\"True\")"); + equals.insert("engine->newQObject(engine) <=> engine->evaluate(\"False\")"); + equals.insert("engine->newQObject(engine) <=> engine->evaluate(\"'ciao'\")"); + equals.insert("engine->newQObject(engine) <=> engine->newObject()"); + equals.insert("engine->newQObject(engine) <=> engine->newQMetaObject(&QObject::staticMetaObject)"); } QHash<QString, QScriptValue>::const_iterator it; for (it = m_values.constBegin(); it != m_values.constEnd(); ++it) { @@ -5702,6 +9182,21 @@ void tst_QScriptValue::instanceOf_makeData(const char *expr) equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"Object\")"); equals.insert("engine->evaluate(\"new Array()\") <=> engine->evaluate(\"Array\")"); equals.insert("engine->evaluate(\"new Error()\") <=> engine->evaluate(\"Object\")"); + equals.insert("engine->evaluate(\"Undefined\") <=> engine->evaluate(\"Object\")"); + equals.insert("engine->evaluate(\"Null\") <=> engine->evaluate(\"Object\")"); + equals.insert("engine->evaluate(\"True\") <=> engine->evaluate(\"Object\")"); + equals.insert("engine->evaluate(\"False\") <=> engine->evaluate(\"Object\")"); + equals.insert("engine->newObject() <=> engine->evaluate(\"Object\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"Object\")"); + equals.insert("engine->newArray() <=> engine->evaluate(\"Array\")"); + equals.insert("engine->newArray(10) <=> engine->evaluate(\"Object\")"); + equals.insert("engine->newArray(10) <=> engine->evaluate(\"Array\")"); + equals.insert("engine->newDate(QDateTime()) <=> engine->evaluate(\"Object\")"); + equals.insert("engine->newQMetaObject(&QObject::staticMetaObject) <=> engine->evaluate(\"Object\")"); + equals.insert("engine->newVariant(QVariant()) <=> engine->evaluate(\"Object\")"); + equals.insert("engine->newVariant(QVariant(123)) <=> engine->evaluate(\"Object\")"); + equals.insert("engine->newVariant(QVariant(false)) <=> engine->evaluate(\"Object\")"); + equals.insert("engine->newQObject(engine) <=> engine->evaluate(\"Object\")"); } QHash<QString, QScriptValue>::const_iterator it; for (it = m_values.constBegin(); it != m_values.constEnd(); ++it) { @@ -5833,8 +9328,45 @@ void tst_QScriptValue::qscriptvalue_castQString_makeData(const char* expr) value.insert("engine->evaluate(\"new Object()\")", "[object Object]"); value.insert("engine->evaluate(\"new Array()\")", ""); value.insert("engine->evaluate(\"new Error()\")", "Error: Unknown error"); + value.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")", "22"); + value.insert("engine->evaluate(\"Undefined\")", "ReferenceError: Can't find variable: Undefined"); + value.insert("engine->evaluate(\"Null\")", "ReferenceError: Can't find variable: Null"); + value.insert("engine->evaluate(\"True\")", "ReferenceError: Can't find variable: True"); + value.insert("engine->evaluate(\"False\")", "ReferenceError: Can't find variable: False"); + value.insert("engine->evaluate(\"undefined\")", ""); + value.insert("engine->evaluate(\"null\")", ""); + value.insert("engine->evaluate(\"true\")", "true"); + value.insert("engine->evaluate(\"false\")", "false"); + value.insert("engine->evaluate(\"122\")", "122"); + value.insert("engine->evaluate(\"124\")", "124"); + value.insert("engine->evaluate(\"0\")", "0"); + value.insert("engine->evaluate(\"0.0\")", "0"); + value.insert("engine->evaluate(\"123.0\")", "123"); + value.insert("engine->evaluate(\"6.37e-8\")", "6.37e-8"); + value.insert("engine->evaluate(\"-6.37e-8\")", "-6.37e-8"); + value.insert("engine->evaluate(\"0x43211234\")", "1126240820"); + value.insert("engine->evaluate(\"0x10000\")", "65536"); + value.insert("engine->evaluate(\"0x10001\")", "65537"); + value.insert("engine->evaluate(\"NaN\")", "NaN"); + value.insert("engine->evaluate(\"Infinity\")", "Infinity"); + value.insert("engine->evaluate(\"-Infinity\")", "-Infinity"); + value.insert("engine->evaluate(\"'ciao'\")", "ciao"); + value.insert("engine->evaluate(\"''\")", ""); + value.insert("engine->evaluate(\"'0'\")", "0"); + value.insert("engine->evaluate(\"'123'\")", "123"); + value.insert("engine->evaluate(\"'12.4'\")", "12.4"); value.insert("engine->nullValue()", ""); value.insert("engine->undefinedValue()", ""); + value.insert("engine->newObject()", "[object Object]"); + value.insert("engine->newArray()", ""); + value.insert("engine->newArray(10)", ",,,,,,,,,"); + value.insert("engine->newDate(QDateTime())", "Invalid Date"); + value.insert("engine->newQMetaObject(&QObject::staticMetaObject)", "[object QMetaObject]"); + value.insert("engine->newVariant(QVariant())", "undefined"); + value.insert("engine->newVariant(QVariant(123))", "123"); + value.insert("engine->newVariant(QVariant(false))", "false"); + value.insert("engine->newQObject(0)", ""); + value.insert("engine->newQObject(engine)", "QScriptEngine(name = \"\")"); } newRow(expr) << value.value(expr); } @@ -5843,6 +9375,7 @@ void tst_QScriptValue::qscriptvalue_castQString_test(const char*, const QScriptV { QFETCH(QString, expected); QCOMPARE(qscriptvalue_cast<QString>(value), expected); + QCOMPARE(qscriptvalue_cast<QString>(value), expected); } DEFINE_TEST_FUNCTION(qscriptvalue_castQString) @@ -5961,8 +9494,45 @@ void tst_QScriptValue::qscriptvalue_castqsreal_makeData(const char* expr) value.insert("engine->evaluate(\"new Object()\")", qQNaN()); value.insert("engine->evaluate(\"new Array()\")", 0); value.insert("engine->evaluate(\"new Error()\")", qQNaN()); + value.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")", 22); + value.insert("engine->evaluate(\"Undefined\")", qQNaN()); + value.insert("engine->evaluate(\"Null\")", qQNaN()); + value.insert("engine->evaluate(\"True\")", qQNaN()); + value.insert("engine->evaluate(\"False\")", qQNaN()); + value.insert("engine->evaluate(\"undefined\")", qQNaN()); + value.insert("engine->evaluate(\"null\")", 0); + value.insert("engine->evaluate(\"true\")", 1); + value.insert("engine->evaluate(\"false\")", 0); + value.insert("engine->evaluate(\"122\")", 122); + value.insert("engine->evaluate(\"124\")", 124); + value.insert("engine->evaluate(\"0\")", 0); + value.insert("engine->evaluate(\"0.0\")", 0); + value.insert("engine->evaluate(\"123.0\")", 123); + value.insert("engine->evaluate(\"6.37e-8\")", 6.369999999999999e-08); + value.insert("engine->evaluate(\"-6.37e-8\")", -6.369999999999999e-08); + value.insert("engine->evaluate(\"0x43211234\")", 1126240820); + value.insert("engine->evaluate(\"0x10000\")", 65536); + value.insert("engine->evaluate(\"0x10001\")", 65537); + value.insert("engine->evaluate(\"NaN\")", qQNaN()); + value.insert("engine->evaluate(\"Infinity\")", qInf()); + value.insert("engine->evaluate(\"-Infinity\")", qInf()); + value.insert("engine->evaluate(\"'ciao'\")", qQNaN()); + value.insert("engine->evaluate(\"''\")", 0); + value.insert("engine->evaluate(\"'0'\")", 0); + value.insert("engine->evaluate(\"'123'\")", 123); + value.insert("engine->evaluate(\"'12.4'\")", 12.4); value.insert("engine->nullValue()", 0); value.insert("engine->undefinedValue()", qQNaN()); + value.insert("engine->newObject()", qQNaN()); + value.insert("engine->newArray()", 0); + value.insert("engine->newArray(10)", qQNaN()); + value.insert("engine->newDate(QDateTime())", qQNaN()); + value.insert("engine->newQMetaObject(&QObject::staticMetaObject)", qQNaN()); + value.insert("engine->newVariant(QVariant())", qQNaN()); + value.insert("engine->newVariant(QVariant(123))", 123); + value.insert("engine->newVariant(QVariant(false))", 0); + value.insert("engine->newQObject(0)", 0); + value.insert("engine->newQObject(engine)", qQNaN()); } newRow(expr) << value.value(expr); } @@ -5972,13 +9542,16 @@ void tst_QScriptValue::qscriptvalue_castqsreal_test(const char*, const QScriptVa QFETCH(qsreal, expected); if (qIsNaN(expected)) { QVERIFY(qIsNaN(qscriptvalue_cast<qsreal>(value))); + QVERIFY(qIsNaN(qscriptvalue_cast<qsreal>(value))); return; } if (qIsInf(expected)) { QVERIFY(qIsInf(qscriptvalue_cast<qsreal>(value))); + QVERIFY(qIsInf(qscriptvalue_cast<qsreal>(value))); return; } QCOMPARE(qscriptvalue_cast<qsreal>(value), expected); + QCOMPARE(qscriptvalue_cast<qsreal>(value), expected); } DEFINE_TEST_FUNCTION(qscriptvalue_castqsreal) @@ -6097,8 +9670,45 @@ void tst_QScriptValue::qscriptvalue_castbool_makeData(const char* expr) value.insert("engine->evaluate(\"new Object()\")", true); value.insert("engine->evaluate(\"new Array()\")", true); value.insert("engine->evaluate(\"new Error()\")", true); + value.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")", true); + value.insert("engine->evaluate(\"Undefined\")", true); + value.insert("engine->evaluate(\"Null\")", true); + value.insert("engine->evaluate(\"True\")", true); + value.insert("engine->evaluate(\"False\")", true); + value.insert("engine->evaluate(\"undefined\")", false); + value.insert("engine->evaluate(\"null\")", false); + value.insert("engine->evaluate(\"true\")", true); + value.insert("engine->evaluate(\"false\")", false); + value.insert("engine->evaluate(\"122\")", true); + value.insert("engine->evaluate(\"124\")", true); + value.insert("engine->evaluate(\"0\")", false); + value.insert("engine->evaluate(\"0.0\")", false); + value.insert("engine->evaluate(\"123.0\")", true); + value.insert("engine->evaluate(\"6.37e-8\")", true); + value.insert("engine->evaluate(\"-6.37e-8\")", true); + value.insert("engine->evaluate(\"0x43211234\")", true); + value.insert("engine->evaluate(\"0x10000\")", true); + value.insert("engine->evaluate(\"0x10001\")", true); + value.insert("engine->evaluate(\"NaN\")", false); + value.insert("engine->evaluate(\"Infinity\")", true); + value.insert("engine->evaluate(\"-Infinity\")", true); + value.insert("engine->evaluate(\"'ciao'\")", true); + value.insert("engine->evaluate(\"''\")", false); + value.insert("engine->evaluate(\"'0'\")", true); + value.insert("engine->evaluate(\"'123'\")", true); + value.insert("engine->evaluate(\"'12.4'\")", true); value.insert("engine->nullValue()", false); value.insert("engine->undefinedValue()", false); + value.insert("engine->newObject()", true); + value.insert("engine->newArray()", true); + value.insert("engine->newArray(10)", true); + value.insert("engine->newDate(QDateTime())", true); + value.insert("engine->newQMetaObject(&QObject::staticMetaObject)", true); + value.insert("engine->newVariant(QVariant())", true); + value.insert("engine->newVariant(QVariant(123))", true); + value.insert("engine->newVariant(QVariant(false))", true); + value.insert("engine->newQObject(0)", false); + value.insert("engine->newQObject(engine)", true); } newRow(expr) << value.value(expr); } @@ -6107,6 +9717,7 @@ void tst_QScriptValue::qscriptvalue_castbool_test(const char*, const QScriptValu { QFETCH(bool, expected); QCOMPARE(qscriptvalue_cast<bool>(value), expected); + QCOMPARE(qscriptvalue_cast<bool>(value), expected); } DEFINE_TEST_FUNCTION(qscriptvalue_castbool) @@ -6225,8 +9836,45 @@ void tst_QScriptValue::qscriptvalue_castqint32_makeData(const char* expr) value.insert("engine->evaluate(\"new Object()\")", 0); value.insert("engine->evaluate(\"new Array()\")", 0); value.insert("engine->evaluate(\"new Error()\")", 0); + value.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")", 22); + value.insert("engine->evaluate(\"Undefined\")", 0); + value.insert("engine->evaluate(\"Null\")", 0); + value.insert("engine->evaluate(\"True\")", 0); + value.insert("engine->evaluate(\"False\")", 0); + value.insert("engine->evaluate(\"undefined\")", 0); + value.insert("engine->evaluate(\"null\")", 0); + value.insert("engine->evaluate(\"true\")", 1); + value.insert("engine->evaluate(\"false\")", 0); + value.insert("engine->evaluate(\"122\")", 122); + value.insert("engine->evaluate(\"124\")", 124); + value.insert("engine->evaluate(\"0\")", 0); + value.insert("engine->evaluate(\"0.0\")", 0); + value.insert("engine->evaluate(\"123.0\")", 123); + value.insert("engine->evaluate(\"6.37e-8\")", 0); + value.insert("engine->evaluate(\"-6.37e-8\")", 0); + value.insert("engine->evaluate(\"0x43211234\")", 1126240820); + value.insert("engine->evaluate(\"0x10000\")", 65536); + value.insert("engine->evaluate(\"0x10001\")", 65537); + value.insert("engine->evaluate(\"NaN\")", 0); + value.insert("engine->evaluate(\"Infinity\")", 0); + value.insert("engine->evaluate(\"-Infinity\")", 0); + value.insert("engine->evaluate(\"'ciao'\")", 0); + value.insert("engine->evaluate(\"''\")", 0); + value.insert("engine->evaluate(\"'0'\")", 0); + value.insert("engine->evaluate(\"'123'\")", 123); + value.insert("engine->evaluate(\"'12.4'\")", 12); value.insert("engine->nullValue()", 0); value.insert("engine->undefinedValue()", 0); + value.insert("engine->newObject()", 0); + value.insert("engine->newArray()", 0); + value.insert("engine->newArray(10)", 0); + value.insert("engine->newDate(QDateTime())", 0); + value.insert("engine->newQMetaObject(&QObject::staticMetaObject)", 0); + value.insert("engine->newVariant(QVariant())", 0); + value.insert("engine->newVariant(QVariant(123))", 123); + value.insert("engine->newVariant(QVariant(false))", 0); + value.insert("engine->newQObject(0)", 0); + value.insert("engine->newQObject(engine)", 0); } newRow(expr) << value.value(expr); } @@ -6235,6 +9883,7 @@ void tst_QScriptValue::qscriptvalue_castqint32_test(const char*, const QScriptVa { QFETCH(qint32, expected); QCOMPARE(qscriptvalue_cast<qint32>(value), expected); + QCOMPARE(qscriptvalue_cast<qint32>(value), expected); } DEFINE_TEST_FUNCTION(qscriptvalue_castqint32) @@ -6353,8 +10002,45 @@ void tst_QScriptValue::qscriptvalue_castquint32_makeData(const char* expr) value.insert("engine->evaluate(\"new Object()\")", 0); value.insert("engine->evaluate(\"new Array()\")", 0); value.insert("engine->evaluate(\"new Error()\")", 0); + value.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")", 22); + value.insert("engine->evaluate(\"Undefined\")", 0); + value.insert("engine->evaluate(\"Null\")", 0); + value.insert("engine->evaluate(\"True\")", 0); + value.insert("engine->evaluate(\"False\")", 0); + value.insert("engine->evaluate(\"undefined\")", 0); + value.insert("engine->evaluate(\"null\")", 0); + value.insert("engine->evaluate(\"true\")", 1); + value.insert("engine->evaluate(\"false\")", 0); + value.insert("engine->evaluate(\"122\")", 122); + value.insert("engine->evaluate(\"124\")", 124); + value.insert("engine->evaluate(\"0\")", 0); + value.insert("engine->evaluate(\"0.0\")", 0); + value.insert("engine->evaluate(\"123.0\")", 123); + value.insert("engine->evaluate(\"6.37e-8\")", 0); + value.insert("engine->evaluate(\"-6.37e-8\")", 0); + value.insert("engine->evaluate(\"0x43211234\")", 1126240820); + value.insert("engine->evaluate(\"0x10000\")", 65536); + value.insert("engine->evaluate(\"0x10001\")", 65537); + value.insert("engine->evaluate(\"NaN\")", 0); + value.insert("engine->evaluate(\"Infinity\")", 0); + value.insert("engine->evaluate(\"-Infinity\")", 0); + value.insert("engine->evaluate(\"'ciao'\")", 0); + value.insert("engine->evaluate(\"''\")", 0); + value.insert("engine->evaluate(\"'0'\")", 0); + value.insert("engine->evaluate(\"'123'\")", 123); + value.insert("engine->evaluate(\"'12.4'\")", 12); value.insert("engine->nullValue()", 0); value.insert("engine->undefinedValue()", 0); + value.insert("engine->newObject()", 0); + value.insert("engine->newArray()", 0); + value.insert("engine->newArray(10)", 0); + value.insert("engine->newDate(QDateTime())", 0); + value.insert("engine->newQMetaObject(&QObject::staticMetaObject)", 0); + value.insert("engine->newVariant(QVariant())", 0); + value.insert("engine->newVariant(QVariant(123))", 123); + value.insert("engine->newVariant(QVariant(false))", 0); + value.insert("engine->newQObject(0)", 0); + value.insert("engine->newQObject(engine)", 0); } newRow(expr) << value.value(expr); } @@ -6363,6 +10049,7 @@ void tst_QScriptValue::qscriptvalue_castquint32_test(const char*, const QScriptV { QFETCH(quint32, expected); QCOMPARE(qscriptvalue_cast<quint32>(value), expected); + QCOMPARE(qscriptvalue_cast<quint32>(value), expected); } DEFINE_TEST_FUNCTION(qscriptvalue_castquint32) @@ -6481,8 +10168,45 @@ void tst_QScriptValue::qscriptvalue_castquint16_makeData(const char* expr) value.insert("engine->evaluate(\"new Object()\")", 0); value.insert("engine->evaluate(\"new Array()\")", 0); value.insert("engine->evaluate(\"new Error()\")", 0); + value.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")", 22); + value.insert("engine->evaluate(\"Undefined\")", 0); + value.insert("engine->evaluate(\"Null\")", 0); + value.insert("engine->evaluate(\"True\")", 0); + value.insert("engine->evaluate(\"False\")", 0); + value.insert("engine->evaluate(\"undefined\")", 0); + value.insert("engine->evaluate(\"null\")", 0); + value.insert("engine->evaluate(\"true\")", 1); + value.insert("engine->evaluate(\"false\")", 0); + value.insert("engine->evaluate(\"122\")", 122); + value.insert("engine->evaluate(\"124\")", 124); + value.insert("engine->evaluate(\"0\")", 0); + value.insert("engine->evaluate(\"0.0\")", 0); + value.insert("engine->evaluate(\"123.0\")", 123); + value.insert("engine->evaluate(\"6.37e-8\")", 0); + value.insert("engine->evaluate(\"-6.37e-8\")", 0); + value.insert("engine->evaluate(\"0x43211234\")", 4660); + value.insert("engine->evaluate(\"0x10000\")", 0); + value.insert("engine->evaluate(\"0x10001\")", 1); + value.insert("engine->evaluate(\"NaN\")", 0); + value.insert("engine->evaluate(\"Infinity\")", 0); + value.insert("engine->evaluate(\"-Infinity\")", 0); + value.insert("engine->evaluate(\"'ciao'\")", 0); + value.insert("engine->evaluate(\"''\")", 0); + value.insert("engine->evaluate(\"'0'\")", 0); + value.insert("engine->evaluate(\"'123'\")", 123); + value.insert("engine->evaluate(\"'12.4'\")", 12); value.insert("engine->nullValue()", 0); value.insert("engine->undefinedValue()", 0); + value.insert("engine->newObject()", 0); + value.insert("engine->newArray()", 0); + value.insert("engine->newArray(10)", 0); + value.insert("engine->newDate(QDateTime())", 0); + value.insert("engine->newQMetaObject(&QObject::staticMetaObject)", 0); + value.insert("engine->newVariant(QVariant())", 0); + value.insert("engine->newVariant(QVariant(123))", 123); + value.insert("engine->newVariant(QVariant(false))", 0); + value.insert("engine->newQObject(0)", 0); + value.insert("engine->newQObject(engine)", 0); } newRow(expr) << value.value(expr); } @@ -6491,6 +10215,7 @@ void tst_QScriptValue::qscriptvalue_castquint16_test(const char*, const QScriptV { QFETCH(quint16, expected); QCOMPARE(qscriptvalue_cast<quint16>(value), expected); + QCOMPARE(qscriptvalue_cast<quint16>(value), expected); } DEFINE_TEST_FUNCTION(qscriptvalue_castquint16) diff --git a/tests/auto/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp b/tests/auto/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp index 68daf1a..e154528 100644 --- a/tests/auto/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp +++ b/tests/auto/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp @@ -934,8 +934,8 @@ void tst_QSequentialAnimationGroup::startDelay() QTest::qWait(500); + QTRY_COMPARE(group.state(), QAnimationGroup::Stopped); QVERIFY(group.currentLoopTime() == 375); - QCOMPARE(group.state(), QAnimationGroup::Stopped); } void tst_QSequentialAnimationGroup::clearGroup() @@ -1029,7 +1029,7 @@ void tst_QSequentialAnimationGroup::groupWithZeroDurationAnimations() QTest::qWait(500); - QCOMPARE(o.property("myProperty").toInt(), 44); + QTRY_COMPARE(o.property("myProperty").toInt(), 44); QCOMPARE(o2.property("myProperty").toInt(), 42); QCOMPARE(o2.property("myOtherProperty").toInt(), 31); QCOMPARE(a1->state(), QAnimationGroup::Stopped); @@ -1171,7 +1171,7 @@ void tst_QSequentialAnimationGroup::deleteChildrenWithRunningGroup() QCOMPARE(anim1->state(), QAnimationGroup::Running); QTest::qWait(100); - QVERIFY(group.currentLoopTime() > 0); + QTRY_VERIFY(group.currentLoopTime() > 0); delete anim1; QCOMPARE(group.animationCount(), 0); @@ -1430,7 +1430,7 @@ void tst_QSequentialAnimationGroup::finishWithUncontrolledAnimation() QCOMPARE(notTimeDriven.currentLoopTime(), 0); QTest::qWait(300); //wait for the end of notTimeDriven - QCOMPARE(notTimeDriven.state(), QAnimationGroup::Stopped); + QTRY_COMPARE(notTimeDriven.state(), QAnimationGroup::Stopped); const int actualDuration = notTimeDriven.currentLoopTime(); QCOMPARE(group.state(), QAnimationGroup::Stopped); QCOMPARE(group.currentLoopTime(), actualDuration); @@ -1459,14 +1459,14 @@ void tst_QSequentialAnimationGroup::finishWithUncontrolledAnimation() QCOMPARE(animStateChangedSpy.count(), 0); QTest::qWait(300); //wait for the end of notTimeDriven - QCOMPARE(notTimeDriven.state(), QAnimationGroup::Stopped); + QTRY_COMPARE(notTimeDriven.state(), QAnimationGroup::Stopped); QCOMPARE(group.state(), QAnimationGroup::Running); QCOMPARE(anim.state(), QAnimationGroup::Running); QCOMPARE(group.currentAnimation(), static_cast<QAbstractAnimation*>(&anim)); QCOMPARE(animStateChangedSpy.count(), 1); QTest::qWait(300); //wait for the end of anim - QCOMPARE(anim.state(), QAnimationGroup::Stopped); + QTRY_COMPARE(anim.state(), QAnimationGroup::Stopped); QCOMPARE(anim.currentLoopTime(), anim.duration()); //we should simply be at the end @@ -1621,7 +1621,7 @@ void tst_QSequentialAnimationGroup::clear() group.start(); QTest::qWait(anim1->duration() + 100); - QCOMPARE(group.animationCount(), 0); + QTRY_COMPARE(group.animationCount(), 0); QCOMPARE(group.state(), QAbstractAnimation::Stopped); QCOMPARE(group.currentLoopTime(), 0); @@ -1629,8 +1629,8 @@ void tst_QSequentialAnimationGroup::clear() group.connect(anim1, SIGNAL(finished()), SLOT(refill())); group.start(); QTest::qWait(anim1->duration() + 100); + QTRY_COMPARE(group.state(), QAbstractAnimation::Running); QVERIFY(anim1 == 0); //anim1 should have been deleted - QCOMPARE(group.state(), QAbstractAnimation::Running); } void tst_QSequentialAnimationGroup::pauseResume() @@ -1645,7 +1645,7 @@ void tst_QSequentialAnimationGroup::pauseResume() QCOMPARE(group.duration(), 250); group.start(); QTest::qWait(100); - QCOMPARE(group.state(), QAnimationGroup::Running); + QTRY_COMPARE(group.state(), QAnimationGroup::Running); QCOMPARE(anim->state(), QAnimationGroup::Running); QCOMPARE(spy.count(), 1); spy.clear(); diff --git a/tests/auto/qstring/tst_qstring.cpp b/tests/auto/qstring/tst_qstring.cpp index 9c9524a..dc37c42 100644 --- a/tests/auto/qstring/tst_qstring.cpp +++ b/tests/auto/qstring/tst_qstring.cpp @@ -165,6 +165,10 @@ private slots: void fromLocal8Bit(); void local8Bit_data(); void local8Bit(); + void fromLatin1Roundtrip_data(); + void fromLatin1Roundtrip(); + void toLatin1Roundtrip_data(); + void toLatin1Roundtrip(); void fromLatin1(); void fromAscii(); void arg(); @@ -3224,6 +3228,109 @@ void tst_QString::local8Bit() QCOMPARE(local8Bit.toLocal8Bit(), QByteArray(result)); } +void tst_QString::fromLatin1Roundtrip_data() +{ + QTest::addColumn<QByteArray>("latin1"); + QTest::addColumn<QString>("unicode"); + + QTest::newRow("null") << QByteArray() << QString(); + QTest::newRow("empty") << QByteArray("") << ""; + + static const ushort unicode1[] = { 'H', 'e', 'l', 'l', 'o', 1, '\r', '\n', 0x7f }; + QTest::newRow("ascii-only") << QByteArray("Hello") << QString::fromUtf16(unicode1, 5); + QTest::newRow("ascii+control") << QByteArray("Hello\1\r\n\x7f") << QString::fromUtf16(unicode1, 9); + + static const ushort unicode3[] = { 'a', 0, 'z' }; + QTest::newRow("ascii+nul") << QByteArray("a\0z", 3) << QString::fromUtf16(unicode3, 3); + + static const ushort unicode4[] = { 0x80, 0xc0, 0xff }; + QTest::newRow("non-ascii") << QByteArray("\x80\xc0\xff") << QString::fromUtf16(unicode4, 3); +} + +void tst_QString::fromLatin1Roundtrip() +{ + QFETCH(QByteArray, latin1); + QFETCH(QString, unicode); + + // QtTest safety check: + Q_ASSERT(latin1.isNull() == unicode.isNull()); + Q_ASSERT(latin1.isEmpty() == unicode.isEmpty()); + Q_ASSERT(latin1.length() == unicode.length()); + + if (!latin1.isEmpty()) + while (latin1.length() < 128) { + latin1 += latin1; + unicode += unicode; + } + + // fromLatin1 + QCOMPARE(QString::fromLatin1(latin1, latin1.length()).length(), unicode.length()); + QCOMPARE(QString::fromLatin1(latin1, latin1.length()), unicode); + + // and back: + QCOMPARE(unicode.toLatin1().length(), latin1.length()); + QCOMPARE(unicode.toLatin1(), latin1); +} + +void tst_QString::toLatin1Roundtrip_data() +{ + QTest::addColumn<QByteArray>("latin1"); + QTest::addColumn<QString>("unicodesrc"); + QTest::addColumn<QString>("unicodedst"); + + QTest::newRow("null") << QByteArray() << QString() << QString(); + QTest::newRow("empty") << QByteArray("") << "" << ""; + + static const ushort unicode1[] = { 'H', 'e', 'l', 'l', 'o', 1, '\r', '\n', 0x7f }; + QTest::newRow("ascii-only") << QByteArray("Hello") << QString::fromUtf16(unicode1, 5) << QString::fromUtf16(unicode1, 5); + QTest::newRow("ascii+control") << QByteArray("Hello\1\r\n\x7f") << QString::fromUtf16(unicode1, 9) << QString::fromUtf16(unicode1, 9); + + static const ushort unicode3[] = { 'a', 0, 'z' }; + QTest::newRow("ascii+nul") << QByteArray("a\0z", 3) << QString::fromUtf16(unicode3, 3) << QString::fromUtf16(unicode3, 3); + + static const ushort unicode4[] = { 0x80, 0xc0, 0xff }; + QTest::newRow("non-ascii") << QByteArray("\x80\xc0\xff") << QString::fromUtf16(unicode4, 3) << QString::fromUtf16(unicode4, 3); + + static const ushort unicodeq[] = { '?', '?', '?', '?', '?' }; + const QString questionmarks = QString::fromUtf16(unicodeq, 5); + + static const ushort unicode5[] = { 0x100, 0x101, 0x17f, 0x7f00, 0x7f7f }; + QTest::newRow("non-latin1a") << QByteArray("?????") << QString::fromUtf16(unicode5, 5) << questionmarks; + + static const ushort unicode6[] = { 0x180, 0x1ff, 0x8001, 0x8080, 0xfffc }; + QTest::newRow("non-latin1b") << QByteArray("?????") << QString::fromUtf16(unicode6, 5) << questionmarks; +} + +void tst_QString::toLatin1Roundtrip() +{ + QFETCH(QByteArray, latin1); + QFETCH(QString, unicodesrc); + QFETCH(QString, unicodedst); + + // QtTest safety check: + Q_ASSERT(latin1.isNull() == unicodesrc.isNull()); + Q_ASSERT(latin1.isEmpty() == unicodesrc.isEmpty()); + Q_ASSERT(latin1.length() == unicodesrc.length()); + Q_ASSERT(latin1.isNull() == unicodedst.isNull()); + Q_ASSERT(latin1.isEmpty() == unicodedst.isEmpty()); + Q_ASSERT(latin1.length() == unicodedst.length()); + + if (!latin1.isEmpty()) + while (latin1.length() < 128) { + latin1 += latin1; + unicodesrc += unicodesrc; + unicodedst += unicodedst; + } + + // toLatin1 + QCOMPARE(unicodesrc.toLatin1().length(), latin1.length()); + QCOMPARE(unicodesrc.toLatin1(), latin1); + + // and back: + QCOMPARE(QString::fromLatin1(latin1, latin1.length()).length(), unicodedst.length()); + QCOMPARE(QString::fromLatin1(latin1, latin1.length()), unicodedst); +} + void tst_QString::fromLatin1() { QString a; diff --git a/tests/auto/qurl/tst_qurl.cpp b/tests/auto/qurl/tst_qurl.cpp index 72ce393..83109b5 100644 --- a/tests/auto/qurl/tst_qurl.cpp +++ b/tests/auto/qurl/tst_qurl.cpp @@ -2513,13 +2513,9 @@ void tst_QUrl::schemeValidator() void tst_QUrl::invalidSchemeValidator() { - // enable that test when QUrl is fixed - return; - // test that if scheme does not start with an ALPHA, QUrl::isValid() returns false { QUrl url("1http://qt.nokia.com", QUrl::StrictMode); - qDebug() << url; QCOMPARE(url.isValid(), false); } { diff --git a/tests/benchmarks/corelib/io/qdir/10000/bench_qdir_10000.cpp b/tests/benchmarks/corelib/io/qdir/10000/bench_qdir_10000.cpp index b325250..1238804 100644 --- a/tests/benchmarks/corelib/io/qdir/10000/bench_qdir_10000.cpp +++ b/tests/benchmarks/corelib/io/qdir/10000/bench_qdir_10000.cpp @@ -156,6 +156,7 @@ private slots: } void sizeSpeedWithoutFilterLowLevel() { + QDir testdir(QDir::tempPath() + QLatin1String("/test_speed")); #ifdef Q_OS_WIN const wchar_t *dirpath = (wchar_t*)testdir.absolutePath().utf16(); wchar_t appendedPath[MAX_PATH]; @@ -173,7 +174,6 @@ private slots: } FindClose(hSearch); #else - QDir testdir(QDir::tempPath() + QLatin1String("/test_speed")); DIR *dir = opendir(qPrintable(testdir.absolutePath())); QVERIFY(dir); diff --git a/tests/benchmarks/corelib/io/qdir/tree/4.6.0-list.txt b/tests/benchmarks/corelib/io/qdir/tree/4.6.0-list.txt new file mode 100644 index 0000000..b915320 --- /dev/null +++ b/tests/benchmarks/corelib/io/qdir/tree/4.6.0-list.txt @@ -0,0 +1,11963 @@ +0 src/ +0 3rdparty/ +0 ce-compat/ +0 ce_time.c + ce_time.h +2 clucene/ +0 APACHE.license + AUTHORS + ChangeLog + COPYING + LGPL.license + README + src/ +0 CLucene/ +0 analysis/ +0 AnalysisHeader.cpp + AnalysisHeader.h + Analyzers.cpp + Analyzers.h + standard/ +0 StandardAnalyzer.cpp + StandardAnalyzer.h + StandardFilter.cpp + StandardFilter.h + StandardTokenizerConstants.h + StandardTokenizer.cpp + StandardTokenizer.h +3 CLBackwards.h + CLConfig.h + CLMonolithic.cpp + config/ +0 CompilerAcc.h + CompilerBcb.h + CompilerGcc.h + compiler.h + CompilerMsvc.h + define_std.h + gunichartables.cpp + gunichartables.h + PlatformMac.h + PlatformUnix.h + PlatformWin32.h + repl_lltot.cpp + repl_tchar.h + repl_tcscasecmp.cpp + repl_tcslwr.cpp + repl_tcstod.cpp + repl_tcstoll.cpp + repl_tprintf.cpp + repl_wchar.h + threadCSection.h + threadPthread.h + threads.cpp + utf8.cpp +2 debug/ +0 condition.cpp + condition.h + error.cpp + error.h + lucenebase.h + mem.h + memtracking.cpp +2 document/ +0 DateField.cpp + DateField.h + Document.cpp + Document.h + Field.cpp + Field.h +3 CLucene.h + CLucene/index/ +0 CompoundFile.cpp + CompoundFile.h + DocumentWriter.cpp + DocumentWriter.h + FieldInfo.h + FieldInfos.cpp + FieldInfos.h + FieldsReader.cpp + FieldsReader.h + FieldsWriter.cpp + FieldsWriter.h + IndexModifier.cpp + IndexModifier.h + IndexReader.cpp + IndexReader.h + IndexWriter.cpp + IndexWriter.h + MultiReader.cpp + MultiReader.h + SegmentHeader.h + SegmentInfos.cpp + SegmentInfos.h + SegmentMergeInfo.cpp + SegmentMergeInfo.h + SegmentMergeQueue.cpp + SegmentMergeQueue.h + SegmentMerger.cpp + SegmentMerger.h + SegmentReader.cpp + SegmentTermDocs.cpp + SegmentTermEnum.cpp + SegmentTermEnum.h + SegmentTermPositions.cpp + SegmentTermVector.cpp + Term.cpp + Term.h + TermInfo.cpp + TermInfo.h + TermInfosReader.cpp + TermInfosReader.h + TermInfosWriter.cpp + TermInfosWriter.h + Terms.h + TermVector.h + TermVectorReader.cpp + TermVectorWriter.cpp +2 CLucene/LuceneThreads.h + CLucene/queryParser/ +0 Lexer.cpp + Lexer.h + MultiFieldQueryParser.cpp + MultiFieldQueryParser.h + QueryParserBase.cpp + QueryParserBase.h + QueryParser.cpp + QueryParser.h + QueryToken.cpp + QueryToken.h + TokenList.cpp + TokenList.h +2 CLucene/search/ +0 BooleanClause.h + BooleanQuery.cpp + BooleanQuery.h + BooleanScorer.cpp + BooleanScorer.h + CachingWrapperFilter.cpp + CachingWrapperFilter.h + ChainedFilter.cpp + ChainedFilter.h + Compare.h + ConjunctionScorer.cpp + ConjunctionScorer.h + DateFilter.cpp + DateFilter.h + ExactPhraseScorer.cpp + ExactPhraseScorer.h + Explanation.cpp + Explanation.h + FieldCache.cpp + FieldCache.h + FieldCacheImpl.cpp + FieldCacheImpl.h + FieldDoc.h + FieldDocSortedHitQueue.cpp + FieldDocSortedHitQueue.h + FieldSortedHitQueue.cpp + FieldSortedHitQueue.h + FilteredTermEnum.cpp + FilteredTermEnum.h + Filter.h + FuzzyQuery.cpp + FuzzyQuery.h + HitQueue.cpp + HitQueue.h + Hits.cpp + IndexSearcher.cpp + IndexSearcher.h + MultiSearcher.cpp + MultiSearcher.h + MultiTermQuery.cpp + MultiTermQuery.h + PhrasePositions.cpp + PhrasePositions.h + PhraseQuery.cpp + PhraseQuery.h + PhraseQueue.h + PhraseScorer.cpp + PhraseScorer.h + PrefixQuery.cpp + PrefixQuery.h + QueryFilter.cpp + QueryFilter.h + RangeFilter.cpp + RangeFilter.h + RangeQuery.cpp + RangeQuery.h + Scorer.h + SearchHeader.cpp + SearchHeader.h + Similarity.cpp + Similarity.h + SloppyPhraseScorer.cpp + SloppyPhraseScorer.h + Sort.cpp + Sort.h + TermQuery.cpp + TermQuery.h + TermScorer.cpp + TermScorer.h + WildcardQuery.cpp + WildcardQuery.h + WildcardTermEnum.cpp + WildcardTermEnum.h +2 CLucene/StdHeader.cpp + CLucene/StdHeader.h + CLucene/store/ +0 Directory.h + FSDirectory.cpp + FSDirectory.h + IndexInput.cpp + IndexInput.h + IndexOutput.cpp + IndexOutput.h + InputStream.h + Lock.cpp + Lock.h + MMapInput.cpp + OutputStream.h + RAMDirectory.cpp + RAMDirectory.h + TransactionalRAMDirectory.cpp + TransactionalRAMDirectory.h +2 CLucene/util/ +0 Arrays.h + BitSet.cpp + BitSet.h + bufferedstream.h + dirent.cpp + dirent.h + Equators.cpp + Equators.h + FastCharStream.cpp + FastCharStream.h + fileinputstream.cpp + fileinputstream.h + inputstreambuffer.h + jstreamsconfig.h + Misc.cpp + Misc.h + PriorityQueue.h + Reader.cpp + Reader.h + streambase.h + StringBuffer.cpp + StringBuffer.h + StringIntern.cpp + StringIntern.h + stringreader.h + subinputstream.h + ThreadLocal.cpp + ThreadLocal.h + VoidList.h + VoidMap.h +4 des/ +0 des.cpp +2 easing/ +0 easing.cpp + legal.qdoc +2 fonts/ +0 5x7.bdf + 6x13.bdf + COPYING.Cursor + COPYING.Helvetica + COPYING.Utopia + COPYRIGHT.BH + COPYRIGHT.Charter + COPYRIGHT.Courier + COPYRIGHT.DejaVu + COPYRIGHT.IBM + COPYRIGHT.Unifont + COPYRIGHT.Vera + helvB08.bdf + helvB10.bdf + helvB12.bdf + helvB14.bdf + helvB18.bdf + helvB24.bdf + helvBO08.bdf + helvBO10.bdf + helvBO12.bdf + helvBO14.bdf + helvBO18.bdf + helvBO24.bdf + helvO08.bdf + helvO10.bdf + helvO12.bdf + helvO14.bdf + helvO18.bdf + helvO24.bdf + helvR08.bdf + helvR10.bdf + helvR12.bdf + helvR14.bdf + helvR18.bdf + helvR24.bdf + micro.bdf + README.DejaVu + unifont.bdf +2 freetype/ +0 autogen.sh + builds/ +0 amiga/ +0 include/ +0 freetype/ +0 config/ +0 ftconfig.h + ftmodule.h +4 makefile +0 .os4 +2 README + smakefile + src/ +0 base/ +0 ftdebug.c + ftsystem.c +4 ansi/ +0 ansi-def.mk + ansi.mk +2 atari/ +0 ATARI.H + FNames.SIC + FREETYPE.PRJ + README.TXT +2 beos/ +0 beos-def.mk + beos.mk + detect.mk +2 compiler/ +0 ansi-cc.mk + bcc-dev.mk + bcc.mk + emx.mk + gcc-dev.mk + gcc.mk + intelc.mk + unix-lcc.mk + visualage.mk + visualc.mk + watcom.mk + win-lcc.mk +2 detect.mk + dos/ +0 detect.mk + dos-def.mk + dos-emx.mk + dos-gcc.mk + dos-wat.mk +2 exports.mk + freetype.mk + link_dos.mk + link_std.mk + mac/ +0 ascii2mpw.py + FreeType.m68k_cfm.make.txt + FreeType.m68k_far.make.txt + FreeType.ppc_carbon.make.txt + FreeType.ppc_classic.make.txt + ftlib.prj.xml + ftmac.c + README +2 modules.mk + newline + os2/ +0 detect.mk + os2-def.mk + os2-dev.mk + os2-gcc.mk +2 symbian/ +0 bld.inf + freetype.mmp +2 toplevel.mk + unix/ +0 aclocal.m4 + config.guess + config.sub + configure +0 .ac + .raw +2 detect.mk + freetype2.in + freetype2.m4 + freetype-config.in + ft2unix.h + ftconfig.h + ftconfig.in + ft-munmap.m4 + ftsystem.c + install.mk + install-sh + ltmain.sh + mkinstalldirs + unix-cc.in + unixddef.mk + unix-def.in + unix-dev.mk + unix-lcc.mk + unix.mk +2 vms/ +0 ftconfig.h + ftsystem.c +2 win32/ +0 detect.mk + ftdebug.c + vc2005/ +0 freetype.sln + freetype.vcproj + index.html +2 vc2008/ +0 freetype.sln + freetype.vcproj + index.html +2 visualc/ +0 freetype.dsp + freetype.dsw + index.html +2 w32-bccd.mk + w32-bcc.mk + w32-dev.mk + w32-gcc.mk + w32-icc.mk + w32-intl.mk + w32-lcc.mk + w32-mingw32.mk + w32-vcc.mk + w32-wat.mk + win32-def.mk +2 wince/ +0 ftdebug.c + vc2005-ce/ +0 freetype.sln + freetype.vcproj + index.html +2 vc2008-ce/ +0 freetype.sln + freetype.vcproj + index.html +4 ChangeLog +0 .20 + .21 + .22 +2 configure + devel/ +0 ft2build.h + ftoption.h +2 docs/ +0 CHANGES + CUSTOMIZE + DEBUG + formats.txt + FTL.TXT + GPL.TXT + INSTALL +0 .ANY + .CROSS + .GNU + .MAC + .UNIX + .VMS +2 LICENSE.TXT + MAKEPP + PATENTS + PROBLEMS + raster.txt + reference/ +0 ft2-base_interface.html + ft2-basic_types.html + ft2-bdf_fonts.html + ft2-bitmap_handling.html + ft2-cache_subsystem.html + ft2-cid_fonts.html + ft2-computations.html + ft2-font_formats.html + ft2-gasp_table.html + ft2-glyph_management.html + ft2-glyph_stroker.html + ft2-glyph_variants.html + ft2-gx_validation.html + ft2-gzip.html + ft2-header_file_macros.html + ft2-incremental.html + ft2-index.html + ft2-lcd_filtering.html + ft2-list_processing.html + ft2-lzw.html + ft2-mac_specific.html + ft2-module_management.html + ft2-multiple_masters.html + ft2-ot_validation.html + ft2-outline_processing.html + ft2-pfr_fonts.html + ft2-quick_advance.html + ft2-raster.html + ft2-sfnt_names.html + ft2-sizes_management.html + ft2-system_interface.html + ft2-toc.html + ft2-truetype_engine.html + ft2-truetype_tables.html + ft2-type1_tables.html + ft2-user_allocation.html + ft2-version.html + ft2-winfnt_fonts.html + README +2 release + TODO + TRUETYPE + UPGRADE.UNIX + VERSION.DLL +2 include/ +0 freetype/ +0 config/ +0 ftconfig.h + ftheader.h + ftmodule.h + ftoption.h + ftstdlib.h +2 freetype.h + ftadvanc.h + ftbbox.h + ftbdf.h + ftbitmap.h + ftcache.h + ftchapters.h + ftcid.h + fterrdef.h + fterrors.h + ftgasp.h + ftglyph.h + ftgxval.h + ftgzip.h + ftimage.h + ftincrem.h + ftlcdfil.h + ftlist.h + ftlzw.h + ftmac.h + ftmm.h + ftmodapi.h + ftmoderr.h + ftotval.h + ftoutln.h + ftpfr.h + ftrender.h + ftsizes.h + ftsnames.h + ftstroke.h + ftsynth.h + ftsystem.h + fttrigon.h + fttypes.h + ftwinfnt.h + ftxf86.h + internal/ +0 autohint.h + ftcalc.h + ftdebug.h + ftdriver.h + ftgloadr.h + ftmemory.h + ftobjs.h + ftrfork.h + ftserv.h + ftstream.h + fttrace.h + ftvalid.h + internal.h + pcftypes.h + psaux.h + pshints.h + services/ +0 svbdf.h + svcid.h + svgldict.h + svgxval.h + svkern.h + svmm.h + svotval.h + svpfr.h + svpostnm.h + svpscmap.h + svpsinfo.h + svsfnt.h + svttcmap.h + svtteng.h + svttglyf.h + svwinfnt.h + svxf86nm.h +2 sfnt.h + t1types.h + tttypes.h +2 t1tables.h + ttnameid.h + tttables.h + tttags.h + ttunpat.h +2 ft2build.h +2 Jamfile + Jamrules + Makefile + modules.cfg + objs/ +0 README +2 README +0 .CVS +2 src/ +0 autofit/ +0 afangles.c + afangles.h + afcjk.c + afcjk.h + afdummy.c + afdummy.h + aferrors.h + afglobal.c + afglobal.h + afhints.c + afhints.h + afindic.c + afindic.h + aflatin2.c + aflatin2.h + aflatin.c + aflatin.h + afloader.c + afloader.h + afmodule.c + afmodule.h + aftypes.h + afwarp.c + afwarp.h + autofit.c + Jamfile + module.mk + rules.mk +2 base/ +0 ftadvanc.c + ftapi.c + ftbase.c + ftbase.h + ftbbox.c + ftbdf.c + ftbitmap.c + ftcalc.c + ftcid.c + ftdbgmem.c + ftdebug.c + ftfstype.c + ftgasp.c + ftgloadr.c + ftglyph.c + ftgxval.c + ftinit.c + ftlcdfil.c + ftmac.c + ftmm.c + ftnames.c + ftobjs.c + ftotval.c + ftoutln.c + ftpatent.c + ftpfr.c + ftrfork.c + ftstream.c + ftstroke.c + ftsynth.c + ftsystem.c + fttrigon.c + fttype1.c + ftutil.c + ftwinfnt.c + ftxf86.c + Jamfile + rules.mk +2 bdf/ +0 bdf.c + bdfdrivr.c + bdfdrivr.h + bdferror.h + bdf.h + bdflib.c + Jamfile + module.mk + README + rules.mk +2 cache/ +0 ftcache.c + ftcbasic.c + ftccache.c + ftccache.h + ftccback.h + ftccmap.c + ftcerror.h + ftcglyph.c + ftcglyph.h + ftcimage.c + ftcimage.h + ftcmanag.c + ftcmanag.h + ftcmru.c + ftcmru.h + ftcsbits.c + ftcsbits.h + Jamfile + rules.mk +2 cff/ +0 cff.c + cffcmap.c + cffcmap.h + cffdrivr.c + cffdrivr.h + cfferrs.h + cffgload.c + cffgload.h + cffload.c + cffload.h + cffobjs.c + cffobjs.h + cffparse.c + cffparse.h + cfftoken.h + cfftypes.h + Jamfile + module.mk + rules.mk +2 cid/ +0 ciderrs.h + cidgload.c + cidgload.h + cidload.c + cidload.h + cidobjs.c + cidobjs.h + cidparse.c + cidparse.h + cidriver.c + cidriver.h + cidtoken.h + Jamfile + module.mk + rules.mk + type1cid.c +2 gxvalid/ +0 gxvalid.c + gxvalid.h + gxvbsln.c + gxvcommn.c + gxvcommn.h + gxverror.h + gxvfeat.c + gxvfeat.h + gxvfgen.c + gxvjust.c + gxvkern.c + gxvlcar.c + gxvmod.c + gxvmod.h + gxvmort0.c + gxvmort1.c + gxvmort2.c + gxvmort4.c + gxvmort5.c + gxvmort.c + gxvmort.h + gxvmorx0.c + gxvmorx1.c + gxvmorx2.c + gxvmorx4.c + gxvmorx5.c + gxvmorx.c + gxvmorx.h + gxvopbd.c + gxvprop.c + gxvtrak.c + Jamfile + module.mk + README + rules.mk +2 gzip/ +0 adler32.c + ftgzip.c + infblock.c + infblock.h + infcodes.c + infcodes.h + inffixed.h + inflate.c + inftrees.c + inftrees.h + infutil.c + infutil.h + Jamfile + rules.mk + zconf.h + zlib.h + zutil.c + zutil.h +2 Jamfile + lzw/ +0 ftlzw.c + ftzopen.c + ftzopen.h + Jamfile + rules.mk +2 otvalid/ +0 Jamfile + module.mk + otvalid.c + otvalid.h + otvbase.c + otvcommn.c + otvcommn.h + otverror.h + otvgdef.c + otvgpos.c + otvgpos.h + otvgsub.c + otvjstf.c + otvmath.c + otvmod.c + otvmod.h + rules.mk +2 pcf/ +0 Jamfile + module.mk + pcf.c + pcfdrivr.c + pcfdrivr.h + pcferror.h + pcf.h + pcfread.c + pcfread.h + pcfutil.c + pcfutil.h + README + rules.mk +2 pfr/ +0 Jamfile + module.mk + pfr.c + pfrcmap.c + pfrcmap.h + pfrdrivr.c + pfrdrivr.h + pfrerror.h + pfrgload.c + pfrgload.h + pfrload.c + pfrload.h + pfrobjs.c + pfrobjs.h + pfrsbit.c + pfrsbit.h + pfrtypes.h + rules.mk +2 psaux/ +0 afmparse.c + afmparse.h + Jamfile + module.mk + psaux.c + psauxerr.h + psauxmod.c + psauxmod.h + psconv.c + psconv.h + psobjs.c + psobjs.h + rules.mk + t1cmap.c + t1cmap.h + t1decode.c + t1decode.h +2 pshinter/ +0 Jamfile + module.mk + pshalgo.c + pshalgo.h + pshglob.c + pshglob.h + pshinter.c + pshmod.c + pshmod.h + pshnterr.h + pshrec.c + pshrec.h + rules.mk +2 psnames/ +0 Jamfile + module.mk + psmodule.c + psmodule.h + psnamerr.h + psnames.c + pstables.h + rules.mk +2 raster/ +0 ftmisc.h + ftraster.c + ftraster.h + ftrend1.c + ftrend1.h + Jamfile + module.mk + raster.c + rasterrs.h + rules.mk +2 sfnt/ +0 Jamfile + module.mk + rules.mk + sfdriver.c + sfdriver.h + sferrors.h + sfnt.c + sfobjs.c + sfobjs.h + ttbdf.c + ttbdf.h + ttcmap.c + ttcmap.h + ttkern.c + ttkern.h + ttload.c + ttload.h + ttmtx.c + ttmtx.h + ttpost.c + ttpost.h + ttsbit0.c + ttsbit.c + ttsbit.h +2 smooth/ +0 ftgrays.c + ftgrays.h + ftsmerrs.h + ftsmooth.c + ftsmooth.h + Jamfile + module.mk + rules.mk + smooth.c +2 tools/ +0 apinames.c + cordic.py + docmaker/ +0 content.py + docbeauty.py + docmaker.py + formatter.py + sources.py + tohtml.py + utils.py +2 ftrandom/ +0 ftrandom.c + Makefile + README +2 glnames.py + Jamfile + test_afm.c + test_bbox.c + test_trig.c +2 truetype/ +0 Jamfile + module.mk + rules.mk + truetype.c + ttdriver.c + ttdriver.h + tterrors.h + ttgload.c + ttgload.h + ttgxvar.c + ttgxvar.h + ttinterp.c + ttinterp.h + ttobjs.c + ttobjs.h + ttpload.c + ttpload.h +2 type1/ +0 Jamfile + module.mk + rules.mk + t1afm.c + t1afm.h + t1driver.c + t1driver.h + t1errors.h + t1gload.c + t1gload.h + t1load.c + t1load.h + t1objs.c + t1objs.h + t1parse.c + t1parse.h + t1tokens.h + type1.c +2 type42/ +0 Jamfile + module.mk + rules.mk + t42drivr.c + t42drivr.h + t42error.h + t42objs.c + t42objs.h + t42parse.c + t42parse.h + t42types.h + type42.c +2 winfonts/ +0 fnterrs.h + Jamfile + module.mk + rules.mk + winfnt.c + winfnt.h +3 version.sed + vms_make.com +2 .gitattributes + harfbuzz/ +0 AUTHORS + autogen.sh + ChangeLog + configure.ac + COPYING + .gitignore + Makefile.am + NEWS + README + src/ +0 .gitignore + harfbuzz-arabic.c + harfbuzz-buffer.c + harfbuzz-buffer.h + harfbuzz-buffer-private.h + harfbuzz.c + harfbuzz-dump.c + harfbuzz-dump.h + harfbuzz-dump-main.c + harfbuzz-external.h + harfbuzz-gdef.c + harfbuzz-gdef.h + harfbuzz-gdef-private.h + harfbuzz-global.h + harfbuzz-gpos.c + harfbuzz-gpos.h + harfbuzz-gpos-private.h + harfbuzz-gsub.c + harfbuzz-gsub.h + harfbuzz-gsub-private.h + harfbuzz.h + harfbuzz-hangul.c + harfbuzz-hebrew.c + harfbuzz-impl.c + harfbuzz-impl.h + harfbuzz-indic.cpp + harfbuzz-khmer.c + harfbuzz-myanmar.c + harfbuzz-open.c + harfbuzz-open.h + harfbuzz-open-private.h + harfbuzz-shape.h + harfbuzz-shaper-all.cpp + harfbuzz-shaper.cpp + harfbuzz-shaper.h + harfbuzz-shaper-private.h + harfbuzz-stream.c + harfbuzz-stream.h + harfbuzz-stream-private.h + harfbuzz-thai.c + harfbuzz-tibetan.c + Makefile.am +2 tests/ +0 linebreaking/ +0 .gitignore + harfbuzz-qt.cpp + main.cpp + Makefile.am +2 Makefile.am + shaping/ +0 .gitignore + main.cpp + Makefile.am + README +4 javascriptcore/ +0 JavaScriptCore/ +0 API/ +0 APICast.h + JavaScriptCore.h + JavaScript.h + JSBase.cpp + JSBase.h + JSBasePrivate.h + JSCallbackConstructor.cpp + JSCallbackConstructor.h + JSCallbackFunction.cpp + JSCallbackFunction.h + JSCallbackObject.cpp + JSCallbackObjectFunctions.h + JSCallbackObject.h + JSClassRef.cpp + JSClassRef.h + JSContextRef.cpp + JSContextRef.h + JSObjectRef.cpp + JSObjectRef.h + JSProfilerPrivate.cpp + JSProfilerPrivate.h + JSRetainPtr.h + JSStringRefBSTR.cpp + JSStringRefBSTR.h + JSStringRefCF.cpp + JSStringRefCF.h + JSStringRef.cpp + JSStringRef.h + JSValueRef.cpp + JSValueRef.h + OpaqueJSString.cpp + OpaqueJSString.h + WebKitAvailability.h +2 assembler/ +0 AbstractMacroAssembler.h + ARMAssembler.cpp + ARMAssembler.h + ARMv7Assembler.h + AssemblerBuffer.h + AssemblerBufferWithConstantPool.h + CodeLocation.h + LinkBuffer.h + MacroAssemblerARM.cpp + MacroAssemblerARM.h + MacroAssemblerARMv7.h + MacroAssemblerCodeRef.h + MacroAssembler.h + MacroAssemblerX86_64.h + MacroAssemblerX86Common.h + MacroAssemblerX86.h + RepatchBuffer.h + X86Assembler.h +2 AUTHORS + bytecode/ +0 CodeBlock.cpp + CodeBlock.h + EvalCodeCache.h + Instruction.h + JumpTable.cpp + JumpTable.h + Opcode.cpp + Opcode.h + SamplingTool.cpp + SamplingTool.h + StructureStubInfo.cpp + StructureStubInfo.h +2 bytecompiler/ +0 BytecodeGenerator.cpp + BytecodeGenerator.h + Label.h + LabelScope.h + RegisterID.h +2 ChangeLog +0 -2002-12-03 + -2003-10-25 + -2007-10-14 + -2008-08-10 + -2009-06-16 +2 config.h + COPYING.LIB + create_hash_table + debugger/ +0 DebuggerActivation.cpp + DebuggerActivation.h + DebuggerCallFrame.cpp + DebuggerCallFrame.h + Debugger.cpp + Debugger.h +2 DerivedSources.make + docs/ +0 make-bytecode-docs.pl +2 ForwardingHeaders/ +0 JavaScriptCore/ +0 APICast.h + JavaScriptCore.h + JavaScript.h + JSBase.h + JSContextRef.h + JSObjectRef.h + JSRetainPtr.h + JSStringRefCF.h + JSStringRef.h + JSValueRef.h + OpaqueJSString.h + WebKitAvailability.h +3 generated/ +0 ArrayPrototype.lut.h + chartables.c + DatePrototype.lut.h + Grammar.cpp + Grammar.h + JSONObject.lut.h + Lexer.lut.h + MathObject.lut.h + NumberConstructor.lut.h + RegExpConstructor.lut.h + RegExpObject.lut.h + StringPrototype.lut.h +2 headers.pri + Info.plist + interpreter/ +0 CachedCall.h + CallFrameClosure.h + CallFrame.cpp + CallFrame.h + Interpreter.cpp + Interpreter.h + RegisterFile.cpp + RegisterFile.h + Register.h +2 JavaScriptCore.gypi + JavaScriptCore.order + JavaScriptCorePrefix.h + JavaScriptCore.pri + jit/ +0 ExecutableAllocator.cpp + ExecutableAllocatorFixedVMPool.cpp + ExecutableAllocator.h + ExecutableAllocatorPosix.cpp + ExecutableAllocatorWin.cpp + JITArithmetic.cpp + JITCall.cpp + JITCode.h + JIT.cpp + JIT.h + JITInlineMethods.h + JITOpcodes.cpp + JITPropertyAccess.cpp + JITStubCall.h + JITStubs.cpp + JITStubs.h +2 jsc.cpp + make-generated-sources.sh + os-win32/ +0 stdbool.h + stdint.h +2 parser/ +0 Grammar.y + Keywords.table + Lexer.cpp + Lexer.h + NodeConstructors.h + NodeInfo.h + Nodes.cpp + Nodes.h + ParserArena.cpp + ParserArena.h + Parser.cpp + Parser.h + ResultType.h + SourceCode.h + SourceProvider.h +2 pcre/ +0 AUTHORS + COPYING + dftables + pcre_compile.cpp + pcre_exec.cpp + pcre.h + pcre_internal.h + pcre.pri + pcre_tables.cpp + pcre_ucp_searchfuncs.cpp + pcre_xclass.cpp + ucpinternal.h + ucptable.cpp +2 profiler/ +0 CallIdentifier.h + HeavyProfile.cpp + HeavyProfile.h + Profile.cpp + ProfileGenerator.cpp + ProfileGenerator.h + Profile.h + ProfileNode.cpp + ProfileNode.h + Profiler.cpp + Profiler.h + ProfilerServer.h + ProfilerServer.mm + TreeProfile.cpp + TreeProfile.h +2 runtime/ +0 ArgList.cpp + ArgList.h + Arguments.cpp + Arguments.h + ArrayConstructor.cpp + ArrayConstructor.h + ArrayPrototype.cpp + ArrayPrototype.h + BatchedTransitionOptimizer.h + BooleanConstructor.cpp + BooleanConstructor.h + BooleanObject.cpp + BooleanObject.h + BooleanPrototype.cpp + BooleanPrototype.h + CallData.cpp + CallData.h + ClassInfo.h + Collector.cpp + Collector.h + CollectorHeapIterator.h + CommonIdentifiers.cpp + CommonIdentifiers.h + Completion.cpp + Completion.h + ConstructData.cpp + ConstructData.h + DateConstructor.cpp + DateConstructor.h + DateConversion.cpp + DateConversion.h + DateInstance.cpp + DateInstance.h + DatePrototype.cpp + DatePrototype.h + ErrorConstructor.cpp + ErrorConstructor.h + Error.cpp + Error.h + ErrorInstance.cpp + ErrorInstance.h + ErrorPrototype.cpp + ErrorPrototype.h + ExceptionHelpers.cpp + ExceptionHelpers.h + Executable.cpp + Executable.h + FunctionConstructor.cpp + FunctionConstructor.h + FunctionPrototype.cpp + FunctionPrototype.h + GetterSetter.cpp + GetterSetter.h + GlobalEvalFunction.cpp + GlobalEvalFunction.h + Identifier.cpp + Identifier.h + InitializeThreading.cpp + InitializeThreading.h + InternalFunction.cpp + InternalFunction.h + JSActivation.cpp + JSActivation.h + JSAPIValueWrapper.cpp + JSAPIValueWrapper.h + JSArray.cpp + JSArray.h + JSByteArray.cpp + JSByteArray.h + JSCell.cpp + JSCell.h + JSFunction.cpp + JSFunction.h + JSGlobalData.cpp + JSGlobalData.h + JSGlobalObject.cpp + JSGlobalObjectFunctions.cpp + JSGlobalObjectFunctions.h + JSGlobalObject.h + JSImmediate.cpp + JSImmediate.h + JSLock.cpp + JSLock.h + JSNotAnObject.cpp + JSNotAnObject.h + JSNumberCell.cpp + JSNumberCell.h + JSObject.cpp + JSObject.h + JSONObject.cpp + JSONObject.h + JSPropertyNameIterator.cpp + JSPropertyNameIterator.h + JSStaticScopeObject.cpp + JSStaticScopeObject.h + JSString.cpp + JSString.h + JSType.h + JSTypeInfo.h + JSValue.cpp + JSValue.h + JSVariableObject.cpp + JSVariableObject.h + JSWrapperObject.cpp + JSWrapperObject.h + LiteralParser.cpp + LiteralParser.h + Lookup.cpp + Lookup.h + MarkStack.cpp + MarkStack.h + MarkStackPosix.cpp + MarkStackWin.cpp + MathObject.cpp + MathObject.h + NativeErrorConstructor.cpp + NativeErrorConstructor.h + NativeErrorPrototype.cpp + NativeErrorPrototype.h + NativeFunctionWrapper.h + NumberConstructor.cpp + NumberConstructor.h + NumberObject.cpp + NumberObject.h + NumberPrototype.cpp + NumberPrototype.h + NumericStrings.h + ObjectConstructor.cpp + ObjectConstructor.h + ObjectPrototype.cpp + ObjectPrototype.h + Operations.cpp + Operations.h + PropertyDescriptor.cpp + PropertyDescriptor.h + PropertyMapHashTable.h + PropertyNameArray.cpp + PropertyNameArray.h + PropertySlot.cpp + PropertySlot.h + Protect.h + PrototypeFunction.cpp + PrototypeFunction.h + PutPropertySlot.h + RegExpConstructor.cpp + RegExpConstructor.h + RegExp.cpp + RegExp.h + RegExpMatchesArray.h + RegExpObject.cpp + RegExpObject.h + RegExpPrototype.cpp + RegExpPrototype.h + ScopeChain.cpp + ScopeChain.h + ScopeChainMark.h + SmallStrings.cpp + SmallStrings.h + StringConstructor.cpp + StringConstructor.h + StringObject.cpp + StringObject.h + StringObjectThatMasqueradesAsUndefined.h + StringPrototype.cpp + StringPrototype.h + StructureChain.cpp + StructureChain.h + Structure.cpp + Structure.h + StructureTransitionTable.h + SymbolTable.h + TimeoutChecker.cpp + TimeoutChecker.h + Tracing.h + UString.cpp + UString.h +2 THANKS + wrec/ +0 CharacterClassConstructor.cpp + CharacterClassConstructor.h + CharacterClass.cpp + CharacterClass.h + Escapes.h + Quantifier.h + WREC.cpp + WRECFunctors.cpp + WRECFunctors.h + WRECGenerator.cpp + WRECGenerator.h + WREC.h + WRECParser.cpp + WRECParser.h +2 wscript + wtf/ +0 AlwaysInline.h + ASCIICType.h + Assertions.cpp + Assertions.h + AVLTree.h + ByteArray.cpp + ByteArray.h + CONTRIBUTORS.pthreads-win32 + CrossThreadRefCounted.h + CurrentTime.cpp + CurrentTime.h + DateMath.cpp + DateMath.h + Deque.h + DisallowCType.h + dtoa.cpp + dtoa.h + FastAllocBase.h + FastMalloc.cpp + FastMalloc.h + Forward.h + GetPtr.h + GOwnPtr.cpp + GOwnPtr.h + HashCountedSet.h + HashFunctions.h + HashIterators.h + HashMap.h + HashSet.h + HashTable.cpp + HashTable.h + HashTraits.h + ListHashSet.h + ListRefPtr.h + Locker.h + MainThread.cpp + MainThread.h + MallocZoneSupport.h + MathExtras.h + MessageQueue.h + Noncopyable.h + NotFound.h + OwnArrayPtr.h + OwnFastMallocPtr.h + OwnPtrCommon.h + OwnPtr.h + OwnPtrWin.cpp + PassOwnPtr.h + PassRefPtr.h + Platform.h + PossiblyNull.h + PtrAndFlags.h + qt/ +0 MainThreadQt.cpp + ThreadingQt.cpp +2 RandomNumber.cpp + RandomNumber.h + RandomNumberSeed.h + RefCounted.h + RefCountedLeakCounter.cpp + RefCountedLeakCounter.h + RefPtr.h + RefPtrHashMap.h + RetainPtr.h + SegmentedVector.h + StdLibExtras.h + StringExtras.h + TCPackedCache.h + TCPageMap.h + TCSpinLock.h + TCSystemAlloc.cpp + TCSystemAlloc.h + Threading.cpp + Threading.h + ThreadingNone.cpp + ThreadingPthreads.cpp + ThreadingWin.cpp + ThreadSpecific.h + ThreadSpecificWin.cpp + TypeTraits.cpp + TypeTraits.h + unicode/ +0 CollatorDefault.cpp + Collator.h + glib/ +0 UnicodeGLib.cpp + UnicodeGLib.h + UnicodeMacrosFromICU.h +2 icu/ +0 CollatorICU.cpp + UnicodeIcu.h +2 qt4/ +0 UnicodeQt4.h +2 Unicode.h + UTF8.cpp + UTF8.h + wince/ +0 UnicodeWince.cpp + UnicodeWince.h +3 UnusedParam.h + Vector.h + VectorTraits.h + VMTags.h + wince/ +0 FastMallocWince.h + MemoryManager.cpp + MemoryManager.h + mt19937ar.c +3 yarr/ +0 RegexCompiler.cpp + RegexCompiler.h + RegexInterpreter.cpp + RegexInterpreter.h + RegexJIT.cpp + RegexJIT.h + RegexParser.h + RegexPattern.h +3 VERSION + WebKit.pri +2 libjpeg/ +0 change.log + coderules.doc + filelist.doc + install.doc + jcapimin.c + jcapistd.c + jccoefct.c + jccolor.c + jcdctmgr.c + jchuff.c + jchuff.h + jcinit.c + jcmainct.c + jcmarker.c + jcmaster.c + jcomapi.c + jconfig.bcc + jconfig.cfg + jconfig.dj + jconfig.doc + jconfig.h + jconfig.mac + jconfig.manx + jconfig.mc6 + jconfig.sas + jconfig.st + jconfig.vc + jconfig.vms + jconfig.wat + jcparam.c + jcphuff.c + jcprepct.c + jcsample.c + jctrans.c + jdapimin.c + jdapistd.c + jdatadst.c + jdatasrc.c + jdcoefct.c + jdcolor.c + jdct.h + jddctmgr.c + jdhuff.c + jdhuff.h + jdinput.c + jdmainct.c + jdmarker.c + jdmaster.c + jdmerge.c + jdphuff.c + jdpostct.c + jdsample.c + jdtrans.c + jerror.c + jerror.h + jfdctflt.c + jfdctfst.c + jfdctint.c + jidctflt.c + jidctfst.c + jidctint.c + jidctred.c + jinclude.h + jmemmgr.c + jmemnobs.c + jmemsys.h + jmorecfg.h + jpegint.h + jpeglib.h + jquant1.c + jquant2.c + jutils.c + jversion.h + libjpeg.doc + makefile.ansi + makefile.bcc + makefile.cfg + makefile.dj + makefile.manx + makefile.mc6 + makefile.mms + makefile.sas + makefile.unix + makefile.vc + makefile.vms + makefile.wat + README + structure.doc + usage.doc + wizard.doc +2 libmng/ +0 CHANGES + doc/ +0 doc.readme + libmng.txt + man/ +0 jng.5 + libmng.3 + mng.5 +2 misc/ +0 magic.dif +2 Plan1.png + Plan2.png + rpm/ +0 libmng-1.0.10-rhconf.patch + libmng.spec +3 libmng_callback_xs.c + libmng_chunk_descr.c + libmng_chunk_descr.h + libmng_chunk_io.c + libmng_chunk_io.h + libmng_chunk_prc.c + libmng_chunk_prc.h + libmng_chunks.h + libmng_chunk_xs.c + libmng_cms.c + libmng_cms.h + libmng_conf.h + libmng_data.h + libmng_display.c + libmng_display.h + libmng_dither.c + libmng_dither.h + libmng_error.c + libmng_error.h + libmng_filter.c + libmng_filter.h + libmng.h + libmng_hlapi.c + libmng_jpeg.c + libmng_jpeg.h + libmng_memory.h + libmng_object_prc.c + libmng_object_prc.h + libmng_objects.h + libmng_pixels.c + libmng_pixels.h + libmng_prop_xs.c + libmng_read.c + libmng_read.h + libmng_trace.c + libmng_trace.h + libmng_types.h + libmng_write.c + libmng_write.h + libmng_zlib.c + libmng_zlib.h + LICENSE + makefiles/ +0 configure.in + Makefile.am + makefile.bcb3 + makefile.dj + makefile.linux + makefile.mingw +0 dll +2 makefile.qnx + makefile.unix + makefile.vcwin32 + README +2 README +0 .autoconf + .config + .contrib + .dll + .examples + .footprint + .packaging +2 unmaintained/ +0 autogen.sh +3 libpng/ +0 ANNOUNCE + CHANGES + configure + example.c + INSTALL + KNOWNBUG + libpng-1.2.40.txt + libpng.3 + libpngpf.3 + LICENSE + png.5 + pngbar.jpg + pngbar.png + png.c + pngconf.h + pngerror.c + pnggccrd.c + pngget.c + png.h + pngmem.c + pngnow.png + pngpread.c + pngread.c + pngrio.c + pngrtran.c + pngrutil.c + pngset.c + pngtest.c + pngtest.png + pngtrans.c + pngvcrd.c + pngwio.c + pngwrite.c + pngwtran.c + pngwutil.c + projects/ +0 beos/ +0 x86-shared.proj + x86-shared.txt + x86-static.proj + x86-static.txt +2 cbuilder5/ +0 libpng.bpf + libpng.bpg + libpng.bpr + libpng.cpp + libpng.readme.txt + libpngstat.bpf + libpngstat.bpr + zlib.readme.txt +2 netware.txt + visualc6/ +0 libpng.dsp + libpng.dsw + pngtest.dsp + README.txt +2 visualc71/ +0 libpng.sln + libpng.vcproj + pngtest.vcproj + PRJ0041.mak + README.txt + README_zlib.txt + zlib.vcproj +2 wince.txt +2 README + scripts/ +0 CMakeLists.txt + descrip.mms + libpng-config-body.in + libpng-config-head.in + libpng-config.in + libpng.icc + libpng.pc-configure.in + libpng.pc.in + makefile.32sunu + makefile.64sunu + makefile.acorn + makefile.aix + makefile.amiga + makefile.atari + makefile.bc32 + makefile.beos + makefile.bor + makefile.cygwin + makefile.darwin + makefile.dec + makefile.dj2 + makefile.elf + makefile.freebsd + makefile.gcc + makefile.gcmmx + makefile.hp64 + makefile.hpgcc + makefile.hpux + makefile.ibmc + makefile.intel + makefile.knr + makefile.linux + makefile.mingw + makefile.mips + makefile.msc + makefile.ne12bsd + makefile.netbsd + makefile.nommx + makefile.openbsd + makefile.os2 + makefile.sco + makefile.sggcc + makefile.sgi + makefile.so9 + makefile.solaris +0 -x86 +2 makefile.std + makefile.sunos + makefile.tc3 + makefile.vcawin32 + makefile.vcwin32 + makefile.watcom + makevms.com + pngos2.def + pngw32.def + pngw32.rc + SCOPTIONS.ppc + smakefile.ppc +2 TODO + Y2KINFO +2 libtiff/ +0 aclocal.m4 + autogen.sh + ChangeLog + config/ +0 compile + config.guess + config.sub + depcomp + install-sh + ltmain.sh + missing + mkinstalldirs +2 configure +0 .ac +2 COPYRIGHT + HOWTO-RELEASE + html/ +0 addingtags.html + bugs.html + build.html + contrib.html + document.html + images/ +0 back.gif + bali.jpg + cat.gif + cover.jpg + cramps.gif + dave.gif +2 images.html + images/info.gif + images/jello.jpg + images/jim.gif + images/Makefile.am + images/Makefile.in + images/note.gif + images/oxford.gif + images/quad.jpg + images/ring.gif + images/smallliz.jpg + images/strike.gif + images/warning.gif + index.html + internals.html + intro.html + libtiff.html + Makefile.am + Makefile.in + man/ +0 fax2ps.1.html + fax2tiff.1.html + gif2tiff.1.html + index.html + libtiff.3tiff.html + Makefile.am + Makefile.in + pal2rgb.1.html + ppm2tiff.1.html + ras2tiff.1.html + raw2tiff.1.html + rgb2ycbcr.1.html + sgi2tiff.1.html + thumbnail.1.html + tiff2bw.1.html + tiff2pdf.1.html + tiff2ps.1.html + tiff2rgba.1.html + TIFFbuffer.3tiff.html + TIFFClose.3tiff.html + tiffcmp.1.html + TIFFcodec.3tiff.html + TIFFcolor.3tiff.html + tiffcp.1.html + TIFFDataWidth.3tiff.html + tiffdither.1.html + tiffdump.1.html + TIFFError.3tiff.html + TIFFFlush.3tiff.html + TIFFGetField.3tiff.html + tiffgt.1.html + tiffinfo.1.html + tiffmedian.1.html + TIFFmemory.3tiff.html + TIFFOpen.3tiff.html + TIFFPrintDirectory.3tiff.html + TIFFquery.3tiff.html + TIFFReadDirectory.3tiff.html + TIFFReadEncodedStrip.3tiff.html + TIFFReadEncodedTile.3tiff.html + TIFFReadRawStrip.3tiff.html + TIFFReadRawTile.3tiff.html + TIFFReadRGBAImage.3tiff.html + TIFFReadRGBAStrip.3tiff.html + TIFFReadRGBATile.3tiff.html + TIFFReadScanline.3tiff.html + TIFFReadTile.3tiff.html + TIFFRGBAImage.3tiff.html + tiffset.1.html + TIFFSetDirectory.3tiff.html + TIFFSetField.3tiff.html + TIFFsize.3tiff.html + tiffsplit.1.html + TIFFstrip.3tiff.html + tiffsv.1.html + TIFFswab.3tiff.html + TIFFtile.3tiff.html + TIFFWarning.3tiff.html + TIFFWriteDirectory.3tiff.html + TIFFWriteEncodedStrip.3tiff.html + TIFFWriteEncodedTile.3tiff.html + TIFFWriteRawStrip.3tiff.html + TIFFWriteRawTile.3tiff.html + TIFFWriteScanline.3tiff.html + TIFFWriteTile.3tiff.html +2 misc.html + support.html + TIFFTechNote2.html + tools.html + v3.4beta007.html + v3.4beta016.html + v3.4beta018.html + v3.4beta024.html + v3.4beta028.html + v3.4beta029.html + v3.4beta031.html + v3.4beta032.html + v3.4beta033.html + v3.4beta034.html + v3.4beta035.html + v3.4beta036.html + v3.5.1.html + v3.5.2.html + v3.5.3.html + v3.5.4.html + v3.5.5.html + v3.5.6-beta.html + v3.5.7.html + v3.6.0.html + v3.6.1.html + v3.7.0alpha.html + v3.7.0beta2.html + v3.7.0beta.html + v3.7.0.html + v3.7.1.html + v3.7.2.html + v3.7.3.html + v3.7.4.html + v3.8.0.html + v3.8.1.html + v3.8.2.html +2 libtiff/ +0 libtiff.def + Makefile.am + Makefile.in + Makefile.vc + mkg3states.c + SConstruct + t4.h + tif_acorn.c + tif_apple.c + tif_atari.c + tif_aux.c + tif_close.c + tif_codec.c + tif_color.c + tif_compress.c + tif_config.h +0 .in + .vc +2 tif_dir.c + tif_dir.h + tif_dirinfo.c + tif_dirread.c + tif_dirwrite.c + tif_dumpmode.c + tif_error.c + tif_extension.c + tif_fax3.c + tif_fax3.h + tif_fax3sm.c + tiffconf.h +0 .in + .vc +2 tiff.h + tiffio.h +0 xx +2 tiffiop.h + tif_flush.c + tiffvers.h + tif_getimage.c + tif_jpeg.c + tif_luv.c + tif_lzw.c + tif_msdos.c + tif_next.c + tif_ojpeg.c + tif_open.c + tif_packbits.c + tif_pixarlog.c + tif_predict.c + tif_predict.h + tif_print.c + tif_read.c + tif_stream.cxx + tif_strip.c + tif_swab.c + tif_thunder.c + tif_tile.c + tif_unix.c + tif_version.c + tif_warning.c + tif_win32.c + tif_win3.c + tif_write.c + tif_zip.c + uvcode.h +2 m4/ +0 acinclude.m4 + libtool.m4 + ltoptions.m4 + ltsugar.m4 + ltversion.m4 +2 Makefile.am + Makefile.in + Makefile.vc + nmake.opt + port/ +0 dummy.c + getopt.c + lfind.c + Makefile.am + Makefile.in + Makefile.vc + strcasecmp.c + strtoul.c +2 README + RELEASE-DATE + SConstruct + test/ +0 ascii_tag.c + check_tag.c + long_tag.c + Makefile.am + Makefile.in + short_tag.c + strip.c + strip_rw.c + test_arrays.c + test_arrays.h +2 TODO + VERSION +2 Makefile + md4/ +0 md4.cpp + md4.h +2 md5/ +0 md5.cpp + md5.h +2 patches/ +0 freetype-2.3.5-config.patch + freetype-2.3.6-ascii.patch + freetype-2.3.6-vxworks.patch + libjpeg-6b-config.patch + libjpeg-6b-vxworks.patch + libmng-1.0.10-endless-loop.patch + libpng-1.2.20-elf-visibility.patch + libpng-1.2.20-vxworks.patch + libtiff-3.8.2-config.patch + libtiff-3.8.2-vxworks.patch + sqlite-3.5.6-config.patch + sqlite-3.5.6-vxworks.patch + sqlite-3.5.6-wince.patch + zlib-1.2.3-elf-visibility.patch +2 phonon/ +0 CMakeLists.txt + COPYING.LIB + ds9/ +0 abstractvideorenderer.cpp + abstractvideorenderer.h + audiooutput.cpp + audiooutput.h + backend.cpp + backend.h + backendnode.cpp + backendnode.h + CMakeLists.txt + compointer.h + ConfigureChecks.cmake + ds9.desktop + effect.cpp + effect.h + fakesource.cpp + fakesource.h + iodevicereader.cpp + iodevicereader.h + lgpl-2.1.txt + lgpl-3.txt + mediagraph.cpp + mediagraph.h + mediaobject.cpp + mediaobject.h + phononds9_namespace.h + qasyncreader.cpp + qasyncreader.h + qaudiocdreader.cpp + qaudiocdreader.h + qbasefilter.cpp + qbasefilter.h + qmeminputpin.cpp + qmeminputpin.h + qpin.cpp + qpin.h + videorenderer_soft.cpp + videorenderer_soft.h + videorenderer_vmr9.cpp + videorenderer_vmr9.h + videowidget.cpp + videowidget.h + volumeeffect.cpp + volumeeffect.h +2 gstreamer/ +0 abstractrenderer.cpp + abstractrenderer.h + alsasink2.c + alsasink2.h + artssink.cpp + artssink.h + audioeffect.cpp + audioeffect.h + audiooutput.cpp + audiooutput.h + backend.cpp + backend.h + CMakeLists.txt + common.h + ConfigureChecks.cmake + devicemanager.cpp + devicemanager.h + effect.cpp + effect.h + effectmanager.cpp + effectmanager.h + glrenderer.cpp + glrenderer.h + gsthelper.cpp + gsthelper.h + gstreamer.desktop + lgpl-2.1.txt + lgpl-3.txt + medianode.cpp + medianodeevent.cpp + medianodeevent.h + medianode.h + mediaobject.cpp + mediaobject.h + message.cpp + message.h + Messages.sh + phononsrc.cpp + phononsrc.h + qwidgetvideosink.cpp + qwidgetvideosink.h + streamreader.cpp + streamreader.h + videowidget.cpp + videowidget.h + volumefadereffect.cpp + volumefadereffect.h + widgetrenderer.cpp + widgetrenderer.h + x11renderer.cpp + x11renderer.h +2 includes/ +0 CMakeLists.txt + Phonon/ +0 AbstractAudioOutput + AbstractMediaStream + AbstractVideoOutput + AddonInterface + AudioDevice +0 Enumerator +2 AudioOutput +0 Device +0 Model +2 Interface +2 BackendCapabilities + BackendInterface + Effect +0 Description +0 Model +2 Interface + Parameter + Widget +2 Experimental/ +0 AbstractVideoDataOutput + AudioDataOutput + SnapshotInterface + VideoDataOutput +0 Interface +2 VideoFrame +0 2 +2 Visualization +2 Global + MediaController + MediaNode + MediaObject +0 Interface +2 MediaSource + ObjectDescription +0 Model +2 Path + PlatformPlugin + SeekSlider + StreamInterface + VideoPlayer + VideoWidget +0 Interface +2 VolumeFaderEffect + VolumeFaderInterface + VolumeSlider +3 mmf/ +0 abstractaudioeffect.cpp + abstractaudioeffect.h + abstractmediaplayer.cpp + abstractmediaplayer.h + abstractplayer.cpp + abstractplayer.h + ancestormovemonitor.cpp + ancestormovemonitor.h + audioequalizer.cpp + audioequalizer.h + audiooutput.cpp + audiooutput.h + audioplayer.cpp + audioplayer.h + backend.cpp + backend.h + bassboost.cpp + bassboost.h + defs.h + dummyplayer.cpp + dummyplayer.h + effectfactory.cpp + effectfactory.h + mediaobject.cpp + mediaobject.h + mmf_medianode.cpp + mmf_medianode.h + mmf_videoplayer.cpp + mmf_videoplayer.h + objectdump.cpp + objectdump.h + objectdump_symbian.cpp + objectdump_symbian.h + objecttree.cpp + objecttree.h + utils.cpp + utils.h + videooutput.cpp + videooutput.h + videooutputobserver.h + videowidget.cpp + videowidget.h + volumeobserver.h +2 phonon/ +0 abstractaudiooutput.cpp + abstractaudiooutput.h + abstractaudiooutput_p.cpp + abstractaudiooutput_p.h + abstractmediastream.cpp + abstractmediastream.h + abstractmediastream_p.h + abstractvideooutput.cpp + abstractvideooutput.h + abstractvideooutput_p.cpp + abstractvideooutput_p.h + addoninterface.h + audiooutputadaptor.cpp + audiooutputadaptor_p.h + audiooutput.cpp + audiooutput.h + audiooutputinterface.cpp + audiooutputinterface.h + audiooutput_p.h + backendcapabilities.cpp + backendcapabilities.h + backendcapabilities_p.h + backend.dox + backendinterface.h + BUGS + CMakeLists.txt + effect.cpp + effect.h + effectinterface.h + effectparameter.cpp + effectparameter.h + effectparameter_p.h + effect_p.h + effectwidget.cpp + effectwidget.h + effectwidget_p.h + extractmethodcalls.rb + factory.cpp + factory_p.h + frontendinterface_p.h + globalconfig.cpp + globalconfig_p.h + globalstatic_p.h + IDEAS + iodevicestream.cpp + iodevicestream_p.h + .krazy + mediacontroller.cpp + mediacontroller.h + medianode.cpp + medianodedestructionhandler_p.h + medianode.h + medianode_p.h + mediaobject.cpp + mediaobject.dox + mediaobject.h + mediaobjectinterface.h + mediaobject_p.h + mediasource.cpp + mediasource.h + mediasource_p.h + Messages.sh + objectdescription.cpp + objectdescription.h + objectdescriptionmodel.cpp + objectdescriptionmodel.h + objectdescriptionmodel_p.h + objectdescription_p.h + org.kde.Phonon.AudioOutput.xml + path.cpp + path.h + path_p.h +2 phonon.pc.cmake + phonon/phonondefs.h + phonon/phonondefs_p.h + phonon/phonon_export.h + phonon/phononnamespace.cpp + phonon/phononnamespace.h +0 .in +2 phonon/phononnamespace_p.h + phonon/platform.cpp + phonon/platform_p.h + phonon/platformplugin.h + phonon/preprocessandextract.sh + phonon/qsettingsgroup_p.h + phonon/seekslider.cpp + phonon/seekslider.h + phonon/seekslider_p.h + phonon/streaminterface.cpp + phonon/streaminterface.h + phonon/streaminterface_p.h + phonon/stream-thoughts + phonon/TODO + phonon/videoplayer.cpp + phonon/videoplayer.h + phonon/videowidget.cpp + phonon/videowidget.h + phonon/videowidgetinterface.h + phonon/videowidget_p.h + phonon/volumefadereffect.cpp + phonon/volumefadereffect.h + phonon/volumefadereffect_p.h + phonon/volumefaderinterface.h + phonon/volumeslider.cpp + phonon/volumeslider.h + phonon/volumeslider_p.h + qt7/ +0 audioconnection.h + audioconnection.mm + audiodevice.h + audiodevice.mm + audioeffects.h + audioeffects.mm + audiograph.h + audiograph.mm + audiomixer.h + audiomixer.mm + audionode.h + audionode.mm + audiooutput.h + audiooutput.mm + audiopartoutput.h + audiopartoutput.mm + audiosplitter.h + audiosplitter.mm + backend.h + backendheader.h + backendheader.mm + backendinfo.h + backendinfo.mm + backend.mm + CMakeLists.txt + ConfigureChecks.cmake + lgpl-2.1.txt + lgpl-3.txt + medianodeevent.h + medianodeevent.mm + medianode.h + medianode.mm + medianodevideopart.h + medianodevideopart.mm + mediaobjectaudionode.h + mediaobjectaudionode.mm + mediaobject.h + mediaobject.mm + quicktimeaudioplayer.h + quicktimeaudioplayer.mm + quicktimemetadata.h + quicktimemetadata.mm + quicktimestreamreader.h + quicktimestreamreader.mm + quicktimevideoplayer.h + quicktimevideoplayer.mm + videoeffect.h + videoeffect.mm + videoframe.h + videoframe.mm + videowidget.h + videowidget.mm +2 waveout/ +0 audiooutput.cpp + audiooutput.h + backend.cpp + backend.h + mediaobject.cpp + mediaobject.h +3 powervr/ +0 pvr2d.h + wsegl.h +2 ptmalloc/ +0 ChangeLog + COPYRIGHT + lran2.h + Makefile + malloc-2.8.3.h + malloc.c + malloc-private.h + ptmalloc3.c + README + sysdeps/ +0 generic/ +0 atomic.h + malloc-machine.h + thread-st.h +2 pthread/ +0 malloc-machine.h + thread-st.h +2 solaris/ +0 malloc-machine.h + thread-st.h +2 sproc/ +0 malloc-machine.h + thread-st.h +4 README + sha1/ +0 sha1.cpp +2 sqlite/ +0 shell.c + sqlite3.c + sqlite3.h +2 webkit/ +0 ChangeLog + .gitignore + JavaScriptCore/ +0 API/ +0 APICast.h + JavaScriptCore.h + JavaScript.h + JSBase.cpp + JSBase.h + JSBasePrivate.h + JSCallbackConstructor.cpp + JSCallbackConstructor.h + JSCallbackFunction.cpp + JSCallbackFunction.h + JSCallbackObject.cpp + JSCallbackObjectFunctions.h + JSCallbackObject.h + JSClassRef.cpp + JSClassRef.h + JSContextRef.cpp + JSContextRef.h + JSContextRefPrivate.h + JSObjectRef.cpp + JSObjectRef.h + JSProfilerPrivate.cpp + JSProfilerPrivate.h + JSRetainPtr.h + JSStringRefBSTR.cpp + JSStringRefBSTR.h + JSStringRefCF.cpp + JSStringRefCF.h + JSStringRef.cpp + JSStringRef.h + JSValueRef.cpp + JSValueRef.h + OpaqueJSString.cpp + OpaqueJSString.h + WebKitAvailability.h +2 assembler/ +0 AbstractMacroAssembler.h + ARMAssembler.cpp + ARMAssembler.h + ARMv7Assembler.h + AssemblerBuffer.h + AssemblerBufferWithConstantPool.h + CodeLocation.h + LinkBuffer.h + MacroAssemblerARM.cpp + MacroAssemblerARM.h + MacroAssemblerARMv7.h + MacroAssemblerCodeRef.h + MacroAssembler.h + MacroAssemblerX86_64.h + MacroAssemblerX86Common.h + MacroAssemblerX86.h + RepatchBuffer.h + X86Assembler.h +2 AUTHORS + bytecode/ +0 CodeBlock.cpp + CodeBlock.h + EvalCodeCache.h + Instruction.h + JumpTable.cpp + JumpTable.h + Opcode.cpp + Opcode.h + SamplingTool.cpp + SamplingTool.h + StructureStubInfo.cpp + StructureStubInfo.h +2 bytecompiler/ +0 BytecodeGenerator.cpp + BytecodeGenerator.h + Label.h + LabelScope.h + RegisterID.h +2 ChangeLog +0 -2002-12-03 + -2003-10-25 + -2007-10-14 + -2008-08-10 + -2009-06-16 +2 config.h + COPYING.LIB + create_hash_table + debugger/ +0 DebuggerActivation.cpp + DebuggerActivation.h + DebuggerCallFrame.cpp + DebuggerCallFrame.h + Debugger.cpp + Debugger.h +2 DerivedSources.make + docs/ +0 make-bytecode-docs.pl +2 ForwardingHeaders/ +0 JavaScriptCore/ +0 APICast.h + JavaScriptCore.h + JavaScript.h + JSBase.h + JSContextRef.h + JSObjectRef.h + JSRetainPtr.h + JSStringRefCF.h + JSStringRef.h + JSValueRef.h + OpaqueJSString.h + WebKitAvailability.h +3 generated/ +0 ArrayPrototype.lut.h + chartables.c + DatePrototype.lut.h + Grammar.cpp + Grammar.h + JSONObject.lut.h + Lexer.lut.h + MathObject.lut.h + NumberConstructor.lut.h + RegExpConstructor.lut.h + RegExpObject.lut.h + StringPrototype.lut.h +2 headers.pri + Info.plist + interpreter/ +0 CachedCall.h + CallFrameClosure.h + CallFrame.cpp + CallFrame.h + Interpreter.cpp + Interpreter.h + RegisterFile.cpp + RegisterFile.h + Register.h +2 JavaScriptCore.gypi + JavaScriptCore.order + JavaScriptCorePrefix.h + JavaScriptCore.pri + JavaScriptCore.pro + jit/ +0 ExecutableAllocator.cpp + ExecutableAllocatorFixedVMPool.cpp + ExecutableAllocator.h + ExecutableAllocatorPosix.cpp + ExecutableAllocatorSymbian.cpp + ExecutableAllocatorWin.cpp + JITArithmetic.cpp + JITCall.cpp + JITCode.h + JIT.cpp + JIT.h + JITInlineMethods.h + JITOpcodes.cpp + JITPropertyAccess.cpp + JITStubCall.h + JITStubs.cpp + JITStubs.h +2 jsc.cpp + make-generated-sources.sh + os-win32/ +0 stdbool.h + stdint.h +2 parser/ +0 Grammar.y + Keywords.table + Lexer.cpp + Lexer.h + NodeConstructors.h + NodeInfo.h + Nodes.cpp + Nodes.h + ParserArena.cpp + ParserArena.h + Parser.cpp + Parser.h + ResultType.h + SourceCode.h + SourceProvider.h +2 pcre/ +0 AUTHORS + COPYING + dftables + pcre_compile.cpp + pcre_exec.cpp + pcre.h + pcre_internal.h + pcre.pri + pcre_tables.cpp + pcre_ucp_searchfuncs.cpp + pcre_xclass.cpp + ucpinternal.h + ucptable.cpp +2 profiler/ +0 CallIdentifier.h + HeavyProfile.cpp + HeavyProfile.h + Profile.cpp + ProfileGenerator.cpp + ProfileGenerator.h + Profile.h + ProfileNode.cpp + ProfileNode.h + Profiler.cpp + Profiler.h + ProfilerServer.h + ProfilerServer.mm + TreeProfile.cpp + TreeProfile.h +2 runtime/ +0 ArgList.cpp + ArgList.h + Arguments.cpp + Arguments.h + ArrayConstructor.cpp + ArrayConstructor.h + ArrayPrototype.cpp + ArrayPrototype.h + BatchedTransitionOptimizer.h + BooleanConstructor.cpp + BooleanConstructor.h + BooleanObject.cpp + BooleanObject.h + BooleanPrototype.cpp + BooleanPrototype.h + CallData.cpp + CallData.h + ClassInfo.h + Collector.cpp + Collector.h + CollectorHeapIterator.h + CommonIdentifiers.cpp + CommonIdentifiers.h + Completion.cpp + Completion.h + ConstructData.cpp + ConstructData.h + DateConstructor.cpp + DateConstructor.h + DateConversion.cpp + DateConversion.h + DateInstanceCache.h + DateInstance.cpp + DateInstance.h + DatePrototype.cpp + DatePrototype.h + ErrorConstructor.cpp + ErrorConstructor.h + Error.cpp + Error.h + ErrorInstance.cpp + ErrorInstance.h + ErrorPrototype.cpp + ErrorPrototype.h + ExceptionHelpers.cpp + ExceptionHelpers.h + Executable.cpp + Executable.h + FunctionConstructor.cpp + FunctionConstructor.h + FunctionPrototype.cpp + FunctionPrototype.h + GetterSetter.cpp + GetterSetter.h + GlobalEvalFunction.cpp + GlobalEvalFunction.h + Identifier.cpp + Identifier.h + InitializeThreading.cpp + InitializeThreading.h + InternalFunction.cpp + InternalFunction.h + JSActivation.cpp + JSActivation.h + JSAPIValueWrapper.cpp + JSAPIValueWrapper.h + JSArray.cpp + JSArray.h + JSByteArray.cpp + JSByteArray.h + JSCell.cpp + JSCell.h + JSFunction.cpp + JSFunction.h + JSGlobalData.cpp + JSGlobalData.h + JSGlobalObject.cpp + JSGlobalObjectFunctions.cpp + JSGlobalObjectFunctions.h + JSGlobalObject.h + JSImmediate.cpp + JSImmediate.h + JSLock.cpp + JSLock.h + JSNotAnObject.cpp + JSNotAnObject.h + JSNumberCell.cpp + JSNumberCell.h + JSObject.cpp + JSObject.h + JSONObject.cpp + JSONObject.h + JSPropertyNameIterator.cpp + JSPropertyNameIterator.h + JSStaticScopeObject.cpp + JSStaticScopeObject.h + JSString.cpp + JSString.h + JSType.h + JSTypeInfo.h + JSValue.cpp + JSValue.h + JSVariableObject.cpp + JSVariableObject.h + JSWrapperObject.cpp + JSWrapperObject.h + LiteralParser.cpp + LiteralParser.h + Lookup.cpp + Lookup.h + MarkStack.cpp + MarkStack.h + MarkStackPosix.cpp + MarkStackSymbian.cpp + MarkStackWin.cpp + MathObject.cpp + MathObject.h + NativeErrorConstructor.cpp + NativeErrorConstructor.h + NativeErrorPrototype.cpp + NativeErrorPrototype.h + NativeFunctionWrapper.h + NumberConstructor.cpp + NumberConstructor.h + NumberObject.cpp + NumberObject.h + NumberPrototype.cpp + NumberPrototype.h + NumericStrings.h + ObjectConstructor.cpp + ObjectConstructor.h + ObjectPrototype.cpp + ObjectPrototype.h + Operations.cpp + Operations.h + PropertyDescriptor.cpp + PropertyDescriptor.h + PropertyMapHashTable.h + PropertyNameArray.cpp + PropertyNameArray.h + PropertySlot.cpp + PropertySlot.h + Protect.h + PrototypeFunction.cpp + PrototypeFunction.h + PutPropertySlot.h + RegExpConstructor.cpp + RegExpConstructor.h + RegExp.cpp + RegExp.h + RegExpMatchesArray.h + RegExpObject.cpp + RegExpObject.h + RegExpPrototype.cpp + RegExpPrototype.h + ScopeChain.cpp + ScopeChain.h + ScopeChainMark.h + SmallStrings.cpp + SmallStrings.h + StringConstructor.cpp + StringConstructor.h + StringObject.cpp + StringObject.h + StringObjectThatMasqueradesAsUndefined.h + StringPrototype.cpp + StringPrototype.h + StructureChain.cpp + StructureChain.h + Structure.cpp + Structure.h + StructureTransitionTable.h + SymbolTable.h + TimeoutChecker.cpp + TimeoutChecker.h + Tracing.h + UString.cpp + UString.h +2 THANKS + wrec/ +0 CharacterClassConstructor.cpp + CharacterClassConstructor.h + CharacterClass.cpp + CharacterClass.h + Escapes.h + Quantifier.h + WREC.cpp + WRECFunctors.cpp + WRECFunctors.h + WRECGenerator.cpp + WRECGenerator.h + WREC.h + WRECParser.cpp + WRECParser.h +2 wscript + wtf/ +0 AlwaysInline.h + ASCIICType.h + Assertions.cpp + Assertions.h + AVLTree.h + ByteArray.cpp + ByteArray.h + CONTRIBUTORS.pthreads-win32 + CrossThreadRefCounted.h + CurrentTime.cpp + CurrentTime.h + DateMath.cpp + DateMath.h + Deque.h + DisallowCType.h + dtoa.cpp + dtoa.h + FastAllocBase.h + FastMalloc.cpp + FastMalloc.h + Forward.h + GetPtr.h + GOwnPtr.cpp + GOwnPtr.h + HashCountedSet.h + HashFunctions.h + HashIterators.h + HashMap.h + HashSet.h + HashTable.cpp + HashTable.h + HashTraits.h + ListHashSet.h + ListRefPtr.h + Locker.h + MainThread.cpp + MainThread.h + MallocZoneSupport.h + MathExtras.h + MessageQueue.h + Noncopyable.h + NotFound.h + OwnArrayPtr.h + OwnFastMallocPtr.h + OwnPtrCommon.h + OwnPtr.h + OwnPtrWin.cpp + PassOwnPtr.h + PassRefPtr.h + Platform.h + PossiblyNull.h + PtrAndFlags.h + qt/ +0 MainThreadQt.cpp + ThreadingQt.cpp +2 RandomNumber.cpp + RandomNumber.h + RandomNumberSeed.h + RefCounted.h + RefCountedLeakCounter.cpp + RefCountedLeakCounter.h + RefPtr.h + RefPtrHashMap.h + RetainPtr.h + SegmentedVector.h + StdLibExtras.h + StringExtras.h + TCPackedCache.h + TCPageMap.h + TCSpinLock.h + TCSystemAlloc.cpp + TCSystemAlloc.h + Threading.cpp + Threading.h + ThreadingNone.cpp + ThreadingPthreads.cpp + ThreadingWin.cpp + ThreadSpecific.h + ThreadSpecificWin.cpp + TypeTraits.cpp + TypeTraits.h + unicode/ +0 CollatorDefault.cpp + Collator.h + glib/ +0 UnicodeGLib.cpp + UnicodeGLib.h + UnicodeMacrosFromICU.h +2 icu/ +0 CollatorICU.cpp + UnicodeIcu.h +2 qt4/ +0 UnicodeQt4.h +2 Unicode.h + UTF8.cpp + UTF8.h + wince/ +0 UnicodeWince.cpp + UnicodeWince.h +3 UnusedParam.h + Vector.h + VectorTraits.h + VMTags.h + wince/ +0 FastMallocWince.h + MemoryManager.cpp + MemoryManager.h + mt19937ar.c +3 yarr/ +0 RegexCompiler.cpp + RegexCompiler.h + RegexInterpreter.cpp + RegexInterpreter.h + RegexJIT.cpp + RegexJIT.h + RegexParser.h + RegexPattern.h +3 VERSION + WebCore/ +0 accessibility/ +0 AccessibilityAllInOne.cpp + AccessibilityARIAGridCell.cpp + AccessibilityARIAGridCell.h + AccessibilityARIAGrid.cpp + AccessibilityARIAGrid.h + AccessibilityARIAGridRow.cpp + AccessibilityARIAGridRow.h + AccessibilityImageMapLink.cpp + AccessibilityImageMapLink.h + AccessibilityListBox.cpp + AccessibilityListBox.h + AccessibilityListBoxOption.cpp + AccessibilityListBoxOption.h + AccessibilityList.cpp + AccessibilityList.h + AccessibilityMediaControls.cpp + AccessibilityMediaControls.h + AccessibilityObject.cpp + AccessibilityObject.h + AccessibilityRenderObject.cpp + AccessibilityRenderObject.h + AccessibilitySlider.cpp + AccessibilitySlider.h + AccessibilityTableCell.cpp + AccessibilityTableCell.h + AccessibilityTableColumn.cpp + AccessibilityTableColumn.h + AccessibilityTable.cpp + AccessibilityTable.h + AccessibilityTableHeaderContainer.cpp + AccessibilityTableHeaderContainer.h + AccessibilityTableRow.cpp + AccessibilityTableRow.h + AXObjectCache.cpp + AXObjectCache.h + qt/ +0 AccessibilityObjectQt.cpp +3 bindings/ +0 js/ +0 CachedScriptSourceProvider.h + DOMObjectWithSVGContext.h + GCController.cpp + GCController.h + JSAbstractWorkerCustom.cpp + JSAttrCustom.cpp + JSAudioConstructor.cpp + JSAudioConstructor.h + JSBindingsAllInOne.cpp + JSCallbackData.cpp + JSCallbackData.h + JSCanvasArrayBufferConstructor.cpp + JSCanvasArrayBufferConstructor.h + JSCanvasArrayCustom.cpp + JSCanvasByteArrayConstructor.cpp + JSCanvasByteArrayConstructor.h + JSCanvasByteArrayCustom.cpp + JSCanvasFloatArrayConstructor.cpp + JSCanvasFloatArrayConstructor.h + JSCanvasFloatArrayCustom.cpp + JSCanvasIntArrayConstructor.cpp + JSCanvasIntArrayConstructor.h + JSCanvasIntArrayCustom.cpp + JSCanvasNumberArrayCustom.cpp + JSCanvasRenderingContext2DCustom.cpp + JSCanvasRenderingContext3DCustom.cpp + JSCanvasRenderingContextCustom.cpp + JSCanvasShortArrayConstructor.cpp + JSCanvasShortArrayConstructor.h + JSCanvasShortArrayCustom.cpp + JSCanvasUnsignedByteArrayConstructor.cpp + JSCanvasUnsignedByteArrayConstructor.h + JSCanvasUnsignedByteArrayCustom.cpp + JSCanvasUnsignedIntArrayConstructor.cpp + JSCanvasUnsignedIntArrayConstructor.h + JSCanvasUnsignedIntArrayCustom.cpp + JSCanvasUnsignedShortArrayConstructor.cpp + JSCanvasUnsignedShortArrayConstructor.h + JSCanvasUnsignedShortArrayCustom.cpp + JSCDATASectionCustom.cpp + JSClipboardCustom.cpp + JSConsoleCustom.cpp + JSCoordinatesCustom.cpp + JSCSSRuleCustom.cpp + JSCSSRuleListCustom.cpp + JSCSSStyleDeclarationCustom.cpp + JSCSSStyleDeclarationCustom.h + JSCSSValueCustom.cpp + JSCustomPositionCallback.cpp + JSCustomPositionCallback.h + JSCustomPositionErrorCallback.cpp + JSCustomPositionErrorCallback.h + JSCustomSQLStatementCallback.cpp + JSCustomSQLStatementCallback.h + JSCustomSQLStatementErrorCallback.cpp + JSCustomSQLStatementErrorCallback.h + JSCustomSQLTransactionCallback.cpp + JSCustomSQLTransactionCallback.h + JSCustomSQLTransactionErrorCallback.cpp + JSCustomSQLTransactionErrorCallback.h + JSCustomVoidCallback.cpp + JSCustomVoidCallback.h + JSCustomXPathNSResolver.cpp + JSCustomXPathNSResolver.h + JSDatabaseCustom.cpp + JSDataGridColumnListCustom.cpp + JSDataGridDataSource.cpp + JSDataGridDataSource.h + JSDedicatedWorkerContextCustom.cpp + JSDesktopNotificationsCustom.cpp + JSDocumentCustom.cpp + JSDocumentFragmentCustom.cpp + JSDOMApplicationCacheCustom.cpp + JSDOMBinding.cpp + JSDOMBinding.h + JSDOMGlobalObject.cpp + JSDOMGlobalObject.h + JSDOMWindowBase.cpp + JSDOMWindowBase.h + JSDOMWindowCustom.cpp + JSDOMWindowCustom.h + JSDOMWindowShell.cpp + JSDOMWindowShell.h + JSElementCustom.cpp + JSEventCustom.cpp + JSEventListener.cpp + JSEventListener.h + JSEventSourceConstructor.cpp + JSEventSourceConstructor.h + JSEventSourceCustom.cpp + JSEventTarget.cpp + JSEventTarget.h + JSExceptionBase.cpp + JSExceptionBase.h + JSGeolocationCustom.cpp + JSHistoryCustom.cpp + JSHistoryCustom.h + JSHTMLAllCollectionCustom.cpp + JSHTMLAppletElementCustom.cpp + JSHTMLAppletElementCustom.h + JSHTMLCanvasElementCustom.cpp + JSHTMLCollectionCustom.cpp + JSHTMLDataGridElementCustom.cpp + JSHTMLDocumentCustom.cpp + JSHTMLElementCustom.cpp + JSHTMLEmbedElementCustom.cpp + JSHTMLEmbedElementCustom.h + JSHTMLFormElementCustom.cpp + JSHTMLFrameElementCustom.cpp + JSHTMLFrameSetElementCustom.cpp + JSHTMLIFrameElementCustom.cpp + JSHTMLInputElementCustom.cpp + JSHTMLInputElementCustom.h + JSHTMLObjectElementCustom.cpp + JSHTMLObjectElementCustom.h + JSHTMLOptionsCollectionCustom.cpp + JSHTMLSelectElementCustom.cpp + JSHTMLSelectElementCustom.h + JSImageConstructor.cpp + JSImageConstructor.h + JSImageDataCustom.cpp + JSInspectedObjectWrapper.cpp + JSInspectedObjectWrapper.h + JSInspectorBackendCustom.cpp + JSInspectorCallbackWrapper.cpp + JSInspectorCallbackWrapper.h + JSJavaScriptCallFrameCustom.cpp + JSLazyEventListener.cpp + JSLazyEventListener.h + JSLocationCustom.cpp + JSLocationCustom.h + JSMessageChannelConstructor.cpp + JSMessageChannelConstructor.h + JSMessageChannelCustom.cpp + JSMessageEventCustom.cpp + JSMessagePortCustom.cpp + JSMessagePortCustom.h + JSMimeTypeArrayCustom.cpp + JSNamedNodeMapCustom.cpp + JSNavigatorCustom.cpp + JSNodeCustom.cpp + JSNodeFilterCondition.cpp + JSNodeFilterCondition.h + JSNodeFilterCustom.cpp + JSNodeIteratorCustom.cpp + JSNodeListCustom.cpp + JSOptionConstructor.cpp + JSOptionConstructor.h + JSPluginArrayCustom.cpp + JSPluginCustom.cpp + JSPluginElementFunctions.cpp + JSPluginElementFunctions.h + JSQuarantinedObjectWrapper.cpp + JSQuarantinedObjectWrapper.h + JSSharedWorkerConstructor.cpp + JSSharedWorkerConstructor.h + JSSharedWorkerCustom.cpp + JSSQLResultSetRowListCustom.cpp + JSSQLTransactionCustom.cpp + JSStorageCustom.cpp + JSStorageCustom.h + JSStyleSheetCustom.cpp + JSStyleSheetListCustom.cpp + JSSVGElementInstanceCustom.cpp + JSSVGLengthCustom.cpp + JSSVGMatrixCustom.cpp + JSSVGPathSegCustom.cpp + JSSVGPathSegListCustom.cpp + JSSVGPODTypeWrapper.h + JSSVGPointListCustom.cpp + JSSVGTransformListCustom.cpp + JSTextCustom.cpp + JSTreeWalkerCustom.cpp + JSWebKitCSSMatrixConstructor.cpp + JSWebKitCSSMatrixConstructor.h + JSWebKitPointConstructor.cpp + JSWebKitPointConstructor.h + JSWebSocketConstructor.cpp + JSWebSocketConstructor.h + JSWebSocketCustom.cpp + JSWorkerConstructor.cpp + JSWorkerConstructor.h + JSWorkerContextBase.cpp + JSWorkerContextBase.h + JSWorkerContextCustom.cpp + JSWorkerCustom.cpp + JSXMLHttpRequestConstructor.cpp + JSXMLHttpRequestConstructor.h + JSXMLHttpRequestCustom.cpp + JSXMLHttpRequestUploadCustom.cpp + JSXSLTProcessorConstructor.cpp + JSXSLTProcessorConstructor.h + JSXSLTProcessorCustom.cpp + ScheduledAction.cpp + ScheduledAction.h + ScriptArray.cpp + ScriptArray.h + ScriptCachedFrameData.cpp + ScriptCachedFrameData.h + ScriptCallFrame.cpp + ScriptCallFrame.h + ScriptCallStack.cpp + ScriptCallStack.h + ScriptController.cpp + ScriptControllerGtk.cpp + ScriptController.h + ScriptControllerHaiku.cpp + ScriptControllerMac.mm + ScriptControllerQt.cpp + ScriptControllerWin.cpp + ScriptControllerWx.cpp + ScriptEventListener.cpp + ScriptEventListener.h + ScriptFunctionCall.cpp + ScriptFunctionCall.h + ScriptInstance.h + ScriptObject.cpp + ScriptObject.h + ScriptObjectQuarantine.cpp + ScriptObjectQuarantine.h + ScriptSourceCode.h + ScriptSourceProvider.h + ScriptState.cpp + ScriptState.h + ScriptString.h + ScriptValue.cpp + ScriptValue.h + SerializedScriptValue.cpp + SerializedScriptValue.h + StringSourceProvider.h + WorkerScriptController.cpp + WorkerScriptController.h +2 ScriptControllerBase.cpp + scripts/ +0 CodeGeneratorCOM.pm + CodeGeneratorJS.pm + CodeGeneratorObjC.pm + CodeGenerator.pm + CodeGeneratorV8.pm + generate-bindings.pl + IDLParser.pm + IDLStructure.pm + InFilesParser.pm +3 bridge/ +0 c/ +0 c_class.cpp + c_class.h + c_instance.cpp + c_instance.h + c_runtime.cpp + c_runtime.h + c_utility.cpp + c_utility.h +2 IdentifierRep.cpp + IdentifierRep.h + jni/ +0 jni_class.cpp + jni_class.h + jni_instance.cpp + jni_instance.h + jni_jsobject.h + jni_jsobject.mm + jni_objc.mm + jni_runtime.cpp + jni_runtime.h + jni_utility.cpp + jni_utility.h +2 make_testbindings + npapi.h + NP_jsobject.cpp + NP_jsobject.h + npruntime.cpp + npruntime.h + npruntime_impl.h + npruntime_internal.h + npruntime_priv.h + qt/ +0 qt_class.cpp + qt_class.h + qt_instance.cpp + qt_instance.h + qt_runtime.cpp + qt_runtime.h +2 runtime_array.cpp + runtime_array.h + runtime.cpp + runtime.h + runtime_method.cpp + runtime_method.h + runtime_object.cpp + runtime_object.h + runtime_root.cpp + runtime_root.h + testbindings.cpp + testbindings.mm + testC.js + test.js + testM.js + testqtbindings.cpp +2 ChangeLog +0 -2002-12-03 + -2003-10-25 + -2005-08-23 + -2005-12-19 + -2006-05-10 + -2006-12-31 + -2007-10-14 + -2008-08-10 + -2009-06-16 +2 combine-javascript-resources + config.h + css/ +0 Counter.h + Counter.idl + CSSBorderImageValue.cpp + CSSBorderImageValue.h + CSSCanvasValue.cpp + CSSCanvasValue.h + CSSCharsetRule.cpp + CSSCharsetRule.h + CSSCharsetRule.idl + CSSComputedStyleDeclaration.cpp + CSSComputedStyleDeclaration.h + CSSCursorImageValue.cpp + CSSCursorImageValue.h + CSSFontFace.cpp + CSSFontFace.h + CSSFontFaceRule.cpp + CSSFontFaceRule.h + CSSFontFaceRule.idl + CSSFontFaceSource.cpp + CSSFontFaceSource.h + CSSFontFaceSrcValue.cpp + CSSFontFaceSrcValue.h + CSSFontSelector.cpp + CSSFontSelector.h + CSSFunctionValue.cpp + CSSFunctionValue.h + CSSGradientValue.cpp + CSSGradientValue.h + CSSGrammar.y + CSSHelper.cpp + CSSHelper.h + CSSImageGeneratorValue.cpp + CSSImageGeneratorValue.h + CSSImageValue.cpp + CSSImageValue.h + CSSImportRule.cpp + CSSImportRule.h + CSSImportRule.idl + CSSInheritedValue.cpp + CSSInheritedValue.h + CSSInitialValue.cpp + CSSInitialValue.h + CSSMediaRule.cpp + CSSMediaRule.h + CSSMediaRule.idl + CSSMutableStyleDeclaration.cpp + CSSMutableStyleDeclaration.h + CSSNamespace.h + CSSPageRule.cpp + CSSPageRule.h + CSSPageRule.idl + CSSParser.cpp + CSSParser.h + CSSParserValues.cpp + CSSParserValues.h + CSSPrimitiveValue.cpp + CSSPrimitiveValue.h + CSSPrimitiveValue.idl + CSSPrimitiveValueMappings.h + CSSProperty.cpp + CSSProperty.h + CSSPropertyLonghand.cpp + CSSPropertyLonghand.h + CSSPropertyNames.in + CSSQuirkPrimitiveValue.h + CSSReflectionDirection.h + CSSReflectValue.cpp + CSSReflectValue.h + CSSRule.cpp + CSSRule.h + CSSRule.idl + CSSRuleList.cpp + CSSRuleList.h + CSSRuleList.idl + CSSSegmentedFontFace.cpp + CSSSegmentedFontFace.h + CSSSelector.cpp + CSSSelector.h + CSSSelectorList.cpp + CSSSelectorList.h + CSSStyleDeclaration.cpp + CSSStyleDeclaration.h + CSSStyleDeclaration.idl + CSSStyleRule.cpp + CSSStyleRule.h + CSSStyleRule.idl + CSSStyleSelector.cpp + CSSStyleSelector.h + CSSStyleSheet.cpp + CSSStyleSheet.h + CSSStyleSheet.idl + CSSTimingFunctionValue.cpp + CSSTimingFunctionValue.h + CSSUnicodeRangeValue.cpp + CSSUnicodeRangeValue.h + CSSUnknownRule.h + CSSUnknownRule.idl + CSSValue.h + CSSValue.idl + CSSValueKeywords.in + CSSValueList.cpp + CSSValueList.h + CSSValueList.idl + CSSVariableDependentValue.cpp + CSSVariableDependentValue.h + CSSVariablesDeclaration.cpp + CSSVariablesDeclaration.h + CSSVariablesDeclaration.idl + CSSVariablesRule.cpp + CSSVariablesRule.h + CSSVariablesRule.idl + DashboardRegion.h + DashboardSupportCSSPropertyNames.in + FontFamilyValue.cpp + FontFamilyValue.h + FontValue.cpp + FontValue.h + html.css + make-css-file-arrays.pl + makegrammar.pl + makeprop.pl + maketokenizer + makevalues.pl + mathml.css + mediaControlsChromium.css + mediaControls.css + mediaControlsQt.css + mediaControlsQuickTime.css + Media.cpp + MediaFeatureNames.cpp + MediaFeatureNames.h + Media.h + Media.idl + MediaList.cpp + MediaList.h + MediaList.idl + MediaQuery.cpp + MediaQueryEvaluator.cpp + MediaQueryEvaluator.h + MediaQueryExp.cpp + MediaQueryExp.h + MediaQuery.h + Pair.h + quirks.css + Rect.h + Rect.idl + RGBColor.cpp + RGBColor.h + RGBColor.idl + ShadowValue.cpp + ShadowValue.h + StyleBase.cpp + StyleBase.h + StyleList.cpp + StyleList.h + StyleSheet.cpp + StyleSheet.h + StyleSheet.idl + StyleSheetList.cpp + StyleSheetList.h + StyleSheetList.idl + svg.css + SVGCSSComputedStyleDeclaration.cpp + SVGCSSParser.cpp + SVGCSSPropertyNames.in + SVGCSSStyleSelector.cpp + SVGCSSValueKeywords.in + themeChromiumLinux.css + themeWin.css + themeWinQuirks.css + tokenizer.flex + view-source.css + WCSSPropertyNames.in + WCSSValueKeywords.in + WebKitCSSKeyframeRule.cpp + WebKitCSSKeyframeRule.h + WebKitCSSKeyframeRule.idl + WebKitCSSKeyframesRule.cpp + WebKitCSSKeyframesRule.h + WebKitCSSKeyframesRule.idl + WebKitCSSMatrix.cpp + WebKitCSSMatrix.h + WebKitCSSMatrix.idl + WebKitCSSTransformValue.cpp + WebKitCSSTransformValue.h + WebKitCSSTransformValue.idl + wml.css +2 DerivedSources.cpp + dom/ +0 ActiveDOMObject.cpp + ActiveDOMObject.h + Attr.cpp + Attr.h + Attribute.cpp + Attribute.h + Attr.idl + BeforeLoadEvent.h + BeforeLoadEvent.idl + BeforeTextInsertedEvent.cpp + BeforeTextInsertedEvent.h + BeforeUnloadEvent.cpp + BeforeUnloadEvent.h + CDATASection.cpp + CDATASection.h + CDATASection.idl + CharacterData.cpp + CharacterData.h + CharacterData.idl + CheckedRadioButtons.cpp + CheckedRadioButtons.h + ChildNodeList.cpp + ChildNodeList.h + ClassNames.cpp + ClassNames.h + ClassNodeList.cpp + ClassNodeList.h + ClientRect.cpp + ClientRect.h + ClientRect.idl + ClientRectList.cpp + ClientRectList.h + ClientRectList.idl + ClipboardAccessPolicy.h + Clipboard.cpp + ClipboardEvent.cpp + ClipboardEvent.h + Clipboard.h + Clipboard.idl + Comment.cpp + Comment.h + Comment.idl + ContainerNodeAlgorithms.h + ContainerNode.cpp + ContainerNode.h + CSSMappedAttributeDeclaration.cpp + CSSMappedAttributeDeclaration.h + default/ +0 PlatformMessagePortChannel.cpp + PlatformMessagePortChannel.h +2 Document.cpp + DocumentFragment.cpp + DocumentFragment.h + DocumentFragment.idl + Document.h + Document.idl + DocumentMarker.h + DocumentType.cpp + DocumentType.h + DocumentType.idl + DOMCoreException.h + DOMCoreException.idl + DOMImplementation.cpp + DOMImplementation.h + DOMImplementation.idl + DynamicNodeList.cpp + DynamicNodeList.h + EditingText.cpp + EditingText.h + Element.cpp + Element.h + Element.idl + ElementRareData.h + Entity.cpp + Entity.h + Entity.idl + EntityReference.cpp + EntityReference.h + EntityReference.idl + ErrorEvent.cpp + ErrorEvent.h + ErrorEvent.idl + Event.cpp + EventException.h + EventException.idl + Event.h + Event.idl + EventListener.h + EventListener.idl + EventNames.cpp + EventNames.h + EventTarget.cpp + EventTarget.h + EventTarget.idl + ExceptionBase.cpp + ExceptionBase.h + ExceptionCode.cpp + ExceptionCode.h + InputElement.cpp + InputElement.h + KeyboardEvent.cpp + KeyboardEvent.h + KeyboardEvent.idl + make_names.pl + MappedAttribute.cpp + MappedAttributeEntry.h + MappedAttribute.h + MessageChannel.cpp + MessageChannel.h + MessageChannel.idl + MessageEvent.cpp + MessageEvent.h + MessageEvent.idl + MessagePortChannel.cpp + MessagePortChannel.h + MessagePort.cpp + MessagePort.h + MessagePort.idl + MouseEvent.cpp + MouseEvent.h + MouseEvent.idl + MouseRelatedEvent.cpp + MouseRelatedEvent.h + MutationEvent.cpp + MutationEvent.h + MutationEvent.idl + NamedAttrMap.cpp + NamedAttrMap.h + NamedMappedAttrMap.cpp + NamedMappedAttrMap.h + NamedNodeMap.h + NamedNodeMap.idl + NameNodeList.cpp + NameNodeList.h + Node.cpp + NodeFilterCondition.cpp + NodeFilterCondition.h + NodeFilter.cpp + NodeFilter.h + NodeFilter.idl + Node.h + Node.idl + NodeIterator.cpp + NodeIterator.h + NodeIterator.idl + NodeList.h + NodeList.idl + NodeRareData.h + NodeRenderStyle.h + NodeWithIndex.h + Notation.cpp + Notation.h + Notation.idl + OptionElement.cpp + OptionElement.h + OptionGroupElement.cpp + OptionGroupElement.h + OverflowEvent.cpp + OverflowEvent.h + OverflowEvent.idl + PageTransitionEvent.cpp + PageTransitionEvent.h + PageTransitionEvent.idl + Position.cpp + PositionCreationFunctions.h + Position.h + PositionIterator.cpp + PositionIterator.h + ProcessingInstruction.cpp + ProcessingInstruction.h + ProcessingInstruction.idl + ProgressEvent.cpp + ProgressEvent.h + ProgressEvent.idl + QualifiedName.cpp + QualifiedName.h + RangeBoundaryPoint.h + Range.cpp + RangeException.h + RangeException.idl + Range.h + Range.idl + RegisteredEventListener.cpp + RegisteredEventListener.h + ScriptElement.cpp + ScriptElement.h + ScriptExecutionContext.cpp + ScriptExecutionContext.h + SelectElement.cpp + SelectElement.h + SelectorNodeList.cpp + SelectorNodeList.h + StaticNodeList.cpp + StaticNodeList.h + StyledElement.cpp + StyledElement.h + StyleElement.cpp + StyleElement.h + TagNodeList.cpp + TagNodeList.h + Text.cpp + TextEvent.cpp + TextEvent.h + TextEvent.idl + Text.h + Text.idl + Tokenizer.h + TransformSource.h + TransformSourceLibxslt.cpp + TransformSourceQt.cpp + Traversal.cpp + Traversal.h + TreeWalker.cpp + TreeWalker.h + TreeWalker.idl + UIEvent.cpp + UIEvent.h + UIEvent.idl + UIEventWithKeyState.cpp + UIEventWithKeyState.h + WebKitAnimationEvent.cpp + WebKitAnimationEvent.h + WebKitAnimationEvent.idl + WebKitTransitionEvent.cpp + WebKitTransitionEvent.h + WebKitTransitionEvent.idl + WheelEvent.cpp + WheelEvent.h + WheelEvent.idl + XMLTokenizer.cpp + XMLTokenizer.h + XMLTokenizerLibxml2.cpp + XMLTokenizerQt.cpp + XMLTokenizerScope.cpp + XMLTokenizerScope.h +2 editing/ +0 android/ +0 EditorAndroid.cpp +2 AppendNodeCommand.cpp + AppendNodeCommand.h + ApplyStyleCommand.cpp + ApplyStyleCommand.h + BreakBlockquoteCommand.cpp + BreakBlockquoteCommand.h + chromium/ +0 EditorChromium.cpp +2 CompositeEditCommand.cpp + CompositeEditCommand.h + CreateLinkCommand.cpp + CreateLinkCommand.h + DeleteButtonController.cpp + DeleteButtonController.h + DeleteButton.cpp + DeleteButton.h + DeleteFromTextNodeCommand.cpp + DeleteFromTextNodeCommand.h + DeleteSelectionCommand.cpp + DeleteSelectionCommand.h + EditAction.h + EditCommand.cpp + EditCommand.h + EditorCommand.cpp + Editor.cpp + EditorDeleteAction.h + Editor.h + EditorInsertAction.h + FormatBlockCommand.cpp + FormatBlockCommand.h + gtk/ +0 SelectionControllerGtk.cpp +2 htmlediting.cpp + htmlediting.h + HTMLInterchange.cpp + HTMLInterchange.h + IndentOutdentCommand.cpp + IndentOutdentCommand.h + InsertIntoTextNodeCommand.cpp + InsertIntoTextNodeCommand.h + InsertLineBreakCommand.cpp + InsertLineBreakCommand.h + InsertListCommand.cpp + InsertListCommand.h + InsertNodeBeforeCommand.cpp + InsertNodeBeforeCommand.h + InsertParagraphSeparatorCommand.cpp + InsertParagraphSeparatorCommand.h + InsertTextCommand.cpp + InsertTextCommand.h + JoinTextNodesCommand.cpp + JoinTextNodesCommand.h + markup.cpp + markup.h + MergeIdenticalElementsCommand.cpp + MergeIdenticalElementsCommand.h + ModifySelectionListLevel.cpp + ModifySelectionListLevel.h + MoveSelectionCommand.cpp + MoveSelectionCommand.h + qt/ +0 EditorQt.cpp +2 RemoveCSSPropertyCommand.cpp + RemoveCSSPropertyCommand.h + RemoveFormatCommand.cpp + RemoveFormatCommand.h + RemoveNodeCommand.cpp + RemoveNodeCommand.h + RemoveNodePreservingChildrenCommand.cpp + RemoveNodePreservingChildrenCommand.h + ReplaceNodeWithSpanCommand.cpp + ReplaceNodeWithSpanCommand.h + ReplaceSelectionCommand.cpp + ReplaceSelectionCommand.h + SelectionController.cpp + SelectionController.h + SetNodeAttributeCommand.cpp + SetNodeAttributeCommand.h + SmartReplaceCF.cpp + SmartReplace.cpp + SmartReplace.h + SmartReplaceICU.cpp + SplitElementCommand.cpp + SplitElementCommand.h + SplitTextNodeCommand.cpp + SplitTextNodeCommand.h + SplitTextNodeContainingElementCommand.cpp + SplitTextNodeContainingElementCommand.h + TextAffinity.h + TextGranularity.h + TextIterator.cpp + TextIterator.h + TypingCommand.cpp + TypingCommand.h + UnlinkCommand.cpp + UnlinkCommand.h + VisiblePosition.cpp + VisiblePosition.h + VisibleSelection.cpp + VisibleSelection.h + visible_units.cpp + visible_units.h + WrapContentsInDummySpanCommand.cpp + WrapContentsInDummySpanCommand.h +2 ForwardingHeaders/ +0 debugger/ +0 DebuggerActivation.h + DebuggerCallFrame.h + Debugger.h +2 interpreter/ +0 CallFrame.h + Interpreter.h +2 jit/ +0 JITCode.h +2 masm/ +0 X86Assembler.h +2 parser/ +0 SourceCode.h + SourceProvider.h +2 pcre/ +0 pcre.h +2 profiler/ +0 Profile.h + ProfileNode.h + Profiler.h +2 runtime/ +0 ArgList.h + ArrayPrototype.h + BooleanObject.h + CallData.h + Collector.h + Completion.h + ConstructData.h + DateInstance.h + Error.h + ExceptionHelpers.h + FunctionConstructor.h + FunctionPrototype.h + Identifier.h + InitializeThreading.h + InternalFunction.h + JSAPIValueWrapper.h + JSArray.h + JSByteArray.h + JSCell.h + JSFunction.h + JSGlobalData.h + JSGlobalObject.h + JSLock.h + JSNumberCell.h + JSObject.h + JSString.h + JSValue.h + Lookup.h + ObjectPrototype.h + Operations.h + PropertyMap.h + PropertyNameArray.h + Protect.h + PrototypeFunction.h + StringObject.h + StringObjectThatMasqueradesAsUndefined.h + StringPrototype.h + StructureChain.h + Structure.h + SymbolTable.h + UString.h +2 wrec/ +0 WREC.h +2 wtf/ +0 AlwaysInline.h + ASCIICType.h + Assertions.h + ByteArray.h + CrossThreadRefCounted.h + CurrentTime.h + DateInstanceCache.h + DateMath.h + Deque.h + DisallowCType.h + dtoa.h + FastAllocBase.h + FastMalloc.h + Forward.h + GetPtr.h + HashCountedSet.h + HashFunctions.h + HashMap.h + HashSet.h + HashTable.h + HashTraits.h + ListHashSet.h + ListRefPtr.h + Locker.h + MainThread.h + MathExtras.h + MessageQueue.h + Noncopyable.h + NotFound.h + OwnArrayPtr.h + OwnFastMallocPtr.h + OwnPtrCommon.h + OwnPtr.h + PassOwnPtr.h + PassRefPtr.h + Platform.h + PossiblyNull.h + PtrAndFlags.h + RandomNumber.h + RefCounted.h + RefCountedLeakCounter.h + RefPtr.h + RetainPtr.h + StdLibExtras.h + StringExtras.h + Threading.h + ThreadSpecific.h + TypeTraits.h + unicode/ +0 Collator.h + icu/ +0 UnicodeIcu.h +2 Unicode.h + UTF8.h +2 UnusedParam.h + Vector.h + VectorTraits.h + VMTags.h +3 generated/ +0 ArrayPrototype.lut.h + chartables.c + ColorData.c + CSSGrammar.cpp + CSSGrammar.h + CSSPropertyNames.cpp + CSSPropertyNames.h + CSSValueKeywords.c + CSSValueKeywords.h + DatePrototype.lut.h + DocTypeStrings.cpp + Grammar.cpp + Grammar.h + HTMLElementFactory.cpp + HTMLElementFactory.h + HTMLEntityNames.c + HTMLNames.cpp + HTMLNames.h + JSAbstractWorker.cpp + JSAbstractWorker.h + JSAttr.cpp + JSAttr.h + JSBarInfo.cpp + JSBarInfo.h + JSBeforeLoadEvent.cpp + JSBeforeLoadEvent.h + JSCanvasArrayBuffer.cpp + JSCanvasArrayBuffer.h + JSCanvasArray.cpp + JSCanvasArray.h + JSCanvasByteArray.cpp + JSCanvasByteArray.h + JSCanvasFloatArray.cpp + JSCanvasFloatArray.h + JSCanvasGradient.cpp + JSCanvasGradient.h + JSCanvasIntArray.cpp + JSCanvasIntArray.h + JSCanvasPattern.cpp + JSCanvasPattern.h + JSCanvasRenderingContext2D.cpp + JSCanvasRenderingContext2D.h + JSCanvasRenderingContext3D.cpp + JSCanvasRenderingContext3D.h + JSCanvasRenderingContext.cpp + JSCanvasRenderingContext.h + JSCanvasShortArray.cpp + JSCanvasShortArray.h + JSCanvasUnsignedByteArray.cpp + JSCanvasUnsignedByteArray.h + JSCanvasUnsignedIntArray.cpp + JSCanvasUnsignedIntArray.h + JSCanvasUnsignedShortArray.cpp + JSCanvasUnsignedShortArray.h + JSCDATASection.cpp + JSCDATASection.h + JSCharacterData.cpp + JSCharacterData.h + JSClientRect.cpp + JSClientRect.h + JSClientRectList.cpp + JSClientRectList.h + JSClipboard.cpp + JSClipboard.h + JSComment.cpp + JSComment.h + JSConsole.cpp + JSConsole.h + JSCoordinates.cpp + JSCoordinates.h + JSCounter.cpp + JSCounter.h + JSCSSCharsetRule.cpp + JSCSSCharsetRule.h + JSCSSFontFaceRule.cpp + JSCSSFontFaceRule.h + JSCSSImportRule.cpp + JSCSSImportRule.h + JSCSSMediaRule.cpp + JSCSSMediaRule.h + JSCSSPageRule.cpp + JSCSSPageRule.h + JSCSSPrimitiveValue.cpp + JSCSSPrimitiveValue.h + JSCSSRule.cpp + JSCSSRule.h + JSCSSRuleList.cpp + JSCSSRuleList.h + JSCSSStyleDeclaration.cpp + JSCSSStyleDeclaration.h + JSCSSStyleRule.cpp + JSCSSStyleRule.h + JSCSSStyleSheet.cpp + JSCSSStyleSheet.h + JSCSSValue.cpp + JSCSSValue.h + JSCSSValueList.cpp + JSCSSValueList.h + JSCSSVariablesDeclaration.cpp + JSCSSVariablesDeclaration.h + JSCSSVariablesRule.cpp + JSCSSVariablesRule.h + JSDatabase.cpp + JSDatabase.h + JSDataGridColumn.cpp + JSDataGridColumn.h + JSDataGridColumnList.cpp + JSDataGridColumnList.h + JSDedicatedWorkerContext.cpp + JSDedicatedWorkerContext.h + JSDocument.cpp + JSDocumentFragment.cpp + JSDocumentFragment.h + JSDocument.h + JSDocumentType.cpp + JSDocumentType.h + JSDOMApplicationCache.cpp + JSDOMApplicationCache.h + JSDOMCoreException.cpp + JSDOMCoreException.h + JSDOMImplementation.cpp + JSDOMImplementation.h + JSDOMParser.cpp + JSDOMParser.h + JSDOMSelection.cpp + JSDOMSelection.h + JSDOMWindowBase.lut.h + JSDOMWindow.cpp + JSDOMWindow.h + JSElement.cpp + JSElement.h + JSEntity.cpp + JSEntity.h + JSEntityReference.cpp + JSEntityReference.h + JSErrorEvent.cpp + JSErrorEvent.h + JSEvent.cpp + JSEventException.cpp + JSEventException.h + JSEvent.h + JSEventSource.cpp + JSEventSource.h + JSFile.cpp + JSFile.h + JSFileList.cpp + JSFileList.h + JSGeolocation.cpp + JSGeolocation.h + JSGeoposition.cpp + JSGeoposition.h + JSHistory.cpp + JSHistory.h + JSHTMLAllCollection.cpp + JSHTMLAllCollection.h + JSHTMLAnchorElement.cpp + JSHTMLAnchorElement.h + JSHTMLAppletElement.cpp + JSHTMLAppletElement.h + JSHTMLAreaElement.cpp + JSHTMLAreaElement.h + JSHTMLAudioElement.cpp + JSHTMLAudioElement.h + JSHTMLBaseElement.cpp + JSHTMLBaseElement.h + JSHTMLBaseFontElement.cpp + JSHTMLBaseFontElement.h + JSHTMLBlockquoteElement.cpp + JSHTMLBlockquoteElement.h + JSHTMLBodyElement.cpp + JSHTMLBodyElement.h + JSHTMLBRElement.cpp + JSHTMLBRElement.h + JSHTMLButtonElement.cpp + JSHTMLButtonElement.h + JSHTMLCanvasElement.cpp + JSHTMLCanvasElement.h + JSHTMLCollection.cpp + JSHTMLCollection.h + JSHTMLDataGridCellElement.cpp + JSHTMLDataGridCellElement.h + JSHTMLDataGridColElement.cpp + JSHTMLDataGridColElement.h + JSHTMLDataGridElement.cpp + JSHTMLDataGridElement.h + JSHTMLDataGridRowElement.cpp + JSHTMLDataGridRowElement.h + JSHTMLDataListElement.cpp + JSHTMLDataListElement.h + JSHTMLDirectoryElement.cpp + JSHTMLDirectoryElement.h + JSHTMLDivElement.cpp + JSHTMLDivElement.h + JSHTMLDListElement.cpp + JSHTMLDListElement.h + JSHTMLDocument.cpp + JSHTMLDocument.h + JSHTMLElement.cpp + JSHTMLElement.h + JSHTMLElementWrapperFactory.cpp + JSHTMLElementWrapperFactory.h + JSHTMLEmbedElement.cpp + JSHTMLEmbedElement.h + JSHTMLFieldSetElement.cpp + JSHTMLFieldSetElement.h + JSHTMLFontElement.cpp + JSHTMLFontElement.h + JSHTMLFormElement.cpp + JSHTMLFormElement.h + JSHTMLFrameElement.cpp + JSHTMLFrameElement.h + JSHTMLFrameSetElement.cpp + JSHTMLFrameSetElement.h + JSHTMLHeadElement.cpp + JSHTMLHeadElement.h + JSHTMLHeadingElement.cpp + JSHTMLHeadingElement.h + JSHTMLHRElement.cpp + JSHTMLHRElement.h + JSHTMLHtmlElement.cpp + JSHTMLHtmlElement.h + JSHTMLIFrameElement.cpp + JSHTMLIFrameElement.h + JSHTMLImageElement.cpp + JSHTMLImageElement.h + JSHTMLInputElement.cpp + JSHTMLInputElement.h + JSHTMLIsIndexElement.cpp + JSHTMLIsIndexElement.h + JSHTMLLabelElement.cpp + JSHTMLLabelElement.h + JSHTMLLegendElement.cpp + JSHTMLLegendElement.h + JSHTMLLIElement.cpp + JSHTMLLIElement.h + JSHTMLLinkElement.cpp + JSHTMLLinkElement.h + JSHTMLMapElement.cpp + JSHTMLMapElement.h + JSHTMLMarqueeElement.cpp + JSHTMLMarqueeElement.h + JSHTMLMediaElement.cpp + JSHTMLMediaElement.h + JSHTMLMenuElement.cpp + JSHTMLMenuElement.h + JSHTMLMetaElement.cpp + JSHTMLMetaElement.h + JSHTMLModElement.cpp + JSHTMLModElement.h + JSHTMLObjectElement.cpp + JSHTMLObjectElement.h + JSHTMLOListElement.cpp + JSHTMLOListElement.h + JSHTMLOptGroupElement.cpp + JSHTMLOptGroupElement.h + JSHTMLOptionElement.cpp + JSHTMLOptionElement.h + JSHTMLOptionsCollection.cpp + JSHTMLOptionsCollection.h + JSHTMLParagraphElement.cpp + JSHTMLParagraphElement.h + JSHTMLParamElement.cpp + JSHTMLParamElement.h + JSHTMLPreElement.cpp + JSHTMLPreElement.h + JSHTMLQuoteElement.cpp + JSHTMLQuoteElement.h + JSHTMLScriptElement.cpp + JSHTMLScriptElement.h + JSHTMLSelectElement.cpp + JSHTMLSelectElement.h + JSHTMLSourceElement.cpp + JSHTMLSourceElement.h + JSHTMLStyleElement.cpp + JSHTMLStyleElement.h + JSHTMLTableCaptionElement.cpp + JSHTMLTableCaptionElement.h + JSHTMLTableCellElement.cpp + JSHTMLTableCellElement.h + JSHTMLTableColElement.cpp + JSHTMLTableColElement.h + JSHTMLTableElement.cpp + JSHTMLTableElement.h + JSHTMLTableRowElement.cpp + JSHTMLTableRowElement.h + JSHTMLTableSectionElement.cpp + JSHTMLTableSectionElement.h + JSHTMLTextAreaElement.cpp + JSHTMLTextAreaElement.h + JSHTMLTitleElement.cpp + JSHTMLTitleElement.h + JSHTMLUListElement.cpp + JSHTMLUListElement.h + JSHTMLVideoElement.cpp + JSHTMLVideoElement.h + JSImageData.cpp + JSImageData.h + JSInspectorBackend.cpp + JSInspectorBackend.h + JSJavaScriptCallFrame.cpp + JSJavaScriptCallFrame.h + JSKeyboardEvent.cpp + JSKeyboardEvent.h + JSLocation.cpp + JSLocation.h + JSMedia.cpp + JSMediaError.cpp + JSMediaError.h + JSMedia.h + JSMediaList.cpp + JSMediaList.h + JSMessageChannel.cpp + JSMessageChannel.h + JSMessageEvent.cpp + JSMessageEvent.h + JSMessagePort.cpp + JSMessagePort.h + JSMimeTypeArray.cpp + JSMimeTypeArray.h + JSMimeType.cpp + JSMimeType.h + JSMouseEvent.cpp + JSMouseEvent.h + JSMutationEvent.cpp + JSMutationEvent.h + JSNamedNodeMap.cpp + JSNamedNodeMap.h + JSNavigator.cpp + JSNavigator.h + JSNode.cpp + JSNodeFilter.cpp + JSNodeFilter.h + JSNode.h + JSNodeIterator.cpp + JSNodeIterator.h + JSNodeList.cpp + JSNodeList.h + JSNotation.cpp + JSNotation.h + JSONObject.lut.h + JSOverflowEvent.cpp + JSOverflowEvent.h + JSPageTransitionEvent.cpp + JSPageTransitionEvent.h + JSPluginArray.cpp + JSPluginArray.h + JSPlugin.cpp + JSPlugin.h + JSPositionError.cpp + JSPositionError.h + JSProcessingInstruction.cpp + JSProcessingInstruction.h + JSProgressEvent.cpp + JSProgressEvent.h + JSRange.cpp + JSRangeException.cpp + JSRangeException.h + JSRange.h + JSRect.cpp + JSRect.h + JSRGBColor.cpp + JSRGBColor.h + JSScreen.cpp + JSScreen.h + JSSharedWorkerContext.cpp + JSSharedWorkerContext.h + JSSharedWorker.cpp + JSSharedWorker.h + JSSQLError.cpp + JSSQLError.h + JSSQLResultSet.cpp + JSSQLResultSet.h + JSSQLResultSetRowList.cpp + JSSQLResultSetRowList.h + JSSQLTransaction.cpp + JSSQLTransaction.h + JSStorage.cpp + JSStorageEvent.cpp + JSStorageEvent.h + JSStorage.h + JSStyleSheet.cpp + JSStyleSheet.h + JSStyleSheetList.cpp + JSStyleSheetList.h + JSSVGAElement.cpp + JSSVGAElement.h + JSSVGAltGlyphElement.cpp + JSSVGAltGlyphElement.h + JSSVGAngle.cpp + JSSVGAngle.h + JSSVGAnimateColorElement.cpp + JSSVGAnimateColorElement.h + JSSVGAnimatedAngle.cpp + JSSVGAnimatedAngle.h + JSSVGAnimatedBoolean.cpp + JSSVGAnimatedBoolean.h + JSSVGAnimatedEnumeration.cpp + JSSVGAnimatedEnumeration.h + JSSVGAnimatedInteger.cpp + JSSVGAnimatedInteger.h + JSSVGAnimatedLength.cpp + JSSVGAnimatedLength.h + JSSVGAnimatedLengthList.cpp + JSSVGAnimatedLengthList.h + JSSVGAnimatedNumber.cpp + JSSVGAnimatedNumber.h + JSSVGAnimatedNumberList.cpp + JSSVGAnimatedNumberList.h + JSSVGAnimatedPreserveAspectRatio.cpp + JSSVGAnimatedPreserveAspectRatio.h + JSSVGAnimatedRect.cpp + JSSVGAnimatedRect.h + JSSVGAnimatedString.cpp + JSSVGAnimatedString.h + JSSVGAnimatedTransformList.cpp + JSSVGAnimatedTransformList.h + JSSVGAnimateElement.cpp + JSSVGAnimateElement.h + JSSVGAnimateTransformElement.cpp + JSSVGAnimateTransformElement.h + JSSVGAnimationElement.cpp + JSSVGAnimationElement.h + JSSVGCircleElement.cpp + JSSVGCircleElement.h + JSSVGClipPathElement.cpp + JSSVGClipPathElement.h + JSSVGColor.cpp + JSSVGColor.h + JSSVGComponentTransferFunctionElement.cpp + JSSVGComponentTransferFunctionElement.h + JSSVGCursorElement.cpp + JSSVGCursorElement.h + JSSVGDefsElement.cpp + JSSVGDefsElement.h + JSSVGDescElement.cpp + JSSVGDescElement.h + JSSVGDocument.cpp + JSSVGDocument.h + JSSVGElement.cpp + JSSVGElement.h + JSSVGElementInstance.cpp + JSSVGElementInstance.h + JSSVGElementInstanceList.cpp + JSSVGElementInstanceList.h + JSSVGElementWrapperFactory.cpp + JSSVGElementWrapperFactory.h + JSSVGEllipseElement.cpp + JSSVGEllipseElement.h + JSSVGException.cpp + JSSVGException.h + JSSVGFEBlendElement.cpp + JSSVGFEBlendElement.h + JSSVGFEColorMatrixElement.cpp + JSSVGFEColorMatrixElement.h + JSSVGFEComponentTransferElement.cpp + JSSVGFEComponentTransferElement.h + JSSVGFECompositeElement.cpp + JSSVGFECompositeElement.h + JSSVGFEDiffuseLightingElement.cpp + JSSVGFEDiffuseLightingElement.h + JSSVGFEDisplacementMapElement.cpp + JSSVGFEDisplacementMapElement.h + JSSVGFEDistantLightElement.cpp + JSSVGFEDistantLightElement.h + JSSVGFEFloodElement.cpp + JSSVGFEFloodElement.h + JSSVGFEFuncAElement.cpp + JSSVGFEFuncAElement.h + JSSVGFEFuncBElement.cpp + JSSVGFEFuncBElement.h + JSSVGFEFuncGElement.cpp + JSSVGFEFuncGElement.h + JSSVGFEFuncRElement.cpp + JSSVGFEFuncRElement.h + JSSVGFEGaussianBlurElement.cpp + JSSVGFEGaussianBlurElement.h + JSSVGFEImageElement.cpp + JSSVGFEImageElement.h + JSSVGFEMergeElement.cpp + JSSVGFEMergeElement.h + JSSVGFEMergeNodeElement.cpp + JSSVGFEMergeNodeElement.h + JSSVGFEMorphologyElement.cpp + JSSVGFEMorphologyElement.h + JSSVGFEOffsetElement.cpp + JSSVGFEOffsetElement.h + JSSVGFEPointLightElement.cpp + JSSVGFEPointLightElement.h + JSSVGFESpecularLightingElement.cpp + JSSVGFESpecularLightingElement.h + JSSVGFESpotLightElement.cpp + JSSVGFESpotLightElement.h + JSSVGFETileElement.cpp + JSSVGFETileElement.h + JSSVGFETurbulenceElement.cpp + JSSVGFETurbulenceElement.h + JSSVGFilterElement.cpp + JSSVGFilterElement.h + JSSVGFontElement.cpp + JSSVGFontElement.h + JSSVGFontFaceElement.cpp + JSSVGFontFaceElement.h + JSSVGFontFaceFormatElement.cpp + JSSVGFontFaceFormatElement.h + JSSVGFontFaceNameElement.cpp + JSSVGFontFaceNameElement.h + JSSVGFontFaceSrcElement.cpp + JSSVGFontFaceSrcElement.h + JSSVGFontFaceUriElement.cpp + JSSVGFontFaceUriElement.h + JSSVGForeignObjectElement.cpp + JSSVGForeignObjectElement.h + JSSVGGElement.cpp + JSSVGGElement.h + JSSVGGlyphElement.cpp + JSSVGGlyphElement.h + JSSVGGradientElement.cpp + JSSVGGradientElement.h + JSSVGHKernElement.cpp + JSSVGHKernElement.h + JSSVGImageElement.cpp + JSSVGImageElement.h + JSSVGLength.cpp + JSSVGLength.h + JSSVGLengthList.cpp + JSSVGLengthList.h + JSSVGLinearGradientElement.cpp + JSSVGLinearGradientElement.h + JSSVGLineElement.cpp + JSSVGLineElement.h + JSSVGMarkerElement.cpp + JSSVGMarkerElement.h + JSSVGMaskElement.cpp + JSSVGMaskElement.h + JSSVGMatrix.cpp + JSSVGMatrix.h + JSSVGMetadataElement.cpp + JSSVGMetadataElement.h + JSSVGMissingGlyphElement.cpp + JSSVGMissingGlyphElement.h + JSSVGNumber.cpp + JSSVGNumber.h + JSSVGNumberList.cpp + JSSVGNumberList.h + JSSVGPaint.cpp + JSSVGPaint.h + JSSVGPathElement.cpp + JSSVGPathElement.h + JSSVGPathSegArcAbs.cpp + JSSVGPathSegArcAbs.h + JSSVGPathSegArcRel.cpp + JSSVGPathSegArcRel.h + JSSVGPathSegClosePath.cpp + JSSVGPathSegClosePath.h + JSSVGPathSeg.cpp + JSSVGPathSegCurvetoCubicAbs.cpp + JSSVGPathSegCurvetoCubicAbs.h + JSSVGPathSegCurvetoCubicRel.cpp + JSSVGPathSegCurvetoCubicRel.h + JSSVGPathSegCurvetoCubicSmoothAbs.cpp + JSSVGPathSegCurvetoCubicSmoothAbs.h + JSSVGPathSegCurvetoCubicSmoothRel.cpp + JSSVGPathSegCurvetoCubicSmoothRel.h + JSSVGPathSegCurvetoQuadraticAbs.cpp + JSSVGPathSegCurvetoQuadraticAbs.h + JSSVGPathSegCurvetoQuadraticRel.cpp + JSSVGPathSegCurvetoQuadraticRel.h + JSSVGPathSegCurvetoQuadraticSmoothAbs.cpp + JSSVGPathSegCurvetoQuadraticSmoothAbs.h + JSSVGPathSegCurvetoQuadraticSmoothRel.cpp + JSSVGPathSegCurvetoQuadraticSmoothRel.h + JSSVGPathSeg.h + JSSVGPathSegLinetoAbs.cpp + JSSVGPathSegLinetoAbs.h + JSSVGPathSegLinetoHorizontalAbs.cpp + JSSVGPathSegLinetoHorizontalAbs.h + JSSVGPathSegLinetoHorizontalRel.cpp + JSSVGPathSegLinetoHorizontalRel.h + JSSVGPathSegLinetoRel.cpp + JSSVGPathSegLinetoRel.h + JSSVGPathSegLinetoVerticalAbs.cpp + JSSVGPathSegLinetoVerticalAbs.h + JSSVGPathSegLinetoVerticalRel.cpp + JSSVGPathSegLinetoVerticalRel.h + JSSVGPathSegList.cpp + JSSVGPathSegList.h + JSSVGPathSegMovetoAbs.cpp + JSSVGPathSegMovetoAbs.h + JSSVGPathSegMovetoRel.cpp + JSSVGPathSegMovetoRel.h + JSSVGPatternElement.cpp + JSSVGPatternElement.h + JSSVGPoint.cpp + JSSVGPoint.h + JSSVGPointList.cpp + JSSVGPointList.h + JSSVGPolygonElement.cpp + JSSVGPolygonElement.h + JSSVGPolylineElement.cpp + JSSVGPolylineElement.h + JSSVGPreserveAspectRatio.cpp + JSSVGPreserveAspectRatio.h + JSSVGRadialGradientElement.cpp + JSSVGRadialGradientElement.h + JSSVGRect.cpp + JSSVGRectElement.cpp + JSSVGRectElement.h + JSSVGRect.h + JSSVGRenderingIntent.cpp + JSSVGRenderingIntent.h + JSSVGScriptElement.cpp + JSSVGScriptElement.h + JSSVGSetElement.cpp + JSSVGSetElement.h + JSSVGStopElement.cpp + JSSVGStopElement.h + JSSVGStringList.cpp + JSSVGStringList.h + JSSVGStyleElement.cpp + JSSVGStyleElement.h + JSSVGSVGElement.cpp + JSSVGSVGElement.h + JSSVGSwitchElement.cpp + JSSVGSwitchElement.h + JSSVGSymbolElement.cpp + JSSVGSymbolElement.h + JSSVGTextContentElement.cpp + JSSVGTextContentElement.h + JSSVGTextElement.cpp + JSSVGTextElement.h + JSSVGTextPathElement.cpp + JSSVGTextPathElement.h + JSSVGTextPositioningElement.cpp + JSSVGTextPositioningElement.h + JSSVGTitleElement.cpp + JSSVGTitleElement.h + JSSVGTransform.cpp + JSSVGTransform.h + JSSVGTransformList.cpp + JSSVGTransformList.h + JSSVGTRefElement.cpp + JSSVGTRefElement.h + JSSVGTSpanElement.cpp + JSSVGTSpanElement.h + JSSVGUnitTypes.cpp + JSSVGUnitTypes.h + JSSVGUseElement.cpp + JSSVGUseElement.h + JSSVGViewElement.cpp + JSSVGViewElement.h + JSSVGZoomEvent.cpp + JSSVGZoomEvent.h + JSText.cpp + JSTextEvent.cpp + JSTextEvent.h + JSText.h + JSTextMetrics.cpp + JSTextMetrics.h + JSTimeRanges.cpp + JSTimeRanges.h + JSTreeWalker.cpp + JSTreeWalker.h + JSUIEvent.cpp + JSUIEvent.h + JSValidityState.cpp + JSValidityState.h + JSVoidCallback.cpp + JSVoidCallback.h + JSWebKitAnimationEvent.cpp + JSWebKitAnimationEvent.h + JSWebKitCSSKeyframeRule.cpp + JSWebKitCSSKeyframeRule.h + JSWebKitCSSKeyframesRule.cpp + JSWebKitCSSKeyframesRule.h + JSWebKitCSSMatrix.cpp + JSWebKitCSSMatrix.h + JSWebKitCSSTransformValue.cpp + JSWebKitCSSTransformValue.h + JSWebKitPoint.cpp + JSWebKitPoint.h + JSWebKitTransitionEvent.cpp + JSWebKitTransitionEvent.h + JSWebSocket.cpp + JSWebSocket.h + JSWheelEvent.cpp + JSWheelEvent.h + JSWorkerContextBase.lut.h + JSWorkerContext.cpp + JSWorkerContext.h + JSWorker.cpp + JSWorker.h + JSWorkerLocation.cpp + JSWorkerLocation.h + JSWorkerNavigator.cpp + JSWorkerNavigator.h + JSXMLHttpRequest.cpp + JSXMLHttpRequestException.cpp + JSXMLHttpRequestException.h + JSXMLHttpRequest.h + JSXMLHttpRequestProgressEvent.cpp + JSXMLHttpRequestProgressEvent.h + JSXMLHttpRequestUpload.cpp + JSXMLHttpRequestUpload.h + JSXMLSerializer.cpp + JSXMLSerializer.h + JSXPathEvaluator.cpp + JSXPathEvaluator.h + JSXPathException.cpp + JSXPathException.h + JSXPathExpression.cpp + JSXPathExpression.h + JSXPathNSResolver.cpp + JSXPathNSResolver.h + JSXPathResult.cpp + JSXPathResult.h + JSXSLTProcessor.cpp + JSXSLTProcessor.h + Lexer.lut.h + MathObject.lut.h + NumberConstructor.lut.h + RegExpConstructor.lut.h + RegExpObject.lut.h + StringPrototype.lut.h + SVGElementFactory.cpp + SVGElementFactory.h + SVGNames.cpp + SVGNames.h + tokenizer.cpp + UserAgentStyleSheetsData.cpp + UserAgentStyleSheets.h + WebKitVersion.h + XLinkNames.cpp + XLinkNames.h + XMLNames.cpp + XMLNames.h + XPathGrammar.cpp + XPathGrammar.h +2 history/ +0 BackForwardListChromium.cpp + BackForwardList.cpp + BackForwardList.h + CachedFrame.cpp + CachedFrame.h + CachedFramePlatformData.h + CachedPage.cpp + CachedPage.h + cf/ +0 HistoryPropertyList.cpp + HistoryPropertyList.h +2 HistoryItem.cpp + HistoryItem.h + PageCache.cpp + PageCache.h + qt/ +0 HistoryItemQt.cpp +3 html/ +0 canvas/ +0 CanvasActiveInfo.h + CanvasActiveInfo.idl + CanvasArrayBuffer.cpp + CanvasArrayBuffer.h + CanvasArrayBuffer.idl + CanvasArray.cpp + CanvasArray.h + CanvasArray.idl + CanvasBuffer.cpp + CanvasBuffer.h + CanvasBuffer.idl + CanvasByteArray.cpp + CanvasByteArray.h + CanvasByteArray.idl + CanvasFloatArray.cpp + CanvasFloatArray.h + CanvasFloatArray.idl + CanvasFramebuffer.cpp + CanvasFramebuffer.h + CanvasFramebuffer.idl + CanvasGradient.cpp + CanvasGradient.h + CanvasGradient.idl + CanvasIntArray.cpp + CanvasIntArray.h + CanvasIntArray.idl + CanvasNumberArray.cpp + CanvasNumberArray.h + CanvasNumberArray.idl + CanvasObject.cpp + CanvasObject.h + CanvasPattern.cpp + CanvasPattern.h + CanvasPattern.idl + CanvasPixelArray.cpp + CanvasPixelArray.h + CanvasPixelArray.idl + CanvasProgram.cpp + CanvasProgram.h + CanvasProgram.idl + CanvasRenderbuffer.cpp + CanvasRenderbuffer.h + CanvasRenderbuffer.idl + CanvasRenderingContext2D.cpp + CanvasRenderingContext2D.h + CanvasRenderingContext2D.idl + CanvasRenderingContext3D.cpp + CanvasRenderingContext3D.h + CanvasRenderingContext3D.idl + CanvasRenderingContext.cpp + CanvasRenderingContext.h + CanvasRenderingContext.idl + CanvasShader.cpp + CanvasShader.h + CanvasShader.idl + CanvasShortArray.cpp + CanvasShortArray.h + CanvasShortArray.idl + CanvasStyle.cpp + CanvasStyle.h + CanvasTexture.cpp + CanvasTexture.h + CanvasTexture.idl + CanvasUnsignedByteArray.cpp + CanvasUnsignedByteArray.h + CanvasUnsignedByteArray.idl + CanvasUnsignedIntArray.cpp + CanvasUnsignedIntArray.h + CanvasUnsignedIntArray.idl + CanvasUnsignedShortArray.cpp + CanvasUnsignedShortArray.h + CanvasUnsignedShortArray.idl +2 CollectionCache.cpp + CollectionCache.h + CollectionType.h + DataGridColumn.cpp + DataGridColumn.h + DataGridColumn.idl + DataGridColumnList.cpp + DataGridColumnList.h + DataGridColumnList.idl + DataGridDataSource.h + DocTypeStrings.gperf + DOMDataGridDataSource.cpp + DOMDataGridDataSource.h + File.cpp + File.h + File.idl + FileList.cpp + FileList.h + FileList.idl + FormDataList.cpp + FormDataList.h + HTMLAllCollection.cpp + HTMLAllCollection.h + HTMLAllCollection.idl + HTMLAnchorElement.cpp + HTMLAnchorElement.h + HTMLAnchorElement.idl + HTMLAppletElement.cpp + HTMLAppletElement.h + HTMLAppletElement.idl + HTMLAreaElement.cpp + HTMLAreaElement.h + HTMLAreaElement.idl + HTMLAttributeNames.in + HTMLAudioElement.cpp + HTMLAudioElement.h + HTMLAudioElement.idl + HTMLBaseElement.cpp + HTMLBaseElement.h + HTMLBaseElement.idl + HTMLBaseFontElement.cpp + HTMLBaseFontElement.h + HTMLBaseFontElement.idl + HTMLBlockquoteElement.cpp + HTMLBlockquoteElement.h + HTMLBlockquoteElement.idl + HTMLBodyElement.cpp + HTMLBodyElement.h + HTMLBodyElement.idl + HTMLBRElement.cpp + HTMLBRElement.h + HTMLBRElement.idl + HTMLButtonElement.cpp + HTMLButtonElement.h + HTMLButtonElement.idl + HTMLCanvasElement.cpp + HTMLCanvasElement.h + HTMLCanvasElement.idl + HTMLCollection.cpp + HTMLCollection.h + HTMLCollection.idl + HTMLDataGridCellElement.cpp + HTMLDataGridCellElement.h + HTMLDataGridCellElement.idl + HTMLDataGridColElement.cpp + HTMLDataGridColElement.h + HTMLDataGridColElement.idl + HTMLDataGridElement.cpp + HTMLDataGridElement.h + HTMLDataGridElement.idl + HTMLDataGridRowElement.cpp + HTMLDataGridRowElement.h + HTMLDataGridRowElement.idl + HTMLDataListElement.cpp + HTMLDataListElement.h + HTMLDataListElement.idl + HTMLDirectoryElement.cpp + HTMLDirectoryElement.h + HTMLDirectoryElement.idl + HTMLDivElement.cpp + HTMLDivElement.h + HTMLDivElement.idl + HTMLDListElement.cpp + HTMLDListElement.h + HTMLDListElement.idl + HTMLDocument.cpp + HTMLDocument.h + HTMLDocument.idl + HTMLElement.cpp + HTMLElement.h + HTMLElement.idl + HTMLElementsAllInOne.cpp + HTMLEmbedElement.cpp + HTMLEmbedElement.h + HTMLEmbedElement.idl + HTMLEntityNames.gperf + HTMLFieldSetElement.cpp + HTMLFieldSetElement.h + HTMLFieldSetElement.idl + HTMLFontElement.cpp + HTMLFontElement.h + HTMLFontElement.idl + HTMLFormCollection.cpp + HTMLFormCollection.h + HTMLFormControlElement.cpp + HTMLFormControlElement.h + HTMLFormElement.cpp + HTMLFormElement.h + HTMLFormElement.idl + HTMLFrameElementBase.cpp + HTMLFrameElementBase.h + HTMLFrameElement.cpp + HTMLFrameElement.h + HTMLFrameElement.idl + HTMLFrameOwnerElement.cpp + HTMLFrameOwnerElement.h + HTMLFrameSetElement.cpp + HTMLFrameSetElement.h + HTMLFrameSetElement.idl + HTMLHeadElement.cpp + HTMLHeadElement.h + HTMLHeadElement.idl + HTMLHeadingElement.cpp + HTMLHeadingElement.h + HTMLHeadingElement.idl + HTMLHRElement.cpp + HTMLHRElement.h + HTMLHRElement.idl + HTMLHtmlElement.cpp + HTMLHtmlElement.h + HTMLHtmlElement.idl + HTMLIFrameElement.cpp + HTMLIFrameElement.h + HTMLIFrameElement.idl + HTMLImageElement.cpp + HTMLImageElement.h + HTMLImageElement.idl + HTMLImageLoader.cpp + HTMLImageLoader.h + HTMLInputElement.cpp + HTMLInputElement.h + HTMLInputElement.idl + HTMLIsIndexElement.cpp + HTMLIsIndexElement.h + HTMLIsIndexElement.idl + HTMLKeygenElement.cpp + HTMLKeygenElement.h + HTMLLabelElement.cpp + HTMLLabelElement.h + HTMLLabelElement.idl + HTMLLegendElement.cpp + HTMLLegendElement.h + HTMLLegendElement.idl + HTMLLIElement.cpp + HTMLLIElement.h + HTMLLIElement.idl + HTMLLinkElement.cpp + HTMLLinkElement.h + HTMLLinkElement.idl + HTMLMapElement.cpp + HTMLMapElement.h + HTMLMapElement.idl + HTMLMarqueeElement.cpp + HTMLMarqueeElement.h + HTMLMarqueeElement.idl + HTMLMediaElement.cpp + HTMLMediaElement.h + HTMLMediaElement.idl + HTMLMenuElement.cpp + HTMLMenuElement.h + HTMLMenuElement.idl + HTMLMetaElement.cpp + HTMLMetaElement.h + HTMLMetaElement.idl + HTMLModElement.cpp + HTMLModElement.h + HTMLModElement.idl + HTMLNameCollection.cpp + HTMLNameCollection.h + HTMLNoScriptElement.cpp + HTMLNoScriptElement.h + HTMLObjectElement.cpp + HTMLObjectElement.h + HTMLObjectElement.idl + HTMLOListElement.cpp + HTMLOListElement.h + HTMLOListElement.idl + HTMLOptGroupElement.cpp + HTMLOptGroupElement.h + HTMLOptGroupElement.idl + HTMLOptionElement.cpp + HTMLOptionElement.h + HTMLOptionElement.idl + HTMLOptionsCollection.cpp + HTMLOptionsCollection.h + HTMLOptionsCollection.idl + HTMLParagraphElement.cpp + HTMLParagraphElement.h + HTMLParagraphElement.idl + HTMLParamElement.cpp + HTMLParamElement.h + HTMLParamElement.idl + HTMLParser.cpp + HTMLParserErrorCodes.cpp + HTMLParserErrorCodes.h + HTMLParser.h + HTMLParserQuirks.h + HTMLPlugInElement.cpp + HTMLPlugInElement.h + HTMLPlugInImageElement.cpp + HTMLPlugInImageElement.h + HTMLPreElement.cpp + HTMLPreElement.h + HTMLPreElement.idl + HTMLQuoteElement.cpp + HTMLQuoteElement.h + HTMLQuoteElement.idl + HTMLScriptElement.cpp + HTMLScriptElement.h + HTMLScriptElement.idl + HTMLSelectElement.cpp + HTMLSelectElement.h + HTMLSelectElement.idl + HTMLSourceElement.cpp + HTMLSourceElement.h + HTMLSourceElement.idl + HTMLStyleElement.cpp + HTMLStyleElement.h + HTMLStyleElement.idl + HTMLTableCaptionElement.cpp + HTMLTableCaptionElement.h + HTMLTableCaptionElement.idl + HTMLTableCellElement.cpp + HTMLTableCellElement.h + HTMLTableCellElement.idl + HTMLTableColElement.cpp + HTMLTableColElement.h + HTMLTableColElement.idl + HTMLTableElement.cpp + HTMLTableElement.h + HTMLTableElement.idl + HTMLTablePartElement.cpp + HTMLTablePartElement.h + HTMLTableRowElement.cpp + HTMLTableRowElement.h + HTMLTableRowElement.idl + HTMLTableRowsCollection.cpp + HTMLTableRowsCollection.h + HTMLTableSectionElement.cpp + HTMLTableSectionElement.h + HTMLTableSectionElement.idl + HTMLTagNames.in + HTMLTextAreaElement.cpp + HTMLTextAreaElement.h + HTMLTextAreaElement.idl + HTMLTitleElement.cpp + HTMLTitleElement.h + HTMLTitleElement.idl + HTMLTokenizer.cpp + HTMLTokenizer.h + HTMLUListElement.cpp + HTMLUListElement.h + HTMLUListElement.idl + HTMLVideoElement.cpp + HTMLVideoElement.h + HTMLVideoElement.idl + HTMLViewSourceDocument.cpp + HTMLViewSourceDocument.h + ImageData.cpp + ImageData.h + ImageData.idl + MediaError.h + MediaError.idl + PreloadScanner.cpp + PreloadScanner.h + TextMetrics.h + TextMetrics.idl + TimeRanges.cpp + TimeRanges.h + TimeRanges.idl + ValidityState.cpp + ValidityState.h + ValidityState.idl + VoidCallback.h + VoidCallback.idl +2 Info.plist + inspector/ +0 ConsoleMessage.cpp + ConsoleMessage.h + front-end/ +0 AbstractTimelinePanel.js + BottomUpProfileDataGridTree.js + Breakpoint.js + BreakpointsSidebarPane.js + Callback.js + CallStackSidebarPane.js + ChangesView.js + Color.js + ConsoleView.js + CookieItemsView.js + Database.js + DatabaseQueryView.js + DatabaseTableView.js + DataGrid.js + DOMAgent.js + DOMStorageDataGrid.js + DOMStorageItemsView.js + DOMStorage.js + Drawer.js + ElementsPanel.js + ElementsTreeOutline.js + EventListenersSidebarPane.js + FontView.js + Images/ +0 back.png + checker.png + clearConsoleButtonGlyph.png + closeButtons.png + consoleButtonGlyph.png + cookie.png + database.png + databaseTable.png + debuggerContinue.png + debuggerPause.png + debuggerStepInto.png + debuggerStepOut.png + debuggerStepOver.png + disclosureTriangleSmallDownBlack.png + disclosureTriangleSmallDown.png + disclosureTriangleSmallDownWhite.png + disclosureTriangleSmallRightBlack.png + disclosureTriangleSmallRightDownBlack.png + disclosureTriangleSmallRightDown.png + disclosureTriangleSmallRightDownWhite.png + disclosureTriangleSmallRight.png + disclosureTriangleSmallRightWhite.png + dockButtonGlyph.png + elementsIcon.png + enableOutlineButtonGlyph.png + enableSolidButtonGlyph.png + errorIcon.png + errorMediumIcon.png + errorRedDot.png + excludeButtonGlyph.png + focusButtonGlyph.png + forward.png + glossyHeader.png + glossyHeaderPressed.png + glossyHeaderSelected.png + glossyHeaderSelectedPressed.png + goArrow.png + graphLabelCalloutLeft.png + graphLabelCalloutRight.png + grayConnectorPoint.png + largerResourcesButtonGlyph.png + localStorage.png + nodeSearchButtonGlyph.png + paneBottomGrowActive.png + paneBottomGrow.png + paneGrowHandleLine.png + paneSettingsButtons.png + pauseOnExceptionButtonGlyph.png + percentButtonGlyph.png + profileGroupIcon.png + profileIcon.png + profilesIcon.png + profileSmallIcon.png + profilesSilhouette.png + radioDot.png + recordButtonGlyph.png + recordToggledButtonGlyph.png + reloadButtonGlyph.png + resourceCSSIcon.png + resourceDocumentIcon.png + resourceDocumentIconSmall.png + resourceJSIcon.png + resourcePlainIcon.png + resourcePlainIconSmall.png + resourcesIcon.png + resourcesSilhouette.png + resourcesSizeGraphIcon.png + resourcesTimeGraphIcon.png + scriptsIcon.png + scriptsSilhouette.png + searchSmallBlue.png + searchSmallBrightBlue.png + searchSmallGray.png + searchSmallWhite.png + segmentEnd.png + segmentHoverEnd.png + segmentHover.png + segment.png + segmentSelectedEnd.png + segmentSelected.png + sessionStorage.png + splitviewDimple.png + splitviewDividerBackground.png + statusbarBackground.png + statusbarBottomBackground.png + statusbarButtons.png + statusbarMenuButton.png + statusbarMenuButtonSelected.png + statusbarResizerHorizontal.png + statusbarResizerVertical.png + storageIcon.png + successGreenDot.png + timelineBarBlue.png + timelineBarGray.png + timelineBarGreen.png + timelineBarOrange.png + timelineBarPurple.png + timelineBarRed.png + timelineBarYellow.png + timelineCheckmarks.png + timelineDots.png + timelineHollowPillBlue.png + timelineHollowPillGray.png + timelineHollowPillGreen.png + timelineHollowPillOrange.png + timelineHollowPillPurple.png + timelineHollowPillRed.png + timelineHollowPillYellow.png + timelineIcon.png + timelinePillBlue.png + timelinePillGray.png + timelinePillGreen.png + timelinePillOrange.png + timelinePillPurple.png + timelinePillRed.png + timelinePillYellow.png + tipBalloonBottom.png + tipBalloon.png + tipIcon.png + tipIconPressed.png + toolbarItemSelected.png + treeDownTriangleBlack.png + treeDownTriangleWhite.png + treeRightTriangleBlack.png + treeRightTriangleWhite.png + treeUpTriangleBlack.png + treeUpTriangleWhite.png + undockButtonGlyph.png + userInputIcon.png + userInputPreviousIcon.png + userInputResultIcon.png + warningIcon.png + warningMediumIcon.png + warningOrangeDot.png + warningsErrors.png + whiteConnectorPoint.png +2 ImageView.js + InjectedScriptAccess.js + InjectedScript.js + InspectorControllerStub.js + inspector.css + inspector.html + inspector.js + inspectorSyntaxHighlight.css + KeyboardShortcut.js + MetricsSidebarPane.js + Object.js + ObjectPropertiesSection.js + ObjectProxy.js + PanelEnablerView.js + Panel.js + Placard.js + Popup.js + ProfileDataGridTree.js + ProfilesPanel.js + ProfileView.js + PropertiesSection.js + PropertiesSidebarPane.js + ResourceCategory.js + Resource.js + ResourcesPanel.js + ResourceView.js + ScopeChainSidebarPane.js + Script.js + ScriptsPanel.js + ScriptView.js + SidebarPane.js + SidebarTreeElement.js + SourceFrame.js + SourceView.js + StatusBarButton.js + StoragePanel.js + StylesSidebarPane.js + SummaryBar.js + TestController.js + TextPrompt.js + TimelineAgent.js + TimelinePanel.js + TopDownProfileDataGridTree.js + treeoutline.js + utilities.js + View.js + WatchExpressionsSidebarPane.js + WebKit.qrc +2 InspectorBackend.cpp + InspectorBackend.h + InspectorBackend.idl + InspectorClient.h + InspectorController.cpp + InspectorController.h + InspectorDatabaseResource.cpp + InspectorDatabaseResource.h + InspectorDOMAgent.cpp + InspectorDOMAgent.h + InspectorDOMStorageResource.cpp + InspectorDOMStorageResource.h + InspectorFrontend.cpp + InspectorFrontend.h + InspectorResource.cpp + InspectorResource.h + InspectorTimelineAgent.cpp + InspectorTimelineAgent.h + JavaScriptCallFrame.cpp + JavaScriptCallFrame.h + JavaScriptCallFrame.idl + JavaScriptDebugListener.h + JavaScriptDebugServer.cpp + JavaScriptDebugServer.h + JavaScriptProfile.cpp + JavaScriptProfile.h + JavaScriptProfileNode.cpp + JavaScriptProfileNode.h + TimelineRecordFactory.cpp + TimelineRecordFactory.h +2 LICENSE-APPLE + LICENSE-LGPL-2 +0 .1 +2 loader/ +0 appcache/ +0 ApplicationCache.cpp + ApplicationCacheGroup.cpp + ApplicationCacheGroup.h + ApplicationCache.h + ApplicationCacheHost.cpp + ApplicationCacheHost.h + ApplicationCacheResource.cpp + ApplicationCacheResource.h + ApplicationCacheStorage.cpp + ApplicationCacheStorage.h + DOMApplicationCache.cpp + DOMApplicationCache.h + DOMApplicationCache.idl + ManifestParser.cpp + ManifestParser.h +2 archive/ +0 ArchiveFactory.cpp + ArchiveFactory.h + Archive.h + ArchiveResourceCollection.cpp + ArchiveResourceCollection.h + ArchiveResource.cpp + ArchiveResource.h + cf/ +0 LegacyWebArchive.cpp + LegacyWebArchive.h + LegacyWebArchiveMac.mm +3 Cache.cpp + CachedCSSStyleSheet.cpp + CachedCSSStyleSheet.h + CachedFont.cpp + CachedFont.h + CachedImage.cpp + CachedImage.h + CachedResourceClient.h + CachedResourceClientWalker.cpp + CachedResourceClientWalker.h + CachedResource.cpp + CachedResource.h + CachedResourceHandle.cpp + CachedResourceHandle.h + CachedScript.cpp + CachedScript.h + CachedXBLDocument.cpp + CachedXBLDocument.h + CachedXSLStyleSheet.cpp + CachedXSLStyleSheet.h + Cache.h + CachePolicy.h + cf/ +0 ResourceLoaderCFNet.cpp +2 CrossOriginAccessControl.cpp + CrossOriginAccessControl.h + CrossOriginPreflightResultCache.cpp + CrossOriginPreflightResultCache.h + DocLoader.cpp + DocLoader.h + DocumentLoader.cpp + DocumentLoader.h + DocumentThreadableLoader.cpp + DocumentThreadableLoader.h + EmptyClients.h + FormState.cpp + FormState.h + FrameLoaderClient.h + FrameLoader.cpp + FrameLoader.h + FrameLoaderTypes.h + FTPDirectoryDocument.cpp + FTPDirectoryDocument.h + FTPDirectoryParser.cpp + FTPDirectoryParser.h + HistoryController.cpp + HistoryController.h + icon/ +0 IconDatabaseClient.h + IconDatabase.cpp + IconDatabase.h + IconDatabaseNone.cpp + IconFetcher.cpp + IconFetcher.h + IconLoader.cpp + IconLoader.h + IconRecord.cpp + IconRecord.h + PageURLRecord.cpp + PageURLRecord.h +2 ImageDocument.cpp + ImageDocument.h + ImageLoader.cpp + ImageLoader.h + loader.cpp + loader.h + MainResourceLoader.cpp + MainResourceLoader.h + MediaDocument.cpp + MediaDocument.h + NavigationAction.cpp + NavigationAction.h + NetscapePlugInStreamLoader.cpp + NetscapePlugInStreamLoader.h + PlaceholderDocument.cpp + PlaceholderDocument.h + PluginDocument.cpp + PluginDocument.h + PolicyCallback.cpp + PolicyCallback.h + PolicyChecker.cpp + PolicyChecker.h + ProgressTracker.cpp + ProgressTracker.h + RedirectScheduler.cpp + RedirectScheduler.h + Request.cpp + Request.h + ResourceLoader.cpp + ResourceLoader.h + ResourceLoadNotifier.cpp + ResourceLoadNotifier.h + SubresourceLoaderClient.h + SubresourceLoader.cpp + SubresourceLoader.h + SubstituteData.h + SubstituteResource.h + TextDocument.cpp + TextDocument.h + TextResourceDecoder.cpp + TextResourceDecoder.h + ThreadableLoaderClient.h + ThreadableLoaderClientWrapper.h + ThreadableLoader.cpp + ThreadableLoader.h + WorkerThreadableLoader.cpp + WorkerThreadableLoader.h +2 make-generated-sources.sh + mathml/ +0 MathMLElement.cpp + MathMLElement.h + MathMLInlineContainerElement.cpp + MathMLInlineContainerElement.h + MathMLMathElement.cpp + MathMLMathElement.h + mathtags.in +2 move-js-headers.sh + notifications/ +0 NotificationCenter.cpp + NotificationCenter.h + NotificationCenter.idl + NotificationContents.h + Notification.cpp + Notification.h + Notification.idl + NotificationPresenter.h +2 page/ +0 AbstractView.idl + android/ +0 DragControllerAndroid.cpp + EventHandlerAndroid.cpp + InspectorControllerAndroid.cpp +2 animation/ +0 AnimationBase.cpp + AnimationBase.h + AnimationController.cpp + AnimationController.h + AnimationControllerPrivate.h + CompositeAnimation.cpp + CompositeAnimation.h + ImplicitAnimation.cpp + ImplicitAnimation.h + KeyframeAnimation.cpp + KeyframeAnimation.h +2 BarInfo.cpp + BarInfo.h + BarInfo.idl + ChromeClient.h + Chrome.cpp + Chrome.h + Console.cpp + Console.h + Console.idl + ContextMenuClient.h + ContextMenuController.cpp + ContextMenuController.h + Coordinates.h + Coordinates.idl + DOMSelection.cpp + DOMSelection.h + DOMSelection.idl + DOMTimer.cpp + DOMTimer.h + DOMWindow.cpp + DOMWindow.h + DOMWindow.idl + DragActions.h + DragClient.h + DragController.cpp + DragController.h + EditorClient.h + EventHandler.cpp + EventHandler.h + EventSource.cpp + EventSource.h + EventSource.idl + FocusController.cpp + FocusController.h + FocusDirection.h + Frame.cpp + Frame.h + FrameLoadRequest.h + FrameTree.cpp + FrameTree.h + FrameView.cpp + FrameView.h + Geolocation.cpp + Geolocation.h + Geolocation.idl + Geoposition.h + Geoposition.idl + HaltablePlugin.h + History.cpp + History.h + History.idl + Location.cpp + Location.h + Location.idl + MouseEventWithHitTestResults.cpp + MouseEventWithHitTestResults.h + NavigatorBase.cpp + NavigatorBase.h + Navigator.cpp + Navigator.h + Navigator.idl + OriginAccessEntry.cpp + OriginAccessEntry.h + Page.cpp + PageGroup.cpp + PageGroup.h + PageGroupLoadDeferrer.cpp + PageGroupLoadDeferrer.h + Page.h + PluginHalterClient.h + PluginHalter.cpp + PluginHalter.h + PositionCallback.h + PositionErrorCallback.h + PositionError.h + PositionError.idl + PositionOptions.h + PrintContext.cpp + PrintContext.h + qt/ +0 DragControllerQt.cpp + EventHandlerQt.cpp + FrameQt.cpp +2 Screen.cpp + Screen.h + Screen.idl + SecurityOrigin.cpp + SecurityOrigin.h + SecurityOriginHash.h + Settings.cpp + Settings.h + UserContentURLPattern.cpp + UserContentURLPattern.h + UserScript.h + UserScriptTypes.h + UserStyleSheet.h + UserStyleSheetTypes.h + WebKitPoint.h + WebKitPoint.idl + win/ + WindowFeatures.cpp + WindowFeatures.h + win/DragControllerWin.cpp + win/EventHandlerWin.cpp + win/FrameCairoWin.cpp + win/FrameCGWin.cpp + win/FrameWin.cpp + win/FrameWin.h + win/PageWin.cpp + WorkerNavigator.cpp + WorkerNavigator.h + WorkerNavigator.idl + XSSAuditor.cpp + XSSAuditor.h +2 platform/ +0 android/ +0 ClipboardAndroid.cpp + ClipboardAndroid.h + CursorAndroid.cpp + DragDataAndroid.cpp + EventLoopAndroid.cpp + FileChooserAndroid.cpp + FileSystemAndroid.cpp + KeyboardCodes.h + KeyEventAndroid.cpp + LocalizedStringsAndroid.cpp + PopupMenuAndroid.cpp + RenderThemeAndroid.cpp + RenderThemeAndroid.h + ScreenAndroid.cpp + ScrollViewAndroid.cpp + SearchPopupMenuAndroid.cpp + SystemTimeAndroid.cpp + TemporaryLinkStubs.cpp + WidgetAndroid.cpp +2 animation/ +0 Animation.cpp + Animation.h + AnimationList.cpp + AnimationList.h + TimingFunction.h +2 Arena.cpp + Arena.h + AutodrainedPool.h + ColorData.gperf + ContentType.cpp + ContentType.h + ContextMenu.cpp + ContextMenu.h + ContextMenuItem.h + Cookie.h + CookieJar.h + CrossThreadCopier.cpp + CrossThreadCopier.h + Cursor.h + DeprecatedPtrList.h + DeprecatedPtrListImpl.cpp + DeprecatedPtrListImpl.h + DragData.cpp + DragData.h + DragImage.cpp + DragImage.h + EventLoop.h + FileChooser.cpp + FileChooser.h + FileSystem.h + FloatConversion.h + GeolocationService.cpp + GeolocationService.h + graphics/ +0 BitmapImage.cpp + BitmapImage.h + Color.cpp + Color.h + DashArray.h + filters/ +0 FEBlend.cpp + FEBlend.h + FEColorMatrix.cpp + FEColorMatrix.h + FEComponentTransfer.cpp + FEComponentTransfer.h + FEComposite.cpp + FEComposite.h + FEGaussianBlur.cpp + FEGaussianBlur.h + FilterEffect.cpp + FilterEffect.h + Filter.h + SourceAlpha.cpp + SourceAlpha.h + SourceGraphic.cpp + SourceGraphic.h +2 FloatPoint3D.cpp + FloatPoint3D.h + FloatPoint.cpp + FloatPoint.h + FloatQuad.cpp + FloatQuad.h + FloatRect.cpp + FloatRect.h + FloatSize.cpp + FloatSize.h + FontCache.cpp + FontCache.h + Font.cpp + FontData.cpp + FontData.h + FontDescription.cpp + FontDescription.h + FontFallbackList.cpp + FontFallbackList.h + FontFamily.cpp + FontFamily.h + FontFastPath.cpp + Font.h + FontRenderingMode.h + FontSelector.h + FontSmoothingMode.h + FontTraitsMask.h + GeneratedImage.cpp + GeneratedImage.h + Generator.h + GlyphBuffer.h + GlyphPageTreeNode.cpp + GlyphPageTreeNode.h + GlyphWidthMap.cpp + GlyphWidthMap.h + Gradient.cpp + Gradient.h + GraphicsContext3D.h + GraphicsContext.cpp + GraphicsContext.h + GraphicsContextPrivate.h + GraphicsLayerClient.h + GraphicsLayer.cpp + GraphicsLayer.h + GraphicsTypes.cpp + GraphicsTypes.h + Icon.h + ImageBuffer.cpp + ImageBuffer.h + Image.cpp + Image.h + ImageObserver.h + ImageSource.cpp + ImageSource.h + IntPoint.h + IntRect.cpp + IntRect.h + IntSize.h + IntSizeHash.h + MediaPlayer.cpp + MediaPlayer.h + MediaPlayerPrivate.h + opentype/ +0 OpenTypeUtilities.cpp + OpenTypeUtilities.h +2 Path.cpp + Path.h + PathTraversalState.cpp + PathTraversalState.h + Pattern.cpp + Pattern.h + Pen.cpp + Pen.h + qt/ +0 ColorQt.cpp + FloatPointQt.cpp + FloatRectQt.cpp + FontCacheQt.cpp + FontCustomPlatformData.cpp + FontCustomPlatformData.h + FontFallbackListQt.cpp + FontPlatformData.h + FontPlatformDataQt.cpp + FontQt43.cpp + FontQt.cpp + GlyphPageTreeNodeQt.cpp + GradientQt.cpp + GraphicsContextQt.cpp + IconQt.cpp + ImageBufferData.h + ImageBufferQt.cpp + ImageDecoderQt.cpp + ImageDecoderQt.h + ImageQt.cpp + IntPointQt.cpp + IntRectQt.cpp + IntSizeQt.cpp + MediaPlayerPrivatePhonon.cpp + MediaPlayerPrivatePhonon.h + PathQt.cpp + PatternQt.cpp + SimpleFontDataQt.cpp + StillImageQt.cpp + StillImageQt.h + TransformationMatrixQt.cpp +2 SegmentedFontData.cpp + SegmentedFontData.h + SimpleFontData.cpp + SimpleFontData.h + StringTruncator.cpp + StringTruncator.h + StrokeStyleApplier.h + TextRenderingMode.h + TextRun.h + transforms/ +0 IdentityTransformOperation.h + Matrix3DTransformOperation.cpp + Matrix3DTransformOperation.h + MatrixTransformOperation.cpp + MatrixTransformOperation.h + PerspectiveTransformOperation.cpp + PerspectiveTransformOperation.h + RotateTransformOperation.cpp + RotateTransformOperation.h + ScaleTransformOperation.cpp + ScaleTransformOperation.h + SkewTransformOperation.cpp + SkewTransformOperation.h + TransformationMatrix.cpp + TransformationMatrix.h + TransformOperation.h + TransformOperations.cpp + TransformOperations.h + TranslateTransformOperation.cpp + TranslateTransformOperation.h +2 UnitBezier.h + WidthIterator.cpp + WidthIterator.h +2 HostWindow.h + image-decoders/ +0 cairo/ +0 ImageDecoderCairo.cpp +2 ImageDecoder.cpp + ImageDecoder.h + qt/ +0 RGBA32BufferQt.cpp +2 wx/ +0 ImageDecoderWx.cpp +3 KeyboardCodes.h + KURL.cpp + KURLGoogle.cpp + KURLGooglePrivate.h + KURL.h + KURLHash.h + Language.h + LengthBox.h + Length.cpp + Length.h + LengthSize.h + LinkHash.cpp + LinkHash.h + LocalizedStrings.h + Logging.cpp + Logging.h + mac/ +0 AutodrainedPool.mm + BlockExceptions.h + BlockExceptions.mm + ClipboardMac.h + ClipboardMac.mm + ContextMenuItemMac.mm + ContextMenuMac.mm + CookieJar.mm + CursorMac.mm + DragDataMac.mm + DragImageMac.mm + EventLoopMac.mm + FileChooserMac.mm + FileSystemMac.mm + FoundationExtras.h + GeolocationServiceMac.h + GeolocationServiceMac.mm + KeyEventMac.mm + KURLMac.mm + Language.mm + LocalCurrentGraphicsContext.h + LocalCurrentGraphicsContext.mm + LocalizedStringsMac.mm + LoggingMac.mm + MIMETypeRegistryMac.mm + PasteboardHelper.h + PasteboardMac.mm + PlatformMouseEventMac.mm + PlatformScreenMac.mm + PopupMenuMac.mm + PurgeableBufferMac.cpp + RuntimeApplicationChecks.h + RuntimeApplicationChecks.mm + SchedulePairMac.mm + ScrollbarThemeMac.h + ScrollbarThemeMac.mm + ScrollViewMac.mm + SearchPopupMenuMac.mm + SharedBufferMac.mm + SharedTimerMac.mm + SoftLinking.h + SoundMac.mm + SSLKeyGeneratorMac.mm + SuddenTermination.mm + SystemTimeMac.cpp + ThemeMac.h + ThemeMac.mm + ThreadCheck.mm + WebCoreKeyGenerator.h + WebCoreKeyGenerator.m + WebCoreNSStringExtras.h + WebCoreNSStringExtras.mm + WebCoreObjCExtras.h + WebCoreObjCExtras.mm + WebCoreSystemInterface.h + WebCoreSystemInterface.mm + WebCoreView.h + WebCoreView.m + WebFontCache.h + WebFontCache.mm + WheelEventMac.mm + WidgetMac.mm +2 MIMETypeRegistry.cpp + MIMETypeRegistry.h + mock/ +0 GeolocationServiceMock.cpp + GeolocationServiceMock.h +2 network/ +0 AuthenticationChallengeBase.cpp + AuthenticationChallengeBase.h + Credential.cpp + Credential.h + CredentialStorage.cpp + CredentialStorage.h + DNS.h + FormDataBuilder.cpp + FormDataBuilder.h + FormData.cpp + FormData.h + HTTPHeaderMap.cpp + HTTPHeaderMap.h + HTTPParsers.cpp + HTTPParsers.h + NetworkStateNotifier.cpp + NetworkStateNotifier.h + ProtectionSpace.cpp + ProtectionSpace.h + ProtectionSpaceHash.h + qt/ +0 AuthenticationChallenge.h + DnsPrefetchHelper.cpp + DnsPrefetchHelper.h + QNetworkReplyHandler.cpp + QNetworkReplyHandler.h + ResourceError.h + ResourceHandleQt.cpp + ResourceRequest.h + ResourceRequestQt.cpp + ResourceResponse.h + SocketStreamError.h + SocketStreamHandle.h + SocketStreamHandleSoup.cpp +2 ResourceErrorBase.cpp + ResourceErrorBase.h + ResourceHandleClient.h + ResourceHandle.cpp + ResourceHandle.h + ResourceHandleInternal.h + ResourceRequestBase.cpp + ResourceRequestBase.h + ResourceResponseBase.cpp + ResourceResponseBase.h + SocketStreamErrorBase.cpp + SocketStreamErrorBase.h + SocketStreamHandleBase.cpp + SocketStreamHandleBase.h + SocketStreamHandleClient.h +2 NotImplemented.h + Pasteboard.h + PlatformKeyboardEvent.h + PlatformMenuDescription.h + PlatformMouseEvent.h + PlatformScreen.h + PlatformWheelEvent.h + PopupMenuClient.h + PopupMenu.h + PopupMenuStyle.h + posix/ +0 FileSystemPOSIX.cpp +2 PurgeableBuffer.h + qt/ +0 ClipboardQt.cpp + ClipboardQt.h + ContextMenuItemQt.cpp + ContextMenuQt.cpp + CookieJarQt.cpp + CursorQt.cpp + DragDataQt.cpp + DragImageQt.cpp + EventLoopQt.cpp + FileChooserQt.cpp + FileSystemQt.cpp + KURLQt.cpp + Localizations.cpp + LoggingQt.cpp + MIMETypeRegistryQt.cpp + PasteboardQt.cpp + PlatformKeyboardEventQt.cpp + PlatformMouseEventQt.cpp + PlatformScreenQt.cpp + PopupMenuQt.cpp + QWebPageClient.h + QWebPopup.cpp + QWebPopup.h + RenderThemeQt.cpp + RenderThemeQt.h + ScreenQt.cpp + ScrollbarQt.cpp + ScrollbarThemeQt.cpp + ScrollbarThemeQt.h + ScrollViewQt.cpp + SearchPopupMenuQt.cpp + SharedBufferQt.cpp + SharedTimerQt.cpp + SoundQt.cpp + TemporaryLinkStubs.cpp + WheelEventQt.cpp + WidgetQt.cpp +2 RunLoopTimer.h + ScrollbarClient.h + Scrollbar.cpp + Scrollbar.h + ScrollbarThemeComposite.cpp + ScrollbarThemeComposite.h + ScrollbarTheme.h + ScrollTypes.h + ScrollView.cpp + ScrollView.h + SearchPopupMenu.h + SharedBuffer.cpp + SharedBuffer.h + SharedTimer.h + Sound.h + sql/ +0 SQLiteAuthorizer.cpp + SQLiteDatabase.cpp + SQLiteDatabase.h + SQLiteFileSystem.cpp + SQLiteFileSystem.h + SQLiteStatement.cpp + SQLiteStatement.h + SQLiteTransaction.cpp + SQLiteTransaction.h + SQLValue.cpp + SQLValue.h +2 SSLKeyGenerator.h + StaticConstructors.h + SuddenTermination.h + SystemTime.h + text/ +0 android/ +0 TextBreakIteratorInternalICU.cpp +2 AtomicString.cpp + AtomicString.h + AtomicStringHash.h + AtomicStringImpl.h + Base64.cpp + Base64.h + BidiContext.cpp + BidiContext.h + BidiResolver.h + cf/ +0 StringCF.cpp + StringImplCF.cpp +2 CharacterNames.h + CString.cpp + CString.h + mac/ +0 character-sets.txt + CharsetData.h + mac-encodings.txt + make-charset-table.pl + ShapeArabic.c + ShapeArabic.h + StringImplMac.mm + StringMac.mm + TextBoundaries.mm + TextBreakIteratorInternalICUMac.mm + TextCodecMac.cpp + TextCodecMac.h +2 ParserUtilities.h + PlatformString.h + qt/ +0 StringQt.cpp + TextBoundaries.cpp + TextBreakIteratorQt.cpp + TextCodecQt.cpp + TextCodecQt.h +2 RegularExpression.cpp + RegularExpression.h + SegmentedString.cpp + SegmentedString.h + StringBuffer.h + StringBuilder.cpp + StringBuilder.h + String.cpp + StringHash.h + StringImpl.cpp + StringImpl.h + TextBoundaries.h + TextBoundariesICU.cpp + TextBreakIterator.h + TextBreakIteratorICU.cpp + TextBreakIteratorInternalICU.h + TextCodec.cpp + TextCodec.h + TextCodecICU.cpp + TextCodecICU.h + TextCodecLatin1.cpp + TextCodecLatin1.h + TextCodecUserDefined.cpp + TextCodecUserDefined.h + TextCodecUTF16.cpp + TextCodecUTF16.h + TextDirection.h + TextEncoding.cpp + TextEncodingDetector.h + TextEncodingDetectorICU.cpp + TextEncodingDetectorNone.cpp + TextEncoding.h + TextEncodingRegistry.cpp + TextEncodingRegistry.h + TextStream.cpp + TextStream.h + UnicodeRange.cpp + UnicodeRange.h + win/ +0 TextBreakIteratorInternalICUWin.cpp +3 Theme.cpp + Theme.h + ThemeTypes.h + ThreadCheck.h + ThreadGlobalData.cpp + ThreadGlobalData.h + ThreadTimers.cpp + ThreadTimers.h + Timer.cpp + Timer.h + TreeShared.h + Widget.cpp + Widget.h + win/ +0 BitmapInfo.cpp + BitmapInfo.h + SystemTimeWin.cpp +3 plugins/ +0 mac/ +0 PluginDataMac.mm + PluginPackageMac.cpp + PluginViewMac.cpp +2 MimeTypeArray.cpp + MimeTypeArray.h + MimeTypeArray.idl + MimeType.cpp + MimeType.h + MimeType.idl + npapi.cpp + npfunctions.h + PluginArray.cpp + PluginArray.h + PluginArray.idl + Plugin.cpp + PluginDatabaseClient.h + PluginDatabase.cpp + PluginDatabase.h + PluginData.cpp + PluginData.h + PluginDataNone.cpp + PluginDebug.cpp + PluginDebug.h + Plugin.h + Plugin.idl + PluginInfoStore.cpp + PluginInfoStore.h + PluginMainThreadScheduler.cpp + PluginMainThreadScheduler.h + PluginPackage.cpp + PluginPackage.h + PluginPackageNone.cpp + PluginQuirkSet.h + PluginStream.cpp + PluginStream.h + PluginView.cpp + PluginView.h + PluginViewNone.cpp + qt/ +0 PluginContainerQt.cpp + PluginContainerQt.h + PluginDataQt.cpp + PluginPackageQt.cpp + PluginViewQt.cpp +2 symbian/ +0 npinterface.h + PluginContainerSymbian.cpp + PluginContainerSymbian.h + PluginDatabaseSymbian.cpp + PluginPackageSymbian.cpp + PluginViewSymbian.cpp +2 win/ +0 PaintHooks.asm + PluginDatabaseWin.cpp + PluginDataWin.cpp + PluginMessageThrottlerWin.cpp + PluginMessageThrottlerWin.h + PluginPackageWin.cpp + PluginViewWin.cpp +3 rendering/ +0 AutoTableLayout.cpp + AutoTableLayout.h + break_lines.cpp + break_lines.h + CounterNode.cpp + CounterNode.h + EllipsisBox.cpp + EllipsisBox.h + FixedTableLayout.cpp + FixedTableLayout.h + GapRects.h + HitTestRequest.h + HitTestResult.cpp + HitTestResult.h + InlineBox.cpp + InlineBox.h + InlineFlowBox.cpp + InlineFlowBox.h + InlineRunBox.h + InlineTextBox.cpp + InlineTextBox.h + LayoutState.cpp + LayoutState.h + MediaControlElements.cpp + MediaControlElements.h + OverlapTestRequestClient.h + PointerEventsHitRules.cpp + PointerEventsHitRules.h + RenderApplet.cpp + RenderApplet.h + RenderArena.cpp + RenderArena.h + RenderBlock.cpp + RenderBlock.h + RenderBlockLineLayout.cpp + RenderBox.cpp + RenderBox.h + RenderBoxModelObject.cpp + RenderBoxModelObject.h + RenderBR.cpp + RenderBR.h + RenderButton.cpp + RenderButton.h + RenderCounter.cpp + RenderCounter.h + RenderDataGrid.cpp + RenderDataGrid.h + RenderFieldset.cpp + RenderFieldset.h + RenderFileUploadControl.cpp + RenderFileUploadControl.h + RenderFlexibleBox.cpp + RenderFlexibleBox.h + RenderForeignObject.cpp + RenderForeignObject.h + RenderFrame.cpp + RenderFrame.h + RenderFrameSet.cpp + RenderFrameSet.h + RenderHTMLCanvas.cpp + RenderHTMLCanvas.h + RenderImage.cpp + RenderImageGeneratedContent.cpp + RenderImageGeneratedContent.h + RenderImage.h + RenderInline.cpp + RenderInline.h + RenderLayerBacking.cpp + RenderLayerBacking.h + RenderLayerCompositor.cpp + RenderLayerCompositor.h + RenderLayer.cpp + RenderLayer.h + RenderLineBoxList.cpp + RenderLineBoxList.h + RenderListBox.cpp + RenderListBox.h + RenderListItem.cpp + RenderListItem.h + RenderListMarker.cpp + RenderListMarker.h + RenderMarquee.cpp + RenderMarquee.h + RenderMediaControlsChromium.cpp + RenderMediaControlsChromium.h + RenderMediaControls.cpp + RenderMediaControls.h + RenderMedia.cpp + RenderMedia.h + RenderMenuList.cpp + RenderMenuList.h + RenderObjectChildList.cpp + RenderObjectChildList.h + RenderObject.cpp + RenderObject.h + RenderOverflow.h + RenderPart.cpp + RenderPart.h + RenderPartObject.cpp + RenderPartObject.h + RenderPath.cpp + RenderPath.h + RenderReplaced.cpp + RenderReplaced.h + RenderReplica.cpp + RenderReplica.h + RenderScrollbar.cpp + RenderScrollbar.h + RenderScrollbarPart.cpp + RenderScrollbarPart.h + RenderScrollbarTheme.cpp + RenderScrollbarTheme.h + RenderSelectionInfo.h + RenderSlider.cpp + RenderSlider.h + RenderSVGBlock.cpp + RenderSVGBlock.h + RenderSVGContainer.cpp + RenderSVGContainer.h + RenderSVGGradientStop.cpp + RenderSVGGradientStop.h + RenderSVGHiddenContainer.cpp + RenderSVGHiddenContainer.h + RenderSVGImage.cpp + RenderSVGImage.h + RenderSVGInline.cpp + RenderSVGInline.h + RenderSVGInlineText.cpp + RenderSVGInlineText.h + RenderSVGModelObject.cpp + RenderSVGModelObject.h + RenderSVGRoot.cpp + RenderSVGRoot.h + RenderSVGText.cpp + RenderSVGText.h + RenderSVGTextPath.cpp + RenderSVGTextPath.h + RenderSVGTransformableContainer.cpp + RenderSVGTransformableContainer.h + RenderSVGTSpan.cpp + RenderSVGTSpan.h + RenderSVGViewportContainer.cpp + RenderSVGViewportContainer.h + RenderTableCell.cpp + RenderTableCell.h + RenderTableCol.cpp + RenderTableCol.h + RenderTable.cpp + RenderTable.h + RenderTableRow.cpp + RenderTableRow.h + RenderTableSection.cpp + RenderTableSection.h + RenderTextControl.cpp + RenderTextControl.h + RenderTextControlMultiLine.cpp + RenderTextControlMultiLine.h + RenderTextControlSingleLine.cpp + RenderTextControlSingleLine.h + RenderText.cpp + RenderTextFragment.cpp + RenderTextFragment.h + RenderText.h + RenderThemeChromiumLinux.cpp + RenderThemeChromiumLinux.h + RenderThemeChromiumMac.h + RenderThemeChromiumMac.mm + RenderThemeChromiumSkia.cpp + RenderThemeChromiumSkia.h + RenderThemeChromiumWin.cpp + RenderThemeChromiumWin.h + RenderTheme.cpp + RenderTheme.h + RenderThemeMac.h + RenderThemeSafari.cpp + RenderThemeSafari.h + RenderThemeWince.cpp + RenderThemeWince.h + RenderThemeWin.cpp + RenderThemeWin.h + RenderTreeAsText.cpp + RenderTreeAsText.h + RenderVideo.cpp + RenderVideo.h + RenderView.cpp + RenderView.h + RenderWidget.cpp + RenderWidget.h + RenderWidgetProtector.h + RenderWordBreak.cpp + RenderWordBreak.h + RootInlineBox.cpp + RootInlineBox.h + ScrollBehavior.cpp + ScrollBehavior.h + style/ +0 BindingURI.cpp + BindingURI.h + BorderData.h + BorderValue.h + CollapsedBorderValue.h + ContentData.cpp + ContentData.h + CounterContent.h + CounterDirectives.cpp + CounterDirectives.h + CursorData.h + CursorList.h + DataRef.h + FillLayer.cpp + FillLayer.h + KeyframeList.cpp + KeyframeList.h + NinePieceImage.cpp + NinePieceImage.h + OutlineValue.h + RenderStyleConstants.h + RenderStyle.cpp + RenderStyle.h + ShadowData.cpp + ShadowData.h + StyleBackgroundData.cpp + StyleBackgroundData.h + StyleBoxData.cpp + StyleBoxData.h + StyleCachedImage.cpp + StyleCachedImage.h + StyleDashboardRegion.h + StyleFlexibleBoxData.cpp + StyleFlexibleBoxData.h + StyleGeneratedImage.cpp + StyleGeneratedImage.h + StyleImage.h + StyleInheritedData.cpp + StyleInheritedData.h + StyleMarqueeData.cpp + StyleMarqueeData.h + StyleMultiColData.cpp + StyleMultiColData.h + StyleRareInheritedData.cpp + StyleRareInheritedData.h + StyleRareNonInheritedData.cpp + StyleRareNonInheritedData.h + StyleReflection.h + StyleSurroundData.cpp + StyleSurroundData.h + StyleTransformData.cpp + StyleTransformData.h + StyleVisualData.cpp + StyleVisualData.h + SVGRenderStyle.cpp + SVGRenderStyleDefs.cpp + SVGRenderStyleDefs.h + SVGRenderStyle.h +2 SVGCharacterLayoutInfo.cpp + SVGCharacterLayoutInfo.h + SVGInlineFlowBox.cpp + SVGInlineFlowBox.h + SVGInlineTextBox.cpp + SVGInlineTextBox.h + SVGRenderSupport.cpp + SVGRenderSupport.h + SVGRenderTreeAsText.cpp + SVGRenderTreeAsText.h + SVGRootInlineBox.cpp + SVGRootInlineBox.h + TableLayout.h + TextControlInnerElements.cpp + TextControlInnerElements.h + TransformState.cpp + TransformState.h +2 Resources/ +0 aliasCursor.png + cellCursor.png + contextMenuCursor.png + copyCursor.png + crossHairCursor.png + deleteButton.png + deleteButtonPressed.png + deleteButtonPressed.tiff + deleteButton.tiff + eastResizeCursor.png + eastWestResizeCursor.png + helpCursor.png + linkCursor.png + missingImage.png + missingImage.tiff + moveCursor.png + noDropCursor.png + noneCursor.png + northEastResizeCursor.png + northEastSouthWestResizeCursor.png + northResizeCursor.png + northSouthResizeCursor.png + northWestResizeCursor.png + northWestSouthEastResizeCursor.png + notAllowedCursor.png + nullPlugin.png + panIcon.png + progressCursor.png + southEastResizeCursor.png + southResizeCursor.png + southWestResizeCursor.png + textAreaResizeCorner.png + textAreaResizeCorner.tiff + urlIcon.png + verticalTextCursor.png + waitCursor.png + westResizeCursor.png + zoomInCursor.png + zoomOutCursor.png +2 storage/ +0 ChangeVersionWrapper.cpp + ChangeVersionWrapper.h + DatabaseAuthorizer.cpp + DatabaseAuthorizer.h + Database.cpp + DatabaseDetails.h + Database.h + Database.idl + DatabaseTask.cpp + DatabaseTask.h + DatabaseThread.cpp + DatabaseThread.h + DatabaseTrackerClient.h + DatabaseTracker.cpp + DatabaseTracker.h + LocalStorageTask.cpp + LocalStorageTask.h + LocalStorageThread.cpp + LocalStorageThread.h + OriginQuotaManager.cpp + OriginQuotaManager.h + OriginUsageRecord.cpp + OriginUsageRecord.h + SQLError.h + SQLError.idl + SQLResultSet.cpp + SQLResultSet.h + SQLResultSet.idl + SQLResultSetRowList.cpp + SQLResultSetRowList.h + SQLResultSetRowList.idl + SQLStatementCallback.h + SQLStatement.cpp + SQLStatementErrorCallback.h + SQLStatement.h + SQLTransactionCallback.h + SQLTransactionClient.cpp + SQLTransactionClient.h + SQLTransactionCoordinator.cpp + SQLTransactionCoordinator.h + SQLTransaction.cpp + SQLTransactionErrorCallback.h + SQLTransaction.h + SQLTransaction.idl + StorageArea.h + StorageAreaImpl.cpp + StorageAreaImpl.h + StorageAreaSync.cpp + StorageAreaSync.h + Storage.cpp + StorageEvent.cpp + StorageEventDispatcher.cpp + StorageEventDispatcher.h + StorageEvent.h + StorageEvent.idl + Storage.h + Storage.idl + StorageMap.cpp + StorageMap.h + StorageNamespace.cpp + StorageNamespace.h + StorageNamespaceImpl.cpp + StorageNamespaceImpl.h + StorageSyncManager.cpp + StorageSyncManager.h +2 svg/ +0 animation/ +0 SMILTimeContainer.cpp + SMILTimeContainer.h + SMILTime.cpp + SMILTime.h + SVGSMILElement.cpp + SVGSMILElement.h +2 ColorDistance.cpp + ColorDistance.h + ElementTimeControl.h + ElementTimeControl.idl + GradientAttributes.h + graphics/ +0 filters/ +0 SVGDistantLightSource.h + SVGFEConvolveMatrix.cpp + SVGFEConvolveMatrix.h + SVGFEDiffuseLighting.cpp + SVGFEDiffuseLighting.h + SVGFEDisplacementMap.cpp + SVGFEDisplacementMap.h + SVGFEFlood.cpp + SVGFEFlood.h + SVGFEImage.cpp + SVGFEImage.h + SVGFEMerge.cpp + SVGFEMerge.h + SVGFEMorphology.cpp + SVGFEMorphology.h + SVGFEOffset.cpp + SVGFEOffset.h + SVGFESpecularLighting.cpp + SVGFESpecularLighting.h + SVGFETile.cpp + SVGFETile.h + SVGFETurbulence.cpp + SVGFETurbulence.h + SVGFilterBuilder.cpp + SVGFilterBuilder.h + SVGFilter.cpp + SVGFilter.h + SVGLightSource.cpp + SVGLightSource.h + SVGPointLightSource.h + SVGSpotLightSource.h +2 SVGImage.cpp + SVGImage.h + SVGPaintServer.cpp + SVGPaintServerGradient.cpp + SVGPaintServerGradient.h + SVGPaintServer.h + SVGPaintServerLinearGradient.cpp + SVGPaintServerLinearGradient.h + SVGPaintServerPattern.cpp + SVGPaintServerPattern.h + SVGPaintServerRadialGradient.cpp + SVGPaintServerRadialGradient.h + SVGPaintServerSolid.cpp + SVGPaintServerSolid.h + SVGResourceClipper.cpp + SVGResourceClipper.h + SVGResource.cpp + SVGResourceFilter.cpp + SVGResourceFilter.h + SVGResource.h + SVGResourceListener.h + SVGResourceMarker.cpp + SVGResourceMarker.h + SVGResourceMasker.cpp + SVGResourceMasker.h +2 LinearGradientAttributes.h + PatternAttributes.h + RadialGradientAttributes.h + SVGAElement.cpp + SVGAElement.h + SVGAElement.idl + SVGAllInOne.cpp + SVGAltGlyphElement.cpp + SVGAltGlyphElement.h + SVGAltGlyphElement.idl + SVGAngle.cpp + SVGAngle.h + SVGAngle.idl + SVGAnimateColorElement.cpp + SVGAnimateColorElement.h + SVGAnimateColorElement.idl + SVGAnimatedAngle.idl + SVGAnimatedBoolean.idl + SVGAnimatedEnumeration.idl + SVGAnimatedInteger.idl + SVGAnimatedLength.idl + SVGAnimatedLengthList.idl + SVGAnimatedNumber.idl + SVGAnimatedNumberList.idl + SVGAnimatedPathData.cpp + SVGAnimatedPathData.h + SVGAnimatedPathData.idl + SVGAnimatedPoints.cpp + SVGAnimatedPoints.h + SVGAnimatedPoints.idl + SVGAnimatedPreserveAspectRatio.idl + SVGAnimatedProperty.h + SVGAnimatedRect.idl + SVGAnimatedString.idl + SVGAnimatedTemplate.h + SVGAnimatedTransformList.idl + SVGAnimateElement.cpp + SVGAnimateElement.h + SVGAnimateElement.idl + SVGAnimateMotionElement.cpp + SVGAnimateMotionElement.h + SVGAnimateTransformElement.cpp + SVGAnimateTransformElement.h + SVGAnimateTransformElement.idl + SVGAnimationElement.cpp + SVGAnimationElement.h + SVGAnimationElement.idl + svgattrs.in + SVGCircleElement.cpp + SVGCircleElement.h + SVGCircleElement.idl + SVGClipPathElement.cpp + SVGClipPathElement.h + SVGClipPathElement.idl + SVGColor.cpp + SVGColor.h + SVGColor.idl + SVGComponentTransferFunctionElement.cpp + SVGComponentTransferFunctionElement.h + SVGComponentTransferFunctionElement.idl + SVGCursorElement.cpp + SVGCursorElement.h + SVGCursorElement.idl + SVGDefsElement.cpp + SVGDefsElement.h + SVGDefsElement.idl + SVGDescElement.cpp + SVGDescElement.h + SVGDescElement.idl + SVGDocument.cpp + SVGDocumentExtensions.cpp + SVGDocumentExtensions.h + SVGDocument.h + SVGDocument.idl + SVGElement.cpp + SVGElement.h + SVGElement.idl + SVGElementInstance.cpp + SVGElementInstance.h + SVGElementInstance.idl + SVGElementInstanceList.cpp + SVGElementInstanceList.h + SVGElementInstanceList.idl + SVGEllipseElement.cpp + SVGEllipseElement.h + SVGEllipseElement.idl + SVGException.h + SVGException.idl + SVGExternalResourcesRequired.cpp + SVGExternalResourcesRequired.h + SVGExternalResourcesRequired.idl + SVGFEBlendElement.cpp + SVGFEBlendElement.h + SVGFEBlendElement.idl + SVGFEColorMatrixElement.cpp + SVGFEColorMatrixElement.h + SVGFEColorMatrixElement.idl + SVGFEComponentTransferElement.cpp + SVGFEComponentTransferElement.h + SVGFEComponentTransferElement.idl + SVGFECompositeElement.cpp + SVGFECompositeElement.h + SVGFECompositeElement.idl + SVGFEDiffuseLightingElement.cpp + SVGFEDiffuseLightingElement.h + SVGFEDiffuseLightingElement.idl + SVGFEDisplacementMapElement.cpp + SVGFEDisplacementMapElement.h + SVGFEDisplacementMapElement.idl + SVGFEDistantLightElement.cpp + SVGFEDistantLightElement.h + SVGFEDistantLightElement.idl + SVGFEFloodElement.cpp + SVGFEFloodElement.h + SVGFEFloodElement.idl + SVGFEFuncAElement.cpp + SVGFEFuncAElement.h + SVGFEFuncAElement.idl + SVGFEFuncBElement.cpp + SVGFEFuncBElement.h + SVGFEFuncBElement.idl + SVGFEFuncGElement.cpp + SVGFEFuncGElement.h + SVGFEFuncGElement.idl + SVGFEFuncRElement.cpp + SVGFEFuncRElement.h + SVGFEFuncRElement.idl + SVGFEGaussianBlurElement.cpp + SVGFEGaussianBlurElement.h + SVGFEGaussianBlurElement.idl + SVGFEImageElement.cpp + SVGFEImageElement.h + SVGFEImageElement.idl + SVGFELightElement.cpp + SVGFELightElement.h + SVGFEMergeElement.cpp + SVGFEMergeElement.h + SVGFEMergeElement.idl + SVGFEMergeNodeElement.cpp + SVGFEMergeNodeElement.h + SVGFEMergeNodeElement.idl + SVGFEMorphologyElement.cpp + SVGFEMorphologyElement.h + SVGFEMorphologyElement.idl + SVGFEOffsetElement.cpp + SVGFEOffsetElement.h + SVGFEOffsetElement.idl + SVGFEPointLightElement.cpp + SVGFEPointLightElement.h + SVGFEPointLightElement.idl + SVGFESpecularLightingElement.cpp + SVGFESpecularLightingElement.h + SVGFESpecularLightingElement.idl + SVGFESpotLightElement.cpp + SVGFESpotLightElement.h + SVGFESpotLightElement.idl + SVGFETileElement.cpp + SVGFETileElement.h + SVGFETileElement.idl + SVGFETurbulenceElement.cpp + SVGFETurbulenceElement.h + SVGFETurbulenceElement.idl + SVGFilterElement.cpp + SVGFilterElement.h + SVGFilterElement.idl + SVGFilterPrimitiveStandardAttributes.cpp + SVGFilterPrimitiveStandardAttributes.h + SVGFilterPrimitiveStandardAttributes.idl + SVGFitToViewBox.cpp + SVGFitToViewBox.h + SVGFitToViewBox.idl + SVGFont.cpp + SVGFontData.cpp + SVGFontData.h + SVGFontElement.cpp + SVGFontElement.h + SVGFontElement.idl + SVGFontFaceElement.cpp + SVGFontFaceElement.h + SVGFontFaceElement.idl + SVGFontFaceFormatElement.cpp + SVGFontFaceFormatElement.h + SVGFontFaceFormatElement.idl + SVGFontFaceNameElement.cpp + SVGFontFaceNameElement.h + SVGFontFaceNameElement.idl + SVGFontFaceSrcElement.cpp + SVGFontFaceSrcElement.h + SVGFontFaceSrcElement.idl + SVGFontFaceUriElement.cpp + SVGFontFaceUriElement.h + SVGFontFaceUriElement.idl + SVGForeignObjectElement.cpp + SVGForeignObjectElement.h + SVGForeignObjectElement.idl + SVGGElement.cpp + SVGGElement.h + SVGGElement.idl + SVGGlyphElement.cpp + SVGGlyphElement.h + SVGGlyphElement.idl + SVGGlyphMap.h + SVGGradientElement.cpp + SVGGradientElement.h + SVGGradientElement.idl + SVGHKernElement.cpp + SVGHKernElement.h + SVGHKernElement.idl + SVGImageElement.cpp + SVGImageElement.h + SVGImageElement.idl + SVGImageLoader.cpp + SVGImageLoader.h + SVGLangSpace.cpp + SVGLangSpace.h + SVGLangSpace.idl + SVGLength.cpp + SVGLength.h + SVGLength.idl + SVGLengthList.cpp + SVGLengthList.h + SVGLengthList.idl + SVGLinearGradientElement.cpp + SVGLinearGradientElement.h + SVGLinearGradientElement.idl + SVGLineElement.cpp + SVGLineElement.h + SVGLineElement.idl + SVGList.h + SVGListTraits.h + SVGLocatable.cpp + SVGLocatable.h + SVGLocatable.idl + SVGMarkerElement.cpp + SVGMarkerElement.h + SVGMarkerElement.idl + SVGMaskElement.cpp + SVGMaskElement.h + SVGMaskElement.idl + SVGMatrix.idl + SVGMetadataElement.cpp + SVGMetadataElement.h + SVGMetadataElement.idl + SVGMissingGlyphElement.cpp + SVGMissingGlyphElement.h + SVGMissingGlyphElement.idl + SVGMPathElement.cpp + SVGMPathElement.h + SVGNumber.idl + SVGNumberList.cpp + SVGNumberList.h + SVGNumberList.idl + SVGPaint.cpp + SVGPaint.h + SVGPaint.idl + SVGParserUtilities.cpp + SVGParserUtilities.h + SVGPathElement.cpp + SVGPathElement.h + SVGPathElement.idl + SVGPathSegArcAbs.idl + SVGPathSegArc.cpp + SVGPathSegArc.h + SVGPathSegArcRel.idl + SVGPathSegClosePath.cpp + SVGPathSegClosePath.h + SVGPathSegClosePath.idl + SVGPathSegCurvetoCubicAbs.idl + SVGPathSegCurvetoCubic.cpp + SVGPathSegCurvetoCubic.h + SVGPathSegCurvetoCubicRel.idl + SVGPathSegCurvetoCubicSmoothAbs.idl + SVGPathSegCurvetoCubicSmooth.cpp + SVGPathSegCurvetoCubicSmooth.h + SVGPathSegCurvetoCubicSmoothRel.idl + SVGPathSegCurvetoQuadraticAbs.idl + SVGPathSegCurvetoQuadratic.cpp + SVGPathSegCurvetoQuadratic.h + SVGPathSegCurvetoQuadraticRel.idl + SVGPathSegCurvetoQuadraticSmoothAbs.idl + SVGPathSegCurvetoQuadraticSmooth.cpp + SVGPathSegCurvetoQuadraticSmooth.h + SVGPathSegCurvetoQuadraticSmoothRel.idl + SVGPathSeg.h + SVGPathSeg.idl + SVGPathSegLinetoAbs.idl + SVGPathSegLineto.cpp + SVGPathSegLineto.h + SVGPathSegLinetoHorizontalAbs.idl + SVGPathSegLinetoHorizontal.cpp + SVGPathSegLinetoHorizontal.h + SVGPathSegLinetoHorizontalRel.idl + SVGPathSegLinetoRel.idl + SVGPathSegLinetoVerticalAbs.idl + SVGPathSegLinetoVertical.cpp + SVGPathSegLinetoVertical.h + SVGPathSegLinetoVerticalRel.idl + SVGPathSegList.cpp + SVGPathSegList.h + SVGPathSegList.idl + SVGPathSegMovetoAbs.idl + SVGPathSegMoveto.cpp + SVGPathSegMoveto.h + SVGPathSegMovetoRel.idl + SVGPatternElement.cpp + SVGPatternElement.h + SVGPatternElement.idl + SVGPoint.idl + SVGPointList.cpp + SVGPointList.h + SVGPointList.idl + SVGPolyElement.cpp + SVGPolyElement.h + SVGPolygonElement.cpp + SVGPolygonElement.h + SVGPolygonElement.idl + SVGPolylineElement.cpp + SVGPolylineElement.h + SVGPolylineElement.idl + SVGPreserveAspectRatio.cpp + SVGPreserveAspectRatio.h + SVGPreserveAspectRatio.idl + SVGRadialGradientElement.cpp + SVGRadialGradientElement.h + SVGRadialGradientElement.idl + SVGRectElement.cpp + SVGRectElement.h + SVGRectElement.idl + SVGRect.idl + SVGRenderingIntent.h + SVGRenderingIntent.idl + SVGScriptElement.cpp + SVGScriptElement.h + SVGScriptElement.idl + SVGSetElement.cpp + SVGSetElement.h + SVGSetElement.idl + SVGStopElement.cpp + SVGStopElement.h + SVGStopElement.idl + SVGStringList.cpp + SVGStringList.h + SVGStringList.idl + SVGStylable.cpp + SVGStylable.h + SVGStylable.idl + SVGStyledElement.cpp + SVGStyledElement.h + SVGStyledLocatableElement.cpp + SVGStyledLocatableElement.h + SVGStyledTransformableElement.cpp + SVGStyledTransformableElement.h + SVGStyleElement.cpp + SVGStyleElement.h + SVGStyleElement.idl + SVGSVGElement.cpp + SVGSVGElement.h + SVGSVGElement.idl + SVGSwitchElement.cpp + SVGSwitchElement.h + SVGSwitchElement.idl + SVGSymbolElement.cpp + SVGSymbolElement.h + SVGSymbolElement.idl + svgtags.in + SVGTests.cpp + SVGTests.h + SVGTests.idl + SVGTextContentElement.cpp + SVGTextContentElement.h + SVGTextContentElement.idl + SVGTextElement.cpp + SVGTextElement.h + SVGTextElement.idl + SVGTextPathElement.cpp + SVGTextPathElement.h + SVGTextPathElement.idl + SVGTextPositioningElement.cpp + SVGTextPositioningElement.h + SVGTextPositioningElement.idl + SVGTitleElement.cpp + SVGTitleElement.h + SVGTitleElement.idl + SVGTransformable.cpp + SVGTransformable.h + SVGTransformable.idl + SVGTransform.cpp + SVGTransformDistance.cpp + SVGTransformDistance.h + SVGTransform.h + SVGTransform.idl + SVGTransformList.cpp + SVGTransformList.h + SVGTransformList.idl + SVGTRefElement.cpp + SVGTRefElement.h + SVGTRefElement.idl + SVGTSpanElement.cpp + SVGTSpanElement.h + SVGTSpanElement.idl + SVGUnitTypes.h + SVGUnitTypes.idl + SVGURIReference.cpp + SVGURIReference.h + SVGURIReference.idl + SVGUseElement.cpp + SVGUseElement.h + SVGUseElement.idl + SVGViewElement.cpp + SVGViewElement.h + SVGViewElement.idl + SVGViewSpec.cpp + SVGViewSpec.h + SVGViewSpec.idl + SVGZoomAndPan.cpp + SVGZoomAndPan.h + SVGZoomAndPan.idl + SVGZoomEvent.cpp + SVGZoomEvent.h + SVGZoomEvent.idl + SynchronizablePropertyController.cpp + SynchronizablePropertyController.h + SynchronizableTypeWrapper.h + xlinkattrs.in +2 WebCore.3DRendering.exp + WebCore.DashboardSupport.exp + WebCore.gypi + WebCore.JNI.exp + WebCore.NPAPI.exp + WebCore.order + WebCorePrefix.cpp + WebCorePrefix.h + WebCore.pro + WebCore.qrc + WebCore.SVG.Animation.exp + WebCore.SVG.exp + WebCore.SVG.Filters.exp + WebCore.SVG.ForeignObject.exp + WebCore.Tiger.exp + WebCore.Video.exp + WebCore.VideoProxy.exp + websockets/ +0 WebSocketChannelClient.h + WebSocketChannel.cpp + WebSocketChannel.h + WebSocket.cpp + WebSocket.h + WebSocketHandshake.cpp + WebSocketHandshake.h + WebSocket.idl +2 wml/ +0 WMLAccessElement.cpp + WMLAccessElement.h + WMLAElement.cpp + WMLAElement.h + WMLAnchorElement.cpp + WMLAnchorElement.h + WMLAttributeNames.in + WMLBRElement.cpp + WMLBRElement.h + WMLCardElement.cpp + WMLCardElement.h + WMLDocument.cpp + WMLDocument.h + WMLDoElement.cpp + WMLDoElement.h + WMLElement.cpp + WMLElement.h + WMLErrorHandling.cpp + WMLErrorHandling.h + WMLEventHandlingElement.cpp + WMLEventHandlingElement.h + WMLFieldSetElement.cpp + WMLFieldSetElement.h + WMLFormControlElement.cpp + WMLFormControlElement.h + WMLGoElement.cpp + WMLGoElement.h + WMLImageElement.cpp + WMLImageElement.h + WMLImageLoader.cpp + WMLImageLoader.h + WMLInputElement.cpp + WMLInputElement.h + WMLInsertedLegendElement.cpp + WMLInsertedLegendElement.h + WMLIntrinsicEvent.cpp + WMLIntrinsicEvent.h + WMLIntrinsicEventHandler.cpp + WMLIntrinsicEventHandler.h + WMLMetaElement.cpp + WMLMetaElement.h + WMLNoopElement.cpp + WMLNoopElement.h + WMLOnEventElement.cpp + WMLOnEventElement.h + WMLOptGroupElement.cpp + WMLOptGroupElement.h + WMLOptionElement.cpp + WMLOptionElement.h + WMLPageState.cpp + WMLPageState.h + WMLPElement.cpp + WMLPElement.h + WMLPostfieldElement.cpp + WMLPostfieldElement.h + WMLPrevElement.cpp + WMLPrevElement.h + WMLRefreshElement.cpp + WMLRefreshElement.h + WMLSelectElement.cpp + WMLSelectElement.h + WMLSetvarElement.cpp + WMLSetvarElement.h + WMLTableElement.cpp + WMLTableElement.h + WMLTagNames.in + WMLTaskElement.cpp + WMLTaskElement.h + WMLTemplateElement.cpp + WMLTemplateElement.h + WMLTimerElement.cpp + WMLTimerElement.h + WMLVariables.cpp + WMLVariables.h +2 workers/ +0 AbstractWorker.cpp + AbstractWorker.h + AbstractWorker.idl + DedicatedWorkerContext.cpp + DedicatedWorkerContext.h + DedicatedWorkerContext.idl + DedicatedWorkerThread.cpp + DedicatedWorkerThread.h + DefaultSharedWorkerRepository.cpp + DefaultSharedWorkerRepository.h + GenericWorkerTask.h + SharedWorkerContext.cpp + SharedWorkerContext.h + SharedWorkerContext.idl + SharedWorker.cpp + SharedWorker.h + SharedWorker.idl + SharedWorkerRepository.h + SharedWorkerThread.cpp + SharedWorkerThread.h + WorkerContext.cpp + WorkerContext.h + WorkerContext.idl + WorkerContextProxy.h + Worker.cpp + Worker.h + Worker.idl + WorkerLoaderProxy.h + WorkerLocation.cpp + WorkerLocation.h + WorkerLocation.idl + WorkerMessagingProxy.cpp + WorkerMessagingProxy.h + WorkerObjectProxy.h + WorkerReportingProxy.h + WorkerRunLoop.cpp + WorkerRunLoop.h + WorkerScriptLoaderClient.h + WorkerScriptLoader.cpp + WorkerScriptLoader.h + WorkerThread.cpp + WorkerThread.h +2 xml/ +0 DOMParser.cpp + DOMParser.h + DOMParser.idl + NativeXPathNSResolver.cpp + NativeXPathNSResolver.h + xmlattrs.in + XMLHttpRequest.cpp + XMLHttpRequestException.h + XMLHttpRequestException.idl + XMLHttpRequest.h + XMLHttpRequest.idl + XMLHttpRequestProgressEvent.h + XMLHttpRequestProgressEvent.idl + XMLHttpRequestUpload.cpp + XMLHttpRequestUpload.h + XMLHttpRequestUpload.idl + XMLSerializer.cpp + XMLSerializer.h + XMLSerializer.idl + XPathEvaluator.cpp + XPathEvaluator.h + XPathEvaluator.idl + XPathException.h + XPathException.idl + XPathExpression.cpp + XPathExpression.h + XPathExpression.idl + XPathExpressionNode.cpp + XPathExpressionNode.h + XPathFunctions.cpp + XPathFunctions.h + XPathGrammar.y + XPathNamespace.cpp + XPathNamespace.h + XPathNodeSet.cpp + XPathNodeSet.h + XPathNSResolver.cpp + XPathNSResolver.h + XPathNSResolver.idl + XPathParser.cpp + XPathParser.h + XPathPath.cpp + XPathPath.h + XPathPredicate.cpp + XPathPredicate.h + XPathResult.cpp + XPathResult.h + XPathResult.idl + XPathStep.cpp + XPathStep.h + XPathUtil.cpp + XPathUtil.h + XPathValue.cpp + XPathValue.h + XPathVariableReference.cpp + XPathVariableReference.h + XSLImportRule.cpp + XSLImportRule.h + XSLStyleSheet.h + XSLStyleSheetLibxslt.cpp + XSLStyleSheetQt.cpp + XSLTExtensions.cpp + XSLTExtensions.h + XSLTProcessor.cpp + XSLTProcessor.h + XSLTProcessor.idl + XSLTProcessorLibxslt.cpp + XSLTProcessorQt.cpp + XSLTUnicodeSort.cpp + XSLTUnicodeSort.h +3 WebKit/ +0 ChangeLog + LICENSE + mac/ +0 Configurations/ +0 Version.xcconfig +2 Workers/ +0 WebWorkersPrivate.h + WebWorkersPrivate.mm +4 WebKit.pri + WebKit/qt/ +0 Api/ +0 headers.pri + qgraphicswebview.cpp + qgraphicswebview.h + qwebdatabase.cpp + qwebdatabase.h + qwebdatabase_p.h + qwebelement.cpp + qwebelement.h + qwebframe.cpp + qwebframe.h + qwebframe_p.h + qwebhistory.cpp + qwebhistory.h + qwebhistoryinterface.cpp + qwebhistoryinterface.h + qwebhistory_p.h + qwebinspector.cpp + qwebinspector.h + qwebinspector_p.h + qwebkitglobal.h + qwebkitversion.cpp + qwebkitversion.h + qwebpage.cpp + qwebpage.h + qwebpage_p.h + qwebplugindatabase.cpp + qwebplugindatabase_p.h + qwebpluginfactory.cpp + qwebpluginfactory.h + qwebsecurityorigin.cpp + qwebsecurityorigin.h + qwebsecurityorigin_p.h + qwebsettings.cpp + qwebsettings.h + qwebview.cpp + qwebview.h +2 ChangeLog + docs/ +0 docs.pri + qtwebkit.qdoc +0 conf +2 qwebview-diagram.png + webkitsnippets/ +0 qtwebkit_build_snippet.qdoc + qtwebkit_qwebinspector_snippet.cpp + qtwebkit_qwebview_snippet.cpp + simple/ +0 main.cpp + simple.pro +2 webelement/ +0 main.cpp + webelement.pro +2 webpage/ +0 main.cpp + webpage.pro +4 tests/ +0 benchmarks/ +0 loading/ +0 tst_loading.cpp + tst_loading.pro +2 painting/ +0 tst_painting.cpp + tst_painting.pro +3 qgraphicswebview/ +0 qgraphicswebview.pro + tst_qgraphicswebview.cpp +2 qwebelement/ +0 image.png + qwebelement.pro + qwebelement.qrc + style2.css + style.css + tst_qwebelement.cpp +2 qwebframe/ +0 image.png + qwebframe.pro + qwebframe.qrc + resources/ +0 image2.png +2 style.css + test1.html + test2.html + tst_qwebframe.cpp +2 qwebhistory/ +0 data/ +0 page1.html + page2.html + page3.html + page4.html + page5.html + page6.html +3 qwebhistoryinterface/ +0 qwebhistoryinterface.pro + tst_qwebhistoryinterface.cpp +2 qwebhistory/qwebhistory.pro + qwebhistory/tst_qwebhistory.cpp + qwebhistory/tst_qwebhistory.qrc + qwebpage/ +0 frametest/ +0 frame_a.html + iframe2.html + iframe3.html + iframe.html + index.html +2 qwebpage.pro + tst_qwebpage.cpp + tst_qwebpage.qrc +2 qwebplugindatabase/ +0 qwebplugindatabase.pro + tst_qwebplugindatabase.cpp +2 qwebview/ +0 data/ +0 frame_a.html + index.html +2 .gitignore + qwebview.pro + tst_qwebview.cpp + tst_qwebview.qrc +2 resources/ +0 test.swf +2 tests.pro + util.h +2 WebCoreSupport/ +0 ChromeClientQt.cpp + ChromeClientQt.h + ContextMenuClientQt.cpp + ContextMenuClientQt.h + DragClientQt.cpp + DragClientQt.h + EditCommandQt.cpp + EditCommandQt.h + EditorClientQt.cpp + EditorClientQt.h + FrameLoaderClientQt.cpp + FrameLoaderClientQt.h + InspectorClientQt.cpp + InspectorClientQt.h +2 WebKit_pch.h +2 WebKit/scripts/ +0 generate-webkitversion.pl +2 WebKit/StringsNotToBeLocalized.txt +2 wintab/ +0 pktdef.h + wintab.h +2 xorg/ +0 wacomcfg.h +2 zlib/ +0 adler32.c + algorithm.txt + ChangeLog + compress.c + configure + crc32.c + crc32.h + deflate.c + deflate.h + example.c + examples/ +0 fitblk.c + gun.c + gzappend.c + gzjoin.c + gzlog.c + gzlog.h + README.examples + zlib_how.html + zpipe.c + zran.c +2 FAQ + gzio.c + INDEX + infback.c + inffast.c + inffast.h + inffixed.h + inflate.c + inflate.h + inftrees.c + inftrees.h + Makefile +0 .in +2 make_vms.com + minigzip.c + projects/ +0 README.projects + visualc6/ +0 example.dsp + minigzip.dsp + README.txt + zlib.dsp + zlib.dsw +3 README + trees.c + trees.h + uncompr.c + win32/ +0 DLL_FAQ.txt + Makefile.bor + Makefile.emx + Makefile.gcc + Makefile.msc + VisualC.txt + zlib1.rc + zlib.def +2 zconf.h + zconf.in.h + zlib.3 + zlib.h + zutil.c + zutil.h +3 activeqt/ +0 activeqt.pro + container/ +0 container.pro + qaxbase.cpp + qaxbase.h + qaxdump.cpp + qaxobject.cpp + qaxobject.h + qaxscript.cpp + qaxscript.h + qaxscriptwrapper.cpp + qaxselect.cpp + qaxselect.h + qaxselect.ui + qaxwidget.cpp + qaxwidget.h +2 control/ +0 control.pro + qaxaggregated.h + qaxbindable.cpp + qaxbindable.h + qaxfactory.cpp + qaxfactory.h + qaxmain.cpp + qaxserverbase.cpp + qaxserver.cpp + qaxserver.def + qaxserverdll.cpp + qaxserver.ico + qaxservermain.cpp + qaxserver.rc +2 shared/ +0 qaxtypes.cpp + qaxtypes.h +3 corelib/ +0 animation/ +0 animation.pri + qabstractanimation.cpp + qabstractanimation.h + qabstractanimation_p.h + qanimationgroup.cpp + qanimationgroup.h + qanimationgroup_p.h + qparallelanimationgroup.cpp + qparallelanimationgroup.h + qparallelanimationgroup_p.h + qpauseanimation.cpp + qpauseanimation.h + qpropertyanimation.cpp + qpropertyanimation.h + qpropertyanimation_p.h + qsequentialanimationgroup.cpp + qsequentialanimationgroup.h + qsequentialanimationgroup_p.h + qvariantanimation.cpp + qvariantanimation.h + qvariantanimation_p.h +2 arch/ +0 alpha/ +0 arch.pri + qatomic_alpha.s +2 arch.pri + arm/ +0 arch.pri + qatomic_arm.cpp +2 armv6/ +0 arch.pri + qatomic_generic_armv6.cpp +2 avr32/ +0 arch.pri +2 bfin/ +0 arch.pri +2 generic/ +0 arch.pri + qatomic_generic_unix.cpp + qatomic_generic_windows.cpp +2 i386/ +0 arch.pri + qatomic_i386.s +2 ia64/ +0 arch.pri + qatomic_ia64.s +2 macosx/ +0 arch.pri + qatomic32_ppc.s +2 mips/ +0 arch.pri + qatomic_mips32.s + qatomic_mips64.s +2 parisc/ +0 arch.pri + qatomic_parisc.cpp + q_ldcw.s +2 powerpc/ +0 arch.pri + qatomic32.s + qatomic64.s +2 qatomic_alpha.h + qatomic_arch.h + qatomic_arm.h + qatomic_armv6.h + qatomic_avr32.h + qatomic_bfin.h + qatomic_bootstrap.h + qatomic_generic.h + qatomic_i386.h + qatomic_ia64.h + qatomic_macosx.h + qatomic_mips.h + qatomic_parisc.h + qatomic_powerpc.h + qatomic_s390.h + qatomic_sh4a.h + qatomic_sh.h + qatomic_sparc.h + qatomic_symbian.h + qatomic_vxworks.h + qatomic_windowsce.h + qatomic_windows.h + qatomic_x86_64.h + s390/ +0 arch.pri +2 sh/ + sh4a/ +0 arch.pri +2 sh/arch.pri + sh/qatomic_sh.cpp + sparc/ +0 arch.pri + qatomic32.s + qatomic64.s + qatomic_sparc.cpp +2 symbian/ +0 arch.pri + qatomic_symbian.cpp +2 vxworks/ +0 arch.pri + qatomic_ppc.s +2 windows/ +0 arch.pri +2 x86_64/ +0 arch.pri + qatomic_sun.s +3 codecs/ +0 codecs.pri + codecs.qdoc + qfontlaocodec.cpp + qfontlaocodec_p.h + qiconvcodec.cpp + qiconvcodec_p.h + qisciicodec.cpp + qisciicodec_p.h + qlatincodec.cpp + qlatincodec_p.h + qsimplecodec.cpp + qsimplecodec_p.h + qtextcodec.cpp + qtextcodec.h + qtextcodec_p.h + qtextcodecplugin.cpp + qtextcodecplugin.h + qtsciicodec.cpp + qtsciicodec_p.h + qutfcodec.cpp + qutfcodec_p.h +2 concurrent/ +0 concurrent.pri + qfuture.cpp + qfuture.h + qfutureinterface.cpp + qfutureinterface.h + qfutureinterface_p.h + qfuturesynchronizer.cpp + qfuturesynchronizer.h + qfuturewatcher.cpp + qfuturewatcher.h + qfuturewatcher_p.h + qrunnable.cpp + qrunnable.h + qtconcurrentcompilertest.h + qtconcurrentexception.cpp + qtconcurrentexception.h + qtconcurrentfilter.cpp + qtconcurrentfilter.h + qtconcurrentfilterkernel.h + qtconcurrentfunctionwrappers.h + qtconcurrentiteratekernel.cpp + qtconcurrentiteratekernel.h + qtconcurrentmap.cpp + qtconcurrentmap.h + qtconcurrentmapkernel.h + qtconcurrentmedian.h + qtconcurrentreducekernel.h + qtconcurrentresultstore.cpp + qtconcurrentresultstore.h + qtconcurrentrunbase.h + qtconcurrentrun.cpp + qtconcurrentrun.h + qtconcurrentstoredfunctioncall.h + qtconcurrentthreadengine.cpp + qtconcurrentthreadengine.h + qthreadpool.cpp + qthreadpool.h + qthreadpool_p.h +2 corelib.pro + eval.pri + global/ +0 global.pri + qconfig-dist.h + qconfig-large.h + qconfig-medium.h + qconfig-minimal.h + qconfig-small.h + qendian.h + qendian.qdoc + qfeatures.h + qfeatures.txt + qglobal.cpp + qglobal.h + qlibraryinfo.cpp + qlibraryinfo.h + qmalloc.cpp + qnamespace.h + qnamespace.qdoc + qnumeric.cpp + qnumeric.h + qnumeric_p.h + qt_pch.h + qt_windows.h +2 io/ +0 io.pri + qabstractfileengine.cpp + qabstractfileengine.h + qabstractfileengine_p.h + qbuffer.cpp + qbuffer.h + qdatastream.cpp + qdatastream.h + qdatastream_p.h + qdebug.cpp + qdebug.h + qdir.cpp + qdir.h + qdiriterator.cpp + qdiriterator.h + qfile.cpp + qfile.h + qfileinfo.cpp + qfileinfo.h + qfileinfo_p.h + qfile_p.h + qfilesystemwatcher.cpp + qfilesystemwatcher_dnotify.cpp + qfilesystemwatcher_dnotify_p.h + qfilesystemwatcher_fsevents.cpp + qfilesystemwatcher_fsevents_p.h + qfilesystemwatcher.h + qfilesystemwatcher_inotify.cpp + qfilesystemwatcher_inotify_p.h + qfilesystemwatcher_kqueue.cpp + qfilesystemwatcher_kqueue_p.h + qfilesystemwatcher_p.h + qfilesystemwatcher_symbian.cpp + qfilesystemwatcher_symbian_p.h + qfilesystemwatcher_win.cpp + qfilesystemwatcher_win_p.h + qfsfileengine.cpp + qfsfileengine.h + qfsfileengine_iterator.cpp + qfsfileengine_iterator_p.h + qfsfileengine_iterator_unix.cpp + qfsfileengine_iterator_win.cpp + qfsfileengine_p.h + qfsfileengine_unix.cpp + qfsfileengine_win.cpp + qiodevice.cpp + qiodevice.h + qiodevice_p.h + qnoncontiguousbytedevice.cpp + qnoncontiguousbytedevice_p.h + qprocess.cpp + qprocess.h + qprocess_p.h + qprocess_symbian.cpp + qprocess_unix.cpp + qprocess_win.cpp + qresource.cpp + qresource.h + qresource_iterator.cpp + qresource_iterator_p.h + qresource_p.h + qsettings.cpp + qsettings.h + qsettings_mac.cpp + qsettings_p.h + qsettings_win.cpp + qtemporaryfile.cpp + qtemporaryfile.h + qtextstream.cpp + qtextstream.h + qurl.cpp + qurl.h + qwindowspipewriter.cpp + qwindowspipewriter_p.h +2 kernel/ +0 kernel.pri + qabstracteventdispatcher.cpp + qabstracteventdispatcher.h + qabstracteventdispatcher_p.h + qabstractitemmodel.cpp + qabstractitemmodel.h + qabstractitemmodel_p.h + qbasictimer.cpp + qbasictimer.h + qcoreapplication.cpp + qcoreapplication.h + qcoreapplication_mac.cpp + qcoreapplication_p.h + qcoreapplication_win.cpp + qcorecmdlineargs_p.h + qcoreevent.cpp + qcoreevent.h + qcoreglobaldata.cpp + qcoreglobaldata_p.h + qcore_mac.cpp + qcore_mac_p.h + qcore_symbian_p.cpp + qcore_symbian_p.h + qcore_unix.cpp + qcore_unix_p.h + qcrashhandler.cpp + qcrashhandler_p.h + qeventdispatcher_glib.cpp + qeventdispatcher_glib_p.h + qeventdispatcher_symbian.cpp + qeventdispatcher_symbian_p.h + qeventdispatcher_unix.cpp + qeventdispatcher_unix_p.h + qeventdispatcher_win.cpp + qeventdispatcher_win_p.h + qeventloop.cpp + qeventloop.h + qfunctions_p.h + qfunctions_vxworks.cpp + qfunctions_vxworks.h + qfunctions_wince.cpp + qfunctions_wince.h + qguard_p.h + qmath.cpp + qmath.h + qmetaobject.cpp + qmetaobject.h + qmetaobject_p.h + qmetatype.cpp + qmetatype.h + qmimedata.cpp + qmimedata.h + qobjectcleanuphandler.cpp + qobjectcleanuphandler.h + qobject.cpp + qobjectdefs.h + qobject.h + qobject_p.h + qpointer.cpp + qpointer.h + qsharedmemory.cpp + qsharedmemory.h + qsharedmemory_p.h + qsharedmemory_symbian.cpp + qsharedmemory_unix.cpp + qsharedmemory_win.cpp + qsignalmapper.cpp + qsignalmapper.h + qsocketnotifier.cpp + qsocketnotifier.h + qsystemsemaphore.cpp + qsystemsemaphore.h + qsystemsemaphore_p.h + qsystemsemaphore_symbian.cpp + qsystemsemaphore_unix.cpp + qsystemsemaphore_win.cpp + qtcore_eval.cpp + qtimer.cpp + qtimer.h + qtranslator.cpp + qtranslator.h + qtranslator_p.h + qvariant.cpp + qvariant.h + qvariant_p.h + qwineventnotifier_p.cpp + qwineventnotifier_p.h +2 plugin/ +0 plugin.pri + qfactoryinterface.h + qfactoryloader.cpp + qfactoryloader_p.h + qlibrary.cpp + qlibrary.h + qlibrary_p.h + qlibrary_unix.cpp + qlibrary_win.cpp + qplugin.h + qpluginloader.cpp + qpluginloader.h + qplugin.qdoc + quuid.cpp + quuid.h +2 QtCore.dynlist + statemachine/ +0 qabstractstate.cpp + qabstractstate.h + qabstractstate_p.h + qabstracttransition.cpp + qabstracttransition.h + qabstracttransition_p.h + qeventtransition.cpp + qeventtransition.h + qeventtransition_p.h + qfinalstate.cpp + qfinalstate.h + qhistorystate.cpp + qhistorystate.h + qhistorystate_p.h + qsignaleventgenerator_p.h + qsignaltransition.cpp + qsignaltransition.h + qsignaltransition_p.h + qstate.cpp + qstate.h + qstatemachine.cpp + qstatemachine.h + qstatemachine_p.h + qstate_p.h + statemachine.pri +2 thread/ +0 qatomic.cpp + qatomic.h + qbasicatomic.h + qmutex.cpp + qmutex.h + qmutex_p.h + qmutexpool.cpp + qmutexpool_p.h + qmutex_unix.cpp + qmutex_win.cpp + qorderedmutexlocker_p.h + qreadwritelock.cpp + qreadwritelock.h + qreadwritelock_p.h + qsemaphore.cpp + qsemaphore.h + qthread.cpp + qthread.h + qthread_p.h + qthreadstorage.cpp + qthreadstorage.h + qthread_unix.cpp + qthread_win.cpp + qwaitcondition.h + qwaitcondition.qdoc + qwaitcondition_unix.cpp + qwaitcondition_win.cpp + thread.pri +2 tools/ +0 qalgorithms.h + qalgorithms.qdoc + qbitarray.cpp + qbitarray.h + qbytearray.cpp + qbytearray.h + qbytearraymatcher.cpp + qbytearraymatcher.h + qbytedata_p.h + qcache.h + qcache.qdoc + qchar.cpp + qchar.h + qcontainerfwd.h + qcontiguouscache.cpp + qcontiguouscache.h + qcryptographichash.cpp + qcryptographichash.h + qdatetime.cpp + qdatetime.h + qdatetime_p.h + qeasingcurve.cpp + qeasingcurve.h + qharfbuzz.cpp + qharfbuzz_p.h + qhash.cpp + qhash.h + qiterator.h + qiterator.qdoc + qline.cpp + qline.h + qlinkedlist.cpp + qlinkedlist.h + qlist.cpp + qlist.h + qlocale.cpp + qlocale_data_p.h + qlocale.h + qlocale_p.h + qlocale_symbian.cpp + qmap.cpp + qmap.h + qmargins.cpp + qmargins.h + qpair.h + qpair.qdoc + qpodlist_p.h + qpoint.cpp + qpoint.h + qqueue.cpp + qqueue.h + qrect.cpp + qrect.h + qregexp.cpp + qregexp.h + qringbuffer_p.h + qscopedpointer.cpp + qscopedpointer.h + qscopedpointer_p.h + qset.h + qset.qdoc + qshareddata.cpp + qshareddata.h + qsharedpointer.cpp + qsharedpointer.h + qsharedpointer_impl.h + qsize.cpp + qsize.h + qstack.cpp + qstack.h + qstringbuilder.cpp + qstringbuilder.h + qstring.cpp + qstring.h + qstringlist.cpp + qstringlist.h + qstringmatcher.cpp + qstringmatcher.h + qtextboundaryfinder.cpp + qtextboundaryfinder.h + qtimeline.cpp + qtimeline.h + qtools_p.h + qunicodetables.cpp + qunicodetables_p.h + qvarlengtharray.h + qvarlengtharray.qdoc + qvector.cpp + qvector.h + qvsnprintf.cpp + tools.pri +2 xml/ +0 .gitignore + make-parser.sh + qxmlstream.cpp + qxmlstream.g + qxmlstream.h + qxmlstream_p.h + qxmlutils.cpp + qxmlutils_p.h + xml.pri +3 dbus/ +0 dbus.pro + qdbusabstractadaptor.cpp + qdbusabstractadaptor.h + qdbusabstractadaptor_p.h + qdbusabstractinterface.cpp + qdbusabstractinterface.h + qdbusabstractinterface_p.h + qdbusargument.cpp + qdbusargument.h + qdbusargument_p.h + qdbusconnection.cpp + qdbusconnection.h + qdbusconnectioninterface.cpp + qdbusconnectioninterface.h + qdbusconnection_p.h + qdbuscontext.cpp + qdbuscontext.h + qdbuscontext_p.h + qdbusdemarshaller.cpp + qdbuserror.cpp + qdbuserror.h + qdbusextratypes.cpp + qdbusextratypes.h + qdbusintegrator.cpp + qdbusintegrator_p.h + qdbusinterface.cpp + qdbusinterface.h + qdbusinterface_p.h + qdbusinternalfilters.cpp + qdbusintrospection.cpp + qdbusintrospection_p.h + qdbusmacros.h + qdbusmarshaller.cpp + qdbusmessage.cpp + qdbusmessage.h + qdbusmessage_p.h + qdbusmetaobject.cpp + qdbusmetaobject_p.h + qdbusmetatype.cpp + qdbusmetatype.h + qdbusmetatype_p.h + qdbusmisc.cpp + qdbuspendingcall.cpp + qdbuspendingcall.h + qdbuspendingcall_p.h + qdbuspendingreply.cpp + qdbuspendingreply.h + qdbusreply.cpp + qdbusreply.h + qdbusserver.cpp + qdbusserver.h + qdbusservicewatcher.cpp + qdbusservicewatcher.h + qdbus_symbols.cpp + qdbus_symbols_p.h + qdbusthreaddebug_p.h + qdbusutil.cpp + qdbusutil_p.h + qdbusxmlgenerator.cpp + qdbusxmlparser.cpp + qdbusxmlparser_p.h +2 gui/ +0 accessible/ +0 accessible.pri + qaccessible2.cpp + qaccessible2.h + qaccessiblebridge.cpp + qaccessiblebridge.h + qaccessible.cpp + qaccessible.h + qaccessible_mac_carbon.cpp + qaccessible_mac_cocoa.mm + qaccessible_mac.mm + qaccessible_mac_p.h + qaccessibleobject.cpp + qaccessibleobject.h + qaccessibleplugin.cpp + qaccessibleplugin.h + qaccessible_unix.cpp + qaccessiblewidget.cpp + qaccessiblewidget.h + qaccessible_win.cpp +2 animation/ +0 animation.pri + qguivariantanimation.cpp +2 dialogs/ +0 dialogs.pri + images/ +0 fit-page-24.png + fit-page-32.png + fit-width-24.png + fit-width-32.png + go-first-24.png + go-first-32.png + go-last-24.png + go-last-32.png + go-next-24.png + go-next-32.png + go-previous-24.png + go-previous-32.png + layout-landscape-24.png + layout-landscape-32.png + layout-portrait-24.png + layout-portrait-32.png + page-setup-24.png + page-setup-32.png + print-24.png + print-32.png + qtlogo-64.png + status-color.png + status-gray-scale.png + view-page-multi-24.png + view-page-multi-32.png + view-page-one-24.png + view-page-one-32.png + view-page-sided-24.png + view-page-sided-32.png + zoom-in-24.png + zoom-in-32.png + zoom-out-24.png + zoom-out-32.png +2 qabstractpagesetupdialog.cpp + qabstractpagesetupdialog.h + qabstractpagesetupdialog_p.h + qabstractprintdialog.cpp + qabstractprintdialog.h + qabstractprintdialog_p.h + qcolordialog.cpp + qcolordialog.h + qcolordialog_mac.mm + qcolordialog_p.h + qdialog.cpp + qdialog.h + qdialog_p.h + qdialogsbinarycompat_win.cpp + qerrormessage.cpp + qerrormessage.h + qfiledialog.cpp + qfiledialog_embedded.ui + qfiledialog.h + qfiledialog_mac.mm + qfiledialog_p.h + qfiledialog.ui + qfiledialog_win.cpp + qfileinfogatherer.cpp + qfileinfogatherer_p.h + qfilesystemmodel.cpp + qfilesystemmodel.h + qfilesystemmodel_p.h + qfontdialog.cpp + qfontdialog.h + qfontdialog_mac.mm + qfontdialog_p.h + qfscompleter_p.h + qinputdialog.cpp + qinputdialog.h + qmessagebox.cpp + qmessagebox.h + qmessagebox.qrc + qnspanelproxy_mac.mm + qpagesetupdialog.cpp + qpagesetupdialog.h + qpagesetupdialog_mac.mm + qpagesetupdialog_unix.cpp + qpagesetupdialog_unix_p.h + qpagesetupdialog_win.cpp + qpagesetupwidget.ui + qprintdialog.h + qprintdialog_mac.mm + qprintdialog.qdoc + qprintdialog.qrc + qprintdialog_qws.cpp + qprintdialog_unix.cpp + qprintdialog_win.cpp + qprintpreviewdialog.cpp + qprintpreviewdialog.h + qprintpropertieswidget.ui + qprintsettingsoutput.ui + qprintwidget.ui + qprogressdialog.cpp + qprogressdialog.h + qsidebar.cpp + qsidebar_p.h + qwizard.cpp + qwizard.h + qwizard_win.cpp + qwizard_win_p.h +2 effects/ +0 effects.pri + qgraphicseffect.cpp + qgraphicseffect.h + qgraphicseffect_p.h +2 egl/ +0 egl.pri + qegl.cpp + qegl_p.h + qeglproperties.cpp + qeglproperties_p.h + qegl_qws.cpp + qegl_symbian.cpp + qegl_wince.cpp + qegl_x11.cpp +2 embedded/ +0 directfb.pri + embedded.pri + qcopchannel_qws.cpp + qcopchannel_qws.h + qdecorationdefault_qws.cpp + qdecorationdefault_qws.h + qdecorationfactory_qws.cpp + qdecorationfactory_qws.h + qdecorationplugin_qws.cpp + qdecorationplugin_qws.h + qdecoration_qws.cpp + qdecoration_qws.h + qdecorationstyled_qws.cpp + qdecorationstyled_qws.h + qdecorationwindows_qws.cpp + qdecorationwindows_qws.h + qdirectpainter_qws.cpp + qdirectpainter_qws.h + qkbd_defaultmap_qws_p.h + qkbddriverfactory_qws.cpp + qkbddriverfactory_qws.h + qkbddriverplugin_qws.cpp + qkbddriverplugin_qws.h + qkbdlinuxinput_qws.cpp + qkbdlinuxinput_qws.h + qkbdqnx_qws.cpp + qkbdqnx_qws.h + qkbd_qws.cpp + qkbd_qws.h + qkbd_qws_p.h + qkbdtty_qws.cpp + qkbdtty_qws.h + qkbdum_qws.cpp + qkbdum_qws.h + qkbdvfb_qws.cpp + qkbdvfb_qws.h + qlock.cpp + qlock_p.h + qmousedriverfactory_qws.cpp + qmousedriverfactory_qws.h + qmousedriverplugin_qws.cpp + qmousedriverplugin_qws.h + qmouselinuxinput_qws.cpp + qmouselinuxinput_qws.h + qmouselinuxtp_qws.cpp + qmouselinuxtp_qws.h + qmousepc_qws.cpp + qmousepc_qws.h + qmouseqnx_qws.cpp + qmouseqnx_qws.h + qmouse_qws.cpp + qmouse_qws.h + qmousetslib_qws.cpp + qmousetslib_qws.h + qmousevfb_qws.cpp + qmousevfb_qws.h + qscreendriverfactory_qws.cpp + qscreendriverfactory_qws.h + qscreendriverplugin_qws.cpp + qscreendriverplugin_qws.h + qscreenlinuxfb_qws.cpp + qscreenlinuxfb_qws.h + qscreenmulti_qws.cpp + qscreenmulti_qws_p.h + qscreenproxy_qws.cpp + qscreenproxy_qws.h + qscreenqnx_qws.cpp + qscreenqnx_qws.h + qscreen_qws.cpp + qscreen_qws.h + qscreentransformed_qws.cpp + qscreentransformed_qws.h + qscreenvfb_qws.cpp + qscreenvfb_qws.h + qsoundqss_qws.cpp + qsoundqss_qws.h + qtransportauthdefs_qws.h + qtransportauth_qws.cpp + qtransportauth_qws.h + qtransportauth_qws_p.h + qunixsocket.cpp + qunixsocket_p.h + qunixsocketserver.cpp + qunixsocketserver_p.h + qvfbhdr.h + qwindowsystem_p.h + qwindowsystem_qws.cpp + qwindowsystem_qws.h + qwscommand_qws.cpp + qwscommand_qws_p.h + qwscursor_qws.cpp + qwscursor_qws.h + qwsdisplay_qws.h + qwsdisplay_qws_p.h + qwsembedwidget.cpp + qwsembedwidget.h + qwsevent_qws.cpp + qwsevent_qws.h + qwslock.cpp + qwslock_p.h + qwsmanager_p.h + qwsmanager_qws.cpp + qwsmanager_qws.h + qwsproperty_qws.cpp + qwsproperty_qws.h + qwsprotocolitem_qws.h + qwssharedmemory.cpp + qwssharedmemory_p.h + qwssignalhandler.cpp + qwssignalhandler_p.h + qwssocket_qws.cpp + qwssocket_qws.h + qwsutils_qws.h +2 graphicsview/ +0 graphicsview.pri + qgraphicsanchorlayout.cpp + qgraphicsanchorlayout.h + qgraphicsanchorlayout_p.cpp + qgraphicsanchorlayout_p.h + qgraphicsgridlayout.cpp + qgraphicsgridlayout.h + qgraphicsitemanimation.cpp + qgraphicsitemanimation.h + qgraphicsitem.cpp + qgraphicsitem.h + qgraphicsitem_p.h + qgraphicslayout.cpp + qgraphicslayout.h + qgraphicslayoutitem.cpp + qgraphicslayoutitem.h + qgraphicslayoutitem_p.h + qgraphicslayout_p.cpp + qgraphicslayout_p.h + qgraphicslinearlayout.cpp + qgraphicslinearlayout.h + qgraphicsproxywidget.cpp + qgraphicsproxywidget.h + qgraphicsproxywidget_p.h + qgraphicsscene_bsp.cpp + qgraphicsscene_bsp_p.h + qgraphicsscenebsptreeindex.cpp + qgraphicsscenebsptreeindex_p.h + qgraphicsscene.cpp + qgraphicssceneevent.cpp + qgraphicssceneevent.h + qgraphicsscene.h + qgraphicssceneindex.cpp + qgraphicssceneindex_p.h + qgraphicsscenelinearindex.cpp + qgraphicsscenelinearindex_p.h + qgraphicsscene_p.h + qgraphicstransform.cpp + qgraphicstransform.h + qgraphicstransform_p.h + qgraphicsview.cpp + qgraphicsview.h + qgraphicsview_p.h + qgraphicswidget.cpp + qgraphicswidget.h + qgraphicswidget_p.cpp + qgraphicswidget_p.h + qgraph_p.h + qgridlayoutengine.cpp + qgridlayoutengine_p.h + qsimplex_p.cpp + qsimplex_p.h +2 gui.pro + image/ +0 image.pri + qbitmap.cpp + qbitmap.h + qbmphandler.cpp + qbmphandler_p.h + qicon.cpp + qiconengine.cpp + qiconengine.h + qiconengineplugin.cpp + qiconengineplugin.h + qicon.h + qiconloader.cpp + qiconloader_p.h + qicon_p.h + qimage.cpp + qimage.h + qimageiohandler.cpp + qimageiohandler.h + qimage_p.h + qimagepixmapcleanuphooks.cpp + qimagepixmapcleanuphooks_p.h + qimagereader.cpp + qimagereader.h + qimagewriter.cpp + qimagewriter.h + qmovie.cpp + qmovie.h + qnativeimage.cpp + qnativeimage_p.h + qpaintengine_pic.cpp + qpaintengine_pic_p.h + qpicture.cpp + qpictureformatplugin.cpp + qpictureformatplugin.h + qpicture.h + qpicture_p.h + qpixmapcache.cpp + qpixmapcache.h + qpixmapcache_p.h + qpixmap.cpp + qpixmapdata.cpp + qpixmapdatafactory.cpp + qpixmapdatafactory_p.h + qpixmapdata_p.h + qpixmapfilter.cpp + qpixmapfilter_p.h + qpixmap.h + qpixmap_mac.cpp + qpixmap_mac_p.h + qpixmap_qws.cpp + qpixmap_raster.cpp + qpixmap_raster_p.h + qpixmap_s60.cpp + qpixmap_s60_p.h + qpixmap_win.cpp + qpixmap_x11.cpp + qpixmap_x11_p.h + qpnghandler.cpp + qpnghandler_p.h + qppmhandler.cpp + qppmhandler_p.h + qxbmhandler.cpp + qxbmhandler_p.h + qxpmhandler.cpp + qxpmhandler_p.h +2 inputmethod/ +0 inputmethod.pri + qcoefepinputcontext_p.h + qcoefepinputcontext_s60.cpp + qinputcontext.cpp + qinputcontextfactory.cpp + qinputcontextfactory.h + qinputcontext.h + qinputcontext_p.h + qinputcontextplugin.cpp + qinputcontextplugin.h + qmacinputcontext_mac.cpp + qmacinputcontext_p.h + qwininputcontext_p.h + qwininputcontext_win.cpp + qwsinputcontext_p.h + qwsinputcontext_qws.cpp + qximinputcontext_p.h + qximinputcontext_x11.cpp +2 itemviews/ +0 itemviews.pri + qabstractitemdelegate.cpp + qabstractitemdelegate.h + qabstractitemview.cpp + qabstractitemview.h + qabstractitemview_p.h + qabstractproxymodel.cpp + qabstractproxymodel.h + qabstractproxymodel_p.h + qbsptree.cpp + qbsptree_p.h + qcolumnview.cpp + qcolumnviewgrip.cpp + qcolumnviewgrip_p.h + qcolumnview.h + qcolumnview_p.h + qdatawidgetmapper.cpp + qdatawidgetmapper.h + qdirmodel.cpp + qdirmodel.h + qfileiconprovider.cpp + qfileiconprovider.h + qheaderview.cpp + qheaderview.h + qheaderview_p.h + qitemdelegate.cpp + qitemdelegate.h + qitemeditorfactory.cpp + qitemeditorfactory.h + qitemeditorfactory_p.h + qitemselectionmodel.cpp + qitemselectionmodel.h + qitemselectionmodel_p.h + qlistview.cpp + qlistview.h + qlistview_p.h + qlistwidget.cpp + qlistwidget.h + qlistwidget_p.h + qproxymodel.cpp + qproxymodel.h + qproxymodel_p.h + qsortfilterproxymodel.cpp + qsortfilterproxymodel.h + qstandarditemmodel.cpp + qstandarditemmodel.h + qstandarditemmodel_p.h + qstringlistmodel.cpp + qstringlistmodel.h + qstyleditemdelegate.cpp + qstyleditemdelegate.h + qtableview.cpp + qtableview.h + qtableview_p.h + qtablewidget.cpp + qtablewidget.h + qtablewidget_p.h + qtreeview.cpp + qtreeview.h + qtreeview_p.h + qtreewidget.cpp + qtreewidget.h + qtreewidgetitemiterator.cpp + qtreewidgetitemiterator.h + qtreewidgetitemiterator_p.h + qtreewidget_p.h + qwidgetitemdata_p.h +2 kernel/ +0 kernel.pri + mac.pri + qaction.cpp + qactiongroup.cpp + qactiongroup.h + qaction.h + qaction_p.h + qapplication.cpp + qapplication.h + qapplication_mac.mm + qapplication_p.h + qapplication_qws.cpp + qapplication_s60.cpp + qapplication_win.cpp + qapplication_x11.cpp + qboxlayout.cpp + qboxlayout.h + qclipboard.cpp + qclipboard.h + qclipboard_mac.cpp + qclipboard_p.h + qclipboard_qws.cpp + qclipboard_s60.cpp + qclipboard_win.cpp + qclipboard_x11.cpp + qcocoaapplicationdelegate_mac.mm + qcocoaapplicationdelegate_mac_p.h + qcocoaapplication_mac.mm + qcocoaapplication_mac_p.h + qcocoamenuloader_mac.mm + qcocoamenuloader_mac_p.h + qcocoapanel_mac.mm + qcocoapanel_mac_p.h + qcocoaview_mac.mm + qcocoaview_mac_p.h + qcocoawindowcustomthemeframe_mac.mm + qcocoawindowcustomthemeframe_mac_p.h + qcocoawindowdelegate_mac.mm + qcocoawindowdelegate_mac_p.h + qcocoawindow_mac.mm + qcocoawindow_mac_p.h + qcursor.cpp + qcursor.h + qcursor_mac.mm + qcursor_p.h + qcursor_qws.cpp + qcursor_s60.cpp + qcursor_win.cpp + qcursor_x11.cpp + qdesktopwidget.cpp + qdesktopwidget.h + qdesktopwidget_mac.mm + qdesktopwidget_mac_p.h + qdesktopwidget.qdoc + qdesktopwidget_qws.cpp + qdesktopwidget_s60.cpp + qdesktopwidget_win.cpp + qdesktopwidget_x11.cpp + qdnd.cpp + qdnd_mac.mm + qdnd_p.h + qdnd_qws.cpp + qdnd_s60.cpp + qdnd_win.cpp + qdnd_x11.cpp + qdrag.cpp + qdrag.h + qevent.cpp + qeventdispatcher_glib_qws.cpp + qeventdispatcher_glib_qws_p.h + qeventdispatcher_mac.mm + qeventdispatcher_mac_p.h + qeventdispatcher_qws.cpp + qeventdispatcher_qws_p.h + qeventdispatcher_s60.cpp + qeventdispatcher_s60_p.h + qeventdispatcher_x11.cpp + qeventdispatcher_x11_p.h + qevent.h + qevent_p.h + qformlayout.cpp + qformlayout.h + qgesture.cpp + qgesture.h + qgesturemanager.cpp + qgesturemanager_p.h + qgesture_p.h + qgesturerecognizer.cpp + qgesturerecognizer.h + qgridlayout.cpp + qgridlayout.h + qguieventdispatcher_glib.cpp + qguieventdispatcher_glib_p.h + qguifunctions_wince.cpp + qguifunctions_wince.h + qguiplatformplugin.cpp + qguiplatformplugin_p.h + qguivariant.cpp + qkde.cpp + qkde_p.h + qkeymapper.cpp + qkeymapper_mac.cpp + qkeymapper_p.h + qkeymapper_qws.cpp + qkeymapper_s60.cpp + qkeymapper_win.cpp + qkeymapper_x11.cpp + qkeymapper_x11_p.cpp + qkeysequence.cpp + qkeysequence.h + qkeysequence_p.h + qlayout.cpp + qlayoutengine.cpp + qlayoutengine_p.h + qlayout.h + qlayoutitem.cpp + qlayoutitem.h + qlayout_p.h + qmacdefines_mac.h + qmacgesturerecognizer_mac.mm + qmacgesturerecognizer_mac_p.h + qmime.cpp + qmime.h + qmime_mac.cpp + qmime_win.cpp + qmotifdnd_x11.cpp + qmultitouch_mac.mm + qmultitouch_mac_p.h + qnsframeview_mac_p.h + qnsthemeframe_mac_p.h + qnstitledframe_mac_p.h + qole_win.cpp + qpalette.cpp + qpalette.h + qsessionmanager.h + qsessionmanager_qws.cpp + qshortcut.cpp + qshortcut.h + qshortcutmap.cpp + qshortcutmap_p.h + qsizepolicy.h + qsizepolicy.qdoc + qsoftkeymanager.cpp + qsoftkeymanager_p.h + qsound.cpp + qsound.h + qsound_mac.mm + qsound_p.h + qsound_qws.cpp + qsound_s60.cpp + qsound_win.cpp + qsound_x11.cpp + qstackedlayout.cpp + qstackedlayout.h + qstandardgestures.cpp + qstandardgestures_p.h + qt_cocoa_helpers_mac.mm + qt_cocoa_helpers_mac_p.h + qt_gui_pch.h + qt_mac.cpp + qt_mac_p.h + qtooltip.cpp + qtooltip.h + qt_s60_p.h + qt_x11_p.h + qwhatsthis.cpp + qwhatsthis.h + qwidgetaction.cpp + qwidgetaction.h + qwidgetaction_p.h + qwidget.cpp + qwidgetcreate_x11.cpp + qwidget.h + qwidget_mac.mm + qwidget_p.h + qwidget_qws.cpp + qwidget_s60.cpp + qwidget_wince.cpp + qwidget_win.cpp + qwidget_x11.cpp + qwindowdefs.h + qwindowdefs_win.h + qwinnativepangesturerecognizer_win.cpp + qwinnativepangesturerecognizer_win_p.h + qx11embed_x11.cpp + qx11embed_x11.h + qx11info_x11.cpp + qx11info_x11.h + symbian.pri + win.pri + x11.pri +2 mac/ +0 images/ +0 copyarrowcursor.png + forbiddencursor.png + leopard-unified-toolbar-on.png + pluscursor.png + spincursor.png + waitcursor.png +2 macresources.qrc + qt_menu.nib/ +0 classes.nib + info.nib + keyedobjects.nib +3 math3d/ +0 math3d.pri + qgenericmatrix.cpp + qgenericmatrix.h + qmatrix4x4.cpp + qmatrix4x4.h + qquaternion.cpp + qquaternion.h + qvector2d.cpp + qvector2d.h + qvector3d.cpp + qvector3d.h + qvector4d.cpp + qvector4d.h +2 painting/ +0 makepsheader.pl + painting.pri + qbackingstore.cpp + qbackingstore_p.h + qbezier.cpp + qbezier_p.h + qblendfunctions_armv6_rvct.s + qblendfunctions.cpp + qbrush.cpp + qbrush.h + qcolor.cpp + qcolor.h + qcolormap.h + qcolormap_mac.cpp + qcolormap.qdoc + qcolormap_qws.cpp + qcolormap_s60.cpp + qcolormap_win.cpp + qcolormap_x11.cpp + qcolor_p.cpp + qcolor_p.h + qcssutil.cpp + qcssutil_p.h + qcups.cpp + qcups_p.h + qdatabuffer_p.h + qdrawhelper_armv6_p.h + qdrawhelper_armv6_rvct.inc + qdrawhelper_armv6_rvct.s + qdrawhelper.cpp + qdrawhelper_iwmmxt.cpp + qdrawhelper_mmx3dnow.cpp + qdrawhelper_mmx.cpp + qdrawhelper_mmx_p.h + qdrawhelper_p.h + qdrawhelper_sse2.cpp + qdrawhelper_sse3dnow.cpp + qdrawhelper_sse.cpp + qdrawhelper_sse_p.h + qdrawhelper_x86_p.h + qdrawutil.cpp + qdrawutil.h + qemulationpaintengine.cpp + qemulationpaintengine_p.h + qfixed_p.h + qgraphicssystem.cpp + qgraphicssystemfactory.cpp + qgraphicssystemfactory_p.h + qgraphicssystem_mac.cpp + qgraphicssystem_mac_p.h + qgraphicssystem_p.h + qgraphicssystemplugin.cpp + qgraphicssystemplugin_p.h + qgraphicssystem_qws.cpp + qgraphicssystem_qws_p.h + qgraphicssystem_raster.cpp + qgraphicssystem_raster_p.h + qgrayraster.c + qgrayraster_p.h + qimagescale.cpp + qimagescale_p.h + qmath_p.h + qmatrix.cpp + qmatrix.h + qmemrotate.cpp + qmemrotate_p.h + qoutlinemapper.cpp + qoutlinemapper_p.h + qpaintbuffer.cpp + qpaintbuffer_p.h + qpaintdevice.cpp + qpaintdevice.h + qpaintdevice_mac.cpp + qpaintdevice.qdoc + qpaintdevice_qws.cpp + qpaintdevice_win.cpp + qpaintdevice_x11.cpp + qpaintengine_alpha.cpp + qpaintengine_alpha_p.h + qpaintengine.cpp + qpaintengineex.cpp + qpaintengineex_p.h + qpaintengine.h + qpaintengine_mac.cpp + qpaintengine_mac_p.h + qpaintengine_p.h + qpaintengine_preview.cpp + qpaintengine_preview_p.h + qpaintengine_raster.cpp + qpaintengine_raster_p.h + qpaintengine_s60.cpp + qpaintengine_s60_p.h + qpaintengine_x11.cpp + qpaintengine_x11_p.h + qpainter.cpp + qpainter.h + qpainterpath.cpp + qpainterpath.h + qpainterpath_p.h + qpainter_p.h + qpathclipper.cpp + qpathclipper_p.h + qpdf.cpp + qpdf_p.h + qpen.cpp + qpen.h + qpen_p.h + qpolygonclipper_p.h + qpolygon.cpp + qpolygon.h + qprintengine.h + qprintengine_mac.mm + qprintengine_mac_p.h + qprintengine_pdf.cpp + qprintengine_pdf_p.h + qprintengine_ps.cpp + qprintengine_ps_p.h + qprintengine_qws.cpp + qprintengine_qws_p.h + qprintengine_win.cpp + qprintengine_win_p.h + qprinter.cpp + qprinter.h + qprinterinfo.h + qprinterinfo_mac.cpp + qprinterinfo.qdoc + qprinterinfo_unix.cpp + qprinterinfo_unix_p.h + qprinterinfo_win.cpp + qprinter_p.h + qpsprinter.agl + qpsprinter.ps + qrasterdefs_p.h + qrasterizer.cpp + qrasterizer_p.h + qregion.cpp + qregion.h + qregion_mac.cpp + qregion_qws.cpp + qregion_s60.cpp + qregion_win.cpp + qregion_x11.cpp + qrgb.h + qstroker.cpp + qstroker_p.h + qstylepainter.cpp + qstylepainter.h + qtessellator.cpp + qtessellator_p.h + qtextureglyphcache.cpp + qtextureglyphcache_p.h + qtransform.cpp + qtransform.h + qvectorpath_p.h + qwindowsurface.cpp + qwindowsurface_mac.cpp + qwindowsurface_mac_p.h + qwindowsurface_p.h + qwindowsurface_qws.cpp + qwindowsurface_qws_p.h + qwindowsurface_raster.cpp + qwindowsurface_raster_p.h + qwindowsurface_s60.cpp + qwindowsurface_s60_p.h + qwindowsurface_x11.cpp + qwindowsurface_x11_p.h + qwmatrix.h +2 QtGui.dynlist + s60framework/ +0 qs60mainapplication.cpp + qs60mainapplication.h + qs60mainapplication_p.h + qs60mainappui.cpp + qs60mainappui.h + qs60maindocument.cpp + qs60maindocument.h + s60framework.pri + s60main.rss +2 statemachine/ +0 qbasickeyeventtransition.cpp + qbasickeyeventtransition_p.h + qbasicmouseeventtransition.cpp + qbasicmouseeventtransition_p.h + qguistatemachine.cpp + qkeyeventtransition.cpp + qkeyeventtransition.h + qmouseeventtransition.cpp + qmouseeventtransition.h + statemachine.pri +2 styles/ +0 images/ +0 cdr-128.png + cdr-16.png + cdr-32.png + closedock-16.png + closedock-down-16.png + computer-16.png + computer-32.png + defaults60theme.blob + desktop-16.png + desktop-32.png + dirclosed-128.png + dirclosed-16.png + dirclosed-32.png + dirlink-128.png + dirlink-16.png + dirlink-32.png + diropen-128.png + diropen-16.png + diropen-32.png + dockdock-16.png + dockdock-down-16.png + down-128.png + down-16.png + down-32.png + dvd-128.png + dvd-16.png + dvd-32.png + file-128.png + file-16.png + file-32.png + filecontents-128.png + filecontents-16.png + filecontents-32.png + fileinfo-128.png + fileinfo-16.png + fileinfo-32.png + filelink-128.png + filelink-16.png + filelink-32.png + floppy-128.png + floppy-16.png + floppy-32.png + fontbitmap-16.png + fonttruetype-16.png + harddrive-128.png + harddrive-16.png + harddrive-32.png + left-128.png + left-16.png + left-32.png + media-pause-16.png + media-pause-32.png + media-play-16.png + media-play-32.png + media-seek-backward-16.png + media-seek-backward-32.png + media-seek-forward-16.png + media-seek-forward-32.png + media-skip-backward-16.png + media-skip-backward-32.png + media-skip-forward-16.png + media-skip-forward-32.png + media-stop-16.png + media-stop-32.png + media-volume-16.png + media-volume-muted-16.png + networkdrive-128.png + networkdrive-16.png + networkdrive-32.png + newdirectory-128.png + newdirectory-16.png + newdirectory-32.png + parentdir-128.png + parentdir-16.png + parentdir-32.png + refresh-24.png + refresh-32.png + right-128.png + right-16.png + right-32.png + standardbutton-apply-128.png + standardbutton-apply-16.png + standardbutton-apply-32.png + standardbutton-cancel-128.png + standardbutton-cancel-16.png + standardbutton-cancel-32.png + standardbutton-clear-128.png + standardbutton-clear-16.png + standardbutton-clear-32.png + standardbutton-close-128.png + standardbutton-close-16.png + standardbutton-close-32.png + standardbutton-closetab-16.png + standardbutton-closetab-down-16.png + standardbutton-closetab-hover-16.png + standardbutton-delete-128.png + standardbutton-delete-16.png + standardbutton-delete-32.png + standardbutton-help-128.png + standardbutton-help-16.png + standardbutton-help-32.png + standardbutton-no-128.png + standardbutton-no-16.png + standardbutton-no-32.png + standardbutton-ok-128.png + standardbutton-ok-16.png + standardbutton-ok-32.png + standardbutton-open-128.png + standardbutton-open-16.png + standardbutton-open-32.png + standardbutton-save-128.png + standardbutton-save-16.png + standardbutton-save-32.png + standardbutton-yes-128.png + standardbutton-yes-16.png + standardbutton-yes-32.png + stop-24.png + stop-32.png + trash-128.png + trash-16.png + trash-32.png + up-128.png + up-16.png + up-32.png + viewdetailed-128.png + viewdetailed-16.png + viewdetailed-32.png + viewlist-128.png + viewlist-16.png + viewlist-32.png +2 qcdestyle.cpp + qcdestyle.h + qcleanlooksstyle.cpp + qcleanlooksstyle.h + qcleanlooksstyle_p.h + qcommonstyle.cpp + qcommonstyle.h + qcommonstyle_p.h + qcommonstylepixmaps_p.h + qgtkpainter.cpp + qgtkpainter_p.h + qgtkstyle.cpp + qgtkstyle.h + qgtkstyle_p.cpp + qgtkstyle_p.h + qmacstyle_mac.h + qmacstyle_mac.mm + qmacstylepixmaps_mac_p.h + qmacstyle.qdoc + qmotifstyle.cpp + qmotifstyle.h + qmotifstyle_p.h + qplastiquestyle.cpp + qplastiquestyle.h + qproxystyle.cpp + qproxystyle.h + qproxystyle_p.h + qs60style.cpp + qs60style.h + qs60style_p.h + qs60style_s60.cpp + qs60style_simulated.cpp + qstyle.cpp + qstylefactory.cpp + qstylefactory.h + qstyle.h + qstylehelper.cpp + qstylehelper_p.h + qstyleoption.cpp + qstyleoption.h + qstyle_p.h + qstyleplugin.cpp + qstyleplugin.h + qstyle.qrc + qstyle_s60_simulated.qrc + qstylesheetstyle.cpp + qstylesheetstyle_default.cpp + qstylesheetstyle_p.h + qstyle_wince.qrc + qwindowscestyle.cpp + qwindowscestyle.h + qwindowscestyle_p.h + qwindowsmobilestyle.cpp + qwindowsmobilestyle.h + qwindowsmobilestyle_p.h + qwindowsstyle.cpp + qwindowsstyle.h + qwindowsstyle_p.h + qwindowsvistastyle.cpp + qwindowsvistastyle.h + qwindowsvistastyle_p.h + qwindowsxpstyle.cpp + qwindowsxpstyle.h + qwindowsxpstyle_p.h + styles.pri +2 symbian/ +0 images/ +0 blank.png + busy12.png + busy3.png + busy6.png + busy9.png + closehand.png + cross.png + forbidden.png + handpoint.png + ibeam.png + openhand.png + pointer.png + sizeall.png + sizebdiag.png + sizefdiag.png + sizehor.png + sizever.png + splith.png + splitv.png + uparrow.png + wait10.png + wait11.png + wait12.png + wait1.png + wait2.png + wait3.png + wait4.png + wait5.png + wait6.png + wait7.png + wait8.png + wait9.png + whatsthis.png +2 qsymbianevent.cpp + qsymbianevent.h + symbianresources.qrc +2 text/ +0 qabstractfontengine_p.h + qabstractfontengine_qws.cpp + qabstractfontengine_qws.h + qabstracttextdocumentlayout.cpp + qabstracttextdocumentlayout.h + qabstracttextdocumentlayout_p.h + qcssparser.cpp + qcssparser_p.h + qcssscanner.cpp + qfont.cpp + qfontdatabase.cpp + qfontdatabase.h + qfontdatabase_mac.cpp + qfontdatabase_qws.cpp + qfontdatabase_s60.cpp + qfontdatabase_win.cpp + qfontdatabase_x11.cpp + qfontengine.cpp + qfontengine_ft.cpp + qfontengine_ft_p.h + qfontengineglyphcache_p.h + qfontengine_mac.mm + qfontengine_p.h + qfontengine_qpf.cpp + qfontengine_qpf_p.h + qfontengine_qws.cpp + qfontengine_s60.cpp + qfontengine_s60_p.h + qfontengine_win.cpp + qfontengine_win_p.h + qfontengine_x11.cpp + qfontengine_x11_p.h + qfont.h + qfontinfo.h + qfont_mac.cpp + qfontmetrics.cpp + qfontmetrics.h + qfont_p.h + qfont_qws.cpp + qfont_s60.cpp + qfontsubset.cpp + qfontsubset_p.h + qfont_win.cpp + qfont_x11.cpp + qfragmentmap.cpp + qfragmentmap_p.h + qpfutil.cpp + qsyntaxhighlighter.cpp + qsyntaxhighlighter.h + qtextcontrol.cpp + qtextcontrol_p.h + qtextcontrol_p_p.h + qtextcursor.cpp + qtextcursor.h + qtextcursor_p.h + qtextdocument.cpp + qtextdocumentfragment.cpp + qtextdocumentfragment.h + qtextdocumentfragment_p.h + qtextdocument.h + qtextdocumentlayout.cpp + qtextdocumentlayout_p.h + qtextdocument_p.cpp + qtextdocument_p.h + qtextdocumentwriter.cpp + qtextdocumentwriter.h + qtextengine.cpp + qtextengine_mac.cpp + qtextengine_p.h + qtextformat.cpp + qtextformat.h + qtextformat_p.h + qtexthtmlparser.cpp + qtexthtmlparser_p.h + qtextimagehandler.cpp + qtextimagehandler_p.h + qtextlayout.cpp + qtextlayout.h + qtextlist.cpp + qtextlist.h + qtextobject.cpp + qtextobject.h + qtextobject_p.h + qtextodfwriter.cpp + qtextodfwriter_p.h + qtextoption.cpp + qtextoption.h + qtexttable.cpp + qtexttable.h + qtexttable_p.h + qzip.cpp + qzipreader_p.h + qzipwriter_p.h + text.pri +2 util/ +0 qcompleter.cpp + qcompleter.h + qcompleter_p.h + qdesktopservices.cpp + qdesktopservices.h + qdesktopservices_mac.cpp + qdesktopservices_qws.cpp + qdesktopservices_s60.cpp + qdesktopservices_win.cpp + qdesktopservices_x11.cpp + qsystemtrayicon.cpp + qsystemtrayicon.h + qsystemtrayicon_mac.mm + qsystemtrayicon_p.h + qsystemtrayicon_qws.cpp + qsystemtrayicon_win.cpp + qsystemtrayicon_x11.cpp + qundogroup.cpp + qundogroup.h + qundostack.cpp + qundostack.h + qundostack_p.h + qundoview.cpp + qundoview.h + util.pri +2 widgets/ +0 qabstractbutton.cpp + qabstractbutton.h + qabstractbutton_p.h + qabstractscrollarea.cpp + qabstractscrollarea.h + qabstractscrollarea_p.h + qabstractslider.cpp + qabstractslider.h + qabstractslider_p.h + qabstractspinbox.cpp + qabstractspinbox.h + qabstractspinbox_p.h + qbuttongroup.cpp + qbuttongroup.h + qcalendartextnavigator_p.h + qcalendarwidget.cpp + qcalendarwidget.h + qcheckbox.cpp + qcheckbox.h + qcocoamenu_mac.mm + qcocoamenu_mac_p.h + qcocoatoolbardelegate_mac.mm + qcocoatoolbardelegate_mac_p.h + qcombobox.cpp + qcombobox.h + qcombobox_p.h + qcommandlinkbutton.cpp + qcommandlinkbutton.h + qdatetimeedit.cpp + qdatetimeedit.h + qdatetimeedit_p.h + qdial.cpp + qdial.h + qdialogbuttonbox.cpp + qdialogbuttonbox.h + qdockarealayout.cpp + qdockarealayout_p.h + qdockwidget.cpp + qdockwidget.h + qdockwidget_p.h + qeffects.cpp + qeffects_p.h + qfocusframe.cpp + qfocusframe.h + qfontcombobox.cpp + qfontcombobox.h + qframe.cpp + qframe.h + qframe_p.h + qgroupbox.cpp + qgroupbox.h + qlabel.cpp + qlabel.h + qlabel_p.h + qlcdnumber.cpp + qlcdnumber.h + qlinecontrol.cpp + qlinecontrol_p.h + qlineedit.cpp + qlineedit.h + qlineedit_p.cpp + qlineedit_p.h + qmaccocoaviewcontainer_mac.h + qmaccocoaviewcontainer_mac.mm + qmacnativewidget_mac.h + qmacnativewidget_mac.mm + qmainwindow.cpp + qmainwindow.h + qmainwindowlayout.cpp + qmainwindowlayout_mac.mm + qmainwindowlayout_p.h + qmdiarea.cpp + qmdiarea.h + qmdiarea_p.h + qmdisubwindow.cpp + qmdisubwindow.h + qmdisubwindow_p.h + qmenubar.cpp + qmenubar.h + qmenubar_p.h + qmenu.cpp + qmenudata.cpp + qmenudata.h + qmenu.h + qmenu_mac.mm + qmenu_p.h + qmenu_symbian.cpp + qmenu_wince.cpp + qmenu_wince.rc + qmenu_wince_resource_p.h + qplaintextedit.cpp + qplaintextedit.h + qplaintextedit_p.h + qprintpreviewwidget.cpp + qprintpreviewwidget.h + qprogressbar.cpp + qprogressbar.h + qpushbutton.cpp + qpushbutton.h + qpushbutton_p.h + qradiobutton.cpp + qradiobutton.h + qrubberband.cpp + qrubberband.h + qscrollarea.cpp + qscrollarea.h + qscrollarea_p.h + qscrollbar.cpp + qscrollbar.h + qsizegrip.cpp + qsizegrip.h + qslider.cpp + qslider.h + qspinbox.cpp + qspinbox.h + qsplashscreen.cpp + qsplashscreen.h + qsplitter.cpp + qsplitter.h + qsplitter_p.h + qstackedwidget.cpp + qstackedwidget.h + qstatusbar.cpp + qstatusbar.h + qtabbar.cpp + qtabbar.h + qtabbar_p.h + qtabwidget.cpp + qtabwidget.h + qtextbrowser.cpp + qtextbrowser.h + qtextedit.cpp + qtextedit.h + qtextedit_p.h + qtoolbararealayout.cpp + qtoolbararealayout_p.h + qtoolbar.cpp + qtoolbarextension.cpp + qtoolbarextension_p.h + qtoolbar.h + qtoolbarlayout.cpp + qtoolbarlayout_p.h + qtoolbar_p.h + qtoolbarseparator.cpp + qtoolbarseparator_p.h + qtoolbox.cpp + qtoolbox.h + qtoolbutton.cpp + qtoolbutton.h + qvalidator.cpp + qvalidator.h + qwidgetanimator.cpp + qwidgetanimator_p.h + qwidgetresizehandler.cpp + qwidgetresizehandler_p.h + qworkspace.cpp + qworkspace.h + widgets.pri +3 multimedia/ +0 audio/ +0 audio.pri + qaudio.cpp + qaudiodevicefactory.cpp + qaudiodevicefactory_p.h + qaudiodeviceinfo_alsa_p.cpp + qaudiodeviceinfo_alsa_p.h + qaudiodeviceinfo.cpp + qaudiodeviceinfo.h + qaudiodeviceinfo_mac_p.cpp + qaudiodeviceinfo_mac_p.h + qaudiodeviceinfo_win32_p.cpp + qaudiodeviceinfo_win32_p.h + qaudioengine.cpp + qaudioengine.h + qaudioengineplugin.cpp + qaudioengineplugin.h + qaudioformat.cpp + qaudioformat.h + qaudio.h + qaudioinput_alsa_p.cpp + qaudioinput_alsa_p.h + qaudioinput.cpp + qaudioinput.h + qaudioinput_mac_p.cpp + qaudioinput_mac_p.h + qaudioinput_win32_p.cpp + qaudioinput_win32_p.h + qaudio_mac.cpp + qaudio_mac_p.h + qaudiooutput_alsa_p.cpp + qaudiooutput_alsa_p.h + qaudiooutput.cpp + qaudiooutput.h + qaudiooutput_mac_p.cpp + qaudiooutput_mac_p.h + qaudiooutput_win32_p.cpp + qaudiooutput_win32_p.h +2 multimedia.pro + video/ +0 qabstractvideobuffer.cpp + qabstractvideobuffer.h + qabstractvideobuffer_p.h + qabstractvideosurface.cpp + qabstractvideosurface.h + qabstractvideosurface_p.h + qimagevideobuffer.cpp + qimagevideobuffer_p.h + qmemoryvideobuffer.cpp + qmemoryvideobuffer_p.h + qvideoframe.cpp + qvideoframe.h + qvideosurfaceformat.cpp + qvideosurfaceformat.h + video.pri +3 network/ +0 access/ +0 access.pri + qabstractnetworkcache.cpp + qabstractnetworkcache.h + qabstractnetworkcache_p.h + qftp.cpp + qftp.h + qhttp.cpp + qhttp.h + qhttpnetworkconnectionchannel.cpp + qhttpnetworkconnectionchannel_p.h + qhttpnetworkconnection.cpp + qhttpnetworkconnection_p.h + qhttpnetworkheader.cpp + qhttpnetworkheader_p.h + qhttpnetworkreply.cpp + qhttpnetworkreply_p.h + qhttpnetworkrequest.cpp + qhttpnetworkrequest_p.h + qnetworkaccessbackend.cpp + qnetworkaccessbackend_p.h + qnetworkaccesscachebackend.cpp + qnetworkaccesscachebackend_p.h + qnetworkaccesscache.cpp + qnetworkaccesscache_p.h + qnetworkaccessdatabackend.cpp + qnetworkaccessdatabackend_p.h + qnetworkaccessdebugpipebackend.cpp + qnetworkaccessdebugpipebackend_p.h + qnetworkaccessfilebackend.cpp + qnetworkaccessfilebackend_p.h + qnetworkaccessftpbackend.cpp + qnetworkaccessftpbackend_p.h + qnetworkaccesshttpbackend.cpp + qnetworkaccesshttpbackend_p.h + qnetworkaccessmanager.cpp + qnetworkaccessmanager.h + qnetworkaccessmanager_p.h + qnetworkcookie.cpp + qnetworkcookie.h + qnetworkcookiejar.cpp + qnetworkcookiejar.h + qnetworkcookiejar_p.h + qnetworkcookie_p.h + qnetworkdiskcache.cpp + qnetworkdiskcache.h + qnetworkdiskcache_p.h + qnetworkreply.cpp + qnetworkreply.h + qnetworkreplyimpl.cpp + qnetworkreplyimpl_p.h + qnetworkreply_p.h + qnetworkrequest.cpp + qnetworkrequest.h + qnetworkrequest_p.h +2 kernel/ +0 kernel.pri + qauthenticator.cpp + qauthenticator.h + qauthenticator_p.h + qhostaddress.cpp + qhostaddress.h + qhostaddress_p.h + qhostinfo.cpp + qhostinfo.h + qhostinfo_p.h + qhostinfo_unix.cpp + qhostinfo_win.cpp + qnetworkinterface.cpp + qnetworkinterface.h + qnetworkinterface_p.h + qnetworkinterface_symbian.cpp + qnetworkinterface_unix.cpp + qnetworkinterface_win.cpp + qnetworkinterface_win_p.h + qnetworkproxy.cpp + qnetworkproxy_generic.cpp + qnetworkproxy.h + qnetworkproxy_mac.cpp + qnetworkproxy_p.h + qnetworkproxy_win.cpp + qurlinfo.cpp + qurlinfo.h +2 network.pro + network.qrc + socket/ +0 qabstractsocket.cpp + qabstractsocketengine.cpp + qabstractsocketengine_p.h + qabstractsocket.h + qabstractsocket_p.h + qhttpsocketengine.cpp + qhttpsocketengine_p.h + qlocalserver.cpp + qlocalserver.h + qlocalserver_p.h + qlocalserver_tcp.cpp + qlocalserver_unix.cpp + qlocalserver_win.cpp + qlocalsocket.cpp + qlocalsocket.h + qlocalsocket_p.h + qlocalsocket_tcp.cpp + qlocalsocket_unix.cpp + qlocalsocket_win.cpp + qnativesocketengine.cpp + qnativesocketengine_p.h + qnativesocketengine_unix.cpp + qnativesocketengine_win.cpp + qnet_unix_p.h + qsocks5socketengine.cpp + qsocks5socketengine_p.h + qtcpserver.cpp + qtcpserver.h + qtcpsocket.cpp + qtcpsocket.h + qtcpsocket_p.h + qudpsocket.cpp + qudpsocket.h + socket.pri +2 ssl/ +0 qsslcertificate.cpp + qsslcertificate.h + qsslcertificate_p.h + qsslcipher.cpp + qsslcipher.h + qsslcipher_p.h + qsslconfiguration.cpp + qsslconfiguration.h + qsslconfiguration_p.h + qssl.cpp + qsslerror.cpp + qsslerror.h + qssl.h + qsslkey.cpp + qsslkey.h + qsslkey_p.h + qsslsocket.cpp + qsslsocket.h + qsslsocket_openssl.cpp + qsslsocket_openssl_p.h + qsslsocket_openssl_symbols.cpp + qsslsocket_openssl_symbols_p.h + qsslsocket_p.h + qt-ca-bundle.crt + ssl.pri +3 opengl/ +0 gl2paintengineex/ +0 qgl2pexvertexarray.cpp + qgl2pexvertexarray_p.h + qglcustomshaderstage.cpp + qglcustomshaderstage_p.h + qglengineshadermanager.cpp + qglengineshadermanager_p.h + qglengineshadersource_p.h + qglgradientcache.cpp + qglgradientcache_p.h + qpaintengineex_opengl2.cpp + qpaintengineex_opengl2_p.h + qtriangulatingstroker.cpp + qtriangulatingstroker_p.h +2 opengl.pro + qgl_cl_p.h + qglcolormap.cpp + qglcolormap.h + qgl.cpp + qgl_egl.cpp + qgl_egl_p.h + qglextensions.cpp + qglextensions_p.h + qglframebufferobject.cpp + qglframebufferobject.h + qglframebufferobject_p.h + qgl.h + qgl_mac.mm + qglpaintdevice.cpp + qglpaintdevice_p.h + qgl_p.h + qglpixelbuffer.cpp + qglpixelbuffer_egl.cpp + qglpixelbuffer.h + qglpixelbuffer_mac.mm + qglpixelbuffer_p.h + qglpixelbuffer_win.cpp + qglpixelbuffer_x11.cpp + qglpixmapfilter.cpp + qglpixmapfilter_p.h + qgl_qws.cpp + qglscreen_qws.cpp + qglscreen_qws.h + qglshaderprogram.cpp + qglshaderprogram.h + qgl_wince.cpp + qgl_win.cpp + qglwindowsurface_qws.cpp + qglwindowsurface_qws_p.h + qgl_x11.cpp + qgl_x11egl.cpp + qgraphicsshadereffect.cpp + qgraphicsshadereffect_p.h + qgraphicssystem_gl.cpp + qgraphicssystem_gl_p.h + qpaintengine_opengl.cpp + qpaintengine_opengl_p.h + qpixmapdata_gl.cpp + qpixmapdata_gl_p.h + qpixmapdata_x11gl_egl.cpp + qpixmapdata_x11gl_p.h + qwindowsurface_gl.cpp + qwindowsurface_gl_p.h + qwindowsurface_x11gl.cpp + qwindowsurface_x11gl_p.h + util/ +0 brushes.conf + brush_painter.glsl + composition_mode_colorburn.glsl + composition_mode_colordodge.glsl + composition_mode_darken.glsl + composition_mode_difference.glsl + composition_mode_exclusion.glsl + composition_mode_hardlight.glsl + composition_mode_lighten.glsl + composition_mode_multiply.glsl + composition_mode_overlay.glsl + composition_modes.conf + composition_mode_screen.glsl + composition_mode_softlight.glsl + conical_brush.glsl + ellipse_aa.glsl + fast_painter.glsl + fragmentprograms_p.h + generator.cpp + generator.pro + glsl_to_include.sh + linear_brush.glsl + masks.conf + painter.glsl + painter_nomask.glsl + pattern_brush.glsl + radial_brush.glsl + README-GLSL + simple_porter_duff.glsl + solid_brush.glsl + texture_brush.glsl + trap_exact_aa.glsl +3 openvg/ +0 openvg.pro + qpaintengine_vg.cpp + qpaintengine_vg_p.h + qpixmapdata_vg.cpp + qpixmapdata_vg_p.h + qpixmapfilter_vg.cpp + qpixmapfilter_vg_p.h + qvgcompositionhelper_p.h + qvg.h + qvg_p.h + qwindowsurface_vg.cpp + qwindowsurface_vgegl.cpp + qwindowsurface_vgegl_p.h + qwindowsurface_vg_p.h +2 phonon/ +0 phonon.pro +2 plugins/ +0 accessible/ +0 accessible.pro + compat/ +0 compat.pro + main.cpp + q3complexwidgets.cpp + q3complexwidgets.h + q3simplewidgets.cpp + q3simplewidgets.h + qaccessiblecompat.cpp + qaccessiblecompat.h +2 qaccessiblebase.pri + widgets/ +0 complexwidgets.cpp + complexwidgets.h + main.cpp + qaccessiblemenu.cpp + qaccessiblemenu.h + qaccessiblewidgets.cpp + qaccessiblewidgets.h + rangecontrols.cpp + rangecontrols.h + simplewidgets.cpp + simplewidgets.h + widgets.pro +3 audio/ +0 audio.pro +2 codecs/ +0 cn/ +0 cn.pro + main.cpp + qgb18030codec.cpp + qgb18030codec.h +2 codecs.pro + jp/ +0 jp.pro + main.cpp + qeucjpcodec.cpp + qeucjpcodec.h + qfontjpcodec.cpp + qfontjpcodec.h + qjiscodec.cpp + qjiscodec.h + qjpunicode.cpp + qjpunicode.h + qsjiscodec.cpp + qsjiscodec.h +2 kr/ +0 cp949codetbl.h + kr.pro + main.cpp + qeuckrcodec.cpp + qeuckrcodec.h +2 tw/ +0 main.cpp + qbig5codec.cpp + qbig5codec.h + tw.pro +3 decorations/ +0 decorations.pro + default/ +0 default.pro + main.cpp +2 styled/ +0 main.cpp + styled.pro +2 windows/ +0 main.cpp + windows.pro +3 gfxdrivers/ +0 ahi/ +0 ahi.pro + qscreenahiplugin.cpp + qscreenahi_qws.cpp + qscreenahi_qws.h +2 directfb/ +0 directfb.pro + qdirectfbkeyboard.cpp + qdirectfbkeyboard.h + qdirectfbmouse.cpp + qdirectfbmouse.h + qdirectfbpaintdevice.cpp + qdirectfbpaintdevice.h + qdirectfbpaintengine.cpp + qdirectfbpaintengine.h + qdirectfbpixmap.cpp + qdirectfbpixmap.h + qdirectfbscreen.cpp + qdirectfbscreen.h + qdirectfbscreenplugin.cpp + qdirectfbwindowsurface.cpp + qdirectfbwindowsurface.h +2 gfxdrivers.pro + linuxfb/ +0 linuxfb.pro + main.cpp +2 powervr/ +0 powervr.pri + powervr.pro + pvreglscreen/ +0 pvreglscreen.cpp + pvreglscreen.h + pvreglscreenplugin.cpp + pvreglscreen.pro + pvreglwindowsurface.cpp + pvreglwindowsurface.h +2 QWSWSEGL/ +0 pvrqwsdrawable.c + pvrqwsdrawable.h + pvrqwsdrawable_p.h + pvrqwswsegl.c + QWSWSEGL.pro +2 README +2 qvfb/ +0 main.cpp + qvfb.pro +2 transformed/ +0 main.cpp + transformed.pro +2 vnc/ +0 main.cpp + qscreenvnc_p.h + qscreenvnc_qws.cpp + qscreenvnc_qws.h + vnc.pro +3 graphicssystems/ +0 graphicssystems.pro + opengl/ +0 main.cpp + opengl.pro +2 openvg/ +0 main.cpp + openvg.pro + qgraphicssystem_vg.cpp + qgraphicssystem_vg_p.h +2 shivavg/ +0 main.cpp + README + shivavggraphicssystem.cpp + shivavggraphicssystem.h + shivavg.pro + shivavgwindowsurface.cpp + shivavgwindowsurface.h +2 trace/ +0 main.cpp + qgraphicssystem_trace.cpp + qgraphicssystem_trace_p.h + trace.pro +3 iconengines/ +0 iconengines.pro + svgiconengine/ +0 main.cpp + qsvgiconengine.cpp + qsvgiconengine.h + svgiconengine.pro +3 imageformats/ +0 gif/ +0 gif.pro + main.cpp + qgifhandler.cpp + qgifhandler.h +2 ico/ +0 ico.pro + main.cpp + qicohandler.cpp + qicohandler.h +2 imageformats.pro + jpeg/ +0 jpeg.pro + main.cpp + qjpeghandler.cpp + qjpeghandler.h +2 mng/ +0 main.cpp + mng.pro + qmnghandler.cpp + qmnghandler.h +2 svg/ +0 main.cpp + qsvgiohandler.cpp + qsvgiohandler.h + svg.pro +2 tiff/ +0 main.cpp + qtiffhandler.cpp + qtiffhandler.h + tiff.pro +3 inputmethods/ +0 imsw-multi/ +0 imsw-multi.pro + qmultiinputcontext.cpp + qmultiinputcontext.h + qmultiinputcontextplugin.cpp + qmultiinputcontextplugin.h +2 inputmethods.pro +2 kbddrivers/ +0 kbddrivers.pro + linuxinput/ +0 linuxinput.pro + main.cpp +3 mousedrivers/ +0 linuxtp/ +0 linuxtp.pro + main.cpp +2 mousedrivers.pro + pc/ +0 main.cpp + pc.pro +2 tslib/ +0 main.cpp + tslib.pro +3 phonon/ +0 ds9/ +0 ds9.pro +2 gstreamer/ +0 gstreamer.pro +2 mmf/ +0 mmf.pro +2 phonon.pro + qt7/ +0 qt7.pro +2 waveout/ +0 waveout.pro +3 plugins.pro + qpluginbase.pri + s60/ +0 3_1/ +0 3_1.pro +2 3_2/ +0 3_2.pro +2 5_0/ +0 5_0.pro +2 bwins/ +0 qts60pluginu.def +2 eabi/ +0 qts60pluginu.def +2 s60pluginbase.pri + s60.pro + src/ +0 qcoreapplication_3_1.cpp + qcoreapplication_3_2.cpp + qdesktopservices_3_1.cpp + qdesktopservices_3_2.cpp + qlocale_3_1.cpp + qlocale_3_2.cpp +3 script/ +0 qtdbus/ +0 main.cpp + main.h + qtdbus.pro +2 script.pro +2 sqldrivers/ +0 db2/ +0 db2.pro + main.cpp + README +2 ibase/ +0 ibase.pro + main.cpp +2 mysql/ +0 main.cpp + mysql.pro + README +2 oci/ +0 main.cpp + oci.pro + README +2 odbc/ +0 main.cpp + odbc.pro + README +2 psql/ +0 main.cpp + psql.pro + README +2 qsqldriverbase.pri + README + sqldrivers.pro + sqlite/ + sqlite2/ +0 README + smain.cpp + sqlite2.pro +2 sqlite/README + sqlite/smain.cpp + sqlite/sqlite.pro + sqlite_symbian/ +0 SQLite3_v9.2.zip + sqlite_symbian.pro +2 tds/ +0 main.cpp + README + tds.pro +4 qbase.pri + qt3support/ +0 canvas/ +0 canvas.pri + q3canvas.cpp + q3canvas.h +2 dialogs/ +0 dialogs.pri + q3filedialog.cpp + q3filedialog.h + q3filedialog_mac.cpp + q3filedialog_win.cpp + q3progressdialog.cpp + q3progressdialog.h + q3tabdialog.cpp + q3tabdialog.h + q3wizard.cpp + q3wizard.h +2 itemviews/ +0 itemviews.pri + q3iconview.cpp + q3iconview.h + q3listbox.cpp + q3listbox.h + q3listview.cpp + q3listview.h + q3table.cpp + q3table.h +2 network/ +0 network.pri + q3dns.cpp + q3dns.h + q3ftp.cpp + q3ftp.h + q3http.cpp + q3http.h + q3localfs.cpp + q3localfs.h + q3network.cpp + q3network.h + q3networkprotocol.cpp + q3networkprotocol.h + q3serversocket.cpp + q3serversocket.h + q3socket.cpp + q3socketdevice.cpp + q3socketdevice.h + q3socketdevice_unix.cpp + q3socketdevice_win.cpp + q3socket.h + q3url.cpp + q3url.h + q3urloperator.cpp + q3urloperator.h +2 other/ +0 other.pri + q3accel.cpp + q3accel.h + q3boxlayout.cpp + q3boxlayout.h + q3dragobject.cpp + q3dragobject.h + q3dropsite.cpp + q3dropsite.h + q3gridlayout.h + q3membuf.cpp + q3membuf_p.h + q3mimefactory.cpp + q3mimefactory.h + q3polygonscanner.cpp + q3polygonscanner.h + q3process.cpp + q3process.h + q3process_unix.cpp + q3process_win.cpp + qiconset.h + qt_compat_pch.h +2 painting/ +0 painting.pri + q3paintdevicemetrics.cpp + q3paintdevicemetrics.h + q3paintengine_svg.cpp + q3paintengine_svg_p.h + q3painter.cpp + q3painter.h + q3picture.cpp + q3picture.h + q3pointarray.cpp + q3pointarray.h +2 qt3support.pro + sql/ +0 q3databrowser.cpp + q3databrowser.h + q3datatable.cpp + q3datatable.h + q3dataview.cpp + q3dataview.h + q3editorfactory.cpp + q3editorfactory.h + q3sqlcursor.cpp + q3sqlcursor.h + q3sqleditorfactory.cpp + q3sqleditorfactory.h + q3sqlfieldinfo.h + q3sqlfieldinfo.qdoc + q3sqlform.cpp + q3sqlform.h + q3sqlmanager_p.cpp + q3sqlmanager_p.h + q3sqlpropertymap.cpp + q3sqlpropertymap.h + q3sqlrecordinfo.h + q3sqlrecordinfo.qdoc + q3sqlselectcursor.cpp + q3sqlselectcursor.h + sql.pri +2 text/ +0 q3multilineedit.cpp + q3multilineedit.h + q3richtext.cpp + q3richtext_p.cpp + q3richtext_p.h + q3simplerichtext.cpp + q3simplerichtext.h + q3stylesheet.cpp + q3stylesheet.h + q3syntaxhighlighter.cpp + q3syntaxhighlighter.h + q3syntaxhighlighter_p.h + q3textbrowser.cpp + q3textbrowser.h + q3textedit.cpp + q3textedit.h + q3textstream.cpp + q3textstream.h + q3textview.cpp + q3textview.h + text.pri +2 tools/ +0 q3asciicache.h + q3asciicache.qdoc + q3asciidict.h + q3asciidict.qdoc + q3cache.h + q3cache.qdoc + q3cleanuphandler.h + q3cstring.cpp + q3cstring.h + q3deepcopy.cpp + q3deepcopy.h + q3dict.h + q3dict.qdoc + q3garray.cpp + q3garray.h + q3gcache.cpp + q3gcache.h + q3gdict.cpp + q3gdict.h + q3glist.cpp + q3glist.h + q3gvector.cpp + q3gvector.h + q3intcache.h + q3intcache.qdoc + q3intdict.h + q3intdict.qdoc + q3memarray.h + q3memarray.qdoc + q3objectdict.h + q3ptrcollection.cpp + q3ptrcollection.h + q3ptrdict.h + q3ptrdict.qdoc + q3ptrlist.h + q3ptrlist.qdoc + q3ptrqueue.h + q3ptrqueue.qdoc + q3ptrstack.h + q3ptrstack.qdoc + q3ptrvector.h + q3ptrvector.qdoc + q3semaphore.cpp + q3semaphore.h + q3shared.cpp + q3shared.h + q3signal.cpp + q3signal.h + q3sortedlist.h + q3strlist.h + q3strvec.h + q3tl.h + q3valuelist.h + q3valuelist.qdoc + q3valuestack.h + q3valuestack.qdoc + q3valuevector.h + q3valuevector.qdoc + tools.pri +2 widgets/ +0 q3action.cpp + q3action.h + q3button.cpp + q3buttongroup.cpp + q3buttongroup.h + q3button.h + q3combobox.cpp + q3combobox.h + q3datetimeedit.cpp + q3datetimeedit.h + q3dockarea.cpp + q3dockarea.h + q3dockwindow.cpp + q3dockwindow.h + q3frame.cpp + q3frame.h + q3grid.cpp + q3grid.h + q3gridview.cpp + q3gridview.h + q3groupbox.cpp + q3groupbox.h + q3hbox.cpp + q3hbox.h + q3header.cpp + q3header.h + q3hgroupbox.cpp + q3hgroupbox.h + q3mainwindow.cpp + q3mainwindow.h + q3mainwindow_p.h + q3popupmenu.cpp + q3popupmenu.h + q3progressbar.cpp + q3progressbar.h + q3rangecontrol.cpp + q3rangecontrol.h + q3scrollview.cpp + q3scrollview.h + q3spinwidget.cpp + q3titlebar.cpp + q3titlebar_p.h + q3toolbar.cpp + q3toolbar.h + q3vbox.cpp + q3vbox.h + q3vgroupbox.cpp + q3vgroupbox.h + q3whatsthis.cpp + q3whatsthis.h + q3widgetstack.cpp + q3widgetstack.h + widgets.pri +3 qt_install.pri + qt_targets.pri + s60installs/ +0 bwins/ +0 phononu.def + QtCoreu.def + QtGuiu.def + QtMultimediau.def + QtNetworku.def + QtScriptu.def + QtSqlu.def + QtSvgu.def + QtTestu.def + QtWebKitu.def + QtXmlPatternsu.def + QtXmlu.def +2 eabi/ +0 phononu.def + QtCoreu.def + QtGuiu.def + QtMultimediau.def + QtNetworku.def + QtOpenVGu.def + QtScriptu.def + QtSqlu.def + QtSvgu.def + QtTestu.def + QtWebKitu.def + QtXmlPatternsu.def + QtXmlu.def +2 .gitignore + qtdemoapps.iby + qt.iby + qt.svg + s60installs.pro + selfsigned.cer + selfsigned.key +2 s60main/ +0 qts60main.cpp + qts60main_mcrt0.cpp + s60main.pro +2 script/ +0 api/ +0 api.pri + qscriptable.cpp + qscriptable.h + qscriptable_p.h + qscriptclass.cpp + qscriptclass.h + qscriptclasspropertyiterator.cpp + qscriptclasspropertyiterator.h + qscriptcontext.cpp + qscriptcontext.h + qscriptcontextinfo.cpp + qscriptcontextinfo.h + qscriptcontext_p.h + qscriptengineagent.cpp + qscriptengineagent.h + qscriptengineagent_p.h + qscriptengine.cpp + qscriptengine.h + qscriptengine_p.h + qscriptextensioninterface.h + qscriptextensionplugin.cpp + qscriptextensionplugin.h + qscriptprogram.cpp + qscriptprogram.h + qscriptprogram_p.h + qscriptstring.cpp + qscriptstring.h + qscriptstring_p.h + qscriptvalue.cpp + qscriptvalue.h + qscriptvalueiterator.cpp + qscriptvalueiterator.h + qscriptvalue_p.h +2 bridge/ +0 bridge.pri + qscriptactivationobject.cpp + qscriptactivationobject_p.h + qscriptclassobject.cpp + qscriptclassobject_p.h + qscriptdeclarativeclass.cpp + qscriptdeclarativeclass_p.h + qscriptdeclarativeobject.cpp + qscriptdeclarativeobject_p.h + qscriptfunction.cpp + qscriptfunction_p.h + qscriptglobalobject.cpp + qscriptglobalobject_p.h + qscriptobject.cpp + qscriptobject_p.h + qscriptqobject.cpp + qscriptqobject_p.h + qscriptvariant.cpp + qscriptvariant_p.h +2 parser/ +0 parser.pri + qscriptast.cpp + qscriptastfwd_p.h + qscriptast_p.h + qscriptastvisitor.cpp + qscriptastvisitor_p.h + qscript.g + qscriptgrammar.cpp + qscriptgrammar_p.h + qscriptlexer.cpp + qscriptlexer_p.h + qscriptparser.cpp + qscriptparser_p.h + qscriptsyntaxchecker.cpp + qscriptsyntaxchecker_p.h +2 script.pri + script.pro +2 scripttools/ +0 debugging/ +0 debugging.pri + images/ +0 breakpoint.png + breakpoint.svg + d_breakpoint.png + d_breakpoint.svg + delete.png + d_interrupt.png + d_play.png + find.png + interrupt.png + location.png + location.svg + mac/ +0 closetab.png + next.png + plus.png + previous.png +2 new.png + play.png + reload.png + return.png + runtocursor.png + runtonewscript.png + stepinto.png + stepout.png + stepover.png + win/ +0 closetab.png + next.png + plus.png + previous.png +2 wrap.png +2 qscriptbreakpointdata.cpp + qscriptbreakpointdata_p.h + qscriptbreakpointsmodel.cpp + qscriptbreakpointsmodel_p.h + qscriptbreakpointswidget.cpp + qscriptbreakpointswidgetinterface.cpp + qscriptbreakpointswidgetinterface_p.h + qscriptbreakpointswidgetinterface_p_p.h + qscriptbreakpointswidget_p.h + qscriptcompletionproviderinterface_p.h + qscriptcompletiontask.cpp + qscriptcompletiontaskinterface.cpp + qscriptcompletiontaskinterface_p.h + qscriptcompletiontaskinterface_p_p.h + qscriptcompletiontask_p.h + qscriptdebuggeragent.cpp + qscriptdebuggeragent_p.h + qscriptdebuggeragent_p_p.h + qscriptdebuggerbackend.cpp + qscriptdebuggerbackend_p.h + qscriptdebuggerbackend_p_p.h + qscriptdebuggercodefinderwidget.cpp + qscriptdebuggercodefinderwidgetinterface.cpp + qscriptdebuggercodefinderwidgetinterface_p.h + qscriptdebuggercodefinderwidgetinterface_p_p.h + qscriptdebuggercodefinderwidget_p.h + qscriptdebuggercodeview.cpp + qscriptdebuggercodeviewinterface.cpp + qscriptdebuggercodeviewinterface_p.h + qscriptdebuggercodeviewinterface_p_p.h + qscriptdebuggercodeview_p.h + qscriptdebuggercodewidget.cpp + qscriptdebuggercodewidgetinterface.cpp + qscriptdebuggercodewidgetinterface_p.h + qscriptdebuggercodewidgetinterface_p_p.h + qscriptdebuggercodewidget_p.h + qscriptdebuggercommand.cpp + qscriptdebuggercommandexecutor.cpp + qscriptdebuggercommandexecutor_p.h + qscriptdebuggercommand_p.h + qscriptdebuggercommandschedulerfrontend.cpp + qscriptdebuggercommandschedulerfrontend_p.h + qscriptdebuggercommandschedulerinterface_p.h + qscriptdebuggercommandschedulerjob.cpp + qscriptdebuggercommandschedulerjob_p.h + qscriptdebuggercommandschedulerjob_p_p.h + qscriptdebuggerconsolecommand.cpp + qscriptdebuggerconsolecommandgroupdata.cpp + qscriptdebuggerconsolecommandgroupdata_p.h + qscriptdebuggerconsolecommandjob.cpp + qscriptdebuggerconsolecommandjob_p.h + qscriptdebuggerconsolecommandjob_p_p.h + qscriptdebuggerconsolecommandmanager.cpp + qscriptdebuggerconsolecommandmanager_p.h + qscriptdebuggerconsolecommand_p.h + qscriptdebuggerconsolecommand_p_p.h + qscriptdebuggerconsole.cpp + qscriptdebuggerconsoleglobalobject.cpp + qscriptdebuggerconsoleglobalobject_p.h + qscriptdebuggerconsolehistorianinterface_p.h + qscriptdebuggerconsole_p.h + qscriptdebuggerconsolewidget.cpp + qscriptdebuggerconsolewidgetinterface.cpp + qscriptdebuggerconsolewidgetinterface_p.h + qscriptdebuggerconsolewidgetinterface_p_p.h + qscriptdebuggerconsolewidget_p.h + qscriptdebugger.cpp + qscriptdebuggerevent.cpp + qscriptdebuggereventhandlerinterface_p.h + qscriptdebuggerevent_p.h + qscriptdebuggerfrontend.cpp + qscriptdebuggerfrontend_p.h + qscriptdebuggerfrontend_p_p.h + qscriptdebuggerjob.cpp + qscriptdebuggerjob_p.h + qscriptdebuggerjob_p_p.h + qscriptdebuggerjobschedulerinterface_p.h + qscriptdebuggerlocalsmodel.cpp + qscriptdebuggerlocalsmodel_p.h + qscriptdebuggerlocalswidget.cpp + qscriptdebuggerlocalswidgetinterface.cpp + qscriptdebuggerlocalswidgetinterface_p.h + qscriptdebuggerlocalswidgetinterface_p_p.h + qscriptdebuggerlocalswidget_p.h + qscriptdebuggerobjectsnapshotdelta_p.h + qscriptdebugger_p.h + qscriptdebuggerresponse.cpp + qscriptdebuggerresponsehandlerinterface_p.h + qscriptdebuggerresponse_p.h + qscriptdebuggerscriptedconsolecommand.cpp + qscriptdebuggerscriptedconsolecommand_p.h + qscriptdebuggerscriptsmodel.cpp + qscriptdebuggerscriptsmodel_p.h + qscriptdebuggerscriptswidget.cpp + qscriptdebuggerscriptswidgetinterface.cpp + qscriptdebuggerscriptswidgetinterface_p.h + qscriptdebuggerscriptswidgetinterface_p_p.h + qscriptdebuggerscriptswidget_p.h + qscriptdebuggerstackmodel.cpp + qscriptdebuggerstackmodel_p.h + qscriptdebuggerstackwidget.cpp + qscriptdebuggerstackwidgetinterface.cpp + qscriptdebuggerstackwidgetinterface_p.h + qscriptdebuggerstackwidgetinterface_p_p.h + qscriptdebuggerstackwidget_p.h + qscriptdebuggerstandardwidgetfactory.cpp + qscriptdebuggerstandardwidgetfactory_p.h + qscriptdebuggervalue.cpp + qscriptdebuggervalue_p.h + qscriptdebuggervalueproperty.cpp + qscriptdebuggervalueproperty_p.h + qscriptdebuggerwidgetfactoryinterface_p.h + qscriptdebugoutputwidget.cpp + qscriptdebugoutputwidgetinterface.cpp + qscriptdebugoutputwidgetinterface_p.h + qscriptdebugoutputwidgetinterface_p_p.h + qscriptdebugoutputwidget_p.h + qscriptedit.cpp + qscriptedit_p.h + qscriptenginedebugger.cpp + qscriptenginedebuggerfrontend.cpp + qscriptenginedebuggerfrontend_p.h + qscriptenginedebugger.h + qscripterrorlogwidget.cpp + qscripterrorlogwidgetinterface.cpp + qscripterrorlogwidgetinterface_p.h + qscripterrorlogwidgetinterface_p_p.h + qscripterrorlogwidget_p.h + qscriptmessagehandlerinterface_p.h + qscriptobjectsnapshot.cpp + qscriptobjectsnapshot_p.h + qscriptscriptdata.cpp + qscriptscriptdata_p.h + qscriptstdmessagehandler.cpp + qscriptstdmessagehandler_p.h + qscriptsyntaxhighlighter.cpp + qscriptsyntaxhighlighter_p.h + qscripttooltipproviderinterface_p.h + qscriptvalueproperty.cpp + qscriptvalueproperty_p.h + qscriptxmlparser.cpp + qscriptxmlparser_p.h + scripts/ +0 commands/ +0 advance.qs + backtrace.qs + break.qs + clear.qs + complete.qs + condition.qs + continue.qs + delete.qs + disable.qs + down.qs + enable.qs + eval.qs + finish.qs + frame.qs + help.qs + ignore.qs + info.qs + interrupt.qs + list.qs + next.qs + print.qs + return.qs + step.qs + tbreak.qs + up.qs +3 scripttools_debugging.qrc +2 scripttools.pro +2 script/utils/ +0 qscriptdate.cpp + qscriptdate_p.h + utils.pri +2 sql/ +0 drivers/ +0 db2/ +0 qsql_db2.cpp + qsql_db2.h +2 drivers.pri + ibase/ +0 qsql_ibase.cpp + qsql_ibase.h +2 mysql/ +0 qsql_mysql.cpp + qsql_mysql.h +2 oci/ +0 qsql_oci.cpp + qsql_oci.h +2 odbc/ +0 qsql_odbc.cpp + qsql_odbc.h +2 psql/ +0 qsql_psql.cpp + qsql_psql.h +2 sqlite/ + sqlite2/ +0 qsql_sqlite2.cpp + qsql_sqlite2.h +2 sqlite/qsql_sqlite.cpp + sqlite/qsql_sqlite.h + tds/ +0 qsql_tds.cpp + qsql_tds.h +3 kernel/ +0 kernel.pri + qsqlcachedresult.cpp + qsqlcachedresult_p.h + qsqldatabase.cpp + qsqldatabase.h + qsqldriver.cpp + qsqldriver.h + qsqldriverplugin.cpp + qsqldriverplugin.h + qsqlerror.cpp + qsqlerror.h + qsqlfield.cpp + qsqlfield.h + qsql.h + qsqlindex.cpp + qsqlindex.h + qsqlnulldriver_p.h + qsql.qdoc + qsqlquery.cpp + qsqlquery.h + qsqlrecord.cpp + qsqlrecord.h + qsqlresult.cpp + qsqlresult.h +2 models/ +0 models.pri + qsqlquerymodel.cpp + qsqlquerymodel.h + qsqlquerymodel_p.h + qsqlrelationaldelegate.cpp + qsqlrelationaldelegate.h + qsqlrelationaltablemodel.cpp + qsqlrelationaltablemodel.h + qsqltablemodel.cpp + qsqltablemodel.h + qsqltablemodel_p.h +2 README.module + sql.pro +2 src.pro + svg/ +0 qgraphicssvgitem.cpp + qgraphicssvgitem.h + qsvgfont.cpp + qsvgfont_p.h + qsvggenerator.cpp + qsvggenerator.h + qsvggraphics.cpp + qsvggraphics_p.h + qsvghandler.cpp + qsvghandler_p.h + qsvgnode.cpp + qsvgnode_p.h + qsvgrenderer.cpp + qsvgrenderer.h + qsvgstructure.cpp + qsvgstructure_p.h + qsvgstyle.cpp + qsvgstyle_p.h + qsvgtinydocument.cpp + qsvgtinydocument_p.h + qsvgwidget.cpp + qsvgwidget.h + svg.pro +2 testlib/ +0 3rdparty/ +0 callgrind_p.h + cycle_p.h + valgrind_p.h +2 qabstracttestlogger.cpp + qabstracttestlogger_p.h + qasciikey.cpp + qbenchmark.cpp + qbenchmarkevent.cpp + qbenchmarkevent_p.h + qbenchmark.h + qbenchmarkmeasurement.cpp + qbenchmarkmeasurement_p.h + qbenchmark_p.h + qbenchmarkvalgrind.cpp + qbenchmarkvalgrind_p.h + qplaintestlogger.cpp + qplaintestlogger_p.h + qsignaldumper.cpp + qsignaldumper_p.h + qsignalspy.h + qsignalspy.qdoc + qtestaccessible.h + qtestassert.h + qtestbasicstreamer.cpp + qtestbasicstreamer.h + qtestcase.cpp + qtestcase.h + qtestcoreelement.h + qtestcorelist.h + qtestdata.cpp + qtestdata.h + qtestelementattribute.cpp + qtestelementattribute.h + qtestelement.cpp + qtestelement.h + qtestevent.h + qtesteventloop.h + qtestevent.qdoc + qtestfilelogger.cpp + qtestfilelogger.h + qtest_global.h + qtest_gui.h + qtest.h + qtestkeyboard.h + qtestlightxmlstreamer.cpp + qtestlightxmlstreamer.h + qtestlog.cpp + qtestlogger.cpp + qtestlogger_p.h + qtestlog_p.h + qtestmouse.h + qtestresult.cpp + qtestresult_p.h + qtestspontaneevent.h + qtestsystem.h + qtesttable.cpp + qtesttable_p.h + qtesttouch.h + qtestxmlstreamer.cpp + qtestxmlstreamer.h + qtestxunitstreamer.cpp + qtestxunitstreamer.h + qxmltestlogger.cpp + qxmltestlogger_p.h + testlib.pro +2 tools/ +0 bootstrap/ +0 bootstrap.pri + bootstrap.pro +2 idc/ +0 idc.pro + main.cpp +2 moc/ +0 generator.cpp + generator.h + keywords.cpp + main.cpp + moc.cpp + moc.h + moc.pri + moc.pro + mwerks_mac.cpp + mwerks_mac.h + outputrevision.h + parser.cpp + parser.h + ppkeywords.cpp + preprocessor.cpp + preprocessor.h + symbols.h + token.cpp + token.h + util/ +0 generate_keywords.cpp + generate_keywords.pro + generate.sh + licenseheader.txt +2 utils.h +2 rcc/ +0 main.cpp + rcc.cpp + rcc.h + rcc.pri + rcc.pro +2 tools.pro + uic/ + uic3/ +0 converter.cpp + deps.cpp + domtool.cpp + domtool.h + embed.cpp + form.cpp + main.cpp + object.cpp + parser.cpp + parser.h + qt3to4.cpp + qt3to4.h + subclassing.cpp + ui3reader.cpp + ui3reader.h + uic3.pro + uic.cpp + uic.h + widgetinfo.cpp + widgetinfo.h +2 uic/cpp/ +0 cppextractimages.cpp + cppextractimages.h + cpp.pri + cppwritedeclaration.cpp + cppwritedeclaration.h + cppwriteicondata.cpp + cppwriteicondata.h + cppwriteicondeclaration.cpp + cppwriteicondeclaration.h + cppwriteiconinitialization.cpp + cppwriteiconinitialization.h + cppwriteincludes.cpp + cppwriteincludes.h + cppwriteinitialization.cpp + cppwriteinitialization.h +2 uic/customwidgetsinfo.cpp + uic/customwidgetsinfo.h + uic/databaseinfo.cpp + uic/databaseinfo.h + uic/driver.cpp + uic/driver.h + uic/globaldefs.h + uic/main.cpp + uic/option.h + uic/treewalker.cpp + uic/treewalker.h + uic/ui4.cpp + uic/ui4.h + uic/uic.cpp + uic/uic.h + uic/uic.pri + uic/uic.pro + uic/utils.h + uic/validator.cpp + uic/validator.h +2 winmain/ +0 qtmain_win.cpp + winmain.pro +2 xml/ +0 dom/ +0 dom.pri + qdom.cpp + qdom.h +3 xmlpatterns/ +0 acceltree/ +0 acceltree.pri + qacceliterators.cpp + qacceliterators_p.h + qacceltreebuilder.cpp + qacceltreebuilder_p.h + qacceltree.cpp + qacceltree_p.h + qacceltreeresourceloader.cpp + qacceltreeresourceloader_p.h + qcompressedwhitespace.cpp + qcompressedwhitespace_p.h +2 api/ +0 api.pri + qabstractmessagehandler.cpp + qabstractmessagehandler.h + qabstracturiresolver.cpp + qabstracturiresolver.h + qabstractxmlforwarditerator.cpp + qabstractxmlforwarditerator_p.h + qabstractxmlnodemodel.cpp + qabstractxmlnodemodel.h + qabstractxmlnodemodel_p.h + qabstractxmlpullprovider.cpp + qabstractxmlpullprovider_p.h + qabstractxmlreceiver.cpp + qabstractxmlreceiver.h + qabstractxmlreceiver_p.h + qdeviceresourceloader_p.h + qiodevicedelegate.cpp + qiodevicedelegate_p.h + qnetworkaccessdelegator.cpp + qnetworkaccessdelegator_p.h + qpullbridge.cpp + qpullbridge_p.h + qreferencecountedvalue_p.h + qresourcedelegator.cpp + qresourcedelegator_p.h + qsimplexmlnodemodel.cpp + qsimplexmlnodemodel.h + qsourcelocation.cpp + qsourcelocation.h + quriloader.cpp + quriloader_p.h + qvariableloader.cpp + qvariableloader_p.h + qxmlformatter.cpp + qxmlformatter.h + qxmlname.cpp + qxmlname.h + qxmlnamepool.cpp + qxmlnamepool.h + qxmlquery.cpp + qxmlquery.h + qxmlquery_p.h + qxmlresultitems.cpp + qxmlresultitems.h + qxmlresultitems_p.h + qxmlschema.cpp + qxmlschema.h + qxmlschema_p.cpp + qxmlschema_p.h + qxmlschemavalidator.cpp + qxmlschemavalidator.h + qxmlschemavalidator_p.h + qxmlserializer.cpp + qxmlserializer.h + qxmlserializer_p.h +2 common.pri + data/ +0 data.pri + qabstractdatetime.cpp + qabstractdatetime_p.h + qabstractduration.cpp + qabstractduration_p.h + qabstractfloatcasters.cpp + qabstractfloatcasters_p.h + qabstractfloat.cpp + qabstractfloatmathematician.cpp + qabstractfloatmathematician_p.h + qabstractfloat_p.h + qanyuri.cpp + qanyuri_p.h + qatomiccaster.cpp + qatomiccaster_p.h + qatomiccasters.cpp + qatomiccasters_p.h + qatomiccomparator.cpp + qatomiccomparator_p.h + qatomiccomparators.cpp + qatomiccomparators_p.h + qatomicmathematician.cpp + qatomicmathematician_p.h + qatomicmathematicians.cpp + qatomicmathematicians_p.h + qatomicstring.cpp + qatomicstring_p.h + qatomicvalue.cpp + qbase64binary.cpp + qbase64binary_p.h + qboolean.cpp + qboolean_p.h + qcommonvalues.cpp + qcommonvalues_p.h + qcomparisonfactory.cpp + qcomparisonfactory_p.h + qdate.cpp + qdate_p.h + qdaytimeduration.cpp + qdaytimeduration_p.h + qdecimal.cpp + qdecimal_p.h + qderivedinteger_p.h + qderivedstring_p.h + qduration.cpp + qduration_p.h + qgday.cpp + qgday_p.h + qgmonth.cpp + qgmonthday.cpp + qgmonthday_p.h + qgmonth_p.h + qgyear.cpp + qgyearmonth.cpp + qgyearmonth_p.h + qgyear_p.h + qhexbinary.cpp + qhexbinary_p.h + qinteger.cpp + qinteger_p.h + qitem.cpp + qitem_p.h + qnodebuilder.cpp + qnodebuilder_p.h + qnodemodel.cpp + qqnamevalue.cpp + qqnamevalue_p.h + qresourceloader.cpp + qresourceloader_p.h + qschemadatetime.cpp + qschemadatetime_p.h + qschemanumeric.cpp + qschemanumeric_p.h + qschematime.cpp + qschematime_p.h + qsequencereceiver.cpp + qsequencereceiver_p.h + qsorttuple.cpp + qsorttuple_p.h + quntypedatomic.cpp + quntypedatomic_p.h + qvalidationerror.cpp + qvalidationerror_p.h + qvaluefactory.cpp + qvaluefactory_p.h + qyearmonthduration.cpp + qyearmonthduration_p.h +2 documentationGroups.dox + Doxyfile + environment/ +0 createReportContext.sh + createReportContext.xsl + environment.pri + qcurrentitemcontext.cpp + qcurrentitemcontext_p.h + qdelegatingdynamiccontext.cpp + qdelegatingdynamiccontext_p.h + qdelegatingstaticcontext.cpp + qdelegatingstaticcontext_p.h + qdynamiccontext.cpp + qdynamiccontext_p.h + qfocus.cpp + qfocus_p.h + qgenericdynamiccontext.cpp + qgenericdynamiccontext_p.h + qgenericstaticcontext.cpp + qgenericstaticcontext_p.h + qreceiverdynamiccontext.cpp + qreceiverdynamiccontext_p.h + qreportcontext.cpp + qreportcontext_p.h + qstackcontextbase.cpp + qstackcontextbase_p.h + qstaticbaseuricontext.cpp + qstaticbaseuricontext_p.h + qstaticcompatibilitycontext.cpp + qstaticcompatibilitycontext_p.h + qstaticcontext.cpp + qstaticcontext_p.h + qstaticcurrentcontext.cpp + qstaticcurrentcontext_p.h + qstaticfocuscontext.cpp + qstaticfocuscontext_p.h + qstaticnamespacecontext.cpp + qstaticnamespacecontext_p.h +2 expr/ +0 expr.pri + qandexpression.cpp + qandexpression_p.h + qapplytemplate.cpp + qapplytemplate_p.h + qargumentreference.cpp + qargumentreference_p.h + qarithmeticexpression.cpp + qarithmeticexpression_p.h + qattributeconstructor.cpp + qattributeconstructor_p.h + qattributenamevalidator.cpp + qattributenamevalidator_p.h + qaxisstep.cpp + qaxisstep_p.h + qcachecells_p.h + qcallsite.cpp + qcallsite_p.h + qcalltargetdescription.cpp + qcalltargetdescription_p.h + qcalltemplate.cpp + qcalltemplate_p.h + qcastableas.cpp + qcastableas_p.h + qcastas.cpp + qcastas_p.h + qcastingplatform.cpp + qcastingplatform_p.h + qcollationchecker.cpp + qcollationchecker_p.h + qcombinenodes.cpp + qcombinenodes_p.h + qcommentconstructor.cpp + qcommentconstructor_p.h + qcomparisonplatform.cpp + qcomparisonplatform_p.h + qcomputednamespaceconstructor.cpp + qcomputednamespaceconstructor_p.h + qcontextitem.cpp + qcontextitem_p.h + qcopyof.cpp + qcopyof_p.h + qcurrentitemstore.cpp + qcurrentitemstore_p.h + qdocumentconstructor.cpp + qdocumentconstructor_p.h + qdocumentcontentvalidator.cpp + qdocumentcontentvalidator_p.h + qdynamiccontextstore.cpp + qdynamiccontextstore_p.h + qelementconstructor.cpp + qelementconstructor_p.h + qemptycontainer.cpp + qemptycontainer_p.h + qemptysequence.cpp + qemptysequence_p.h + qevaluationcache.cpp + qevaluationcache_p.h + qexpression.cpp + qexpressiondispatch_p.h + qexpressionfactory.cpp + qexpressionfactory_p.h + qexpression_p.h + qexpressionsequence.cpp + qexpressionsequence_p.h + qexpressionvariablereference.cpp + qexpressionvariablereference_p.h + qexternalvariableloader.cpp + qexternalvariableloader_p.h + qexternalvariablereference.cpp + qexternalvariablereference_p.h + qfirstitempredicate.cpp + qfirstitempredicate_p.h + qforclause.cpp + qforclause_p.h + qgeneralcomparison.cpp + qgeneralcomparison_p.h + qgenericpredicate.cpp + qgenericpredicate_p.h + qifthenclause.cpp + qifthenclause_p.h + qinstanceof.cpp + qinstanceof_p.h + qletclause.cpp + qletclause_p.h + qliteral.cpp + qliteral_p.h + qliteralsequence.cpp + qliteralsequence_p.h + qnamespaceconstructor.cpp + qnamespaceconstructor_p.h + qncnameconstructor.cpp + qncnameconstructor_p.h + qnodecomparison.cpp + qnodecomparison_p.h + qnodesort.cpp + qnodesort_p.h + qoperandsiterator_p.h + qoptimizationpasses.cpp + qoptimizationpasses_p.h + qoptimizerblocks.cpp + qoptimizerblocks_p.h + qoptimizerframework.cpp + qoptimizerframework_p.h + qorderby.cpp + qorderby_p.h + qorexpression.cpp + qorexpression_p.h + qpaircontainer.cpp + qpaircontainer_p.h + qparentnodeaxis.cpp + qparentnodeaxis_p.h + qpath.cpp + qpath_p.h + qpositionalvariablereference.cpp + qpositionalvariablereference_p.h + qprocessinginstructionconstructor.cpp + qprocessinginstructionconstructor_p.h + qqnameconstructor.cpp + qqnameconstructor_p.h + qquantifiedexpression.cpp + qquantifiedexpression_p.h + qrangeexpression.cpp + qrangeexpression_p.h + qrangevariablereference.cpp + qrangevariablereference_p.h + qreturnorderby.cpp + qreturnorderby_p.h + qsimplecontentconstructor.cpp + qsimplecontentconstructor_p.h + qsinglecontainer.cpp + qsinglecontainer_p.h + qsourcelocationreflection.cpp + qsourcelocationreflection_p.h + qstaticbaseuristore.cpp + qstaticbaseuristore_p.h + qstaticcompatibilitystore.cpp + qstaticcompatibilitystore_p.h + qtemplate.cpp + qtemplateinvoker.cpp + qtemplateinvoker_p.h + qtemplatemode.cpp + qtemplatemode_p.h + qtemplateparameterreference.cpp + qtemplateparameterreference_p.h + qtemplatepattern_p.h + qtemplate_p.h + qtextnodeconstructor.cpp + qtextnodeconstructor_p.h + qtreatas.cpp + qtreatas_p.h + qtriplecontainer.cpp + qtriplecontainer_p.h + qtruthpredicate.cpp + qtruthpredicate_p.h + qunaryexpression.cpp + qunaryexpression_p.h + qunlimitedcontainer.cpp + qunlimitedcontainer_p.h + qunresolvedvariablereference.cpp + qunresolvedvariablereference_p.h + quserfunctioncallsite.cpp + quserfunctioncallsite_p.h + quserfunction.cpp + quserfunction_p.h + qvalidate.cpp + qvalidate_p.h + qvaluecomparison.cpp + qvaluecomparison_p.h + qvariabledeclaration.cpp + qvariabledeclaration_p.h + qvariablereference.cpp + qvariablereference_p.h + qwithparam_p.h + qxsltsimplecontentconstructor.cpp + qxsltsimplecontentconstructor_p.h +2 functions/ +0 functions.pri + qabstractfunctionfactory.cpp + qabstractfunctionfactory_p.h + qaccessorfns.cpp + qaccessorfns_p.h + qaggregatefns.cpp + qaggregatefns_p.h + qaggregator.cpp + qaggregator_p.h + qassemblestringfns.cpp + qassemblestringfns_p.h + qbooleanfns.cpp + qbooleanfns_p.h + qcomparescaseaware.cpp + qcomparescaseaware_p.h + qcomparestringfns.cpp + qcomparestringfns_p.h + qcomparingaggregator.cpp + qcomparingaggregator_p.h + qconstructorfunctionsfactory.cpp + qconstructorfunctionsfactory_p.h + qcontextfns.cpp + qcontextfns_p.h + qcontextnodechecker.cpp + qcontextnodechecker_p.h + qcurrentfn.cpp + qcurrentfn_p.h + qdatetimefn.cpp + qdatetimefn_p.h + qdatetimefns.cpp + qdatetimefns_p.h + qdeepequalfn.cpp + qdeepequalfn_p.h + qdocumentfn.cpp + qdocumentfn_p.h + qelementavailablefn.cpp + qelementavailablefn_p.h + qerrorfn.cpp + qerrorfn_p.h + qfunctionargument.cpp + qfunctionargument_p.h + qfunctionavailablefn.cpp + qfunctionavailablefn_p.h + qfunctioncall.cpp + qfunctioncall_p.h + qfunctionfactorycollection.cpp + qfunctionfactorycollection_p.h + qfunctionfactory.cpp + qfunctionfactory_p.h + qfunctionsignature.cpp + qfunctionsignature_p.h + qgenerateidfn.cpp + qgenerateidfn_p.h + qnodefns.cpp + qnodefns_p.h + qnumericfns.cpp + qnumericfns_p.h + qpatternmatchingfns.cpp + qpatternmatchingfns_p.h + qpatternplatform.cpp + qpatternplatform_p.h + qqnamefns.cpp + qqnamefns_p.h + qresolveurifn.cpp + qresolveurifn_p.h + qsequencefns.cpp + qsequencefns_p.h + qsequencegeneratingfns.cpp + qsequencegeneratingfns_p.h + qstaticbaseuricontainer_p.h + qstaticnamespacescontainer.cpp + qstaticnamespacescontainer_p.h + qstringvaluefns.cpp + qstringvaluefns_p.h + qsubstringfns.cpp + qsubstringfns_p.h + qsystempropertyfn.cpp + qsystempropertyfn_p.h + qtimezonefns.cpp + qtimezonefns_p.h + qtracefn.cpp + qtracefn_p.h + qtypeavailablefn.cpp + qtypeavailablefn_p.h + qunparsedentitypublicidfn.cpp + qunparsedentitypublicidfn_p.h + qunparsedentityurifn.cpp + qunparsedentityurifn_p.h + qunparsedtextavailablefn.cpp + qunparsedtextavailablefn_p.h + qunparsedtextfn.cpp + qunparsedtextfn_p.h + qxpath10corefunctions.cpp + qxpath10corefunctions_p.h + qxpath20corefunctions.cpp + qxpath20corefunctions_p.h + qxslt20corefunctions.cpp + qxslt20corefunctions_p.h +2 .gitignore + iterators/ +0 iterators.pri + qcachingiterator.cpp + qcachingiterator_p.h + qdeduplicateiterator.cpp + qdeduplicateiterator_p.h + qdistinctiterator.cpp + qdistinctiterator_p.h + qemptyiterator_p.h + qexceptiterator.cpp + qexceptiterator_p.h + qindexofiterator.cpp + qindexofiterator_p.h + qinsertioniterator.cpp + qinsertioniterator_p.h + qintersectiterator.cpp + qintersectiterator_p.h + qitemmappingiterator_p.h + qrangeiterator.cpp + qrangeiterator_p.h + qremovaliterator.cpp + qremovaliterator_p.h + qsequencemappingiterator_p.h + qsingletoniterator_p.h + qsubsequenceiterator.cpp + qsubsequenceiterator_p.h + qtocodepointsiterator.cpp + qtocodepointsiterator_p.h + qunioniterator.cpp + qunioniterator_p.h +2 janitors/ +0 janitors.pri + qargumentconverter.cpp + qargumentconverter_p.h + qatomizer.cpp + qatomizer_p.h + qcardinalityverifier.cpp + qcardinalityverifier_p.h + qebvextractor.cpp + qebvextractor_p.h + qitemverifier.cpp + qitemverifier_p.h + quntypedatomicconverter.cpp + quntypedatomicconverter_p.h +2 Mainpage.dox + parser/ +0 createParser.sh + createTokenLookup.sh + createXSLTTokenLookup.sh + .gitattributes + .gitignore + parser.pri + qmaintainingreader.cpp + qmaintainingreader_p.h + qparsercontext.cpp + qparsercontext_p.h + qquerytransformparser.cpp + qquerytransformparser_p.h + qtokenizer_p.h + qtokenlookup.cpp + qtokenrevealer.cpp + qtokenrevealer_p.h + qtokensource.cpp + qtokensource_p.h + querytransformparser.ypp + qxquerytokenizer.cpp + qxquerytokenizer_p.h + qxslttokenizer.cpp + qxslttokenizer_p.h + qxslttokenlookup.cpp + qxslttokenlookup_p.h + qxslttokenlookup.xml + TokenLookup.gperf + trolltechHeader.txt + winCEWorkaround.sed +2 projection/ +0 projection.pri + qdocumentprojector.cpp + qdocumentprojector_p.h + qprojectedexpression_p.h +2 qtokenautomaton/ +0 exampleFile.xml + qautomaton2cpp.xsl + qtokenautomaton.xsd + README +2 query.pri + schema/ +0 builtinschemas.qrc + doc/ +0 All_diagram.dot + Alternative_diagram.dot + Annotation_diagram.dot + AnyAttribute_diagram.dot + Any_diagram.dot + Assert_diagram.dot + Choice_diagram.dot + ComplexContent_diagram.dot + ComplexContentExtension_diagram.dot + ComplexContentRestriction_diagram.dot + DefaultOpenContent_diagram.dot + EnumerationFacet_diagram.dot + Field_diagram.dot + FractionDigitsFacet_diagram.dot + GlobalAttribute_diagram.dot + GlobalComplexType_diagram.dot + GlobalElement_diagram.dot + GlobalSimpleType_diagram.dot + Import_diagram.dot + Include_diagram.dot + Key_diagram.dot + KeyRef_diagram.dot + legend.dot + LengthFacet_diagram.dot + List_diagram.dot + LocalAll_diagram.dot + LocalAttribute_diagram.dot + LocalChoice_diagram.dot + LocalComplexType_diagram.dot + LocalElement_diagram.dot + LocalSequence_diagram.dot + LocalSimpleType_diagram.dot + MaxExclusiveFacet_diagram.dot + MaxInclusiveFacet_diagram.dot + MaxLengthFacet_diagram.dot + MinExclusiveFacet_diagram.dot + MinInclusiveFacet_diagram.dot + MinLengthFacet_diagram.dot + NamedAttributeGroup_diagram.dot + NamedGroup_diagram.dot + Notation_diagram.dot + Override_diagram.dot + PatternFacet_diagram.dot + Redefine_diagram.dot + ReferredAttributeGroup_diagram.dot + ReferredGroup_diagram.dot + Schema_diagram.dot + Selector_diagram.dot + Sequence_diagram.dot + SimpleContent_diagram.dot + SimpleContentExtension_diagram.dot + SimpleContentRestriction_diagram.dot + SimpleRestriction_diagram.dot + TotalDigitsFacet_diagram.dot + Union_diagram.dot + Unique_diagram.dot + WhiteSpaceFacet_diagram.dot +2 .gitignore + qnamespacesupport.cpp + qnamespacesupport_p.h + qxsdalternative.cpp + qxsdalternative_p.h + qxsdannotated.cpp + qxsdannotated_p.h + qxsdannotation.cpp + qxsdannotation_p.h + qxsdapplicationinformation.cpp + qxsdapplicationinformation_p.h + qxsdassertion.cpp + qxsdassertion_p.h + qxsdattribute.cpp + qxsdattributegroup.cpp + qxsdattributegroup_p.h + qxsdattribute_p.h + qxsdattributereference.cpp + qxsdattributereference_p.h + qxsdattributeterm.cpp + qxsdattributeterm_p.h + qxsdattributeuse.cpp + qxsdattributeuse_p.h + qxsdcomplextype.cpp + qxsdcomplextype_p.h + qxsddocumentation.cpp + qxsddocumentation_p.h + qxsdelement.cpp + qxsdelement_p.h + qxsdfacet.cpp + qxsdfacet_p.h + qxsdidcache.cpp + qxsdidcache_p.h + qxsdidchelper.cpp + qxsdidchelper_p.h + qxsdidentityconstraint.cpp + qxsdidentityconstraint_p.h + qxsdinstancereader.cpp + qxsdinstancereader_p.h + qxsdmodelgroup.cpp + qxsdmodelgroup_p.h + qxsdnotation.cpp + qxsdnotation_p.h + qxsdparticlechecker.cpp + qxsdparticlechecker_p.h + qxsdparticle.cpp + qxsdparticle_p.h + qxsdreference.cpp + qxsdreference_p.h + qxsdschemachecker.cpp + qxsdschemachecker_helper.cpp + qxsdschemachecker_p.h + qxsdschemachecker_setup.cpp + qxsdschemacontext.cpp + qxsdschemacontext_p.h + qxsdschema.cpp + qxsdschemadebugger.cpp + qxsdschemadebugger_p.h + qxsdschemahelper.cpp + qxsdschemahelper_p.h + qxsdschemamerger.cpp + qxsdschemamerger_p.h + qxsdschemaparsercontext.cpp + qxsdschemaparsercontext_p.h + qxsdschemaparser.cpp + qxsdschemaparser_p.h + qxsdschemaparser_setup.cpp + qxsdschema_p.h + qxsdschemaresolver.cpp + qxsdschemaresolver_p.h + qxsdschematoken.cpp + qxsdschematoken_p.h + qxsdschematypesfactory.cpp + qxsdschematypesfactory_p.h + qxsdsimpletype.cpp + qxsdsimpletype_p.h + qxsdstatemachinebuilder.cpp + qxsdstatemachinebuilder_p.h + qxsdstatemachine.cpp + qxsdstatemachine_p.h + qxsdterm.cpp + qxsdterm_p.h + qxsdtypechecker.cpp + qxsdtypechecker_p.h + qxsduserschematype.cpp + qxsduserschematype_p.h + qxsdvalidatedxmlnodemodel.cpp + qxsdvalidatedxmlnodemodel_p.h + qxsdvalidatinginstancereader.cpp + qxsdvalidatinginstancereader_p.h + qxsdwildcard.cpp + qxsdwildcard_p.h + qxsdxpathexpression.cpp + qxsdxpathexpression_p.h + schema.pri + schemas/ +0 xml.xsd +0 -LICENSE +3 tokens.xml +2 type/ +0 qabstractnodetest.cpp + qabstractnodetest_p.h + qanyitemtype.cpp + qanyitemtype_p.h + qanynodetype.cpp + qanynodetype_p.h + qanysimpletype.cpp + qanysimpletype_p.h + qanytype.cpp + qanytype_p.h + qatomiccasterlocator.cpp + qatomiccasterlocator_p.h + qatomiccasterlocators.cpp + qatomiccasterlocators_p.h + qatomiccomparatorlocator.cpp + qatomiccomparatorlocator_p.h + qatomiccomparatorlocators.cpp + qatomiccomparatorlocators_p.h + qatomicmathematicianlocator.cpp + qatomicmathematicianlocator_p.h + qatomicmathematicianlocators.cpp + qatomicmathematicianlocators_p.h + qatomictype.cpp + qatomictypedispatch_p.h + qatomictype_p.h + qbasictypesfactory.cpp + qbasictypesfactory_p.h + qbuiltinatomictype.cpp + qbuiltinatomictype_p.h + qbuiltinatomictypes.cpp + qbuiltinatomictypes_p.h + qbuiltinnodetype.cpp + qbuiltinnodetype_p.h + qbuiltintypes.cpp + qbuiltintypes_p.h + qcardinality.cpp + qcardinality_p.h + qcommonsequencetypes.cpp + qcommonsequencetypes_p.h + qebvtype.cpp + qebvtype_p.h + qemptysequencetype.cpp + qemptysequencetype_p.h + qgenericsequencetype.cpp + qgenericsequencetype_p.h + qitemtype.cpp + qitemtype_p.h + qlocalnametest.cpp + qlocalnametest_p.h + qmultiitemtype.cpp + qmultiitemtype_p.h + qnamedschemacomponent.cpp + qnamedschemacomponent_p.h + qnamespacenametest.cpp + qnamespacenametest_p.h + qnonetype.cpp + qnonetype_p.h + qnumerictype.cpp + qnumerictype_p.h + qprimitives_p.h + qqnametest.cpp + qqnametest_p.h + qschemacomponent.cpp + qschemacomponent_p.h + qschematype.cpp + qschematypefactory.cpp + qschematypefactory_p.h + qschematype_p.h + qsequencetype.cpp + qsequencetype_p.h + qtypechecker.cpp + qtypechecker_p.h + quntyped.cpp + quntyped_p.h + qxsltnodetest.cpp + qxsltnodetest_p.h + type.pri +2 utils/ +0 qautoptr.cpp + qautoptr_p.h + qcommonnamespaces_p.h + qcppcastinghelper_p.h + qdebug_p.h + qdelegatingnamespaceresolver.cpp + qdelegatingnamespaceresolver_p.h + qgenericnamespaceresolver.cpp + qgenericnamespaceresolver_p.h + qnamepool.cpp + qnamepool_p.h + qnamespacebinding_p.h + qnamespaceresolver.cpp + qnamespaceresolver_p.h + qnodenamespaceresolver.cpp + qnodenamespaceresolver_p.h + qoutputvalidator.cpp + qoutputvalidator_p.h + qpatternistlocale.cpp + qpatternistlocale_p.h + qxpathhelper.cpp + qxpathhelper_p.h + utils.pri +2 xmlpatterns.pro +2 xml/sax/ +0 qxml.cpp + qxml.h + sax.pri +2 xml/stream/ +0 qxmlstream.h + stream.pri +2 xml/xml.pro diff --git a/tests/benchmarks/corelib/io/qdir/tree/bench_qdir_tree.cpp b/tests/benchmarks/corelib/io/qdir/tree/bench_qdir_tree.cpp new file mode 100644 index 0000000..ad5ae98 --- /dev/null +++ b/tests/benchmarks/corelib/io/qdir/tree/bench_qdir_tree.cpp @@ -0,0 +1,173 @@ +/**************************************************************************** +** +** 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 test suite module 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 <QtTest/QTest> + +#include <QDirIterator> +#include <QFile> +#include <QString> +#include <QStack> + +#include "../../../../../shared/filesystem.h" + +class bench_QDir_tree + : public QObject +{ + Q_OBJECT + +public: + bench_QDir_tree() + : prefix("./test-tree/") + { + } + +private: + QByteArray prefix; + +private slots: + void initTestCase() + { + QFile list(":/4.6.0-list.txt"); + QVERIFY(list.open(QIODevice::ReadOnly | QIODevice::Text)); + + QVERIFY(fs.createDirectory(prefix)); + + QStack<QByteArray> stack; + QByteArray line; + Q_FOREVER { + char ch; + if (!list.getChar(&ch)) + break; + if (ch != ' ') { + line.append(ch); + continue; + } + + int pop = 1; + if (!line.isEmpty()) + pop = line.toInt(); + + while (pop) { + stack.pop(); + --pop; + } + + line = list.readLine(); + line.chop(1); + stack.push(line); + + line = prefix; + Q_FOREACH(const QByteArray &pathElement, stack) + line += pathElement; + + if (line.endsWith('/')) + QVERIFY(fs.createDirectory(line)); + else + QVERIFY(fs.createFile(line)); + + line.clear(); + } + } + + void fileSearch_data() const + { + QTest::addColumn<QStringList>("nameFilters"); + QTest::addColumn<int>("filter"); + QTest::addColumn<int>("entryCount"); + + QTest::newRow("*.cpp") << QStringList("*.cpp") + << int(QDir::Files) + << 3813; + + QTest::newRow("executables") << QStringList("*") + << int(QDir::Executable | QDir::Files | QDir::AllDirs | QDir::NoDotAndDotDot) + << 543; + } + + void fileSearch() const + { + QFETCH(QStringList, nameFilters); + QFETCH(int, filter); + QFETCH(int, entryCount); + + int count = 0; + QBENCHMARK { + // Recursive directory iteration + QDirIterator iterator(prefix, nameFilters, QDir::Filter(filter), + QDirIterator::Subdirectories | QDirIterator::FollowSymlinks); + + count = 0; + while (iterator.hasNext()) { + iterator.next(); + ++count; + } + + QCOMPARE(count, entryCount); + } + + QCOMPARE(count, entryCount); + } + + void traverseDirectory() const + { + int count = 0; + QBENCHMARK { + QDirIterator iterator(prefix, + QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden | QDir::System, + QDirIterator::Subdirectories | QDirIterator::FollowSymlinks); + + while (iterator.hasNext()) { + iterator.next(); + ++count; + } + + QCOMPARE(count, 11963); + } + + QCOMPARE(count, 11963); + } + +private: + FileSystem fs; +}; + +QTEST_MAIN(bench_QDir_tree) +#include "bench_qdir_tree.moc" diff --git a/tests/benchmarks/corelib/io/qdir/tree/bench_qdir_tree.qrc b/tests/benchmarks/corelib/io/qdir/tree/bench_qdir_tree.qrc new file mode 100644 index 0000000..d57cb6c --- /dev/null +++ b/tests/benchmarks/corelib/io/qdir/tree/bench_qdir_tree.qrc @@ -0,0 +1,5 @@ +<!DOCTYPE RCC><RCC version="1.0"> +<qresource> + <file>4.6.0-list.txt</file> +</qresource> +</RCC> diff --git a/tests/benchmarks/corelib/io/qdir/tree/tree.pro b/tests/benchmarks/corelib/io/qdir/tree/tree.pro new file mode 100644 index 0000000..773f0f7 --- /dev/null +++ b/tests/benchmarks/corelib/io/qdir/tree/tree.pro @@ -0,0 +1,11 @@ +load(qttest_p4) +TEMPLATE = app +TARGET = bench_qdir_tree +DEPENDPATH += . +INCLUDEPATH += . + +# Input +SOURCES += bench_qdir_tree.cpp +RESOURCES += bench_qdir_tree.qrc + +QT -= gui diff --git a/tests/benchmarks/corelib/io/qfileinfo/qfileinfo.pro b/tests/benchmarks/corelib/io/qfileinfo/qfileinfo.pro index 295cb50..eca619f 100644 --- a/tests/benchmarks/corelib/io/qfileinfo/qfileinfo.pro +++ b/tests/benchmarks/corelib/io/qfileinfo/qfileinfo.pro @@ -1,6 +1,6 @@ load(qttest_p4) TEMPLATE = app -TARGET = qfileinfo +TARGET = tst_qfileinfo DEPENDPATH += . INCLUDEPATH += . diff --git a/tests/benchmarks/corelib/kernel/kernel.pro b/tests/benchmarks/corelib/kernel/kernel.pro index 91cf3c5..da3f0d6 100644 --- a/tests/benchmarks/corelib/kernel/kernel.pro +++ b/tests/benchmarks/corelib/kernel/kernel.pro @@ -2,5 +2,6 @@ TEMPLATE = subdirs SUBDIRS = \ events \ qmetaobject \ + qmetatype \ qobject \ qvariant diff --git a/tests/benchmarks/corelib/kernel/qmetatype/qmetatype.pro b/tests/benchmarks/corelib/kernel/qmetatype/qmetatype.pro new file mode 100644 index 0000000..80f9a2a --- /dev/null +++ b/tests/benchmarks/corelib/kernel/qmetatype/qmetatype.pro @@ -0,0 +1,7 @@ +load(qttest_p4) +QT = core +TEMPLATE = app +TARGET = tst_qmetatype + +SOURCES += tst_qmetatype.cpp + diff --git a/tests/benchmarks/corelib/kernel/qmetatype/tst_qmetatype.cpp b/tests/benchmarks/corelib/kernel/qmetatype/tst_qmetatype.cpp new file mode 100644 index 0000000..36399af --- /dev/null +++ b/tests/benchmarks/corelib/kernel/qmetatype/tst_qmetatype.cpp @@ -0,0 +1,233 @@ +/**************************************************************************** +** +** 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 test suite 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 <qtest.h> +#include <QtCore/qmetatype.h> + +//TESTED_FILES= + +class tst_QMetaType : public QObject +{ + Q_OBJECT + +public: + tst_QMetaType(); + virtual ~tst_QMetaType(); + +private slots: + void typeBuiltin_data(); + void typeBuiltin(); + void typeBuiltinNotNormalized_data(); + void typeBuiltinNotNormalized(); + void typeCustom(); + void typeCustomNotNormalized(); + void typeNotRegistered(); + void typeNotRegisteredNotNormalized(); + + void typeNameBuiltin_data(); + void typeNameBuiltin(); + void typeNameCustom(); + void typeNameNotRegistered(); + + void isRegisteredBuiltin_data(); + void isRegisteredBuiltin(); + void isRegisteredCustom(); + void isRegisteredNotRegistered(); +}; + +tst_QMetaType::tst_QMetaType() +{ +} + +tst_QMetaType::~tst_QMetaType() +{ +} + +void tst_QMetaType::typeBuiltin_data() +{ + QTest::addColumn<QByteArray>("typeName"); + for (int i = 0; i < QMetaType::User; ++i) { + const char *name = QMetaType::typeName(i); + if (name) + QTest::newRow(name) << QByteArray(name); + } +} + +void tst_QMetaType::typeBuiltin() +{ + QFETCH(QByteArray, typeName); + const char *nm = typeName.constData(); + QBENCHMARK { + for (int i = 0; i < 100000; ++i) + QMetaType::type(nm); + } +} + +void tst_QMetaType::typeBuiltinNotNormalized_data() +{ + QTest::addColumn<QByteArray>("typeName"); + for (int i = 0; i < QMetaType::User; ++i) { + const char *name = QMetaType::typeName(i); + if (name) + QTest::newRow(name) << QByteArray(name).append(" "); + } +} + +void tst_QMetaType::typeBuiltinNotNormalized() +{ + QFETCH(QByteArray, typeName); + const char *nm = typeName.constData(); + QBENCHMARK { + for (int i = 0; i < 10000; ++i) + QMetaType::type(nm); + } +} + +struct Foo { int i; }; + +void tst_QMetaType::typeCustom() +{ + qRegisterMetaType<Foo>("Foo"); + QBENCHMARK { + for (int i = 0; i < 10000; ++i) + QMetaType::type("Foo"); + } +} + +void tst_QMetaType::typeCustomNotNormalized() +{ + qRegisterMetaType<Foo>("Foo"); + QBENCHMARK { + for (int i = 0; i < 10000; ++i) + QMetaType::type("Foo "); + } +} + +void tst_QMetaType::typeNotRegistered() +{ + Q_ASSERT(QMetaType::type("Bar") == 0); + QBENCHMARK { + for (int i = 0; i < 10000; ++i) + QMetaType::type("Bar"); + } +} + +void tst_QMetaType::typeNotRegisteredNotNormalized() +{ + Q_ASSERT(QMetaType::type("Bar") == 0); + QBENCHMARK { + for (int i = 0; i < 10000; ++i) + QMetaType::type("Bar "); + } +} + +void tst_QMetaType::typeNameBuiltin_data() +{ + QTest::addColumn<int>("type"); + for (int i = 0; i < QMetaType::User; ++i) { + const char *name = QMetaType::typeName(i); + if (name) + QTest::newRow(name) << i; + } +} + +void tst_QMetaType::typeNameBuiltin() +{ + QFETCH(int, type); + QBENCHMARK { + for (int i = 0; i < 500000; ++i) + QMetaType::typeName(type); + } +} + +void tst_QMetaType::typeNameCustom() +{ + int type = qRegisterMetaType<Foo>("Foo"); + QBENCHMARK { + for (int i = 0; i < 100000; ++i) + QMetaType::typeName(type); + } +} + +void tst_QMetaType::typeNameNotRegistered() +{ + // We don't care much about this case, but test it anyway. + Q_ASSERT(QMetaType::typeName(-1) == 0); + QBENCHMARK { + for (int i = 0; i < 500000; ++i) + QMetaType::typeName(-1); + } +} + +void tst_QMetaType::isRegisteredBuiltin_data() +{ + typeNameBuiltin_data(); +} + +void tst_QMetaType::isRegisteredBuiltin() +{ + QFETCH(int, type); + QBENCHMARK { + for (int i = 0; i < 500000; ++i) + QMetaType::isRegistered(type); + } +} + +void tst_QMetaType::isRegisteredCustom() +{ + int type = qRegisterMetaType<Foo>("Foo"); + QBENCHMARK { + for (int i = 0; i < 100000; ++i) + QMetaType::isRegistered(type); + } +} + +void tst_QMetaType::isRegisteredNotRegistered() +{ + Q_ASSERT(QMetaType::typeName(-1) == 0); + QBENCHMARK { + for (int i = 0; i < 100000; ++i) + QMetaType::isRegistered(-1); + } +} + +QTEST_MAIN(tst_QMetaType) +#include "tst_qmetatype.moc" diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/main.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/main.cpp index b904f40..2c1274c 100644 --- a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/main.cpp +++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/main.cpp @@ -751,7 +751,7 @@ int main(int argc, char *argv[]) aargv[aargc++] = argv[i]; } - QApplication app(argc, argv); + QApplication app(aargc, aargv); int returnValue = 0; if (settings.options() & Settings::ManualTest) { diff --git a/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp b/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp index 1028f42..6c4ca08 100644 --- a/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp +++ b/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp @@ -42,7 +42,14 @@ #include "view.h" #include <QtGui> + +#ifdef Q_WS_WIN +#define CALLGRIND_START_INSTRUMENTATION {} +#define CALLGRIND_STOP_INSTRUMENTATION {} +#else #include "valgrind/callgrind.h" +#endif + #ifndef QT_NO_OPENGL #include <QtOpenGL> #endif diff --git a/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/moveItems/main.cpp b/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/moveItems/main.cpp index 527713f..63b0da9 100644 --- a/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/moveItems/main.cpp +++ b/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/moveItems/main.cpp @@ -39,7 +39,13 @@ ** ****************************************************************************/ #include <QtGui> + +#ifdef Q_WS_WIN +#define CALLGRIND_START_INSTRUMENTATION {} +#define CALLGRIND_STOP_INSTRUMENTATION {} +#else #include "valgrind/callgrind.h" +#endif #ifdef Q_WS_X11 extern void qt_x11_wait_for_window_manager(QWidget *); diff --git a/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/scrolltest/main.cpp b/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/scrolltest/main.cpp index 7419206..3f30393 100644 --- a/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/scrolltest/main.cpp +++ b/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/scrolltest/main.cpp @@ -39,7 +39,13 @@ ** ****************************************************************************/ #include <QtGui> + +#ifdef Q_WS_WIN +#define CALLGRIND_START_INSTRUMENTATION {} +#define CALLGRIND_STOP_INSTRUMENTATION {} +#else #include "valgrind/callgrind.h" +#endif class ItemMover : public QObject { diff --git a/tests/benchmarks/gui/kernel/qwidget/tst_qwidget.cpp b/tests/benchmarks/gui/kernel/qwidget/tst_qwidget.cpp index f21bd44..8c30be4 100644 --- a/tests/benchmarks/gui/kernel/qwidget/tst_qwidget.cpp +++ b/tests/benchmarks/gui/kernel/qwidget/tst_qwidget.cpp @@ -42,33 +42,35 @@ #include <qtest.h> #include <QtGui> -class tst_QWidget : public QObject +static void processEvents() { - Q_OBJECT - - -private slots: - void update_data(); - void updateOpaque_data(); - void updateOpaque(); - void updateTransparent_data(); - void updateTransparent(); - void updatePartial_data(); - void updatePartial(); - void updateComplex_data(); - void updateComplex(); - - void complexToplevelResize(); -}; + QApplication::flush(); + QApplication::processEvents(); + QApplication::processEvents(); +} class UpdateWidget : public QWidget { public: - UpdateWidget(int rows, int columns) : QWidget(0) + UpdateWidget(int rows, int columns) + : QWidget(0), rowCount(0), columnCount(0), opaqueChildren(false) { + fill(rows, columns); + } + + UpdateWidget(QWidget *parent = 0) + : QWidget(parent), rowCount(0), columnCount(0), opaqueChildren(false) {} + + void fill(int rows, int columns) + { + if (rows == rowCount && columns == columnCount) + return; + delete layout(); QGridLayout *layout = new QGridLayout; - for (int row = 0; row < rows; ++row) { - for (int column = 0; column < columns; ++column) { + rowCount = rows; + columnCount = columns; + for (int row = 0; row < rowCount; ++row) { + for (int column = 0; column < columnCount; ++column) { UpdateWidget *widget = new UpdateWidget; widget->setFixedSize(20, 20); layout->addWidget(widget, row, column); @@ -76,9 +78,20 @@ public: } } setLayout(layout); + adjustSize(); + QTest::qWait(250); + processEvents(); } - UpdateWidget(QWidget *parent = 0) : QWidget(parent) {} + void setOpaqueChildren(bool enable) + { + if (opaqueChildren != enable) { + foreach (QWidget *w, children) + w->setAttribute(Qt::WA_OpaquePaintEvent, enable); + opaqueChildren = enable; + processEvents(); + } + } void paintEvent(QPaintEvent *) { @@ -93,75 +106,86 @@ public: QRegion updateRegion; QList<UpdateWidget*> children; + int rowCount; + int columnCount; + bool opaqueChildren; }; -void tst_QWidget::update_data() +class tst_QWidget : public QObject { - QTest::addColumn<int>("rows"); - QTest::addColumn<int>("columns"); - QTest::addColumn<int>("numUpdates"); - - QTest::newRow("10x10x1") << 10 << 10 << 1; - QTest::newRow("10x10x10") << 10 << 10 << 10; - QTest::newRow("25x25x1") << 25 << 25 << 1; - QTest::newRow("25x25x10") << 25 << 25 << 10; - QTest::newRow("25x25x100") << 25 << 25 << 100; -} + Q_OBJECT -void tst_QWidget::updateOpaque_data() -{ - update_data(); -} +public slots: + void initTestCase(); + void init(); -void tst_QWidget::updateOpaque() -{ - QFETCH(int, rows); - QFETCH(int, columns); - QFETCH(int, numUpdates); +private slots: + void update_data(); + void update(); + void updatePartial_data(); + void updatePartial(); + void updateComplex_data(); + void updateComplex(); - UpdateWidget widget(rows, columns); - foreach (QWidget *w, widget.children) { - w->setAttribute(Qt::WA_OpaquePaintEvent); - } +private: + UpdateWidget widget; +}; +void tst_QWidget::initTestCase() +{ widget.show(); - QApplication::processEvents(); + QTest::qWaitForWindowShown(&widget); + QTest::qWait(300); + processEvents(); +} - int i = 0; - const int n = widget.children.size(); - QBENCHMARK { - for (int j = 0; j < numUpdates; ++j) { - widget.children[i]->update(); - QApplication::processEvents(); - i = (i + 1) % n; - } - } +void tst_QWidget::init() +{ + QVERIFY(widget.isVisible()); + for (int i = 0; i < 3; ++i) + processEvents(); } -void tst_QWidget::updateTransparent_data() +void tst_QWidget::update_data() { - update_data(); + QTest::addColumn<int>("rows"); + QTest::addColumn<int>("columns"); + QTest::addColumn<int>("numUpdates"); + QTest::addColumn<bool>("opaque"); + + QTest::newRow("10x10x1 transparent") << 10 << 10 << 1 << false; + QTest::newRow("10x10x10 transparent") << 10 << 10 << 10 << false; + QTest::newRow("10x10x100 transparent") << 10 << 10 << 100 << false; + QTest::newRow("10x10x1 opaque") << 10 << 10 << 1 << true; + QTest::newRow("10x10x10 opaque") << 10 << 10 << 10 << true; + QTest::newRow("10x10x100 opaque") << 10 << 10 << 100 << true; + QTest::newRow("25x25x1 transparent ") << 25 << 25 << 1 << false; + QTest::newRow("25x25x10 transparent") << 25 << 25 << 10 << false; + QTest::newRow("25x25x100 transparent") << 25 << 25 << 100 << false; + QTest::newRow("25x25x1 opaque") << 25 << 25 << 1 << true; + QTest::newRow("25x25x10 opaque") << 25 << 25 << 10 << true; + QTest::newRow("25x25x100 opaque") << 25 << 25 << 100 << true; } -void tst_QWidget::updateTransparent() +void tst_QWidget::update() { QFETCH(int, rows); QFETCH(int, columns); QFETCH(int, numUpdates); + QFETCH(bool, opaque); - UpdateWidget widget(rows, columns); - widget.show(); - QApplication::processEvents(); + widget.fill(rows, columns); + widget.setOpaqueChildren(opaque); - int i = 0; - const int n = widget.children.size(); QBENCHMARK { - for (int j = 0; j < numUpdates; ++j) { - widget.children[i]->update(); + for (int i = 0; i < widget.children.size(); ++i) { + for (int j = 0; j < numUpdates; ++j) + widget.children.at(i)->update(); QApplication::processEvents(); - i = (i + 1) % n; } } + + QApplication::flush(); } void tst_QWidget::updatePartial_data() @@ -174,24 +198,23 @@ void tst_QWidget::updatePartial() QFETCH(int, rows); QFETCH(int, columns); QFETCH(int, numUpdates); + QFETCH(bool, opaque); - UpdateWidget widget(rows, columns); - widget.show(); - QApplication::processEvents(); + widget.fill(rows, columns); + widget.setOpaqueChildren(opaque); - int i = 0; - const int n = widget.children.size(); QBENCHMARK { - for (int j = 0; j < numUpdates; ++j) { + for (int i = 0; i < widget.children.size(); ++i) { QWidget *w = widget.children[i]; const int x = w->width() / 2; const int y = w->height() / 2; - w->update(0, 0, x, y); - w->update(x, 0, x, y); - w->update(0, y, x, y); - w->update(x, y, x, y); + for (int j = 0; j < numUpdates; ++j) { + w->update(0, 0, x, y); + w->update(x, 0, x, y); + w->update(0, y, x, y); + w->update(x, y, x, y); + } QApplication::processEvents(); - i = (i + 1) % n; } } } @@ -206,127 +229,27 @@ void tst_QWidget::updateComplex() QFETCH(int, rows); QFETCH(int, columns); QFETCH(int, numUpdates); + QFETCH(bool, opaque); - UpdateWidget widget(rows, columns); - widget.show(); - QApplication::processEvents(); + widget.fill(rows, columns); + widget.setOpaqueChildren(opaque); - int i = 0; - const int n = widget.children.size(); QBENCHMARK { - for (int j = 0; j < numUpdates; ++j) { + for (int i = 0; i < widget.children.size(); ++i) { QWidget *w = widget.children[i]; const int x = w->width() / 2; const int y = w->height() / 2; - w->update(QRegion(0, 0, x, y, QRegion::Ellipse)); - w->update(QRegion(x, y, x, y, QRegion::Ellipse)); + QRegion r1(0, 0, x, y, QRegion::Ellipse); + QRegion r2(x, y, x, y, QRegion::Ellipse); + for (int j = 0; j < numUpdates; ++j) { + w->update(r1); + w->update(r2); + } QApplication::processEvents(); - i = (i + 1) % n; } } } -class ResizeWidget : public QWidget -{ -public: - ResizeWidget(); -}; - -ResizeWidget::ResizeWidget() : QWidget(0) -{ - QBoxLayout *topLayout = new QVBoxLayout; - - QMenuBar *menubar = new QMenuBar; - QMenu* popup = menubar->addMenu("&File"); - popup->addAction("&Quit", qApp, SLOT(quit())); - topLayout->setMenuBar(menubar); - - QBoxLayout *buttons = new QHBoxLayout; - buttons->setMargin(5); - buttons->addStretch(10); - for (int i = 1; i <= 4; i++ ) { - QPushButton* button = new QPushButton; - button->setText(QString("Button %1").arg(i)); - buttons->addWidget(button); - } - topLayout->addLayout(buttons); - - buttons = new QHBoxLayout; - buttons->addStretch(10); - for (int i = 11; i <= 16; i++) { - QPushButton* button = new QPushButton; - button->setText(QString("Button %1").arg(i)); - buttons->addWidget(button); - } - topLayout->addLayout(buttons); - - QBoxLayout *buttons2 = new QHBoxLayout; - buttons2->addStretch(10); - topLayout->addLayout(buttons2); - - QPushButton *button = new QPushButton; - button->setText("Button five"); - buttons2->addWidget(button); - - button = new QPushButton; - button->setText("Button 6"); - buttons2->addWidget(button); - - QTextEdit *bigWidget = new QTextEdit; - bigWidget->setText("This widget will get all the remaining space"); - bigWidget->setFrameStyle(QFrame::Panel | QFrame::Plain); - topLayout->addWidget(bigWidget); - - const int numRows = 6; - const int labelCol = 0; - const int linedCol = 1; - const int multiCol = 2; - - QGridLayout *grid = new QGridLayout; - for (int row = 0; row < numRows; row++) { - QLineEdit *lineEdit = new QLineEdit; - grid->addWidget(lineEdit, row, linedCol); - QLabel *label = new QLabel(QString("Line &%1").arg(row + 1)); - grid->addWidget(label, row, labelCol); - } - topLayout->addLayout(grid); - - QTextEdit *multiLineEdit = new QTextEdit; - grid->addWidget(multiLineEdit, 0, labelCol + 1, multiCol, multiCol); - - grid->setColumnStretch(linedCol, 10); - grid->setColumnStretch(multiCol, 20); - - QLabel* statusBar = new QLabel; - statusBar->setText("Let's pretend this is a status bar"); - statusBar->setFrameStyle(QFrame::Panel | QFrame::Sunken); - statusBar->setFixedHeight(statusBar->sizeHint().height()); - statusBar->setAlignment(Qt::AlignVCenter | Qt::AlignLeft); - topLayout->addWidget(statusBar); - - topLayout->activate(); - setLayout(topLayout); -} - -void tst_QWidget::complexToplevelResize() -{ - ResizeWidget w; - w.show(); - - QApplication::processEvents(); - - const int minSize = 100; - const int maxSize = 800; - int size = minSize; - - QBENCHMARK { - w.resize(size, size); - size = qMax(minSize, (size + 10) % maxSize); - QApplication::processEvents(); - QApplication::processEvents(); - } -} - QTEST_MAIN(tst_QWidget) #include "tst_qwidget.moc" diff --git a/tests/benchmarks/gui/styles/qstylesheetstyle/main.cpp b/tests/benchmarks/gui/styles/qstylesheetstyle/main.cpp index 226b661..d051b12 100644 --- a/tests/benchmarks/gui/styles/qstylesheetstyle/main.cpp +++ b/tests/benchmarks/gui/styles/qstylesheetstyle/main.cpp @@ -82,6 +82,7 @@ void tst_qstylesheetstyle::empty() { QWidget *w = buildSimpleWidgets(); w->setStyleSheet("/* */"); + QApplication::processEvents(); int i = 0; QBENCHMARK { w->setStyleSheet("/*" + QString::number(i) + "*/"); @@ -94,6 +95,7 @@ void tst_qstylesheetstyle::empty_events() { QWidget *w = buildSimpleWidgets(); w->setStyleSheet("/* */"); + QApplication::processEvents(); int i = 0; QBENCHMARK { w->setStyleSheet("/*" + QString::number(i) + "*/"); @@ -112,6 +114,7 @@ void tst_qstylesheetstyle::simple() { QWidget *w = buildSimpleWidgets(); w->setStyleSheet("/* */"); + QApplication::processEvents(); int i = 0; QBENCHMARK { w->setStyleSheet(QString(simple_css) + "/*" + QString::number(i) + "*/"); @@ -124,6 +127,7 @@ void tst_qstylesheetstyle::simple_events() { QWidget *w = buildSimpleWidgets(); w->setStyleSheet("/* */"); + QApplication::processEvents(); int i = 0; QBENCHMARK { w->setStyleSheet(QString(simple_css) + "/*" + QString::number(i) + "*/"); @@ -175,8 +179,13 @@ void tst_qstylesheetstyle::grid() w->setStyleSheet("/* */"); if(show) { w->show(); + QTest::qWaitForWindowShown(w); + QApplication::flush(); + QApplication::processEvents(); QTest::qWait(30); + QApplication::processEvents(); } + QApplication::processEvents(); int i = 0; QBENCHMARK { w->setStyleSheet(stylesheet + "/*" + QString::number(i) + "*/"); diff --git a/tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/qfile_vs_qnetworkaccessmanager.pro b/tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/qfile_vs_qnetworkaccessmanager.pro index 99d1935..89f5d31 100644 --- a/tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/qfile_vs_qnetworkaccessmanager.pro +++ b/tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/qfile_vs_qnetworkaccessmanager.pro @@ -1,6 +1,6 @@ load(qttest_p4) TEMPLATE = app -TARGET = qfile_vs_qnetworkaccessmanager +TARGET = tst_qfile_vs_qnetworkaccessmanager DEPENDPATH += . INCLUDEPATH += . diff --git a/tests/benchmarks/script/qscriptvalue/tst_qscriptvalue.cpp b/tests/benchmarks/script/qscriptvalue/tst_qscriptvalue.cpp index 3bfc21c..d7bb04b 100644 --- a/tests/benchmarks/script/qscriptvalue/tst_qscriptvalue.cpp +++ b/tests/benchmarks/script/qscriptvalue/tst_qscriptvalue.cpp @@ -69,6 +69,8 @@ private slots: void property(); void setProperty(); void propertyFlags(); + void readMetaProperty(); + void writeMetaProperty(); }; tst_QScriptValue::tst_QScriptValue() @@ -201,5 +203,28 @@ void tst_QScriptValue::propertyFlags() } } +void tst_QScriptValue::readMetaProperty() +{ + QScriptEngine engine; + QScriptValue object = engine.newQObject(QCoreApplication::instance()); + QScriptString propertyName = engine.toStringHandle("objectName"); + QBENCHMARK { + for (int i = 0; i < 10000; ++i) + object.property(propertyName); + } +} + +void tst_QScriptValue::writeMetaProperty() +{ + QScriptEngine engine; + QScriptValue object = engine.newQObject(QCoreApplication::instance()); + QScriptString propertyName = engine.toStringHandle("objectName"); + QScriptValue value(&engine, "foo"); + QBENCHMARK { + for (int i = 0; i < 10000; ++i) + object.setProperty(propertyName, value); + } +} + QTEST_MAIN(tst_QScriptValue) #include "tst_qscriptvalue.moc" diff --git a/tools/assistant/lib/qhelpsearchresultwidget.cpp b/tools/assistant/lib/qhelpsearchresultwidget.cpp index 8e476d5..2f5489b 100644 --- a/tools/assistant/lib/qhelpsearchresultwidget.cpp +++ b/tools/assistant/lib/qhelpsearchresultwidget.cpp @@ -304,7 +304,7 @@ private: last = resultLastToShow > count ? count : resultLastToShow; } } - hitsLabel->setText(QHelpSearchResultWidget::tr("%1 - %2 of %3 Hits").arg(first).arg(last).arg(count)); + hitsLabel->setText(QHelpSearchResultWidget::tr("%1 - %2 of %n Hits", 0, count).arg(first).arg(last)); } private: diff --git a/tools/assistant/tools/assistant/bookmarkmanager.cpp b/tools/assistant/tools/assistant/bookmarkmanager.cpp index 70f562e..b9a1b0e 100644 --- a/tools/assistant/tools/assistant/bookmarkmanager.cpp +++ b/tools/assistant/tools/assistant/bookmarkmanager.cpp @@ -148,7 +148,7 @@ void BookmarkManager::takeBookmarksMenu(QMenu* menu) void BookmarkManager::addBookmark(const QString &title, const QString &url) { TRACE_OBJ - showBookmarkDialog(title.isEmpty() ? tr("Untiled") : title, + showBookmarkDialog(title.isEmpty() ? tr("Untitled") : title, url.isEmpty() ? QLatin1String("about:blank") : url); } diff --git a/tools/assistant/tools/assistant/cmdlineparser.cpp b/tools/assistant/tools/assistant/cmdlineparser.cpp index bbc0c37..b6c0beb 100644 --- a/tools/assistant/tools/assistant/cmdlineparser.cpp +++ b/tools/assistant/tools/assistant/cmdlineparser.cpp @@ -167,10 +167,10 @@ void CmdLineParser::handleCollectionFileOption() const QString &fileName = nextArg(); m_collectionFile = getFileName(fileName); if (m_collectionFile.isEmpty()) - m_error = tr("The collection file '%1' does not exist!"). + m_error = tr("The collection file '%1' does not exist."). arg(fileName); } else { - m_error = tr("Missing collection file!"); + m_error = tr("Missing collection file."); } } @@ -183,9 +183,9 @@ void CmdLineParser::handleShowUrlOption() if (url.isValid()) { m_url = url; } else - m_error = tr("Invalid URL '%1'!").arg(urlString); + m_error = tr("Invalid URL '%1'.").arg(urlString); } else { - m_error = tr("Missing URL!"); + m_error = tr("Missing URL."); } } @@ -223,7 +223,7 @@ void CmdLineParser::handleShowOrHideOrActivateOption(ShowState state) else m_error = tr("Unknown widget: %1").arg(widget); } else { - m_error = tr("Missing widget!"); + m_error = tr("Missing widget."); } } @@ -246,11 +246,11 @@ void CmdLineParser::handleRegisterOrUnregisterOption(RegisterState state) const QString &fileName = nextArg(); m_helpFile = getFileName(fileName); if (m_helpFile.isEmpty()) - m_error = tr("The Qt help file '%1' does not exist!").arg(fileName); + m_error = tr("The Qt help file '%1' does not exist.").arg(fileName); else m_register = state; } else { - m_error = tr("Missing help file!"); + m_error = tr("Missing help file."); } } @@ -260,7 +260,7 @@ void CmdLineParser::handleSetCurrentFilterOption() if (hasMoreArgs()) m_currentFilter = nextArg(); else - m_error = tr("Missing filter argument!"); + m_error = tr("Missing filter argument."); } QString CmdLineParser::getFileName(const QString &fileName) diff --git a/tools/assistant/tools/assistant/helpviewer.h b/tools/assistant/tools/assistant/helpviewer.h index 0bfe904..9e8f5f4 100644 --- a/tools/assistant/tools/assistant/helpviewer.h +++ b/tools/assistant/tools/assistant/helpviewer.h @@ -53,7 +53,7 @@ class AbstractHelpViewer { public: AbstractHelpViewer(); - ~AbstractHelpViewer(); + virtual ~AbstractHelpViewer(); virtual QFont viewerFont() const = 0; virtual void setViewerFont(const QFont &font) = 0; diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index 0ff7301..6b7740e 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -249,6 +249,7 @@ Configure::Configure( int& argc, char** argv ) dictionary[ "MULTIMEDIA" ] = "yes"; dictionary[ "AUDIO_BACKEND" ] = "auto"; dictionary[ "MEDIASERVICE"] = "auto"; + dictionary[ "WMSDK" ] = "auto"; dictionary[ "DIRECTSHOW" ] = "no"; dictionary[ "WEBKIT" ] = "auto"; dictionary[ "DECLARATIVE" ] = "auto"; @@ -1592,6 +1593,7 @@ bool Configure::displayHelp() "[-qtnamespace <namespace>] [-qtlibinfix <infix>] [-no-phonon]\n" "[-phonon] [-no-phonon-backend] [-phonon-backend]\n" "[-no-multimedia] [-multimedia] [-no-audio-backend] [-audio-backend]\n" + "[-no-mediaservice] [-mediaservice]\n" "[-no-script] [-script] [-no-scripttools] [-scripttools]\n" "[-no-webkit] [-webkit] [-graphicssystem raster|opengl|openvg]\n\n", 0, 7); @@ -2077,6 +2079,8 @@ bool Configure::checkAvailability(const QString &part) if (!findFile("msdmo.lib")) cout << "msdmo.lib not found" << endl; if (!findFile("d3d9.h")) cout << "d3d9.h not found" << endl; } + } else if (part == "WMSDK") { + available = findFile("wmsdk.h"); } else if (part == "MULTIMEDIA" || part == "SCRIPT" || part == "SCRIPTTOOLS") { available = true; } else if (part == "WEBKIT") { @@ -2221,6 +2225,8 @@ void Configure::autoDetection() dictionary["AUDIO_BACKEND"] = checkAvailability("AUDIO_BACKEND") ? "yes" : "no"; if (dictionary["MEDIASERVICE"] == "auto") dictionary["MEDIASERVICE"] = checkAvailability("MEDIASERVICE") ? "yes" : "no"; + if (dictionary["WMSDK"] == "auto") + dictionary["WMSDK"] = checkAvailability("WMSDK") ? "yes" : "no"; // Qt/WinCE remote test application if (dictionary["CETEST"] == "auto") @@ -2611,8 +2617,11 @@ void Configure::generateOutputVars() qtConfig += "multimedia"; if (dictionary["AUDIO_BACKEND"] == "yes") qtConfig += "audio-backend"; - if (dictionary["MEDIASERVICE"] == "yes") + if (dictionary["MEDIASERVICE"] == "yes") { qtConfig += "mediaservice"; + if (dictionary["WMSDK"] == "yes") + qtConfig += "wmsdk"; + } } if (dictionary["WEBKIT"] == "yes") @@ -3723,7 +3732,7 @@ void Configure::generateMakefiles() QTextStream txt(&file); txt << "all:\n"; txt << "\t" << args.join(" ") << "\n"; - txt << "\t" << dictionary[ "MAKE" ] << " -f " << it->target << "\n"; + txt << "\t\"$(MAKE)\" -$(MAKEFLAGS) -f " << it->target << "\n"; txt << "first: all\n"; txt << "qmake:\n"; txt << "\t" << args.join(" ") << "\n"; diff --git a/tools/qdoc3/atom.cpp b/tools/qdoc3/atom.cpp index 6920e9d..88f44ea 100644 --- a/tools/qdoc3/atom.cpp +++ b/tools/qdoc3/atom.cpp @@ -133,7 +133,7 @@ QString Atom::UPPERROMAN_ ("upperroman"); \value ParaLeft \value ParaRight \value Qml - \value QDeclarativeText + \value QmlText \value QuotationLeft \value QuotationRight \value RawString @@ -210,7 +210,7 @@ static const struct { { "ParaRight", Atom::ParaRight }, #ifdef QDOC_QML { "Qml", Atom::Qml}, - { "QDeclarativeText", Atom::QDeclarativeText }, + { "QmlText", Atom::QmlText }, #endif { "QuotationLeft", Atom::QuotationLeft }, { "QuotationRight", Atom::QuotationRight }, diff --git a/tools/qdoc3/atom.h b/tools/qdoc3/atom.h index d13afbc..70fbae9 100644 --- a/tools/qdoc3/atom.h +++ b/tools/qdoc3/atom.h @@ -103,7 +103,7 @@ class Atom ParaRight, #ifdef QDOC_QML Qml, - QDeclarativeText, + QmlText, #endif QuotationLeft, QuotationRight, diff --git a/tools/qdoc3/codemarker.cpp b/tools/qdoc3/codemarker.cpp index 48e9341..15f2c2d 100644 --- a/tools/qdoc3/codemarker.cpp +++ b/tools/qdoc3/codemarker.cpp @@ -290,13 +290,13 @@ QString CodeMarker::taggedQmlNode(const Node* node) { QString tag; switch (node->type()) { - case Node::QDeclarativeProperty: + case Node::QmlProperty: tag = QLatin1String("@property"); break; - case Node::QDeclarativeSignal: + case Node::QmlSignal: tag = QLatin1String("@signal"); break; - case Node::QDeclarativeMethod: + case Node::QmlMethod: tag = QLatin1String("@method"); break; default: @@ -369,7 +369,7 @@ void CodeMarker::insert(FastSection &fastSection, bool inheritedMember = false; if (!node->relates()) { if (node->parent() != (const InnerNode*)fastSection.innerNode) { - if (node->type() != Node::QDeclarativeProperty) + if (node->type() != Node::QmlProperty) inheritedMember = true; } } @@ -612,9 +612,9 @@ QString CodeMarker::macName(const Node *node, const QString &name) #ifdef QDOC_QML /*! Get the list of documentation sections for the children of - the specified QDeclarativeClassNode. + the specified QmlClassNode. */ -QList<Section> CodeMarker::qmlSections(const QDeclarativeClassNode* , SynopsisStyle ) +QList<Section> CodeMarker::qmlSections(const QmlClassNode* , SynopsisStyle ) { return QList<Section>(); } diff --git a/tools/qdoc3/codemarker.h b/tools/qdoc3/codemarker.h index 9e754a2..1b21753 100644 --- a/tools/qdoc3/codemarker.h +++ b/tools/qdoc3/codemarker.h @@ -138,7 +138,7 @@ class CodeMarker SynopsisStyle style, Status status) = 0; #ifdef QDOC_QML - virtual QList<Section> qmlSections(const QDeclarativeClassNode* qmlClassNode, + virtual QList<Section> qmlSections(const QmlClassNode* qmlClassNode, SynopsisStyle style); #endif virtual const Node *resolveTarget(const QString& target, diff --git a/tools/qdoc3/cppcodemarker.cpp b/tools/qdoc3/cppcodemarker.cpp index ff09bb7..3ff6ebe 100644 --- a/tools/qdoc3/cppcodemarker.cpp +++ b/tools/qdoc3/cppcodemarker.cpp @@ -145,7 +145,7 @@ QString CppCodeMarker::plainFullName(const Node *node, const Node *relative) } else { QString fullName; - for (;;) { + while (node) { fullName.prepend(plainName(node)); if (node->parent() == relative || node->parent()->name().isEmpty()) break; @@ -194,8 +194,8 @@ QString CppCodeMarker::markedUpSynopsis(const Node *node, synopsis = "class " + name; break; case Node::Function: - case Node::QDeclarativeSignal: - case Node::QDeclarativeMethod: + case Node::QmlSignal: + case Node::QmlMethod: func = (const FunctionNode *) node; if (style != SeparateList && !func->returnType().isEmpty()) synopsis = typified(func->returnType()) + " "; @@ -355,15 +355,15 @@ QString CppCodeMarker::markedUpQmlItem(const Node* node, bool summary) QString name = taggedQmlNode(node); if (summary) { name = linkTag(node,name); - } else if (node->type() == Node::QDeclarativeProperty) { - const QDeclarativePropertyNode* pn = static_cast<const QDeclarativePropertyNode*>(node); + } else if (node->type() == Node::QmlProperty) { + const QmlPropertyNode* pn = static_cast<const QmlPropertyNode*>(node); if (pn->isAttached()) name.prepend(pn->element() + QLatin1Char('.')); } name = "<@name>" + name + "</@name>"; QString synopsis = name; - if (node->type() == Node::QDeclarativeProperty) { - const QDeclarativePropertyNode* pn = static_cast<const QDeclarativePropertyNode*>(node); + if (node->type() == Node::QmlProperty) { + const QmlPropertyNode* pn = static_cast<const QmlPropertyNode*>(node); synopsis += " : " + typified(pn->dataType()); } @@ -1108,7 +1108,7 @@ QString CppCodeMarker::addMarkUp(const QString& protectedCode, Currently, it only handles QML property groups. */ -QList<Section> CppCodeMarker::qmlSections(const QDeclarativeClassNode* qmlClassNode, +QList<Section> CppCodeMarker::qmlSections(const QmlClassNode* qmlClassNode, SynopsisStyle style) { QList<Section> sections; @@ -1141,12 +1141,12 @@ QList<Section> CppCodeMarker::qmlSections(const QDeclarativeClassNode* qmlClassN NodeList::ConstIterator c = qmlClassNode->childNodes().begin(); while (c != qmlClassNode->childNodes().end()) { - if ((*c)->subType() == Node::QDeclarativePropertyGroup) { - const QDeclarativePropGroupNode* qpgn = static_cast<const QDeclarativePropGroupNode*>(*c); + if ((*c)->subType() == Node::QmlPropertyGroup) { + const QmlPropGroupNode* qpgn = static_cast<const QmlPropGroupNode*>(*c); NodeList::ConstIterator p = qpgn->childNodes().begin(); while (p != qpgn->childNodes().end()) { - if ((*p)->type() == Node::QDeclarativeProperty) { - const QDeclarativePropertyNode* pn = static_cast<const QDeclarativePropertyNode*>(*p); + if ((*p)->type() == Node::QmlProperty) { + const QmlPropertyNode* pn = static_cast<const QmlPropertyNode*>(*p); if (pn->isAttached()) insert(qmlattachedproperties,*p,style,Okay); else @@ -1155,14 +1155,14 @@ QList<Section> CppCodeMarker::qmlSections(const QDeclarativeClassNode* qmlClassN ++p; } } - else if ((*c)->type() == Node::QDeclarativeSignal) { + else if ((*c)->type() == Node::QmlSignal) { const FunctionNode* sn = static_cast<const FunctionNode*>(*c); if (sn->isAttached()) insert(qmlattachedsignals,*c,style,Okay); else insert(qmlsignals,*c,style,Okay); } - else if ((*c)->type() == Node::QDeclarativeMethod) { + else if ((*c)->type() == Node::QmlMethod) { const FunctionNode* mn = static_cast<const FunctionNode*>(*c); if (mn->isAttached()) insert(qmlattachedmethods,*c,style,Okay); @@ -1187,21 +1187,21 @@ QList<Section> CppCodeMarker::qmlSections(const QDeclarativeClassNode* qmlClassN FastSection qmlattachedmethods(qmlClassNode,"Attached Method Documentation"); NodeList::ConstIterator c = qmlClassNode->childNodes().begin(); while (c != qmlClassNode->childNodes().end()) { - if ((*c)->subType() == Node::QDeclarativePropertyGroup) { - const QDeclarativePropGroupNode* pgn = static_cast<const QDeclarativePropGroupNode*>(*c); + if ((*c)->subType() == Node::QmlPropertyGroup) { + const QmlPropGroupNode* pgn = static_cast<const QmlPropGroupNode*>(*c); if (pgn->isAttached()) insert(qmlattachedproperties,*c,style,Okay); else insert(qmlproperties,*c,style,Okay); } - else if ((*c)->type() == Node::QDeclarativeSignal) { + else if ((*c)->type() == Node::QmlSignal) { const FunctionNode* sn = static_cast<const FunctionNode*>(*c); if (sn->isAttached()) insert(qmlattachedsignals,*c,style,Okay); else insert(qmlsignals,*c,style,Okay); } - else if ((*c)->type() == Node::QDeclarativeMethod) { + else if ((*c)->type() == Node::QmlMethod) { const FunctionNode* mn = static_cast<const FunctionNode*>(*c); if (mn->isAttached()) insert(qmlattachedmethods,*c,style,Okay); diff --git a/tools/qdoc3/cppcodemarker.h b/tools/qdoc3/cppcodemarker.h index 2f6471a..2dcf400 100644 --- a/tools/qdoc3/cppcodemarker.h +++ b/tools/qdoc3/cppcodemarker.h @@ -79,7 +79,7 @@ class CppCodeMarker : public CodeMarker QList<Section> sections(const InnerNode *innerNode, SynopsisStyle style, Status status); - QList<Section> qmlSections(const QDeclarativeClassNode* qmlClassNode, + QList<Section> qmlSections(const QmlClassNode* qmlClassNode, SynopsisStyle style); const Node *resolveTarget(const QString& target, const Tree *tree, diff --git a/tools/qdoc3/cppcodeparser.cpp b/tools/qdoc3/cppcodeparser.cpp index 4d30f3a..021d64a 100644 --- a/tools/qdoc3/cppcodeparser.cpp +++ b/tools/qdoc3/cppcodeparser.cpp @@ -728,7 +728,7 @@ Node *CppCodeParser::processTopicCommand(const Doc& doc, if (n) classNode = static_cast<const ClassNode*>(n); } - return new QDeclarativeClassNode(tre->root(), names[0], classNode); + return new QmlClassNode(tre->root(), names[0], classNode); } else if (command == COMMAND_QMLBASICTYPE) { #if 0 @@ -738,11 +738,11 @@ Node *CppCodeParser::processTopicCommand(const Doc& doc, FakeNode* pageNode = static_cast<FakeNode*>(tre->root()->findNode(parts[1], Node::Fake)); if (pageNode) { qDebug() << "FOUND"; - return new QDeclarativeBasicTypeNode(pageNode, parts[0]); + return new QmlBasicTypeNode(pageNode, parts[0]); } } #endif - return new QDeclarativeBasicTypeNode(tre->root(), arg); + return new QmlBasicTypeNode(tre->root(), arg); } else if ((command == COMMAND_QMLSIGNAL) || (command == COMMAND_QMLMETHOD) || @@ -750,19 +750,19 @@ Node *CppCodeParser::processTopicCommand(const Doc& doc, (command == COMMAND_QMLATTACHEDMETHOD)) { QString element; QString type; - QDeclarativeClassNode* qmlClass = 0; + QmlClassNode* qmlClass = 0; if (splitQmlMethodArg(doc,arg,type,element)) { Node* n = tre->findNode(QStringList(element),Node::Fake); - if (n && n->subType() == Node::QDeclarativeClass) { - qmlClass = static_cast<QDeclarativeClassNode*>(n); + if (n && n->subType() == Node::QmlClass) { + qmlClass = static_cast<QmlClassNode*>(n); if (command == COMMAND_QMLSIGNAL) - return makeFunctionNode(doc,arg,qmlClass,Node::QDeclarativeSignal,false,COMMAND_QMLSIGNAL); + return makeFunctionNode(doc,arg,qmlClass,Node::QmlSignal,false,COMMAND_QMLSIGNAL); else if (command == COMMAND_QMLATTACHEDSIGNAL) - return makeFunctionNode(doc,arg,qmlClass,Node::QDeclarativeSignal,true,COMMAND_QMLATTACHEDSIGNAL); + return makeFunctionNode(doc,arg,qmlClass,Node::QmlSignal,true,COMMAND_QMLATTACHEDSIGNAL); else if (command == COMMAND_QMLMETHOD) - return makeFunctionNode(doc,arg,qmlClass,Node::QDeclarativeMethod,false,COMMAND_QMLMETHOD); + return makeFunctionNode(doc,arg,qmlClass,Node::QmlMethod,false,COMMAND_QMLMETHOD); else if (command == COMMAND_QMLATTACHEDMETHOD) - return makeFunctionNode(doc,arg,qmlClass,Node::QDeclarativeMethod,true,COMMAND_QMLATTACHEDMETHOD); + return makeFunctionNode(doc,arg,qmlClass,Node::QmlMethod,true,COMMAND_QMLATTACHEDMETHOD); else return 0; // never get here. } @@ -850,7 +850,7 @@ Node *CppCodeParser::processTopicCommandGroup(const Doc& doc, const QString& command, const QStringList& args) { - QDeclarativePropGroupNode* qmlPropGroup = 0; + QmlPropGroupNode* qmlPropGroup = 0; if ((command == COMMAND_QMLPROPERTY) || (command == COMMAND_QMLATTACHEDPROPERTY)) { QString type; @@ -860,20 +860,20 @@ Node *CppCodeParser::processTopicCommandGroup(const Doc& doc, QStringList::ConstIterator arg = args.begin(); if (splitQmlPropertyArg(doc,(*arg),type,element,property)) { Node* n = tre->findNode(QStringList(element),Node::Fake); - if (n && n->subType() == Node::QDeclarativeClass) { - QDeclarativeClassNode* qmlClass = static_cast<QDeclarativeClassNode*>(n); + if (n && n->subType() == Node::QmlClass) { + QmlClassNode* qmlClass = static_cast<QmlClassNode*>(n); if (qmlClass) - qmlPropGroup = new QDeclarativePropGroupNode(qmlClass, + qmlPropGroup = new QmlPropGroupNode(qmlClass, property, attached); } } if (qmlPropGroup) { - const ClassNode *correspondingClass = static_cast<const QDeclarativeClassNode*>(qmlPropGroup->parent())->classNode(); + const ClassNode *correspondingClass = static_cast<const QmlClassNode*>(qmlPropGroup->parent())->classNode(); PropertyNode *correspondingProperty = 0; if (correspondingClass) correspondingProperty = static_cast<PropertyNode*>((Node*)correspondingClass->findNode(property, Node::Property)); - QDeclarativePropertyNode *qmlPropNode = new QDeclarativePropertyNode(qmlPropGroup,property,type,attached); + QmlPropertyNode *qmlPropNode = new QmlPropertyNode(qmlPropGroup,property,type,attached); if (correspondingProperty) { bool writableList = type.startsWith("list") && correspondingProperty->dataType().endsWith('*'); qmlPropNode->setWritable(writableList || correspondingProperty->isWritable()); @@ -881,7 +881,7 @@ Node *CppCodeParser::processTopicCommandGroup(const Doc& doc, ++arg; while (arg != args.end()) { if (splitQmlPropertyArg(doc,(*arg),type,element,property)) { - QDeclarativePropertyNode* qmlPropNode = new QDeclarativePropertyNode(qmlPropGroup, + QmlPropertyNode* qmlPropNode = new QmlPropertyNode(qmlPropGroup, property, type, attached); @@ -1033,12 +1033,12 @@ void CppCodeParser::processOtherMetaCommand(const Doc& doc, #ifdef QDOC_QML else if (command == COMMAND_QMLINHERITS) { setLink(node, Node::InheritsLink, arg); - if (node->subType() == Node::QDeclarativeClass) { - QDeclarativeClassNode::addInheritedBy(arg,node); + if (node->subType() == Node::QmlClass) { + QmlClassNode::addInheritedBy(arg,node->name()); } } else if (command == COMMAND_QMLDEFAULT) { - QDeclarativePropGroupNode* qpgn = static_cast<QDeclarativePropGroupNode*>(node); + QmlPropGroupNode* qpgn = static_cast<QmlPropGroupNode*>(node); qpgn->setDefault(); } #endif diff --git a/tools/qdoc3/doc.cpp b/tools/qdoc3/doc.cpp index 78b5d1f..ad4cdde 100644 --- a/tools/qdoc3/doc.cpp +++ b/tools/qdoc3/doc.cpp @@ -553,7 +553,7 @@ void DocParser::parse(const QString& source, append(Atom::Qml, getCode(CMD_QML, marker)); break; case CMD_QMLTEXT: - append(Atom::QDeclarativeText); + append(Atom::QmlText); break; #endif case CMD_CODELINE: @@ -2842,7 +2842,7 @@ void Doc::initialize(const Config& config) DocParser::quoting = config.getBool(CONFIG_QUOTINGINFORMATION); #ifdef QDOC_QML - QDeclarativeClassNode::qmlOnly = config.getBool(CONFIG_QMLONLY); + QmlClassNode::qmlOnly = config.getBool(CONFIG_QMLONLY); #endif QStringMap reverseAliasMap; diff --git a/tools/qdoc3/generator.cpp b/tools/qdoc3/generator.cpp index 8766696..6a8899a 100644 --- a/tools/qdoc3/generator.cpp +++ b/tools/qdoc3/generator.cpp @@ -301,7 +301,7 @@ bool Generator::generateQmlText(const Text& text, startText(relative, marker); while (atom) { - if (atom->type() != Atom::QDeclarativeText) + if (atom->type() != Atom::QmlText) atom = atom->next(); else { atom = atom->next(); @@ -520,7 +520,7 @@ void Generator::generateInherits(const ClassNode *classe, CodeMarker *marker) #ifdef QDOC_QML /*! */ -void Generator::generateQmlInherits(const QDeclarativeClassNode* , CodeMarker* ) +void Generator::generateQmlInherits(const QmlClassNode* , CodeMarker* ) { // stub. } @@ -1186,32 +1186,6 @@ void Generator::appendSortedNames(Text& text, } } -void Generator::appendSortedNames(Text& text, - const Node* base, - const NodeList& subs, - CodeMarker *marker) -{ - NodeList::ConstIterator r; - QMap<QString,Text> classMap; - int index = 0; - - r = subs.begin(); - while (r != subs.end()) { - Text className; - appendFullName(className, (*r), base, marker); - classMap[className.toString().toLower()] = className; - ++r; - } - - QStringList classNames = classMap.keys(); - classNames.sort(); - - foreach (const QString &className, classNames) { - text << classMap[className]; - text << separator(index++, classNames.count()); - } -} - int Generator::skipAtoms(const Atom *atom, Atom::Type type) const { int skipAhead = 0; diff --git a/tools/qdoc3/generator.h b/tools/qdoc3/generator.h index 8e8eed8..44f56e2 100644 --- a/tools/qdoc3/generator.h +++ b/tools/qdoc3/generator.h @@ -101,7 +101,7 @@ class Generator const Node *relative, CodeMarker *marker, const QString& qmlName); - virtual void generateQmlInherits(const QDeclarativeClassNode* cn, + virtual void generateQmlInherits(const QmlClassNode* cn, CodeMarker* marker); #endif virtual void generateBody(const Node *node, CodeMarker *marker); @@ -169,13 +169,6 @@ class Generator const QList<RelatedClass> &classes, CodeMarker *marker); - protected: - void appendSortedNames(Text& text, - const Node* base, - const NodeList& subs, - CodeMarker *marker); - - private: QString amp; QString lt; QString gt; diff --git a/tools/qdoc3/helpprojectwriter.cpp b/tools/qdoc3/helpprojectwriter.cpp index 628fd0f..2189e02 100644 --- a/tools/qdoc3/helpprojectwriter.cpp +++ b/tools/qdoc3/helpprojectwriter.cpp @@ -127,7 +127,7 @@ void HelpProjectWriter::readSelectors(SubProject &subproject, const QStringList subTypeHash["page"] = Node::Page; subTypeHash["externalpage"] = Node::ExternalPage; #ifdef QDOC_QML - subTypeHash["qmlclass"] = Node::QDeclarativeClass; + subTypeHash["qmlclass"] = Node::QmlClass; #endif QSet<Node::SubType> allSubTypes = QSet<Node::SubType>::fromList(subTypeHash.values()); @@ -188,8 +188,8 @@ QStringList HelpProjectWriter::keywordDetails(const Node *node) const } else if (node->type() == Node::Fake) { const FakeNode *fake = static_cast<const FakeNode *>(node); #ifdef QDOC_QML - if (fake->subType() == Node::QDeclarativeClass) { - details << (QDeclarativeClassNode::qmlOnly ? fake->name() : fake->fullTitle()); + if (fake->subType() == Node::QmlClass) { + details << (QmlClassNode::qmlOnly ? fake->name() : fake->fullTitle()); details << "QML." + fake->name(); } else #endif diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index 7db5828..e767460 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -73,7 +73,6 @@ QString HtmlGenerator::sinceTitles[] = " New Typedefs", " New Properties", " New Variables", - " New QML Elements", " New Qml Properties", " New Qml Signals", " New Qml Methods", @@ -688,8 +687,6 @@ int HtmlGenerator::generateAtom(const Atom *atom, nsmap = newSinceMaps.find(atom->string()); NewClassMaps::const_iterator ncmap; ncmap = newClassMaps.find(atom->string()); - NewClassMaps::const_iterator nqcmap; - nqcmap = newQmlClassMaps.find(atom->string()); if ((nsmap != newSinceMaps.constEnd()) && !nsmap.value().isEmpty()) { QList<Section> sections; QList<Section>::ConstIterator s; @@ -700,10 +697,6 @@ int HtmlGenerator::generateAtom(const Atom *atom, while (n != nsmap.value().constEnd()) { const Node* node = n.value(); switch (node->type()) { - case Node::Fake: - if (node->subType() == Node::QDeclarativeClass) - sections[QDeclarativeClass].appendMember((Node*)node); - break; case Node::Namespace: sections[Namespace].appendMember((Node*)node); break; @@ -745,14 +738,14 @@ int HtmlGenerator::generateAtom(const Atom *atom, case Node::Variable: sections[Variable].appendMember((Node*)node); break; - case Node::QDeclarativeProperty: - sections[QDeclarativeProperty].appendMember((Node*)node); + case Node::QmlProperty: + sections[QmlProperty].appendMember((Node*)node); break; - case Node::QDeclarativeSignal: - sections[QDeclarativeSignal].appendMember((Node*)node); + case Node::QmlSignal: + sections[QmlSignal].appendMember((Node*)node); break; - case Node::QDeclarativeMethod: - sections[QDeclarativeMethod].appendMember((Node*)node); + case Node::QmlMethod: + sections[QmlMethod].appendMember((Node*)node); break; default: break; @@ -789,8 +782,6 @@ int HtmlGenerator::generateAtom(const Atom *atom, out() << "<h3>" << protectEnc((*s).name) << "</h3>\n"; if (idx == Class) generateCompactList(0, marker, ncmap.value(), QString("Q")); - else if (idx == QDeclarativeClass) - generateCompactList(0, marker, nqcmap.value(), QString("Q")); else if (idx == MemberFunction) { ParentMaps parentmaps; ParentMaps::iterator pmap; @@ -1190,7 +1181,7 @@ int HtmlGenerator::generateAtom(const Atom *atom, << "</code></b></font>"; break; #ifdef QDOC_QML - case Atom::QDeclarativeText: + case Atom::QmlText: case Atom::EndQmlText: // don't do anything with these. They are just tags. break; @@ -1453,7 +1444,7 @@ void HtmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker) subTitleSize = SmallSubTitle; htmlTitle += " (" + fake->subTitle() + ")"; } - else if (fake->subType() == Node::QDeclarativeBasicType) { + else if (fake->subType() == Node::QmlBasicType) { fullTitle = "QML Basic Type: " + fullTitle; htmlTitle = fullTitle; } @@ -1527,8 +1518,8 @@ void HtmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker) } } #ifdef QDOC_QML - else if (fake->subType() == Node::QDeclarativeClass) { - const QDeclarativeClassNode* qml_cn = static_cast<const QDeclarativeClassNode*>(fake); + else if (fake->subType() == Node::QmlClass) { + const QmlClassNode* qml_cn = static_cast<const QmlClassNode*>(fake); const ClassNode* cn = qml_cn->classNode(); generateQmlInherits(qml_cn, marker); generateQmlInstantiates(qml_cn, marker); @@ -2341,11 +2332,7 @@ void HtmlGenerator::generateCompactList(const Node *relative, out() << "<a href=\"" << linkForNode(it.value(), relative) << "\">"; - QStringList pieces; - if (it.value()->subType() == Node::QDeclarativeClass) - pieces << it.value()->name(); - else - pieces = fullName(it.value(), relative, marker).split("::"); + QStringList pieces = fullName(it.value(), relative, marker).split("::"); out() << protectEnc(pieces.last()); out() << "</a>"; if (pieces.size() > 1) { @@ -3507,18 +3494,18 @@ QString HtmlGenerator::refForNode(const Node *node) break; #ifdef QDOC_QML case Node::Fake: - if (node->subType() != Node::QDeclarativePropertyGroup) + if (node->subType() != Node::QmlPropertyGroup) break; - case Node::QDeclarativeProperty: + case Node::QmlProperty: #endif case Node::Property: ref = node->name() + "-prop"; break; #ifdef QDOC_QML - case Node::QDeclarativeSignal: + case Node::QmlSignal: ref = node->name() + "-signal"; break; - case Node::QDeclarativeMethod: + case Node::QmlMethod: ref = node->name() + "-method"; break; #endif @@ -3555,7 +3542,7 @@ QString HtmlGenerator::linkForNode(const Node *node, const Node *relative) #endif link += fn; - if (!node->isInnerNode() || node->subType() == Node::QDeclarativePropertyGroup) { + if (!node->isInnerNode() || node->subType() == Node::QmlPropertyGroup) { ref = refForNode(node); if (relative && fn == fileName(relative) && ref == refForNode(relative)) return QString(); @@ -3736,9 +3723,6 @@ void HtmlGenerator::findAllSince(const InnerNode *node) NewClassMaps::iterator ncmap = newClassMaps.find(sinceVersion); if (ncmap == newClassMaps.end()) ncmap = newClassMaps.insert(sinceVersion,NodeMap()); - NewClassMaps::iterator nqcmap = newQmlClassMaps.find(sinceVersion); - if (nqcmap == newQmlClassMaps.end()) - nqcmap = newQmlClassMaps.insert(sinceVersion,NodeMap()); if ((*child)->type() == Node::Function) { FunctionNode *func = static_cast<FunctionNode *>(*child); @@ -3758,15 +3742,6 @@ void HtmlGenerator::findAllSince(const InnerNode *node) nsmap.value().insert(className,(*child)); ncmap.value().insert(className,(*child)); } - else if ((*child)->subType() == Node::QDeclarativeClass) { - QString className = (*child)->name(); - if ((*child)->parent() && - (*child)->parent()->type() == Node::Namespace && - !(*child)->parent()->name().isEmpty()) - className = (*child)->parent()->name()+"::"+className; - nsmap.value().insert(className,(*child)); - nqcmap.value().insert(className,(*child)); - } } else { QString name = (*child)->name(); @@ -3865,9 +3840,9 @@ void HtmlGenerator::findAllQmlClasses(const InnerNode *node) while (c != node->childNodes().constEnd()) { if ((*c)->type() == Node::Fake) { const FakeNode* fakeNode = static_cast<const FakeNode *>(*c); - if (fakeNode->subType() == Node::QDeclarativeClass) { - const QDeclarativeClassNode* qmlNode = - static_cast<const QDeclarativeClassNode*>(fakeNode); + if (fakeNode->subType() == Node::QmlClass) { + const QmlClassNode* qmlNode = + static_cast<const QmlClassNode*>(fakeNode); const Node* n = qmlNode->classNode(); } qmlClasses.insert(fakeNode->name(),*c); @@ -4203,7 +4178,7 @@ void HtmlGenerator::generateQmlSummary(const Section& section, NodeList::ConstIterator m; int count = section.members.size(); bool twoColumn = false; - if (section.members.first()->type() == Node::QDeclarativeProperty) { + if (section.members.first()->type() == Node::QmlProperty) { twoColumn = (count >= 5); } if (twoColumn) @@ -4237,18 +4212,18 @@ void HtmlGenerator::generateDetailedQmlMember(const Node *node, const InnerNode *relative, CodeMarker *marker) { - const QDeclarativePropertyNode* qpn = 0; + const QmlPropertyNode* qpn = 0; generateMacRef(node, marker); out() << "<div class=\"qmlitem\">"; - if (node->subType() == Node::QDeclarativePropertyGroup) { - const QDeclarativePropGroupNode* qpgn = static_cast<const QDeclarativePropGroupNode*>(node); + if (node->subType() == Node::QmlPropertyGroup) { + const QmlPropGroupNode* qpgn = static_cast<const QmlPropGroupNode*>(node); NodeList::ConstIterator p = qpgn->childNodes().begin(); out() << "<div class=\"qmlproto\">"; out() << "<table width=\"100%\" class=\"qmlname\">"; while (p != qpgn->childNodes().end()) { - if ((*p)->type() == Node::QDeclarativeProperty) { - qpn = static_cast<const QDeclarativePropertyNode*>(*p); + if ((*p)->type() == Node::QmlProperty) { + qpn = static_cast<const QmlPropertyNode*>(*p); out() << "<tr><td>"; out() << "<a name=\"" + refForNode(qpn) + "\"></a>"; if (!qpn->isWritable()) @@ -4270,7 +4245,7 @@ void HtmlGenerator::generateDetailedQmlMember(const Node *node, out() << "</table>"; out() << "</div>"; } - else if (node->type() == Node::QDeclarativeSignal) { + else if (node->type() == Node::QmlSignal) { const FunctionNode* qsn = static_cast<const FunctionNode*>(node); out() << "<div class=\"qmlproto\">"; out() << "<table class=\"qmlname\">"; @@ -4282,7 +4257,7 @@ void HtmlGenerator::generateDetailedQmlMember(const Node *node, out() << "</table>"; out() << "</div>"; } - else if (node->type() == Node::QDeclarativeMethod) { + else if (node->type() == Node::QmlMethod) { const FunctionNode* qmn = static_cast<const FunctionNode*>(node); out() << "<div class=\"qmlproto\">"; out() << "<table class=\"qmlname\">"; @@ -4307,7 +4282,7 @@ void HtmlGenerator::generateDetailedQmlMember(const Node *node, Output the "Inherits" line for the QML element, if there should be one. */ -void HtmlGenerator::generateQmlInherits(const QDeclarativeClassNode* cn, +void HtmlGenerator::generateQmlInherits(const QmlClassNode* cn, CodeMarker* marker) { if (cn && !cn->links().empty()) { @@ -4316,8 +4291,8 @@ void HtmlGenerator::generateQmlInherits(const QDeclarativeClassNode* cn, linkPair = cn->links()[Node::InheritsLink]; QStringList strList(linkPair.first); const Node* n = myTree->findNode(strList,Node::Fake); - if (n && n->subType() == Node::QDeclarativeClass) { - const QDeclarativeClassNode* qcn = static_cast<const QDeclarativeClassNode*>(n); + if (n && n->subType() == Node::QmlClass) { + const QmlClassNode* qcn = static_cast<const QmlClassNode*>(n); out() << "<p style=\"text-align: center\">"; Text text; text << "[Inherits "; @@ -4337,30 +4312,55 @@ void HtmlGenerator::generateQmlInherits(const QDeclarativeClassNode* cn, Output the "Inherit by" list for the QML element, if it is inherited by any other elements. */ -void HtmlGenerator::generateQmlInheritedBy(const QDeclarativeClassNode* cn, +void HtmlGenerator::generateQmlInheritedBy(const QmlClassNode* cn, CodeMarker* marker) { if (cn) { - NodeList subs; - QDeclarativeClassNode::subclasses(cn->name(),subs); + QStringList subs; + QmlClassNode::subclasses(cn->name(),subs); if (!subs.isEmpty()) { + subs.sort(); Text text; text << Atom::ParaLeft << "Inherited by "; - appendSortedNames(text,cn,subs,marker); + for (int i = 0; i < subs.size(); ++i) { + text << subs.at(i); + text << separator(i, subs.size()); + } text << Atom::ParaRight; generateText(text, cn, marker); } +#if 0 + if (cn->links().contains(Node::InheritsLink)) { + QPair<QString,QString> linkPair; + linkPair = cn->links()[Node::InheritsLink]; + QStringList strList(linkPair.first); + const Node* n = myTree->findNode(strList,Node::Fake); + if (n && n->subType() == Node::QmlClass) { + const QmlClassNode* qcn = static_cast<const QmlClassNode*>(n); + out() << "<p style=\"text-align: center\">"; + Text text; + text << "[Inherits "; + text << Atom(Atom::LinkNode,CodeMarker::stringForNode(qcn)); + text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK); + text << Atom(Atom::String, linkPair.second); + text << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); + text << "]"; + generateText(text, cn, marker); + out() << "</p>"; + } + } +#endif } } /*! - Output the "[Xxx instantiates the C++ class QDeclarativeXxx]" + Output the "[Xxx instantiates the C++ class QmlGraphicsXxx]" line for the QML element, if there should be one. If there is no class node, or if the class node status is set to Node::Internal, do nothing. */ -void HtmlGenerator::generateQmlInstantiates(const QDeclarativeClassNode* qcn, +void HtmlGenerator::generateQmlInstantiates(const QmlClassNode* qcn, CodeMarker* marker) { const ClassNode* cn = qcn->classNode(); @@ -4384,7 +4384,7 @@ void HtmlGenerator::generateQmlInstantiates(const QDeclarativeClassNode* qcn, } /*! - Output the "[QDeclarativeXxx is instantiated by QML element Xxx]" + Output the "[QmlGraphicsXxx is instantiated by QML element Xxx]" line for the class, if there should be one. If there is no QML element, or if the class node status @@ -4395,7 +4395,7 @@ void HtmlGenerator::generateInstantiatedBy(const ClassNode* cn, { if (cn && cn->status() != Node::Internal && !cn->qmlElement().isEmpty()) { const Node* n = myTree->root()->findNode(cn->qmlElement(),Node::Fake); - if (n && n->subType() == Node::QDeclarativeClass) { + if (n && n->subType() == Node::QmlClass) { out() << "<p style=\"text-align: center\">"; Text text; text << "["; diff --git a/tools/qdoc3/htmlgenerator.h b/tools/qdoc3/htmlgenerator.h index 42c94cd..551bead 100644 --- a/tools/qdoc3/htmlgenerator.h +++ b/tools/qdoc3/htmlgenerator.h @@ -90,10 +90,9 @@ class HtmlGenerator : public PageGenerator Typedef, Property, Variable, - QDeclarativeClass, - QDeclarativeProperty, - QDeclarativeSignal, - QDeclarativeMethod, + QmlProperty, + QmlSignal, + QmlMethod, LastSinceType }; @@ -185,9 +184,9 @@ class HtmlGenerator : public PageGenerator void generateDetailedQmlMember(const Node *node, const InnerNode *relative, CodeMarker *marker); - void generateQmlInherits(const QDeclarativeClassNode* cn, CodeMarker* marker); - void generateQmlInheritedBy(const QDeclarativeClassNode* cn, CodeMarker* marker); - void generateQmlInstantiates(const QDeclarativeClassNode* qcn, CodeMarker* marker); + void generateQmlInherits(const QmlClassNode* cn, CodeMarker* marker); + void generateQmlInheritedBy(const QmlClassNode* cn, CodeMarker* marker); + void generateQmlInstantiates(const QmlClassNode* qcn, CodeMarker* marker); void generateInstantiatedBy(const ClassNode* cn, CodeMarker* marker); #endif #ifdef QDOC_NAME_ALIGNMENT @@ -327,7 +326,6 @@ class HtmlGenerator : public PageGenerator NewSinceMaps newSinceMaps; static QString sinceTitles[]; NewClassMaps newClassMaps; - NewClassMaps newQmlClassMaps; static int id; }; diff --git a/tools/qdoc3/node.cpp b/tools/qdoc3/node.cpp index 0ceda39..358fdd1 100644 --- a/tools/qdoc3/node.cpp +++ b/tools/qdoc3/node.cpp @@ -580,7 +580,7 @@ bool InnerNode::isSameSignature(const FunctionNode *f1, const FunctionNode *f2) void InnerNode::addChild(Node *child) { children.append(child); - if ((child->type() == Function) || (child->type() == QDeclarativeMethod)) { + if ((child->type() == Function) || (child->type() == QmlMethod)) { FunctionNode *func = (FunctionNode *) child; if (!primaryFunctionMap.contains(func->name())) { primaryFunctionMap.insert(func->name(), func); @@ -806,8 +806,8 @@ FakeNode::FakeNode(InnerNode *parent, const QString& name, SubType subtype) case Group: setPageType(ArticlePage); break; - case QDeclarativeClass: - case QDeclarativeBasicType: + case QmlClass: + case QmlBasicType: setPageType(ApiPage); break; case Example: @@ -1256,31 +1256,39 @@ bool TargetNode::isInnerNode() const } #ifdef QDOC_QML -bool QDeclarativeClassNode::qmlOnly = false; -QMultiMap<QString,Node*> QDeclarativeClassNode::inheritedBy; +bool QmlClassNode::qmlOnly = false; +QMultiMap<QString,QString> QmlClassNode::inheritedBy; /*! Constructs a Qml class node (i.e. a Fake node with the - subtype QDeclarativeClass. The new node has the given \a parent + subtype QmlClass. The new node has the given \a parent and \a name and is associated with the C++ class node specified by \a cn which may be null if the the Qml class node is not associated with a C++ class node. */ -QDeclarativeClassNode::QDeclarativeClassNode(InnerNode *parent, +QmlClassNode::QmlClassNode(InnerNode *parent, const QString& name, const ClassNode* cn) - : FakeNode(parent, name, QDeclarativeClass), cnode(cn) + : FakeNode(parent, name, QmlClass), cnode(cn) { setTitle((qmlOnly ? "" : "QML ") + name + " Element Reference"); } /*! + I made this so I could print a debug message here. + */ +QmlClassNode::~QmlClassNode() +{ + qDebug() << "Deleting QmlClassNode:" << name(); +} + +/*! The base file name for this kind of node has "qml_" prepended to it. But not yet. Still testing. */ -QString QDeclarativeClassNode::fileBase() const +QString QmlClassNode::fileBase() const { #if 0 if (Node::fileBase() == "item") @@ -1294,15 +1302,15 @@ QString QDeclarativeClassNode::fileBase() const Record the fact that QML class \a base is inherited by QML class \a sub. */ -void QDeclarativeClassNode::addInheritedBy(const QString& base, Node* sub) +void QmlClassNode::addInheritedBy(const QString& base, const QString& sub) { inheritedBy.insert(base,sub); } /*! - Loads the list \a subs with the nodes of all the subclasses of \a base. + Loads the list \a subs with the names of all the subclasses of \a base. */ -void QDeclarativeClassNode::subclasses(const QString& base, NodeList& subs) +void QmlClassNode::subclasses(const QString& base, QStringList& subs) { subs.clear(); if (inheritedBy.contains(base)) @@ -1311,24 +1319,24 @@ void QDeclarativeClassNode::subclasses(const QString& base, NodeList& subs) /*! Constructs a Qml basic type node (i.e. a Fake node with - the subtype QDeclarativeBasicType. The new node has the given + the subtype QmlBasicType. The new node has the given \a parent and \a name. */ -QDeclarativeBasicTypeNode::QDeclarativeBasicTypeNode(InnerNode *parent, +QmlBasicTypeNode::QmlBasicTypeNode(InnerNode *parent, const QString& name) - : FakeNode(parent, name, QDeclarativeBasicType) + : FakeNode(parent, name, QmlBasicType) { setTitle(name); } /*! Constructor for the Qml property group node. \a parent is - always a QDeclarativeClassNode. + always a QmlClassNode. */ -QDeclarativePropGroupNode::QDeclarativePropGroupNode(QDeclarativeClassNode* parent, +QmlPropGroupNode::QmlPropGroupNode(QmlClassNode* parent, const QString& name, bool attached) - : FakeNode(parent, name, QDeclarativePropertyGroup), + : FakeNode(parent, name, QmlPropertyGroup), isdefault(false), att(attached) { @@ -1338,11 +1346,11 @@ QDeclarativePropGroupNode::QDeclarativePropGroupNode(QDeclarativeClassNode* pare /*! Constructor for the QML property node. */ -QDeclarativePropertyNode::QDeclarativePropertyNode(QDeclarativePropGroupNode *parent, +QmlPropertyNode::QmlPropertyNode(QmlPropGroupNode *parent, const QString& name, const QString& type, bool attached) - : LeafNode(QDeclarativeProperty, parent, name), + : LeafNode(QmlProperty, parent, name), dt(type), sto(Trool_Default), des(Trool_Default), @@ -1354,7 +1362,7 @@ QDeclarativePropertyNode::QDeclarativePropertyNode(QDeclarativePropGroupNode *pa /*! I don't know what this is. */ -QDeclarativePropertyNode::Trool QDeclarativePropertyNode::toTrool(bool boolean) +QmlPropertyNode::Trool QmlPropertyNode::toTrool(bool boolean) { return boolean ? Trool_True : Trool_False; } @@ -1362,7 +1370,7 @@ QDeclarativePropertyNode::Trool QDeclarativePropertyNode::toTrool(bool boolean) /*! I don't know what this is either. */ -bool QDeclarativePropertyNode::fromTrool(Trool troolean, bool defaultValue) +bool QmlPropertyNode::fromTrool(Trool troolean, bool defaultValue) { switch (troolean) { case Trool_True: diff --git a/tools/qdoc3/node.h b/tools/qdoc3/node.h index 5300efc..ae5dcd7 100644 --- a/tools/qdoc3/node.h +++ b/tools/qdoc3/node.h @@ -74,9 +74,9 @@ class Node Variable, #ifdef QDOC_QML Target, - QDeclarativeProperty, - QDeclarativeSignal, - QDeclarativeMethod, + QmlProperty, + QmlSignal, + QmlMethod, LastType #else Target, @@ -95,9 +95,9 @@ class Node Page, #ifdef QDOC_QML ExternalPage, - QDeclarativeClass, - QDeclarativePropertyGroup, - QDeclarativeBasicType + QmlClass, + QmlPropertyGroup, + QmlBasicType #else ExternalPage #endif @@ -373,42 +373,42 @@ class FakeNode : public InnerNode }; #ifdef QDOC_QML -class QDeclarativeClassNode : public FakeNode +class QmlClassNode : public FakeNode { public: - QDeclarativeClassNode(InnerNode *parent, + QmlClassNode(InnerNode *parent, const QString& name, const ClassNode* cn); - virtual ~QDeclarativeClassNode() { } + virtual ~QmlClassNode(); const ClassNode* classNode() const { return cnode; } virtual QString fileBase() const; - static void addInheritedBy(const QString& base, Node* sub); - static void subclasses(const QString& base, NodeList& subs); + static void addInheritedBy(const QString& base, const QString& sub); + static void subclasses(const QString& base, QStringList& subs); public: static bool qmlOnly; - static QMultiMap<QString,Node*> inheritedBy; + static QMultiMap<QString,QString> inheritedBy; private: const ClassNode* cnode; }; -class QDeclarativeBasicTypeNode : public FakeNode +class QmlBasicTypeNode : public FakeNode { public: - QDeclarativeBasicTypeNode(InnerNode *parent, + QmlBasicTypeNode(InnerNode *parent, const QString& name); - virtual ~QDeclarativeBasicTypeNode() { } + virtual ~QmlBasicTypeNode() { } }; -class QDeclarativePropGroupNode : public FakeNode +class QmlPropGroupNode : public FakeNode { public: - QDeclarativePropGroupNode(QDeclarativeClassNode* parent, + QmlPropGroupNode(QmlClassNode* parent, const QString& name, bool attached); - virtual ~QDeclarativePropGroupNode() { } + virtual ~QmlPropGroupNode() { } const QString& element() const { return parent()->name(); } void setDefault() { isdefault = true; } @@ -420,14 +420,14 @@ class QDeclarativePropGroupNode : public FakeNode bool att; }; -class QDeclarativePropertyNode : public LeafNode +class QmlPropertyNode : public LeafNode { public: - QDeclarativePropertyNode(QDeclarativePropGroupNode* parent, + QmlPropertyNode(QmlPropGroupNode* parent, const QString& name, const QString& type, bool attached); - virtual ~QDeclarativePropertyNode() { } + virtual ~QmlPropertyNode() { } void setDataType(const QString& dataType) { dt = dataType; } void setStored(bool stored) { sto = toTrool(stored); } @@ -441,7 +441,7 @@ class QDeclarativePropertyNode : public LeafNode bool isWritable() const { return fromTrool(wri,true); } bool isAttached() const { return att; } - const QString& element() const { return static_cast<QDeclarativePropGroupNode*>(parent())->element(); } + const QString& element() const { return static_cast<QmlPropGroupNode*>(parent())->element(); } private: enum Trool { Trool_True, Trool_False, Trool_Default }; diff --git a/tools/qdoc3/pagegenerator.cpp b/tools/qdoc3/pagegenerator.cpp index f129d3a..2cad9ed 100644 --- a/tools/qdoc3/pagegenerator.cpp +++ b/tools/qdoc3/pagegenerator.cpp @@ -84,7 +84,7 @@ QString PageGenerator::fileBase(const Node *node) const else if (!node->isInnerNode()) node = node->parent(); #ifdef QDOC_QML - if (node->subType() == Node::QDeclarativePropertyGroup) { + if (node->subType() == Node::QmlPropertyGroup) { node = node->parent(); } #endif @@ -104,8 +104,8 @@ QString PageGenerator::fileBase(const Node *node) const we prepend "qml-" to the file name of QML element doc files. */ - if ((p->subType() == Node::QDeclarativeClass) || - (p->subType() == Node::QDeclarativeBasicType)) { + if ((p->subType() == Node::QmlClass) || + (p->subType() == Node::QmlBasicType)) { base.prepend("qml-"); } #endif @@ -207,7 +207,7 @@ void PageGenerator::generateInnerNode(const InnerNode *node, if (fakeNode->subType() == Node::ExternalPage) return; #ifdef QDOC_QML - if (fakeNode->subType() == Node::QDeclarativePropertyGroup) + if (fakeNode->subType() == Node::QmlPropertyGroup) return; #endif if (fakeNode->subType() == Node::Page) { diff --git a/tools/qdoc3/test/qt_zh_CN.qdocconf b/tools/qdoc3/test/qt_zh_CN.qdocconf new file mode 100644 index 0000000..8c7e64a --- /dev/null +++ b/tools/qdoc3/test/qt_zh_CN.qdocconf @@ -0,0 +1,86 @@ +include(compat.qdocconf) +include(macros.qdocconf) +include(qt-cpp-ignore.qdocconf) +include(qt-html-templates_zh_CN.qdocconf) +include(qt-defines.qdocconf) + +project = Qt +versionsym = +version = %VERSION% +description = Qt Reference Documentation +url = http://qt.nokia.com/doc/zh_CN/4.7 + +sourceencoding = UTF-8 +outputencoding = UTF-8 +naturallanguage = zh-Hans + +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 = 教程 +qhp.Qt.indexTitle = 教程 +qhp.Qt.selectors = fake:example + +qhp.Qt.filterAttributes = qt 4.7.0 qtrefdoc zh_CN +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 = classic.css \ + images/qt-logo.png \ + images/taskmenuextension-example.png \ + images/coloreditorfactoryimage.png \ + images/dynamiclayouts-example.png \ + images/stylesheet-coffee-plastique.png + +language = Cpp + +sourcedirs = $QTDIR/doc/src/zh_CN + +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/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 \ + $QTDIR/examples/tutorials \ + $QTDIR \ + $QTDIR/qmake/examples \ + $QTDIR/src/3rdparty/webkit/WebKit/qt/docs +imagedirs = $QTDIR/doc/src/images \ + $QTDIR/examples +outputdir = $QTDIR/doc/html_zh_CN +tagfile = $QTDIR/doc/html_zh_CN/qt.tags +base = file:$QTDIR/doc/html_zh_CN + +HTML.generatemacrefs = "true" diff --git a/tools/qdoc3/tree.cpp b/tools/qdoc3/tree.cpp index 96af8d6..6c2502d 100644 --- a/tools/qdoc3/tree.cpp +++ b/tools/qdoc3/tree.cpp @@ -1914,8 +1914,8 @@ QString Tree::fullDocumentLocation(const Node *node) const } else if (node->type() == Node::Fake) { #ifdef QDOC_QML - if ((node->subType() == Node::QDeclarativeClass) || - (node->subType() == Node::QDeclarativeBasicType)) + if ((node->subType() == Node::QmlClass) || + (node->subType() == Node::QmlBasicType)) return "qml-" + node->fileBase() + ".html"; else #endif diff --git a/tools/qtestlib/wince/cetest/cetest.pro b/tools/qtestlib/wince/cetest/cetest.pro index 5cd52cf..6b6b02a 100644 --- a/tools/qtestlib/wince/cetest/cetest.pro +++ b/tools/qtestlib/wince/cetest/cetest.pro @@ -18,7 +18,7 @@ DEFINES += QT_BUILD_QMAKE QT_BOOTSTRAPPED QT_NO_CODECS QT_LITE_UNICODE QT INCLUDEPATH = \ $$QT_SOURCE_TREE/tools/qtestlib/ce/cetest \ $$QT_SOURCE_TREE/qmake \ - $$QT_SOURCE_TREE/qmake/generators/symbian \ + $$QT_SOURCE_TREE/tools/shared \ $$QT_BUILD_TREE/include \ $$QT_BUILD_TREE/include/QtCore \ $$QT_BUILD_TREE/src/corelib/global diff --git a/tools/qtestlib/wince/cetest/qmake_include.pri b/tools/qtestlib/wince/cetest/qmake_include.pri index aa32653..8b415b0 100644 --- a/tools/qtestlib/wince/cetest/qmake_include.pri +++ b/tools/qtestlib/wince/cetest/qmake_include.pri @@ -5,5 +5,7 @@ SOURCES += \ $$QT_SOURCE_TREE/qmake/option.cpp \ $$QT_SOURCE_TREE/qmake/project.cpp \ $$QT_SOURCE_TREE/qmake/property.cpp \ - $$QT_SOURCE_TREE/qmake/generators/symbian/initprojectdeploy_symbian.cpp + $$QT_SOURCE_TREE/qmake/generators/symbian/initprojectdeploy_symbian.cpp \ + $$QT_SOURCE_TREE/tools/shared/symbian/epocroot.cpp \ + $$QT_SOURCE_TREE/tools/shared/windows/registry.cpp diff --git a/translations/assistant_de.ts b/translations/assistant_de.ts index b020003..0a0d37f 100644 --- a/translations/assistant_de.ts +++ b/translations/assistant_de.ts @@ -4,7 +4,7 @@ <context> <name>AboutDialog</name> <message> - <location filename="../tools/assistant/tools/assistant/aboutdialog.cpp" line="+110"/> + <location filename="../tools/assistant/tools/assistant/aboutdialog.cpp" line="+117"/> <source>&Close</source> <translation>&Schließen</translation> </message> @@ -12,7 +12,7 @@ <context> <name>AboutLabel</name> <message> - <location line="-14"/> + <location line="-15"/> <source>Warning</source> <translation>Achtung</translation> </message> @@ -24,12 +24,79 @@ </translation> </message> <message> - <location line="+1"/> + <location line="+0"/> <source>OK</source> <translation>OK</translation> </message> </context> <context> + <name>Assistant</name> + <message> + <location filename="../tools/assistant/tools/assistant/main.cpp" line="+177"/> + <source>Error registering documentation file '%1': %2</source> + <translation>Beim Registrieren der Dokumentationsdatei '%1' trat ein Fehler auf: %2</translation> + </message> + <message> + <location line="+39"/> + <source>Error: %1</source> + <translation>Fehler: %1</translation> + </message> + <message> + <location line="+42"/> + <source>Could not register documentation file +%1 + +Reason: +%2</source> + <translation>Dokumentationsdatei %1 kann nicht registriert werden + +Grund: +%2</translation> + </message> + <message> + <location line="+6"/> + <source>Documentation successfully registered.</source> + <translation>Dokumentation erfolgreich registriert.</translation> + </message> + <message> + <location line="+12"/> + <source>Could not unregister documentation file +%1 + +Reason: +%2</source> + <translation>Registrierung der Dokumentationsdatei %1 kann nicht aufgehoben werden + +Grund: +%2</translation> + </message> + <message> + <location line="+8"/> + <source>Documentation successfully unregistered.</source> + <translation>Dokumentation erfolgreich entfernt.</translation> + </message> + <message> + <location line="+55"/> + <source>Error reading collection file '%1': %2.</source> + <translation>Fehler beim Lesen der Katalogdatei '%1': %2</translation> + </message> + <message> + <location line="+11"/> + <source>Error creating collection file '%1': %2.</source> + <translation>Fehler beim Erstellen der Katalogdatei '%1': %2.</translation> + </message> + <message> + <location line="+7"/> + <source>Error reading collection file '%1': %2</source> + <translation>Fehler beim Lesen der Katalogdatei '%1': %2</translation> + </message> + <message> + <location line="+53"/> + <source>Cannot load sqlite database driver!</source> + <translation>Der Datenbanktreiber für SQLite kann nicht geladen werden.</translation> + </message> +</context> +<context> <name>BookmarkDialog</name> <message> <location filename="../tools/assistant/tools/assistant/bookmarkdialog.ui"/> @@ -52,39 +119,20 @@ <translation>Neuer Ordner</translation> </message> <message> - <location filename="../tools/assistant/tools/assistant/bookmarkmanager.cpp" line="+184"/> - <location line="+18"/> - <location line="+39"/> - <location line="+18"/> - <location line="+30"/> - <source>Bookmarks</source> - <translation>Lesezeichen</translation> - </message> - <message> - <location filename="../tools/assistant/tools/assistant/bookmarkdialog.ui"/> + <location/> <source>+</source> <translation>+</translation> </message> - <message> - <location filename="../tools/assistant/tools/assistant/bookmarkmanager.cpp" line="-61"/> - <source>Delete Folder</source> - <translation>Ordner löschen</translation> - </message> - <message> - <location line="+1"/> - <source>Rename Folder</source> - <translation>Ordner umbenennen</translation> - </message> </context> <context> <name>BookmarkManager</name> <message> - <location line="+435"/> - <source>Bookmarks</source> - <translation>Lesezeichen</translation> + <location filename="../tools/assistant/tools/assistant/bookmarkmanager.cpp" line="+151"/> + <source>Untitled</source> + <translation>Ohne Titel</translation> </message> <message> - <location line="+37"/> + <location line="+65"/> <source>Remove</source> <translation>Entfernen</translation> </message> @@ -94,26 +142,22 @@ <translation>Wenn Sie diesen Ordner löschen, wird auch<br>dessen kompletter Inhalt gelöscht. Möchten Sie wirklich fortfahren?</translation> </message> <message> - <location line="+143"/> - <location line="+9"/> - <source>New Folder</source> - <translation>Neuer Ordner</translation> + <location line="+147"/> + <source>Manage Bookmarks...</source> + <translation>Lesezeichen verwalten...</translation> </message> -</context> -<context> - <name>BookmarkWidget</name> <message> - <location line="-417"/> - <source>Filter:</source> - <translation>Filter:</translation> + <location line="+2"/> + <source>Add Bookmark...</source> + <translation>Lesezeichen hinzufügen ...</translation> </message> <message> - <location line="+33"/> - <source>Remove</source> - <translation>Entfernen</translation> + <location line="+1"/> + <source>Ctrl+D</source> + <translation>Ctrl+D</translation> </message> <message> - <location line="-79"/> + <location line="+68"/> <source>Delete Folder</source> <translation>Ordner löschen</translation> </message> @@ -133,7 +177,7 @@ <translation>Lesezeichen in neuem Reiter öffnen</translation> </message> <message> - <location line="+3"/> + <location line="+2"/> <source>Delete Bookmark</source> <translation>Lesezeichen löschen</translation> </message> @@ -142,16 +186,11 @@ <source>Rename Bookmark</source> <translation>Lesezeichen umbenennen</translation> </message> - <message> - <location line="+62"/> - <source>Add</source> - <translation>Hinzufügen</translation> - </message> </context> <context> <name>CentralWidget</name> <message> - <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="+239"/> + <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="+117"/> <source>Add new page</source> <translation>Neue Seite hinzufügen</translation> </message> @@ -161,18 +200,18 @@ <translation>Aktuelle Seite schließen</translation> </message> <message> - <location line="+312"/> + <location line="+287"/> <source>Print Document</source> <translation>Drucken</translation> </message> <message> - <location line="+130"/> + <location line="+126"/> <location line="+2"/> <source>unknown</source> <translation>unbekannt</translation> </message> <message> - <location line="+93"/> + <location line="+100"/> <source>Add New Page</source> <translation>Neue Seite hinzufügen</translation> </message> @@ -192,15 +231,78 @@ <translation>Lesezeichen für diese Seite hinzufügen ...</translation> </message> <message> - <location line="+235"/> + <location line="+264"/> <source>Search</source> <translation>Suchen</translation> </message> </context> <context> + <name>CmdLineParser</name> + <message> + <location filename="../tools/assistant/tools/assistant/cmdlineparser.cpp" line="+137"/> + <source>Unknown option: %1</source> + <translation>Unbekannte Option: %1</translation> + </message> + <message> + <location line="+87"/> + <source>Unknown widget: %1</source> + <translation>Unbekanntes Widget-Objekt: %1</translation> + </message> + <message> + <location line="-54"/> + <source>The collection file '%1' does not exist.</source> + <translation>Die Katalogdatei '%1' existiert nicht.</translation> + </message> + <message> + <location line="+3"/> + <source>Missing collection file.</source> + <translation>Fehlende Katalogdatei.</translation> + </message> + <message> + <location line="+13"/> + <source>Invalid URL '%1'.</source> + <translation>Ungültige URL '%1'.</translation> + </message> + <message> + <location line="+2"/> + <source>Missing URL.</source> + <translation>Fehlende URL.</translation> + </message> + <message> + <location line="+38"/> + <source>Missing widget.</source> + <translation>Fehlendes Widget-Objekt.</translation> + </message> + <message> + <location line="+23"/> + <source>The Qt help file '%1' does not exist.</source> + <translation>Die Hilfedatei '%1' existiert nicht.</translation> + </message> + <message> + <location line="+4"/> + <source>Missing help file.</source> + <translation>Fehlende Hilfedatei.</translation> + </message> + <message> + <location line="+10"/> + <source>Missing filter argument.</source> + <translation>Das Filter-Argument fehlt.</translation> + </message> + <message> + <location line="+20"/> + <source>Error</source> + <translation>Fehler</translation> + </message> + <message> + <location line="+2"/> + <source>Notice</source> + <translation>Hinweis</translation> + </message> +</context> +<context> <name>ContentWindow</name> <message> - <location filename="../tools/assistant/tools/assistant/contentwindow.cpp" line="+158"/> + <location filename="../tools/assistant/tools/assistant/contentwindow.cpp" line="+171"/> <source>Open Link</source> <translation>Link öffnen</translation> </message> @@ -224,34 +326,6 @@ </message> </context> <context> - <name>FindWidget</name> - <message> - <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="-918"/> - <source>Previous</source> - <translation>Zurück</translation> - </message> - <message> - <location line="+4"/> - <source>Next</source> - <translation>Weiter</translation> - </message> - <message> - <location line="+4"/> - <source>Case Sensitive</source> - <translation>Groß-/Kleinschreibung beachten</translation> - </message> - <message> - <location line="+3"/> - <source>Whole words</source> - <translation>Ganze Wörter</translation> - </message> - <message> - <location line="+12"/> - <source><img src=":/trolltech/assistant/images/wrap.png">&nbsp;Search wrapped</source> - <translation><img src=":/trolltech/assistant/images/wrap.png">&nbsp;Seitenende</translation> - </message> -</context> -<context> <name>FontPanel</name> <message> <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="+63"/> @@ -282,52 +356,25 @@ <context> <name>HelpViewer</name> <message> - <location filename="../tools/assistant/tools/assistant/helpviewer.cpp" line="+489"/> - <source>Help</source> - <translation>Hilfe</translation> - </message> - <message> - <location line="+1"/> - <source>OK</source> - <translation>OK</translation> + <location filename="../tools/assistant/tools/assistant/helpviewer.cpp" line="+56"/> + <source><title>about:blank</title></source> + <translation><title>about:blank</title></translation> </message> <message> - <location line="-62"/> + <location line="+6"/> <source><title>Error 404...</title><div align="center"><br><br><h1>The page could not be found</h1><br><h3>'%1'</h3></div></source> <translation><title>Fehler 404 ...</title><div align="center"><br><br><h1>Die Seite kann nicht gefunden werden.</h1><br><h3>'%1'</h3></div></translation> </message> - <message> - <location line="+125"/> - <source>Copy &Link Location</source> - <translation>&Link-Adresse kopieren</translation> - </message> - <message> - <location line="+3"/> - <source>Open Link in New Tab Ctrl+LMB</source> - <translation>Link in neuem Reiter öffnen </translation> - </message> - <message> - <location line="-275"/> - <source>Open Link in New Tab</source> - <translation>Link in neuem Reiter öffnen</translation> - </message> - <message> - <location line="+209"/> - <source>Unable to launch external application. -</source> - <translation>Fehler beim Starten der externen Anwendung. -</translation> - </message> </context> <context> <name>IndexWindow</name> <message> - <location filename="../tools/assistant/tools/assistant/indexwindow.cpp" line="+66"/> + <location filename="../tools/assistant/tools/assistant/indexwindow.cpp" line="+68"/> <source>&Look for:</source> <translation>Suchen &nach:</translation> </message> <message> - <location line="+68"/> + <location line="+74"/> <source>Open Link</source> <translation>Link öffnen</translation> </message> @@ -341,29 +388,29 @@ <name>InstallDialog</name> <message> <location filename="../tools/assistant/tools/assistant/installdialog.ui"/> - <location filename="../tools/assistant/tools/assistant/installdialog.cpp" line="+76"/> + <location filename="../tools/assistant/tools/assistant/installdialog.cpp" line="+78"/> <source>Install Documentation</source> <translation>Dokumentation installieren</translation> </message> <message> - <location filename="../tools/assistant/tools/assistant/installdialog.cpp" line="+30"/> + <location filename="../tools/assistant/tools/assistant/installdialog.cpp" line="+33"/> <source>Downloading documentation info...</source> <translation>Dokumentationsinformation herunterladen ...</translation> </message> <message> - <location line="+48"/> + <location line="+51"/> <source>Download canceled.</source> <translation>Herunterladen abgebrochen.</translation> </message> <message> - <location line="+26"/> - <location line="+78"/> + <location line="+28"/> + <location line="+79"/> <location line="+27"/> <source>Done.</source> <translation>Fertig.</translation> </message> <message> - <location line="-90"/> + <location line="-91"/> <source>The file %1 already exists. Do you want to overwrite it?</source> <translation>Die Datei %1 existiert bereits. Möchten Sie sie überschreiben?</translation> </message> @@ -378,14 +425,14 @@ <translation>Herunterladen der Datei %1 ...</translation> </message> <message> - <location line="+19"/> + <location line="+20"/> <location line="+42"/> - <location line="+38"/> + <location line="+40"/> <source>Download failed: %1.</source> <translation>Herunterladen fehlgeschlagen: %1.</translation> </message> <message> - <location line="-70"/> + <location line="-72"/> <source>Documentation info file is corrupt!</source> <translation>Die Dokumentationsdatei ist beschädigt.</translation> </message> @@ -400,7 +447,7 @@ <translation>Dokumentation %1 installieren ...</translation> </message> <message> - <location line="+22"/> + <location line="+23"/> <source>Error while installing documentation: %1</source> <translation>Fehler bei der Installation von: @@ -440,20 +487,20 @@ <context> <name>MainWindow</name> <message> - <location filename="../tools/assistant/tools/assistant/mainwindow.cpp" line="+110"/> - <location line="+383"/> + <location filename="../tools/assistant/tools/assistant/mainwindow.cpp" line="+123"/> + <location line="+366"/> <source>Index</source> <translation>Index</translation> </message> <message> - <location line="-377"/> - <location line="+375"/> + <location line="-360"/> + <location line="+358"/> <source>Contents</source> <translation>Inhalt</translation> </message> <message> - <location line="-370"/> - <location line="+374"/> + <location line="-351"/> + <location line="+355"/> <source>Bookmarks</source> <translation>Lesezeichen</translation> </message> @@ -463,20 +510,14 @@ <translation>Suchen</translation> </message> <message> - <location line="-364"/> - <location line="+207"/> - <location line="+514"/> + <location line="-335"/> + <location line="+672"/> + <location line="+284"/> <source>Qt Assistant</source> <translation>Qt Assistant</translation> </message> <message> - <location line="-546"/> - <location line="+5"/> - <source>Unfiltered</source> - <translation>Ohne Filter</translation> - </message> - <message> - <location line="+107"/> + <location line="-702"/> <source>Page Set&up...</source> <translation>S&eite einrichten ...</translation> </message> @@ -506,7 +547,12 @@ <translation>&Beenden</translation> </message> <message> - <location line="+5"/> + <location line="+3"/> + <source>CTRL+Q</source> + <translation>CTRL+Q</translation> + </message> + <message> + <location line="+6"/> <source>&Copy selected Text</source> <translation>Ausgewählten Text &kopieren</translation> </message> @@ -616,12 +662,12 @@ <translation>Ctrl+Alt+Left</translation> </message> <message> - <location line="+4"/> - <source>Add Bookmark...</source> - <translation>Lesezeichen hinzufügen ...</translation> + <location line="+591"/> + <source>Could not register file '%1': %2</source> + <translation>Die Datei '%1' konnte nicht registriert werden: %2</translation> </message> <message> - <location line="+5"/> + <location line="-584"/> <source>About...</source> <translation>Über ...</translation> </message> @@ -631,12 +677,12 @@ <translation>Navigationsleiste</translation> </message> <message> - <location line="+76"/> + <location line="+69"/> <source>Toolbars</source> <translation>Werkzeugleisten</translation> </message> <message> - <location line="+15"/> + <location line="+16"/> <source>Filter Toolbar</source> <translation>Filterleiste</translation> </message> @@ -646,7 +692,7 @@ <translation>Filter:</translation> </message> <message> - <location line="+25"/> + <location line="+26"/> <source>Address Toolbar</source> <translation>Adressleiste</translation> </message> @@ -656,27 +702,27 @@ <translation>Adresse:</translation> </message> <message> - <location line="+114"/> + <location line="+112"/> <source>Could not find the associated content item.</source> <translation>Der zugehörige Inhaltseintrag konnte nicht gefunden werden.</translation> </message> <message> - <location line="+71"/> + <location line="+60"/> <source>About %1</source> <translation>Über %1</translation> </message> <message> - <location line="+114"/> + <location line="+175"/> <source>Updating search index</source> <translation>Suchindex wird aufgebaut</translation> </message> <message> - <location line="-640"/> + <location line="-661"/> <source>Looking for Qt Documentation...</source> <translation>Suche nach Qt-Dokumentation ...</translation> </message> <message> - <location line="+241"/> + <location line="+219"/> <source>&Window</source> <translation>&Fenster</translation> </message> @@ -696,12 +742,12 @@ <translation>Zoom</translation> </message> <message> - <location line="-159"/> + <location line="-161"/> <source>&File</source> <translation>&Datei</translation> </message> <message> - <location line="+25"/> + <location line="+29"/> <source>&Edit</source> <translation>&Bearbeiten</translation> </message> @@ -721,41 +767,36 @@ <translation>ALT+Home</translation> </message> <message> - <location line="+29"/> + <location line="+30"/> <source>&Bookmarks</source> <translation>&Lesezeichen</translation> </message> <message> - <location line="+5"/> + <location line="+2"/> <source>&Help</source> <translation>&Hilfe</translation> </message> <message> - <location line="-40"/> + <location line="-38"/> <source>ALT+O</source> <translation>ALT+O</translation> </message> - <message> - <location line="+38"/> - <source>CTRL+D</source> - <translation>CTRL+D</translation> - </message> </context> <context> <name>PreferencesDialog</name> <message> - <location filename="../tools/assistant/tools/assistant/preferencesdialog.cpp" line="+259"/> - <location line="+43"/> + <location filename="../tools/assistant/tools/assistant/preferencesdialog.cpp" line="+252"/> + <location line="+44"/> <source>Add Documentation</source> <translation>Dokumentation hinzufügen</translation> </message> <message> - <location line="-43"/> + <location line="-44"/> <source>Qt Compressed Help Files (*.qch)</source> <translation>Komprimierte Hilfedateien (*.qch)</translation> </message> <message> - <location line="+37"/> + <location line="+38"/> <source>The specified file is not a valid Qt Help File!</source> <translation>Die angegebene Datei ist keine Qt-Hilfedatei.</translation> </message> @@ -765,7 +806,7 @@ <translation>Der Namespace %1 ist bereits registriert.</translation> </message> <message> - <location line="+31"/> + <location line="+32"/> <source>Remove Documentation</source> <translation>Dokumentation entfernen</translation> </message> @@ -785,7 +826,7 @@ <translation>OK</translation> </message> <message> - <location line="+88"/> + <location line="+83"/> <source>Use custom settings</source> <translation>Benutzerdefinierte Einstellungen verwenden</translation> </message> @@ -909,118 +950,9 @@ </message> </context> <context> - <name>QObject</name> - <message> - <location filename="../tools/assistant/tools/assistant/cmdlineparser.cpp" line="+112"/> - <source>The specified collection file does not exist!</source> - <translation>Die angegebene Katalogdatei (collection file) kann nicht gefunden werden.</translation> - </message> - <message> - <location line="+4"/> - <source>Missing collection file!</source> - <translation>Fehlende Katalogdatei.</translation> - </message> - <message> - <location line="+9"/> - <source>Invalid URL!</source> - <translation>Ungültige URL.</translation> - </message> - <message> - <location line="+4"/> - <source>Missing URL!</source> - <translation>Fehlende URL.</translation> - </message> - <message> - <location line="+17"/> - <location line="+19"/> - <location line="+19"/> - <source>Unknown widget: %1</source> - <translation>Unbekanntes Objekt: %1</translation> - </message> - <message> - <location line="-34"/> - <location line="+19"/> - <location line="+19"/> - <source>Missing widget!</source> - <translation>Fehlendes Objekt.</translation> - </message> - <message> - <location line="+7"/> - <location line="+12"/> - <source>The specified Qt help file does not exist!</source> - <translation>Die angegebene Hilfedatei kann nicht gefunden werden.</translation> - </message> - <message> - <location line="-7"/> - <location line="+12"/> - <source>Missing help file!</source> - <translation>Fehlende Hilfedatei.</translation> - </message> - <message> - <location line="+7"/> - <source>Missing filter argument!</source> - <translation>Das Filter-Argument fehlt.</translation> - </message> - <message> - <location line="+12"/> - <source>Unknown option: %1</source> - <translation>Unbekannte Option: %1</translation> - </message> - <message> - <location line="+30"/> - <location line="+2"/> - <source>Qt Assistant</source> - <translation>Qt Assistant</translation> - </message> - <message> - <location filename="../tools/assistant/tools/assistant/main.cpp" line="+225"/> - <source>Could not register documentation file -%1 - -Reason: -%2</source> - <translation>Dokumentationsdatei %1 kann nicht registriert werden - -Grund: -%2</translation> - </message> - <message> - <location line="+4"/> - <source>Documentation successfully registered.</source> - <translation>Dokumentation erfolgreich registriert.</translation> - </message> - <message> - <location line="+11"/> - <source>Could not unregister documentation file -%1 - -Reason: -%2</source> - <translation>Registrierung der Dokumentationsdatei %1 kann nicht aufgehoben werden - -Grund: -%2</translation> - </message> - <message> - <location line="-3"/> - <source>Documentation successfully unregistered.</source> - <translation>Dokumentation erfolgreich entfernt.</translation> - </message> - <message> - <location line="+40"/> - <source>Cannot load sqlite database driver!</source> - <translation>Der Datenbanktreiber für SQLite kann nicht geladen werden.</translation> - </message> - <message> - <location line="+9"/> - <source>The specified collection file could not be read!</source> - <translation>Die angegebene Katalogdatei (collection file) kann nicht gelesen werden.</translation> - </message> -</context> -<context> <name>RemoteControl</name> <message> - <location filename="../tools/assistant/tools/assistant/remotecontrol.cpp" line="+163"/> + <location filename="../tools/assistant/tools/assistant/remotecontrol.cpp" line="+165"/> <source>Debugging Remote Control</source> <translation>Debugging Remote Control</translation> </message> @@ -1033,7 +965,7 @@ Grund: <context> <name>SearchWidget</name> <message> - <location filename="../tools/assistant/tools/assistant/searchwidget.cpp" line="+196"/> + <location filename="../tools/assistant/tools/assistant/searchwidget.cpp" line="+210"/> <source>&Copy</source> <translation>&Kopieren</translation> </message> @@ -1056,7 +988,7 @@ Grund: <context> <name>TopicChooser</name> <message> - <location filename="../tools/assistant/tools/assistant/topicchooser.cpp" line="+54"/> + <location filename="../tools/assistant/tools/assistant/topicchooser.cpp" line="+53"/> <source>Choose a topic for <b>%1</b>:</source> <translation>Wählen Sie ein Thema für <b>%1</b>:</translation> </message> diff --git a/translations/designer_de.ts b/translations/designer_de.ts index 8c1ba68..475a5d5 100644 --- a/translations/designer_de.ts +++ b/translations/designer_de.ts @@ -506,7 +506,7 @@ <translation>Werkzeugleiste löschen</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="+1195"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="+1194"/> <source>Set action text</source> <translation>Text der Aktion setzen</translation> </message> @@ -621,7 +621,7 @@ <translation>Skript ändern</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="+1213"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="+1225"/> <source>Changed '%1' of '%2'</source> <translation>'%1' von '%2' geändert</translation> </message> @@ -635,7 +635,7 @@ </translation> </message> <message> - <location line="+76"/> + <location line="+84"/> <source>Reset '%1' of '%2'</source> <translation>'%1' von '%2' zurücksetzen</translation> </message> @@ -1109,7 +1109,7 @@ <context> <name>FormWindow</name> <message> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="+1701"/> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="+1754"/> <source>Unexpected element <%1></source> <translation>Ungültiges Element <%1></translation> </message> @@ -1985,7 +1985,7 @@ Möchten Sie es noch einmal versuchen?</translation> <context> <name>QDesignerMenu</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="-1181"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="-1179"/> <source>Type Here</source> <translation>Geben Sie Text ein</translation> </message> @@ -2011,7 +2011,7 @@ Möchten Sie es noch einmal versuchen?</translation> </message> <message> <location line="+27"/> - <location line="+650"/> + <location line="+648"/> <source>Add separator</source> <translation>Trenner hinzufügen</translation> </message> @@ -2085,7 +2085,7 @@ Möchten Sie es noch einmal versuchen?</translation> <context> <name>QDesignerPropertySheet</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_propertysheet.cpp" line="+754"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_propertysheet.cpp" line="+755"/> <source>Dynamic Properties</source> <translation>Dynamische Eigenschaften</translation> </message> @@ -2456,7 +2456,7 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtBoolEdit</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="+247"/> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="+255"/> <location line="+10"/> <location line="+25"/> <source>True</source> @@ -2472,7 +2472,7 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtBoolPropertyManager</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+1469"/> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+1507"/> <source>True</source> <translation>Wahr</translation> </message> @@ -2501,7 +2501,7 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtColorPropertyManager</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+4750"/> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+4718"/> <source>Red</source> <translation>Rot</translation> </message> @@ -2524,7 +2524,7 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtCursorDatabase</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="-226"/> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="-234"/> <source>Arrow</source> <translation>Pfeil</translation> </message> @@ -3080,7 +3080,7 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtKeySequenceEdit</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="+241"/> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="+249"/> <source>Clear Shortcut</source> <translation>Tastenkürzel löschen</translation> </message> @@ -3522,7 +3522,7 @@ Dies kann zum Beispiel eine Sprachkennung wie "_de" sein.</translation <context> <name>QtResourceViewDialog</name> <message> - <location line="+250"/> + <location line="+252"/> <source>Select Resource</source> <translation>Ressource auswählen</translation> </message> @@ -4034,7 +4034,7 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::ActionModel</name> <message> - <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="+95"/> + <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="+89"/> <source>Name</source> <translation>Name</translation> </message> @@ -4727,7 +4727,7 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::FormWindow</name> <message> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="-1267"/> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="-1322"/> <source>Edit contents</source> <translation>Ändern</translation> </message> @@ -4737,34 +4737,33 @@ Möchten Sie sie überschreiben?</translation> <translation>F2</translation> </message> <message> - <location line="+841"/> + <location line="+840"/> <source>Resize</source> <translation>Größe ändern</translation> </message> <message> - <location line="+218"/> - <location line="+15"/> + <location line="+248"/> <source>Key Move</source> <translation>Verschieben mittels Tastatur</translation> </message> <message> - <location line="+276"/> + <location line="+317"/> <source>Paste error</source> <translation>Fehler beim Einfügen</translation> </message> <message> - <location line="+450"/> + <location line="+448"/> <source>Lay out</source> <translation>Layout</translation> </message> <message> - <location line="+493"/> + <location line="+485"/> <location line="+55"/> <source>Drop widget</source> <translation>Widget einfügen</translation> </message> <message numerus="yes"> - <location line="-1063"/> + <location line="-1053"/> <source>Paste %n action(s)</source> <translation> <numerusform>Eine Aktion einfügen</numerusform> @@ -4772,12 +4771,17 @@ Möchten Sie sie überschreiben?</translation> </translation> </message> <message> - <location line="-511"/> + <location line="-565"/> <source>Insert widget '%1'</source> <translation>Widget '%1' einfügen</translation> </message> + <message> + <location line="+313"/> + <source>Key Resize</source> + <translation>Größe ändern mittels Tastatur</translation> + </message> <message numerus="yes"> - <location line="+513"/> + <location line="+254"/> <source>Paste %n widget(s)</source> <translation> <numerusform>Widget einfügen</numerusform> @@ -4800,17 +4804,17 @@ Möchten Sie sie überschreiben?</translation> <translation>Bitte lösen Sie das Layout des gewünschten Containers auf und wählen Sie ihn erneut aus, um die Widgets einzufügen.</translation> </message> <message> - <location line="+408"/> + <location line="+406"/> <source>Select Ancestor</source> <translation>Übergeordnetes Widget auswählen</translation> </message> <message> - <location line="+581"/> + <location line="+573"/> <source>A QMainWindow-based form does not contain a central widget.</source> <translation>Ein auf QMainWindow basierendes Formular enthält kein zentrales Widget.</translation> </message> <message> - <location line="-802"/> + <location line="-794"/> <source>Raise widgets</source> <translation>Widgets nach vorn bringen</translation> </message> diff --git a/translations/linguist_de.ts b/translations/linguist_de.ts index 101aa5b..14095ba 100644 --- a/translations/linguist_de.ts +++ b/translations/linguist_de.ts @@ -4,7 +4,7 @@ <context> <name>AboutDialog</name> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1358"/> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1366"/> <source>Qt Linguist</source> <translation>Qt Linguist</translation> </message> @@ -286,7 +286,7 @@ Es wird mit einer einfachen Universalform gearbeitet.</translation> <context> <name>FormMultiWidget</name> <message> - <location filename="../tools/linguist/linguist/messageeditorwidgets.cpp" line="+296"/> + <location filename="../tools/linguist/linguist/messageeditorwidgets.cpp" line="+302"/> <source>Alt+Delete</source> <extracomment>translate, but don't change</extracomment> <translation>Alt+Delete</translation> @@ -317,7 +317,7 @@ Es wird mit einer einfachen Universalform gearbeitet.</translation> <context> <name>LRelease</name> <message numerus="yes"> - <location filename="../tools/linguist/shared/qm.cpp" line="+761"/> + <location filename="../tools/linguist/shared/qm.cpp" line="+763"/> <source>Dropped %n message(s) which had no ID.</source> <translation> <numerusform>Es wurde ein Eintrag ohne Bezeichner gelöscht.</numerusform> @@ -862,11 +862,6 @@ Es wird mit einer einfachen Universalform gearbeitet.</translation> </message> <message> <location/> - <source>Display information about the Qt toolkit by Trolltech.</source> - <translation>Informationen über das Qt-Toolkit von Trolltech anzeigen.</translation> - </message> - <message> - <location/> <source>&What's This?</source> <translation>&Direkthilfe</translation> </message> @@ -914,13 +909,13 @@ Es wird mit einer einfachen Universalform gearbeitet.</translation> <translation>Freigeben unter ...</translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-2005"/> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-2013"/> <source></source> <comment>This is the application's main window.</comment> <translation></translation> </message> <message> - <location line="+188"/> + <location line="+190"/> <source>Source text</source> <translation>Ursprungstext</translation> </message> @@ -947,12 +942,12 @@ Es wird mit einer einfachen Universalform gearbeitet.</translation> <translation>Dieser Bereich zeigt die Kontexte an.</translation> </message> <message> - <location line="+15"/> + <location line="+13"/> <source>Strings</source> <translation>Zeichenketten</translation> </message> <message> - <location line="+39"/> + <location line="+37"/> <source>Phrases and guesses</source> <translation>Wörterbuch und Vorschläge</translation> </message> @@ -973,7 +968,7 @@ Es wird mit einer einfachen Universalform gearbeitet.</translation> <translation>Geändert</translation> </message> <message> - <location line="+130"/> + <location line="+139"/> <source>Loading...</source> <translation>Lade ...</translation> </message> @@ -1010,7 +1005,7 @@ Soll die erstgenannte Datei übersprungen werden?</translation> </translation> </message> <message> - <location line="+93"/> + <location line="+94"/> <source>Related files (%1);;</source> <translation>Verwandte Dateien (%1);;</translation> </message> @@ -1390,7 +1385,7 @@ Alle Dateien (*)</translation> <translation>Möchten Sie das Wörterbuch '%1' speichern?</translation> </message> <message> - <location line="+323"/> + <location line="+349"/> <source>All</source> <translation>Alle</translation> </message> @@ -1411,7 +1406,7 @@ Alle Dateien (*)</translation> </message> <message> <location/> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-536"/> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-562"/> <source>Translation File &Settings...</source> <translation>E&instellungen ...</translation> </message> @@ -1495,6 +1490,11 @@ Alle Dateien (*)</translation> <source>Length Variants</source> <translation>Längenvarianten</translation> </message> + <message> + <location/> + <source>Display information about the Qt toolkit by Nokia.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>MessageEditor</name> @@ -1535,12 +1535,12 @@ Alle Dateien (*)</translation> <translation>Chinesisch</translation> </message> <message> - <location line="+53"/> + <location line="+47"/> <source>This whole panel allows you to view and edit the translation of some source text.</source> <translation>Dieser Bereich erlaubt die Darstellung und Änderung der Übersetzung eines Textes.</translation> </message> <message> - <location line="+18"/> + <location line="+10"/> <source>Source text</source> <translation>Ursprungstext</translation> </message> @@ -1575,7 +1575,7 @@ Alle Dateien (*)</translation> <translation>Hier können Sie Hinweise für den eigenen Gebrauch eintragen. Diese haben keinen Einflusse auf die Übersetzung.</translation> </message> <message> - <location line="+232"/> + <location line="+234"/> <source>%1 translation (%2)</source> <translation>Übersetzung %1 (%2)</translation> </message> @@ -1605,7 +1605,7 @@ Zeile: %2</translation> <context> <name>MessageModel</name> <message> - <location filename="../tools/linguist/linguist/messagemodel.cpp" line="+832"/> + <location filename="../tools/linguist/linguist/messagemodel.cpp" line="+839"/> <source>Completion status for %1</source> <translation>Bearbeitungsstand von %1</translation> </message> @@ -1628,7 +1628,7 @@ Zeile: %2</translation> <context> <name>MsgEdit</name> <message> - <location filename="../tools/linguist/linguist/messageeditor.cpp" line="-614"/> + <location filename="../tools/linguist/linguist/messageeditor.cpp" line="-602"/> <source></source> <comment>This is the right panel of the main window.</comment> <translation></translation> @@ -1807,7 +1807,7 @@ Zeile: %2</translation> <translation>Alle Dateien (*)</translation> </message> <message> - <location filename="../tools/linguist/linguist/messagemodel.cpp" line="-1127"/> + <location filename="../tools/linguist/linguist/messagemodel.cpp" line="-1134"/> <location line="+27"/> <location line="+67"/> <location line="+39"/> @@ -1843,7 +1843,7 @@ Zeile: %2</translation> <translation>XLIFF-Übersetzungsdateien</translation> </message> <message> - <location filename="../tools/linguist/shared/qph.cpp" line="+183"/> + <location filename="../tools/linguist/shared/qph.cpp" line="+195"/> <source>Qt Linguist 'Phrase Book'</source> <translation>Qt-Linguist-Wörterbuch</translation> </message> @@ -1985,12 +1985,12 @@ Zeile: %2</translation> <context> <name>TranslationSettingsDialog</name> <message> - <location filename="../tools/linguist/linguist/translationsettingsdialog.cpp" line="+68"/> + <location filename="../tools/linguist/linguist/translationsettingsdialog.cpp" line="+93"/> <source>Any Country</source> <translation>Land</translation> </message> <message> - <location line="+11"/> + <location line="-22"/> <location line="+8"/> <source>Settings for '%1' - Qt Linguist</source> <translation>Einstellungen für '%1' - Qt Linguist</translation> diff --git a/translations/qt_de.ts b/translations/qt_de.ts index 6447451..f02a7bb 100644 --- a/translations/qt_de.ts +++ b/translations/qt_de.ts @@ -4,7 +4,7 @@ <context> <name>CloseButton</name> <message> - <location filename="../src/gui/widgets/qtabbar.cpp" line="+2264"/> + <location filename="../src/gui/widgets/qtabbar.cpp" line="+2266"/> <source>Close Tab</source> <translation>Schließen</translation> </message> @@ -372,6 +372,7 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass <message> <location line="+6"/> <source>Decay time (ms)</source> + <extracomment>DecayTime: Time over which reverberation is diminished.</extracomment> <translation>Abklingzeit (ms)</translation> </message> <message> @@ -548,7 +549,7 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass <context> <name>Q3FileDialog</name> <message> - <location filename="../src/qt3support/dialogs/q3filedialog.cpp" line="+827"/> + <location filename="../src/qt3support/dialogs/q3filedialog.cpp" line="+835"/> <source>Copy or Move a File</source> <translation>Datei kopieren oder verschieben</translation> </message> @@ -1212,7 +1213,7 @@ nach <translation>Diese Socket-Operation wird nicht unterstützt</translation> </message> <message> - <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+585"/> + <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+586"/> <location filename="../src/network/socket/qabstractsocket.cpp" line="+200"/> <source>Socket operation timed out</source> <translation>Das Zeitlimit für die Operation wurde überschritten</translation> @@ -1257,7 +1258,7 @@ nach <context> <name>QApplication</name> <message> - <location filename="../src/gui/kernel/qapplication.cpp" line="+2287"/> + <location filename="../src/gui/kernel/qapplication.cpp" line="+2309"/> <source>QT_LAYOUT_DIRECTION</source> <comment>Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.</comment> <translation>LTR</translation> @@ -1327,7 +1328,7 @@ nach <context> <name>QColorDialog</name> <message> - <location filename="../src/gui/dialogs/qcolordialog.cpp" line="+1356"/> + <location filename="../src/gui/dialogs/qcolordialog.cpp" line="+1355"/> <source>Hu&e:</source> <translation>Farb&ton:</translation> </message> @@ -1367,7 +1368,7 @@ nach <translation>Farbauswahl</translation> </message> <message> - <location line="+184"/> + <location line="+183"/> <source>&Basic colors</source> <translation>Grundfar&ben</translation> </message> @@ -1567,7 +1568,7 @@ nach <message> <location filename="../src/gui/dialogs/qmessagebox.cpp" line="+1876"/> <location line="+464"/> - <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+650"/> + <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+648"/> <source>OK</source> <translation>OK</translation> </message> @@ -1818,7 +1819,7 @@ nach <context> <name>QFileDialog</name> <message> - <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+558"/> + <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+557"/> <location line="+471"/> <source>All Files (*)</source> <translation>Alle Dateien (*)</translation> @@ -1906,7 +1907,7 @@ nach <translation>Verzeichnisse</translation> </message> <message> - <location filename="../src/gui/dialogs/qfiledialog_win.cpp" line="+174"/> + <location filename="../src/gui/dialogs/qfiledialog_win.cpp" line="+148"/> <source>All Files (*.*)</source> <translation>Alle Dateien (*.*)</translation> </message> @@ -2059,7 +2060,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QFileSystemModel</name> <message> - <location filename="../src/gui/dialogs/qfilesystemmodel.cpp" line="+744"/> + <location filename="../src/gui/dialogs/qfilesystemmodel.cpp" line="+740"/> <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+476"/> <source>%1 TB</source> <translation>%1 TB</translation> @@ -2088,7 +2089,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <translation>%1 Byte</translation> </message> <message> - <location line="+77"/> + <location line="+89"/> <source>Invalid filename</source> <translation>Ungültiger Dateiname</translation> </message> @@ -2125,7 +2126,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <translation>Änderungsdatum</translation> </message> <message> - <location filename="../src/gui/dialogs/qfilesystemmodel_p.h" line="+258"/> + <location filename="../src/gui/dialogs/qfilesystemmodel_p.h" line="+261"/> <source>My Computer</source> <translation>Mein Computer</translation> </message> @@ -2558,17 +2559,30 @@ Möchten Sie die Datei trotzdem löschen?</translation> </message> </context> <context> + <name>QGstreamerPlayerSession</name> + <message> + <location filename="../src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayersession.cpp" line="+270"/> + <source>Unable to play %1</source> + <translation>%1 kann nicht abgespielt werden</translation> + </message> +</context> +<context> <name>QHostInfo</name> <message> <location filename="../src/network/kernel/qhostinfo_p.h" line="+101"/> <source>Unknown error</source> <translation>Unbekannter Fehler</translation> </message> + <message> + <location filename="../src/network/kernel/qhostinfo.cpp" line="+168"/> + <source>No host name given</source> + <translation>Es wurde kein Hostname angegeben</translation> + </message> </context> <context> <name>QHostInfoAgent</name> <message> - <location filename="../src/network/kernel/qhostinfo_unix.cpp" line="+257"/> + <location filename="../src/network/kernel/qhostinfo_unix.cpp" line="+259"/> <location line="+32"/> <location filename="../src/network/kernel/qhostinfo_win.cpp" line="+216"/> <location line="+27"/> @@ -2591,12 +2605,14 @@ Möchten Sie die Datei trotzdem löschen?</translation> <translation>Unbekannter Fehler</translation> </message> <message> + <location line="-98"/> <location filename="../src/network/kernel/qhostinfo_win.cpp" line="-67"/> <source>No host name given</source> <translation>Es wurde kein Hostname angegeben</translation> </message> <message> - <location line="+0"/> + <location line="+1"/> + <location filename="../src/network/kernel/qhostinfo_win.cpp" line="+0"/> <source>Invalid hostname</source> <translation>Ungültiger Rechnername</translation> </message> @@ -2919,7 +2935,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QIODevice</name> <message> - <location filename="../src/corelib/global/qglobal.cpp" line="+2096"/> + <location filename="../src/corelib/global/qglobal.cpp" line="+2094"/> <source>Permission denied</source> <translation>Zugriff verweigert</translation> </message> @@ -3003,7 +3019,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <translation>Operation unmap fehlgeschlagen für '%1': %2</translation> </message> <message> - <location line="+345"/> + <location line="+361"/> <source>The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5]</source> <translation>Das Plugin '%1' verwendet eine inkompatible Qt-Bibliothek. (%2.%3.%4) [%5]</translation> </message> @@ -3055,7 +3071,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QLineEdit</name> <message> - <location filename="../src/gui/widgets/qlineedit.cpp" line="+2112"/> + <location filename="../src/gui/widgets/qlineedit.cpp" line="+2104"/> <source>Select All</source> <translation>Alles auswählen</translation> </message> @@ -3132,7 +3148,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <location line="+3"/> <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/> <location filename="../src/network/socket/qlocalsocket_win.cpp" line="+80"/> - <location line="+45"/> + <location line="+59"/> <source>%1: Invalid name</source> <translation>%1: Ungültiger Name</translation> </message> @@ -3163,7 +3179,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <message> <location line="+3"/> <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/> - <location filename="../src/network/socket/qlocalsocket_win.cpp" line="-50"/> + <location filename="../src/network/socket/qlocalsocket_win.cpp" line="-64"/> <source>%1: Connection error</source> <translation>%1: Verbindungsfehler</translation> </message> @@ -3376,6 +3392,39 @@ Möchten Sie die Datei trotzdem löschen?</translation> </message> </context> <context> + <name>QMediaPlayer</name> + <message> + <location filename="../src/multimedia/playback/qmediaplayer.cpp" line="+471"/> + <source>The QMediaPlayer object does not have a valid service</source> + <translation>Das QMediaPlayer-Objekt verfügt über keinen gültigen Dienst</translation> + </message> +</context> +<context> + <name>QMediaPlaylist</name> + <message> + <location filename="../src/multimedia/base/qmediaplaylist.cpp" line="+454"/> + <location line="+46"/> + <source>Could not add items to read only playlist.</source> + <translation>Es konnten keine Einträge zur Wiedergabeliste hinzugefügt werden, da sie schreibgeschützt ist.</translation> + </message> + <message> + <location line="-27"/> + <location line="+46"/> + <source>Playlist format is not supported</source> + <translation>Das Format der Wiedergabeliste ist nicht unterstützt</translation> + </message> + <message> + <location line="+26"/> + <source>The file could not be accessed.</source> + <translation>Auf die Datei konnte nicht zugegriffen werden.</translation> + </message> + <message> + <location line="+35"/> + <source>Playlist format is not supported.</source> + <translation>Das Format der Wiedergabeliste ist nicht unterstützt.</translation> + </message> +</context> +<context> <name>QMenu</name> <message> <location filename="../src/plugins/accessible/widgets/qaccessiblemenu.cpp" line="+157"/> @@ -3470,7 +3519,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QNativeSocketEngine</name> <message> - <location filename="../src/network/socket/qnativesocketengine.cpp" line="+206"/> + <location filename="../src/network/socket/qnativesocketengine.cpp" line="+209"/> <source>The remote host closed the connection</source> <translation>Der entfernte Rechner hat die Verbindung geschlossen</translation> </message> @@ -3609,12 +3658,35 @@ Möchten Sie die Datei trotzdem löschen?</translation> </message> </context> <context> + <name>QNetworkAccessDataBackend</name> + <message> + <location filename="../src/network/access/qnetworkaccessdatabackend.cpp" line="+76"/> + <source>Operation not supported on %1</source> + <translation>Diese Operation wird von %1 nicht unterstützt</translation> + </message> + <message> + <location line="+25"/> + <source>Invalid URI: %1</source> + <translation>Ungültiger URI: %1</translation> + </message> +</context> +<context> <name>QNetworkAccessDebugPipeBackend</name> <message> <location filename="../src/network/access/qnetworkaccessdebugpipebackend.cpp" line="+195"/> <source>Write error writing to %1: %2</source> <translation>Fehler beim Schreiben zu %1: %2</translation> </message> + <message> + <location line="+60"/> + <source>Socket error on %1: %2</source> + <translation>Socket-Fehler bei %1: %2</translation> + </message> + <message> + <location line="+15"/> + <source>Remote host closed the connection prematurely on %1</source> + <translation>Der entfernte Rechner hat die Verbindung zu %1 vorzeitig beendet</translation> + </message> </context> <context> <name>QNetworkAccessFileBackend</name> @@ -3678,37 +3750,106 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QNetworkAccessHttpBackend</name> <message> - <location filename="../src/network/access/qnetworkaccesshttpbackend.cpp" line="+599"/> + <location filename="../src/network/access/qnetworkaccesshttpbackend.cpp" line="+645"/> <source>No suitable proxy found</source> <translation>Es konnte kein geeigneter Proxy-Server gefunden werden</translation> </message> </context> <context> + <name>QNetworkAccessManager</name> + <message> + <location filename="../src/network/access/qnetworkreplyimpl.cpp" line="+862"/> + <source>Network access is disabled.</source> + <translation>Der Zugriff auf das Netzwerk ist nicht gestattet.</translation> + </message> +</context> +<context> <name>QNetworkReply</name> <message> - <location line="+101"/> + <location filename="../src/network/access/qnetworkaccesshttpbackend.cpp" line="+101"/> <source>Error downloading %1 - server replied: %2</source> <translation>Beim Herunterladen von %1 trat ein Fehler auf - Die Antwort des Servers ist: %2</translation> </message> <message> - <location filename="../src/network/access/qnetworkreplyimpl.cpp" line="+80"/> + <location filename="../src/network/access/qnetworkreplyimpl.cpp" line="-780"/> <source>Protocol "%1" is unknown</source> <translation>Das Protokoll "%1" ist unbekannt</translation> </message> + <message> + <location line="+486"/> + <source>Temporary network failure.</source> + <translation>Das Netzwerk ist zur Zeit ausgefallen.</translation> + </message> </context> <context> <name>QNetworkReplyImpl</name> <message> - <location line="+525"/> + <location line="+110"/> <location line="+28"/> <source>Operation canceled</source> <translation>Operation abgebrochen</translation> </message> </context> <context> + <name>QNetworkSession</name> + <message> + <location filename="../src/network/bearer/qnetworksession.cpp" line="+437"/> + <source>Invalid configuration.</source> + <translation>Ungültige Konfiguration.</translation> + </message> +</context> +<context> + <name>QNetworkSessionPrivateImpl</name> + <message> + <location filename="../src/plugins/bearer/qnetworksession_impl.cpp" line="+247"/> + <location filename="../src/plugins/bearer/symbian/qnetworksession_impl.cpp" line="+213"/> + <source>Unknown session error.</source> + <translation>Unbekannter Fehler bei Netzwerkverbindung.</translation> + </message> + <message> + <location line="+2"/> + <location filename="../src/plugins/bearer/symbian/qnetworksession_impl.cpp" line="+2"/> + <source>The session was aborted by the user or system.</source> + <translation>Die Verbindung wurde vom Nutzer oder vom Betriebssystem unterbrochen.</translation> + </message> + <message> + <location line="+2"/> + <location filename="../src/plugins/bearer/symbian/qnetworksession_impl.cpp" line="+2"/> + <source>The requested operation is not supported by the system.</source> + <translation>Die angeforderte Operation wird vom System nicht unterstützt.</translation> + </message> + <message> + <location line="+2"/> + <location filename="../src/plugins/bearer/symbian/qnetworksession_impl.cpp" line="+2"/> + <source>The specified configuration cannot be used.</source> + <translation>Die angegebene Konfiguration kann nicht verwendet werden.</translation> + </message> + <message> + <location line="+2"/> + <location filename="../src/plugins/bearer/symbian/qnetworksession_impl.cpp" line="+2"/> + <source>Roaming was aborted or is not possible.</source> + <translation>Das Roaming wurde abgebrochen oder ist hier nicht möglich.</translation> + </message> + <message> + <location filename="../src/plugins/bearer/icd/qnetworksession_impl.cpp" line="+1083"/> + <source>Roaming error</source> + <translation>Fehler beim Roaming</translation> + </message> + <message> + <location line="+3"/> + <source>Session aborted by user or system</source> + <translation>Die Verbindung wurde vom Nutzer oder vom Betriebssystem unterbrochen</translation> + </message> + <message> + <location line="+4"/> + <source>Unidentified Error</source> + <translation>Unbekannter Fehler</translation> + </message> +</context> +<context> <name>QOCIDriver</name> <message> - <location filename="../src/sql/drivers/oci/qsql_oci.cpp" line="+2083"/> + <location filename="../src/sql/drivers/oci/qsql_oci.cpp" line="+2082"/> <source>Unable to logon</source> <translation>Logon-Vorgang fehlgeschlagen</translation> </message> @@ -3782,12 +3923,12 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QODBCDriver</name> <message> - <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="+1806"/> + <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="+1791"/> <source>Unable to connect</source> <translation>Es kann keine Verbindung aufgebaut werden</translation> </message> <message> - <location line="+238"/> + <location line="+233"/> <source>Unable to disable autocommit</source> <translation>'autocommit' konnte nicht deaktiviert werden</translation> </message> @@ -3807,7 +3948,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <translation>'autocommit' konnte nicht aktiviert werden</translation> </message> <message> - <location line="-281"/> + <location line="-276"/> <source>Unable to connect - Driver doesn't support all functionality required</source> <translation>Es kann keine Verbindung aufgebaut werden weil der Treiber die benötigte Funktionalität nicht vollständig unterstützt</translation> </message> @@ -3815,19 +3956,19 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QODBCResult</name> <message> - <location line="-937"/> + <location line="-935"/> <location line="+351"/> <source>QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration</source> <translation>QODBCResult::reset: 'SQL_CURSOR_STATIC' konnte nicht als Attribut des Befehls gesetzt werden. Bitte prüfen Sie die Konfiguration Ihres ODBC-Treibers</translation> </message> <message> <location line="-334"/> - <location line="+628"/> + <location line="+626"/> <source>Unable to execute statement</source> <translation>Der Befehl konnte nicht ausgeführt werden</translation> </message> <message> - <location line="-547"/> + <location line="-545"/> <source>Unable to fetch next</source> <translation>Der nächste Datensatz konnte nicht abgeholt werden</translation> </message> @@ -3837,19 +3978,19 @@ Möchten Sie die Datei trotzdem löschen?</translation> <translation>Der Befehl konnte nicht initialisiert werden</translation> </message> <message> - <location line="+268"/> + <location line="+266"/> <source>Unable to bind variable</source> <translation>Die Variable konnte nicht gebunden werden</translation> </message> <message> <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+189"/> - <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="-467"/> - <location line="+576"/> + <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="-465"/> + <location line="+574"/> <source>Unable to fetch last</source> <translation>Der letzte Datensatz konnte nicht abgeholt werden</translation> </message> <message> - <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="-670"/> + <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="-668"/> <source>Unable to fetch</source> <translation>Es konnten keine Daten abgeholt werden</translation> </message> @@ -3867,41 +4008,15 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QObject</name> <message> - <location filename="../src/network/kernel/qhostinfo_unix.cpp" line="-97"/> - <source>Invalid hostname</source> - <translation>Ungültiger Rechnername</translation> - </message> - <message> - <location filename="../src/network/access/qnetworkaccessdatabackend.cpp" line="+74"/> - <source>Operation not supported on %1</source> - <translation>Diese Operation wird von %1 nicht unterstützt</translation> - </message> - <message> - <location line="+57"/> - <source>Invalid URI: %1</source> - <translation>Ungültiger URI: %1</translation> - </message> - <message> - <location filename="../src/network/access/qnetworkaccessdebugpipebackend.cpp" line="+60"/> - <source>Socket error on %1: %2</source> - <translation>Socket-Fehler bei %1: %2</translation> - </message> - <message> - <location line="+15"/> - <source>Remote host closed the connection prematurely on %1</source> - <translation>Der entfernte Rechner hat die Verbindung zu %1 vorzeitig beendet</translation> - </message> - <message> - <location filename="../src/network/kernel/qhostinfo.cpp" line="+168"/> - <location filename="../src/network/kernel/qhostinfo_unix.cpp" line="+0"/> - <source>No host name given</source> - <translation>Es wurde kein Hostname angegeben</translation> + <location filename="../src/declarative/util/qmlxmllistmodel.cpp" line="+370"/> + <source>"%1" duplicates a previous role name and will be disabled.</source> + <translation>"%1" ist bereits als Name einer Rolle vergeben und wird daher deaktiviert.</translation> </message> </context> <context> <name>QPPDOptionsModel</name> <message> - <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+1197"/> + <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+1195"/> <source>Name</source> <translation>Name</translation> </message> @@ -4959,7 +5074,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QSQLiteDriver</name> <message> - <location filename="../src/sql/drivers/sqlite/qsql_sqlite.cpp" line="+547"/> + <location filename="../src/sql/drivers/sqlite/qsql_sqlite.cpp" line="+538"/> <source>Error opening database</source> <translation>Die Datenbankverbindung konnte nicht geöffnet werden</translation> </message> @@ -4987,7 +5102,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QSQLiteResult</name> <message> - <location line="-404"/> + <location line="-395"/> <location line="+62"/> <location line="+8"/> <source>Unable to fetch row</source> @@ -5245,7 +5360,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QScriptDebuggerLocalsModel</name> <message> - <location filename="../src/scripttools/debugging/qscriptdebuggerlocalsmodel.cpp" line="+872"/> + <location filename="../src/scripttools/debugging/qscriptdebuggerlocalsmodel.cpp" line="+897"/> <source>Name</source> <translation>Name</translation> </message> @@ -6428,7 +6543,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Umdrehen</translation> </message> <message> - <location line="+575"/> + <location line="+602"/> <location line="+135"/> <source>Ctrl</source> <translation>Strg</translation> @@ -6462,7 +6577,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>F%1</translation> </message> <message> - <location line="-871"/> + <location line="-898"/> <source>Home Page</source> <translation>Startseite</translation> </message> @@ -6596,7 +6711,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Abbrechen</translation> </message> <message> - <location filename="../src/gui/kernel/qsoftkeymanager_s60.cpp" line="+273"/> + <location filename="../src/gui/kernel/qsoftkeymanager_s60.cpp" line="+312"/> <source>Exit</source> <translation>Beenden</translation> </message> @@ -6940,7 +7055,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QTextControl</name> <message> - <location filename="../src/gui/text/qtextcontrol.cpp" line="+2027"/> + <location filename="../src/gui/text/qtextcontrol.cpp" line="+2029"/> <source>&Undo</source> <translation>&Rückgängig</translation> </message> @@ -7989,7 +8104,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QWidget</name> <message> - <location filename="../src/gui/kernel/qwidget.cpp" line="+5728"/> + <location filename="../src/gui/kernel/qwidget.cpp" line="+5761"/> <source>*</source> <translation>*</translation> </message> @@ -8454,6 +8569,866 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> </message> </context> <context> + <name>QmlAbstractAnimation</name> + <message> + <location filename="../src/declarative/util/qmlanimation.cpp" line="+235"/> + <source>Cannot animate non-existent property "%1"</source> + <translation>Die Eigenschaft '%1" existiert nicht und kann daher nicht animiert werden</translation> + </message> + <message> + <location line="+3"/> + <source>Cannot animate read-only property "%1"</source> + <translation>Die Eigenschaft '%1" ist schreibgeschützt und kann daher nicht animiert werden</translation> + </message> +</context> +<context> + <name>QmlBehavior</name> + <message> + <location filename="../src/declarative/util/qmlbehavior.cpp" line="+122"/> + <source>Cannot change the animation assigned to a Behavior.</source> + <translation>Die zu einem Behavior-Element gehörende Animation kann nicht geändert werden.</translation> + </message> +</context> +<context> + <name>QmlBinding</name> + <message> + <location filename="../src/declarative/qml/qmlbinding.cpp" line="+195"/> + <source>Binding loop detected for property "%1"</source> + <translation>Bei der für die Eigenschaft "%1" angegebenen Bindung wurde eine Schleife festgestellt</translation> + </message> +</context> +<context> + <name>QmlCompiler</name> + <message> + <location filename="../src/declarative/qml/qmlcompiler.cpp" line="+214"/> + <location line="+1772"/> + <location line="+124"/> + <location line="+427"/> + <source>Invalid property assignment: "%1" is a read-only property</source> + <translation>Ungültige Zuweisung bei Eigenschaft: "%1" ist schreibgeschützt</translation> + </message> + <message> + <location line="-2314"/> + <source>Invalid property assignment: unknown enumeration</source> + <translation>Ungültige Zuweisung bei Eigenschaft: Ungültiger Aufzählungswert</translation> + </message> + <message> + <location line="+8"/> + <source>Invalid property assignment: string expected</source> + <translation>Ungültige Zuweisung bei Eigenschaft: Es wird eine Zeichenkette erwartet</translation> + </message> + <message> + <location line="+3"/> + <source>Invalid property assignment: url expected</source> + <translation>Ungültige Zuweisung bei Eigenschaft: Es wird eine URL erwartet</translation> + </message> + <message> + <location line="+6"/> + <source>Invalid property assignment: unsigned int expected</source> + <translation>Ungültige Zuweisung bei Eigenschaft: Es wird eine vorzeichenloser Ganzzahlwert erwartet</translation> + </message> + <message> + <location line="+7"/> + <source>Invalid property assignment: int expected</source> + <translation type="unfinished">Ungültige Zuweisung bei Eigenschaft: Es wird ein Ganzzahlwert erwartet</translation> + </message> + <message> + <location line="+7"/> + <source>Invalid property assignment: float expected</source> + <translation>Ungültige Zuweisung bei Eigenschaft: Es wird eine Gleitkommazahl erwartet</translation> + </message> + <message> + <location line="+7"/> + <source>Invalid property assignment: double expected</source> + <translation>Ungültige Zuweisung bei Eigenschaft: Es wird eine Gleitkommazahl (double) erwartet</translation> + </message> + <message> + <location line="+7"/> + <source>Invalid property assignment: color expected</source> + <translation>Ungültige Zuweisung bei Eigenschaft: Es wird eine Farbspezifikation erwartet</translation> + </message> + <message> + <location line="+7"/> + <source>Invalid property assignment: date expected</source> + <translation>Ungültige Zuweisung bei Eigenschaft: Es wird eine Datumsangabe erwartet</translation> + </message> + <message> + <location line="+7"/> + <source>Invalid property assignment: time expected</source> + <translation>Ungültige Zuweisung bei Eigenschaft: Es wird eine Zeitangabe erwartet</translation> + </message> + <message> + <location line="+7"/> + <source>Invalid property assignment: datetime expected</source> + <translation>Ungültige Zuweisung bei Eigenschaft: Es wird eine Datumsangabe erwartet</translation> + </message> + <message> + <location line="+8"/> + <source>Invalid property assignment: point expected</source> + <translation>Ungültige Zuweisung bei Eigenschaft: Es wird eine Koordinatenangabe für einen Punkt erwartet</translation> + </message> + <message> + <location line="+8"/> + <source>Invalid property assignment: size expected</source> + <translation>Ungültige Zuweisung bei Eigenschaft: Es wird eine Größenangabe erwartet</translation> + </message> + <message> + <location line="+8"/> + <source>Invalid property assignment: rect expected</source> + <translation>Ungültige Zuweisung bei Eigenschaft: Es werden Parameter für ein Rechteck erwartet</translation> + </message> + <message> + <location line="+5"/> + <source>Invalid property assignment: boolean expected</source> + <translation>Ungültige Zuweisung bei Eigenschaft: Es wird ein Boolescher Wert erwartet</translation> + </message> + <message> + <location line="+7"/> + <source>Invalid property assignment: 3D vector expected</source> + <translation>Ungültige Zuweisung bei Eigenschaft: Es wird ein dreidimensionaler Vektor erwartet</translation> + </message> + <message> + <location line="+9"/> + <source>Invalid property assignment: unsupported type "%1"</source> + <translation>Ungültige Zuweisung bei Eigenschaft: Der Typ "%1" ist nicht unterstützt</translation> + </message> + <message> + <location line="+801"/> + <location line="+3"/> + <source>Invalid component specification</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Invalid component id specification</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <location line="+565"/> + <source>id is not unique</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-555"/> + <source>Invalid component body specification</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>Cannot create empty component specification</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+17"/> + <source>Invalid Script block. Specify either the source property or inline script</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Invalid Script source value</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+24"/> + <source>Properties cannot be set on Script block</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+14"/> + <source>Invalid Script block</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+130"/> + <source>Incorrectly specified signal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+13"/> + <source>Empty signal assignment</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+36"/> + <source>Empty property assignment</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+12"/> + <source>Attached properties cannot be used here</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+15"/> + <location line="+104"/> + <source>Non-existent attached object</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-100"/> + <location line="+103"/> + <source>Invalid attached object assignment</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-50"/> + <source>Cannot assign to non-existent default property</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <location line="+339"/> + <source>Cannot assign to non-existent property "%1"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-308"/> + <source>Invalid use of namespace</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>Not an attached property name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+169"/> + <source>Invalid use of id property</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>"%1" is not a valid object id</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>id conflicts with type name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>id conflicts with namespace prefix</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+78"/> + <source>Invalid value in grouped property</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+10"/> + <location line="+8"/> + <source>Invalid grouped property access</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+16"/> + <source>Invalid property use</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+12"/> + <source>Property assignment expected</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Single property assignment expected</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>Unexpected object assignment</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+57"/> + <source>Cannot assign object to list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+12"/> + <source>Cannot assign primitives to lists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-6"/> + <source>Can only assign one binding to lists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+19"/> + <source>Cannot assign multiple values to a script property</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Invalid property assignment: script expected</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+129"/> + <source>Cannot assign object to property</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+97"/> + <source>Duplicate default property</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>Duplicate property name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>Duplicate signal name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Duplicate method name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+22"/> + <source>Invalid property nesting</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+55"/> + <source>Cannot override FINAL property</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+25"/> + <source>Invalid property type</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+174"/> + <location line="+9"/> + <source>No property alias location</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-4"/> + <location line="+25"/> + <source>Invalid alias location</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-16"/> + <source>Invalid alias reference. An alias reference must be specified as <id> or <id>.<property></source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Invalid alias reference. Unable to find id "%1"</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QmlCompositeTypeManager</name> + <message> + <location filename="../src/declarative/qml/qmlcompositetypemanager.cpp" line="+415"/> + <location line="+220"/> + <source>Resource %1 unavailable</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-141"/> + <source>Import %1 unavailable</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+30"/> + <source>Namespace %1 cannot be used as a type</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>%1 is not a type</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+42"/> + <source>Type %1 unavailable</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QmlEngine</name> + <message> + <location filename="../src/declarative/qml/qmlsqldatabase.cpp" line="+204"/> + <source>executeSql called outside transaction()</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+52"/> + <source>Read-only Transaction</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+20"/> + <source>Version mismatch: expected %1, found %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+14"/> + <source>SQL transaction failed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+21"/> + <source>transaction: missing callback</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+57"/> + <location line="+16"/> + <source>SQL: database version mismatch</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QmlGraphicsAnchors</name> + <message> + <location filename="../src/declarative/graphicsitems/qmlgraphicsanchors.cpp" line="+177"/> + <source>Possible anchor loop detected on fill.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+28"/> + <source>Possible anchor loop detected on centerIn.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+163"/> + <location line="+34"/> + <location line="+607"/> + <location line="+37"/> + <source>Cannot anchor to an item that isn't a parent or sibling.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-534"/> + <source>Possible anchor loop detected on vertical anchor.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+59"/> + <source>Possible anchor loop detected on horizontal anchor.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+422"/> + <source>Cannot specify left, right, and hcenter anchors.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+10"/> + <location line="+37"/> + <source>Cannot anchor to a null item.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-34"/> + <source>Cannot anchor a horizontal edge to a vertical edge.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <location line="+37"/> + <source>Cannot anchor item to self.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-25"/> + <source>Cannot specify top, bottom, and vcenter anchors.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Baseline anchor cannot be used in conjunction with top, bottom, or vcenter anchors.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+13"/> + <source>Cannot anchor a vertical edge to a horizontal edge.</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QmlGraphicsFlipable</name> + <message> + <location filename="../src/declarative/graphicsitems/qmlgraphicsflipable.cpp" line="+149"/> + <source>front is a write-once property</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+19"/> + <source>back is a write-once property</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QmlGraphicsTextInput</name> + <message> + <location filename="../src/declarative/graphicsitems/qmlgraphicstextinput.cpp" line="+594"/> + <location line="+9"/> + <source>Could not load cursor delegate</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+12"/> + <source>Could not instantiate cursor delegate</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QmlGraphicsVisualDataModel</name> + <message> + <location filename="../src/declarative/graphicsitems/qmlgraphicsvisualitemmodel.cpp" line="+826"/> + <source>Delegate component must be Item type.</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QmlInfo</name> + <message> + <location filename="../src/declarative/qml/qmlinfo.cpp" line="+112"/> + <location line="+3"/> + <source>unknown location</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QmlListModel</name> + <message> + <location filename="../src/declarative/util/qmllistmodel.cpp" line="+491"/> + <source>remove: index %1 out of range</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+30"/> + <source>insert: value is not an object</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>insert: index %1 out of range</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+29"/> + <source>move: out of range</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+49"/> + <source>append: value is not an object</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+39"/> + <source>get: index %1 out of range</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+33"/> + <source>set: value is not an object</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <location line="+39"/> + <source>set: index %1 out of range</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+49"/> + <source>ListElement: cannot use default property</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>ListElement: cannot use reserved "id" property</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+46"/> + <source>ListElement: cannot use script for property value</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+25"/> + <source>ListModel: undefined property '%1'</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QmlParentChange</name> + <message> + <location filename="../src/declarative/util/qmlstateoperations.cpp" line="+85"/> + <source>Unable to preserve appearance under complex transform</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+10"/> + <location line="+7"/> + <source>Unable to preserve appearance under non-uniform scale</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>Unable to preserve appearance under scale of 0</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QmlParser</name> + <message> + <location filename="../src/declarative/qml/parser/qmljslexer.cpp" line="+554"/> + <source>Illegal character</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+14"/> + <source>Unclosed string at end of line</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+26"/> + <source>Illegal escape squence</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+46"/> + <source>Illegal unicode escape sequence</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+26"/> + <source>Unclosed comment at end of file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+87"/> + <source>Illegal syntax for exponential number</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+26"/> + <source>Identifier cannot start with numeric literal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+331"/> + <source>Unterminated regular expression literal</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+24"/> + <source>Invalid regular expression flag '%0'</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/declarative/qml/parser/qmljsparser.cpp" line="+1767"/> + <location line="+67"/> + <source>Syntax error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-65"/> + <source>Unexpected token `%1'</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+28"/> + <location line="+24"/> + <source>Expected token `%1'</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../src/declarative/qml/qmlscriptparser.cpp" line="+267"/> + <source>Expected type name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+29"/> + <source>Invalid use of Script block</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+151"/> + <source>Invalid import qualifier ID</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> + <source>Library import requires a version</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+53"/> + <source>Expected parameter type</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+42"/> + <source>Invalid property type modifier</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>Unexpected property type modifier</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>Expected property type</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>Readonly not yet supported</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+194"/> + <source>QmlJS declaration outside Script element</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+19"/> + <source>Variable declarations not allow in inline Script blocks</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QmlPauseAnimation</name> + <message> + <location filename="../src/declarative/util/qmlanimation.cpp" line="+410"/> + <source>Cannot set a duration of < 0</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QmlPropertyAnimation</name> + <message> + <location line="-568"/> + <source>Unmatched parenthesis in easing function "%1"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>Easing function "%1" must start with "ease"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+15"/> + <source>Unknown easing curve "%1"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+10"/> + <location line="+9"/> + <source>Improperly specified parameter in easing function "%1"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> + <source>Unknown easing parameter "%1"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1754"/> + <source>Cannot set a duration of < 0</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QmlPropertyChanges</name> + <message> + <location filename="../src/declarative/util/qmlpropertychanges.cpp" line="+361"/> + <source>Cannot assign to non-existent property "%1"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Cannot assign to read-only property "%1"</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QmlVME</name> + <message> + <location filename="../src/declarative/qml/qmlvme.cpp" line="+195"/> + <source>Unable to create object of type %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+306"/> + <source>Cannot assign value %1 to property %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+22"/> + <source>Cannot assign object type %1 with no default method</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Cannot connect mismatched signal/slot %1 %vs. %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>Cannot assign an object to signal property %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+147"/> + <source>Cannot assign object to list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+41"/> + <source>Cannot assign object to interface property</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> + <source>Unable to create attached object</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+32"/> + <source>Cannot set properties on %1 as it is null</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QmlXmlListModelRole</name> + <message> + <location filename="../src/declarative/util/qmlxmllistmodel.cpp" line="-255"/> + <source>An XmlRole query must not start with '/'</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QmlXmlRoleList</name> + <message> + <location line="+430"/> + <source>An XmlListModel query must start with '/' or "//"</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>QtXmlPatterns</name> <message> <location filename="../src/xmlpatterns/data/qabstractduration.cpp" line="+99"/> diff --git a/translations/qt_help_de.ts b/translations/qt_help_de.ts index f64e741..40d1158 100644 --- a/translations/qt_help_de.ts +++ b/translations/qt_help_de.ts @@ -63,7 +63,7 @@ <translation>Unbekannter Filter '%1'.</translation> </message> <message> - <location line="+105"/> + <location line="+103"/> <source>Invalid documentation file '%1'!</source> <translation>Ungültige Dokumentationsdatei '%1'.</translation> </message> @@ -78,7 +78,7 @@ <translation>Die Datenbank '%1' kann nicht zur Optimierung geöffnet werden.</translation> </message> <message> - <location line="-438"/> + <location line="-436"/> <source>Cannot create directory: %1</source> <translation>Das Verzeichnis kann nicht angelegt werden: %1</translation> </message> @@ -88,7 +88,7 @@ <translation>Die Katalogdatei kann nicht kopiert werden: %1</translation> </message> <message> - <location line="+174"/> + <location line="+172"/> <source>Cannot register filter %1!</source> <translation>Der Filter kann nicht registriert werden: %1</translation> </message> @@ -120,23 +120,20 @@ <context> <name>QHelpEngineCore</name> <message> - <location filename="../tools/assistant/lib/qhelpenginecore.cpp" line="+523"/> - <source>The specified namespace does not exist!</source> - <translation>Der angegebene Namensraum existiert nicht.</translation> + <location filename="../tools/assistant/lib/qhelpenginecore.cpp" line="+122"/> + <source>Cannot open documentation file %1: %2!</source> + <translation>Die Dokumentationsdatei %1 kann nicht geöffnet werden: %2!</translation> </message> -</context> -<context> - <name>QHelpEngineCorePrivate</name> <message> - <location line="-401"/> - <source>Cannot open documentation file %1: %2!</source> - <translation>Die Dokumentationsdatei %1 kann nicht geöffnet werden: %2.</translation> + <location line="+404"/> + <source>The specified namespace does not exist!</source> + <translation>Der angegebene Namensraum existiert nicht.</translation> </message> </context> <context> <name>QHelpGenerator</name> <message> - <location filename="../tools/assistant/lib/qhelpgenerator.cpp" line="+157"/> + <location filename="../tools/assistant/lib/qhelpgenerator.cpp" line="+158"/> <source>Invalid help data!</source> <translation>Ungültige Hilfe-Daten.</translation> </message> @@ -216,7 +213,7 @@ <translation>Die Datei %1 kann nicht geöffnet werden. Wird übersprungen.</translation> </message> <message> - <location line="+131"/> + <location line="+133"/> <source>The filter %1 is already registered!</source> <translation>Der Filter %1 ist bereits registriert.</translation> </message> @@ -231,7 +228,7 @@ <translation>Indizes einfügen...</translation> </message> <message> - <location line="+80"/> + <location line="+91"/> <source>Insert contents...</source> <translation>Inhalt einfügen...</translation> </message> @@ -245,122 +242,142 @@ <source>Cannot register contents!</source> <translation>Inhalt kann nicht registriert werden.</translation> </message> + <message> + <location line="+56"/> + <source>File '%1' does not exist.</source> + <translation>Die Datei '%1' existiert nicht.</translation> + </message> + <message> + <location line="+19"/> + <source>File '%1' cannot be opened.</source> + <translation>Die Datei '%1' kann nicht geöffnet werden.</translation> + </message> + <message> + <location line="+19"/> + <source>File '%1' contains an invalid link to file '%2'</source> + <translation>Die Datei '%1' enthält einen ungültigen Verweis auf die Datei '%2'</translation> + </message> + <message> + <location line="+9"/> + <source>Invalid links in HTML files.</source> + <translation>Es wurden ungültige Verweise in HTML-Dateien gefunden.</translation> + </message> +</context> +<context> + <name>QHelpProject</name> + <message> + <location filename="../tools/assistant/lib/qhelpprojectdata.cpp" line="+86"/> + <source>Unknown token.</source> + <translation>Unbekanntes Token.</translation> + </message> + <message> + <location line="+13"/> + <source>Unknown token. Expected "QtHelpProject"!</source> + <translation>Unbekanntes Token. "QtHelpProject" erwartet.</translation> + </message> + <message> + <location line="+6"/> + <source>Error in line %1: %2</source> + <translation>Fehler in Zeile %1: %2</translation> + </message> + <message> + <location line="+14"/> + <source>A virtual folder must not contain a '/' character!</source> + <translation>Ein virtuelles Verzeichnis darf kein '/'-Zeichen enthalten.</translation> + </message> + <message> + <location line="+6"/> + <source>A namespace must not contain a '/' character!</source> + <translation>Ein Namensraum darf kein '/'-Zeichen enthalten.</translation> + </message> + <message> + <location line="+20"/> + <source>Missing namespace in QtHelpProject.</source> + <translation>Fehlender Namensraum in QtHelpProject.</translation> + </message> + <message> + <location line="+3"/> + <source>Missing virtual folder in QtHelpProject</source> + <translation>Fehlendes virtuelles Verzeichnis in QtHelpProject.</translation> + </message> + <message> + <location line="+89"/> + <source>Missing attribute in keyword at line %1.</source> + <translation>Fehlendes Attribut in Schlagwort in Zeile %1.</translation> + </message> + <message> + <location line="+125"/> + <source>The input file %1 could not be opened!</source> + <translation>Die Eingabe-Datei %1 kann nicht geöffnet werden.</translation> + </message> </context> <context> <name>QHelpSearchQueryWidget</name> <message> - <location filename="../tools/assistant/lib/qhelpsearchquerywidget.cpp" line="+411"/> + <location filename="../tools/assistant/lib/qhelpsearchquerywidget.cpp" line="+124"/> <source>Search for:</source> <translation>Suche nach:</translation> </message> <message> - <location line="+5"/> + <location line="+1"/> <source>Previous search</source> <translation>Vorige Suche</translation> </message> <message> - <location line="+4"/> + <location line="+1"/> <source>Next search</source> <translation>Nächste Suche</translation> </message> <message> - <location line="+2"/> + <location line="+1"/> <source>Search</source> <translation>Suche</translation> </message> <message> - <location line="+20"/> + <location line="+2"/> <source>Advanced search</source> <translation>Erweiterte Suche</translation> </message> <message> - <location line="+18"/> + <location line="+1"/> <source>words <B>similar</B> to:</source> <translation>Worte <B>ähnlich</B> zu:</translation> </message> <message> - <location line="+6"/> + <location line="+1"/> <source><B>without</B> the words:</source> <translation><B>ohne</B> die Wörter:</translation> </message> <message> - <location line="+6"/> + <location line="+1"/> <source>with <B>exact phrase</B>:</source> <translation>mit der <B>genauen Wortgruppe</B>:</translation> </message> <message> - <location line="+6"/> + <location line="+1"/> <source>with <B>all</B> of the words:</source> <translation>mit <B>allen</B> Wörtern:</translation> </message> <message> - <location line="+6"/> + <location line="+1"/> <source>with <B>at least one</B> of the words:</source> <translation>mit <B>irgendeinem</B> der Wörter:</translation> </message> </context> <context> <name>QHelpSearchResultWidget</name> + <message numerus="yes"> + <location filename="../tools/assistant/lib/qhelpsearchresultwidget.cpp" line="+174"/> + <source>%1 - %2 of %n Hits</source> + <translation> + <numerusform>%1 - %2 - Ein Treffer</numerusform> + <numerusform>%1 - %2 von %n Treffern</numerusform> + </translation> + </message> <message> - <location filename="../tools/assistant/lib/qhelpsearchresultwidget.cpp" line="+235"/> + <location line="+61"/> <source>0 - 0 of 0 Hits</source> <translation>0 - 0 von 0 Treffern</translation> </message> </context> -<context> - <name>QHelpSearchResultWidgetPrivate</name> - <message> - <location line="-61"/> - <source>%1 - %2 of %3 Hits</source> - <translation>%1 - %2 von %3 Treffern</translation> - </message> -</context> -<context> - <name>QObject</name> - <message> - <location filename="../tools/assistant/lib/qhelpprojectdata.cpp" line="+85"/> - <source>Unknown token.</source> - <translation>Unbekanntes Token.</translation> - </message> - <message> - <location line="+13"/> - <source>Unknown token. Expected "QtHelpProject"!</source> - <translation>Unbekanntes Token. "QtHelpProject" erwartet.</translation> - </message> - <message> - <location line="+5"/> - <source>Error in line %1: %2</source> - <translation>Fehler in Zeile %1: %2</translation> - </message> - <message> - <location line="+13"/> - <source>A virtual folder must not contain a '/' character!</source> - <translation>Ein virtuelles Verzeichnis darf kein '/'-Zeichen enthalten.</translation> - </message> - <message> - <location line="+4"/> - <source>A namespace must not contain a '/' character!</source> - <translation>Ein Namensraum darf kein '/'-Zeichen enthalten.</translation> - </message> - <message> - <location line="+16"/> - <source>Missing namespace in QtHelpProject.</source> - <translation>Fehlender Namensraum in QtHelpProject.</translation> - </message> - <message> - <location line="+2"/> - <source>Missing virtual folder in QtHelpProject</source> - <translation>Fehlendes virtuelles Verzeichnis in QtHelpProject.</translation> - </message> - <message> - <location line="+88"/> - <source>Missing attribute in keyword at line %1.</source> - <translation>Fehlendes Attribut in Schlagwort in Zeile %1.</translation> - </message> - <message> - <location line="+123"/> - <source>The input file %1 could not be opened!</source> - <translation>Die Eingabe-Datei %1 kann nicht geöffnet werden.</translation> - </message> -</context> </TS> diff --git a/translations/translations.pri b/translations/translations.pri index a8fb7ee..34da6b1 100644 --- a/translations/translations.pri +++ b/translations/translations.pri @@ -58,7 +58,7 @@ ts-linguist.depends = sub-tools ts-assistant.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \ ../tools/assistant/translations/translations.pro \ && $$LUPDATE \ - ../tools/assistant/translations/qt_help.pro)) + ../tools/assistant/translations/qt_help.pro) ts-assistant.depends = sub-tools ###### Qtconfig diff --git a/util/unicode/data/DerivedNormalizationProps.txt b/util/unicode/data/DerivedNormalizationProps.txt new file mode 100644 index 0000000..fba1fd1 --- /dev/null +++ b/util/unicode/data/DerivedNormalizationProps.txt @@ -0,0 +1,2650 @@ +# DerivedNormalizationProps-5.0.0.txt +# Date: 2006-06-07, 17:42:44 GMT [MD] +# +# Unicode Character Database +# Copyright (c) 1991-2006 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# For documentation, see UCD.html + +# ================================================ + +# Derived Property: FC_NFKC_Closure +# Generated from computing: b = NFKC(Fold(a)); c = NFKC(Fold(b)); +# Then if (c != b) add the mapping from a to c to the set of +# mappings that constitute the FC_NFKC_Closure list +# Uses the full case folding from CaseFolding.txt, without the T option. + +037A ; FC_NFKC; 0020 03B9 # Lm GREEK YPOGEGRAMMENI +03D2 ; FC_NFKC; 03C5 # L& GREEK UPSILON WITH HOOK SYMBOL +03D3 ; FC_NFKC; 03CD # L& GREEK UPSILON WITH ACUTE AND HOOK SYMBOL +03D4 ; FC_NFKC; 03CB # L& GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL +03F2 ; FC_NFKC; 03C3 # L& GREEK LUNATE SIGMA SYMBOL +03F9 ; FC_NFKC; 03C3 # L& GREEK CAPITAL LUNATE SIGMA SYMBOL +1D2C ; FC_NFKC; 0061 # Lm MODIFIER LETTER CAPITAL A +1D2D ; FC_NFKC; 00E6 # Lm MODIFIER LETTER CAPITAL AE +1D2E ; FC_NFKC; 0062 # Lm MODIFIER LETTER CAPITAL B +1D30 ; FC_NFKC; 0064 # Lm MODIFIER LETTER CAPITAL D +1D31 ; FC_NFKC; 0065 # Lm MODIFIER LETTER CAPITAL E +1D32 ; FC_NFKC; 01DD # Lm MODIFIER LETTER CAPITAL REVERSED E +1D33 ; FC_NFKC; 0067 # Lm MODIFIER LETTER CAPITAL G +1D34 ; FC_NFKC; 0068 # Lm MODIFIER LETTER CAPITAL H +1D35 ; FC_NFKC; 0069 # Lm MODIFIER LETTER CAPITAL I +1D36 ; FC_NFKC; 006A # Lm MODIFIER LETTER CAPITAL J +1D37 ; FC_NFKC; 006B # Lm MODIFIER LETTER CAPITAL K +1D38 ; FC_NFKC; 006C # Lm MODIFIER LETTER CAPITAL L +1D39 ; FC_NFKC; 006D # Lm MODIFIER LETTER CAPITAL M +1D3A ; FC_NFKC; 006E # Lm MODIFIER LETTER CAPITAL N +1D3C ; FC_NFKC; 006F # Lm MODIFIER LETTER CAPITAL O +1D3D ; FC_NFKC; 0223 # Lm MODIFIER LETTER CAPITAL OU +1D3E ; FC_NFKC; 0070 # Lm MODIFIER LETTER CAPITAL P +1D3F ; FC_NFKC; 0072 # Lm MODIFIER LETTER CAPITAL R +1D40 ; FC_NFKC; 0074 # Lm MODIFIER LETTER CAPITAL T +1D41 ; FC_NFKC; 0075 # Lm MODIFIER LETTER CAPITAL U +1D42 ; FC_NFKC; 0077 # Lm MODIFIER LETTER CAPITAL W +20A8 ; FC_NFKC; 0072 0073 # Sc RUPEE SIGN +2102 ; FC_NFKC; 0063 # L& DOUBLE-STRUCK CAPITAL C +2103 ; FC_NFKC; 00B0 0063 # So DEGREE CELSIUS +2107 ; FC_NFKC; 025B # L& EULER CONSTANT +2109 ; FC_NFKC; 00B0 0066 # So DEGREE FAHRENHEIT +210B ; FC_NFKC; 0068 # L& SCRIPT CAPITAL H +210C ; FC_NFKC; 0068 # L& BLACK-LETTER CAPITAL H +210D ; FC_NFKC; 0068 # L& DOUBLE-STRUCK CAPITAL H +2110 ; FC_NFKC; 0069 # L& SCRIPT CAPITAL I +2111 ; FC_NFKC; 0069 # L& BLACK-LETTER CAPITAL I +2112 ; FC_NFKC; 006C # L& SCRIPT CAPITAL L +2115 ; FC_NFKC; 006E # L& DOUBLE-STRUCK CAPITAL N +2116 ; FC_NFKC; 006E 006F # So NUMERO SIGN +2119 ; FC_NFKC; 0070 # L& DOUBLE-STRUCK CAPITAL P +211A ; FC_NFKC; 0071 # L& DOUBLE-STRUCK CAPITAL Q +211B ; FC_NFKC; 0072 # L& SCRIPT CAPITAL R +211C ; FC_NFKC; 0072 # L& BLACK-LETTER CAPITAL R +211D ; FC_NFKC; 0072 # L& DOUBLE-STRUCK CAPITAL R +2120 ; FC_NFKC; 0073 006D # So SERVICE MARK +2121 ; FC_NFKC; 0074 0065 006C # So TELEPHONE SIGN +2122 ; FC_NFKC; 0074 006D # So TRADE MARK SIGN +2124 ; FC_NFKC; 007A # L& DOUBLE-STRUCK CAPITAL Z +2128 ; FC_NFKC; 007A # L& BLACK-LETTER CAPITAL Z +212C ; FC_NFKC; 0062 # L& SCRIPT CAPITAL B +212D ; FC_NFKC; 0063 # L& BLACK-LETTER CAPITAL C +2130 ; FC_NFKC; 0065 # L& SCRIPT CAPITAL E +2131 ; FC_NFKC; 0066 # L& SCRIPT CAPITAL F +2133 ; FC_NFKC; 006D # L& SCRIPT CAPITAL M +213B ; FC_NFKC; 0066 0061 0078 # So FACSIMILE SIGN +213E ; FC_NFKC; 03B3 # L& DOUBLE-STRUCK CAPITAL GAMMA +213F ; FC_NFKC; 03C0 # L& DOUBLE-STRUCK CAPITAL PI +2145 ; FC_NFKC; 0064 # L& DOUBLE-STRUCK ITALIC CAPITAL D +3250 ; FC_NFKC; 0070 0074 0065 # So PARTNERSHIP SIGN +32CC ; FC_NFKC; 0068 0067 # So SQUARE HG +32CE ; FC_NFKC; 0065 0076 # So SQUARE EV +32CF ; FC_NFKC; 006C 0074 0064 # So LIMITED LIABILITY SIGN +3371 ; FC_NFKC; 0068 0070 0061 # So SQUARE HPA +3373 ; FC_NFKC; 0061 0075 # So SQUARE AU +3375 ; FC_NFKC; 006F 0076 # So SQUARE OV +337A ; FC_NFKC; 0069 0075 # So SQUARE IU +3380 ; FC_NFKC; 0070 0061 # So SQUARE PA AMPS +3381 ; FC_NFKC; 006E 0061 # So SQUARE NA +3382 ; FC_NFKC; 03BC 0061 # So SQUARE MU A +3383 ; FC_NFKC; 006D 0061 # So SQUARE MA +3384 ; FC_NFKC; 006B 0061 # So SQUARE KA +3385 ; FC_NFKC; 006B 0062 # So SQUARE KB +3386 ; FC_NFKC; 006D 0062 # So SQUARE MB +3387 ; FC_NFKC; 0067 0062 # So SQUARE GB +338A ; FC_NFKC; 0070 0066 # So SQUARE PF +338B ; FC_NFKC; 006E 0066 # So SQUARE NF +338C ; FC_NFKC; 03BC 0066 # So SQUARE MU F +3390 ; FC_NFKC; 0068 007A # So SQUARE HZ +3391 ; FC_NFKC; 006B 0068 007A # So SQUARE KHZ +3392 ; FC_NFKC; 006D 0068 007A # So SQUARE MHZ +3393 ; FC_NFKC; 0067 0068 007A # So SQUARE GHZ +3394 ; FC_NFKC; 0074 0068 007A # So SQUARE THZ +33A9 ; FC_NFKC; 0070 0061 # So SQUARE PA +33AA ; FC_NFKC; 006B 0070 0061 # So SQUARE KPA +33AB ; FC_NFKC; 006D 0070 0061 # So SQUARE MPA +33AC ; FC_NFKC; 0067 0070 0061 # So SQUARE GPA +33B4 ; FC_NFKC; 0070 0076 # So SQUARE PV +33B5 ; FC_NFKC; 006E 0076 # So SQUARE NV +33B6 ; FC_NFKC; 03BC 0076 # So SQUARE MU V +33B7 ; FC_NFKC; 006D 0076 # So SQUARE MV +33B8 ; FC_NFKC; 006B 0076 # So SQUARE KV +33B9 ; FC_NFKC; 006D 0076 # So SQUARE MV MEGA +33BA ; FC_NFKC; 0070 0077 # So SQUARE PW +33BB ; FC_NFKC; 006E 0077 # So SQUARE NW +33BC ; FC_NFKC; 03BC 0077 # So SQUARE MU W +33BD ; FC_NFKC; 006D 0077 # So SQUARE MW +33BE ; FC_NFKC; 006B 0077 # So SQUARE KW +33BF ; FC_NFKC; 006D 0077 # So SQUARE MW MEGA +33C0 ; FC_NFKC; 006B 03C9 # So SQUARE K OHM +33C1 ; FC_NFKC; 006D 03C9 # So SQUARE M OHM +33C3 ; FC_NFKC; 0062 0071 # So SQUARE BQ +33C6 ; FC_NFKC; 0063 2215 006B 0067 #So SQUARE C OVER KG +33C7 ; FC_NFKC; 0063 006F 002E # So SQUARE CO +33C8 ; FC_NFKC; 0064 0062 # So SQUARE DB +33C9 ; FC_NFKC; 0067 0079 # So SQUARE GY +33CB ; FC_NFKC; 0068 0070 # So SQUARE HP +33CD ; FC_NFKC; 006B 006B # So SQUARE KK +33CE ; FC_NFKC; 006B 006D # So SQUARE KM CAPITAL +33D7 ; FC_NFKC; 0070 0068 # So SQUARE PH +33D9 ; FC_NFKC; 0070 0070 006D # So SQUARE PPM +33DA ; FC_NFKC; 0070 0072 # So SQUARE PR +33DC ; FC_NFKC; 0073 0076 # So SQUARE SV +33DD ; FC_NFKC; 0077 0062 # So SQUARE WB +33DE ; FC_NFKC; 0076 2215 006D # So SQUARE V OVER M +33DF ; FC_NFKC; 0061 2215 006D # So SQUARE A OVER M +1D400 ; FC_NFKC; 0061 # L& MATHEMATICAL BOLD CAPITAL A +1D401 ; FC_NFKC; 0062 # L& MATHEMATICAL BOLD CAPITAL B +1D402 ; FC_NFKC; 0063 # L& MATHEMATICAL BOLD CAPITAL C +1D403 ; FC_NFKC; 0064 # L& MATHEMATICAL BOLD CAPITAL D +1D404 ; FC_NFKC; 0065 # L& MATHEMATICAL BOLD CAPITAL E +1D405 ; FC_NFKC; 0066 # L& MATHEMATICAL BOLD CAPITAL F +1D406 ; FC_NFKC; 0067 # L& MATHEMATICAL BOLD CAPITAL G +1D407 ; FC_NFKC; 0068 # L& MATHEMATICAL BOLD CAPITAL H +1D408 ; FC_NFKC; 0069 # L& MATHEMATICAL BOLD CAPITAL I +1D409 ; FC_NFKC; 006A # L& MATHEMATICAL BOLD CAPITAL J +1D40A ; FC_NFKC; 006B # L& MATHEMATICAL BOLD CAPITAL K +1D40B ; FC_NFKC; 006C # L& MATHEMATICAL BOLD CAPITAL L +1D40C ; FC_NFKC; 006D # L& MATHEMATICAL BOLD CAPITAL M +1D40D ; FC_NFKC; 006E # L& MATHEMATICAL BOLD CAPITAL N +1D40E ; FC_NFKC; 006F # L& MATHEMATICAL BOLD CAPITAL O +1D40F ; FC_NFKC; 0070 # L& MATHEMATICAL BOLD CAPITAL P +1D410 ; FC_NFKC; 0071 # L& MATHEMATICAL BOLD CAPITAL Q +1D411 ; FC_NFKC; 0072 # L& MATHEMATICAL BOLD CAPITAL R +1D412 ; FC_NFKC; 0073 # L& MATHEMATICAL BOLD CAPITAL S +1D413 ; FC_NFKC; 0074 # L& MATHEMATICAL BOLD CAPITAL T +1D414 ; FC_NFKC; 0075 # L& MATHEMATICAL BOLD CAPITAL U +1D415 ; FC_NFKC; 0076 # L& MATHEMATICAL BOLD CAPITAL V +1D416 ; FC_NFKC; 0077 # L& MATHEMATICAL BOLD CAPITAL W +1D417 ; FC_NFKC; 0078 # L& MATHEMATICAL BOLD CAPITAL X +1D418 ; FC_NFKC; 0079 # L& MATHEMATICAL BOLD CAPITAL Y +1D419 ; FC_NFKC; 007A # L& MATHEMATICAL BOLD CAPITAL Z +1D434 ; FC_NFKC; 0061 # L& MATHEMATICAL ITALIC CAPITAL A +1D435 ; FC_NFKC; 0062 # L& MATHEMATICAL ITALIC CAPITAL B +1D436 ; FC_NFKC; 0063 # L& MATHEMATICAL ITALIC CAPITAL C +1D437 ; FC_NFKC; 0064 # L& MATHEMATICAL ITALIC CAPITAL D +1D438 ; FC_NFKC; 0065 # L& MATHEMATICAL ITALIC CAPITAL E +1D439 ; FC_NFKC; 0066 # L& MATHEMATICAL ITALIC CAPITAL F +1D43A ; FC_NFKC; 0067 # L& MATHEMATICAL ITALIC CAPITAL G +1D43B ; FC_NFKC; 0068 # L& MATHEMATICAL ITALIC CAPITAL H +1D43C ; FC_NFKC; 0069 # L& MATHEMATICAL ITALIC CAPITAL I +1D43D ; FC_NFKC; 006A # L& MATHEMATICAL ITALIC CAPITAL J +1D43E ; FC_NFKC; 006B # L& MATHEMATICAL ITALIC CAPITAL K +1D43F ; FC_NFKC; 006C # L& MATHEMATICAL ITALIC CAPITAL L +1D440 ; FC_NFKC; 006D # L& MATHEMATICAL ITALIC CAPITAL M +1D441 ; FC_NFKC; 006E # L& MATHEMATICAL ITALIC CAPITAL N +1D442 ; FC_NFKC; 006F # L& MATHEMATICAL ITALIC CAPITAL O +1D443 ; FC_NFKC; 0070 # L& MATHEMATICAL ITALIC CAPITAL P +1D444 ; FC_NFKC; 0071 # L& MATHEMATICAL ITALIC CAPITAL Q +1D445 ; FC_NFKC; 0072 # L& MATHEMATICAL ITALIC CAPITAL R +1D446 ; FC_NFKC; 0073 # L& MATHEMATICAL ITALIC CAPITAL S +1D447 ; FC_NFKC; 0074 # L& MATHEMATICAL ITALIC CAPITAL T +1D448 ; FC_NFKC; 0075 # L& MATHEMATICAL ITALIC CAPITAL U +1D449 ; FC_NFKC; 0076 # L& MATHEMATICAL ITALIC CAPITAL V +1D44A ; FC_NFKC; 0077 # L& MATHEMATICAL ITALIC CAPITAL W +1D44B ; FC_NFKC; 0078 # L& MATHEMATICAL ITALIC CAPITAL X +1D44C ; FC_NFKC; 0079 # L& MATHEMATICAL ITALIC CAPITAL Y +1D44D ; FC_NFKC; 007A # L& MATHEMATICAL ITALIC CAPITAL Z +1D468 ; FC_NFKC; 0061 # L& MATHEMATICAL BOLD ITALIC CAPITAL A +1D469 ; FC_NFKC; 0062 # L& MATHEMATICAL BOLD ITALIC CAPITAL B +1D46A ; FC_NFKC; 0063 # L& MATHEMATICAL BOLD ITALIC CAPITAL C +1D46B ; FC_NFKC; 0064 # L& MATHEMATICAL BOLD ITALIC CAPITAL D +1D46C ; FC_NFKC; 0065 # L& MATHEMATICAL BOLD ITALIC CAPITAL E +1D46D ; FC_NFKC; 0066 # L& MATHEMATICAL BOLD ITALIC CAPITAL F +1D46E ; FC_NFKC; 0067 # L& MATHEMATICAL BOLD ITALIC CAPITAL G +1D46F ; FC_NFKC; 0068 # L& MATHEMATICAL BOLD ITALIC CAPITAL H +1D470 ; FC_NFKC; 0069 # L& MATHEMATICAL BOLD ITALIC CAPITAL I +1D471 ; FC_NFKC; 006A # L& MATHEMATICAL BOLD ITALIC CAPITAL J +1D472 ; FC_NFKC; 006B # L& MATHEMATICAL BOLD ITALIC CAPITAL K +1D473 ; FC_NFKC; 006C # L& MATHEMATICAL BOLD ITALIC CAPITAL L +1D474 ; FC_NFKC; 006D # L& MATHEMATICAL BOLD ITALIC CAPITAL M +1D475 ; FC_NFKC; 006E # L& MATHEMATICAL BOLD ITALIC CAPITAL N +1D476 ; FC_NFKC; 006F # L& MATHEMATICAL BOLD ITALIC CAPITAL O +1D477 ; FC_NFKC; 0070 # L& MATHEMATICAL BOLD ITALIC CAPITAL P +1D478 ; FC_NFKC; 0071 # L& MATHEMATICAL BOLD ITALIC CAPITAL Q +1D479 ; FC_NFKC; 0072 # L& MATHEMATICAL BOLD ITALIC CAPITAL R +1D47A ; FC_NFKC; 0073 # L& MATHEMATICAL BOLD ITALIC CAPITAL S +1D47B ; FC_NFKC; 0074 # L& MATHEMATICAL BOLD ITALIC CAPITAL T +1D47C ; FC_NFKC; 0075 # L& MATHEMATICAL BOLD ITALIC CAPITAL U +1D47D ; FC_NFKC; 0076 # L& MATHEMATICAL BOLD ITALIC CAPITAL V +1D47E ; FC_NFKC; 0077 # L& MATHEMATICAL BOLD ITALIC CAPITAL W +1D47F ; FC_NFKC; 0078 # L& MATHEMATICAL BOLD ITALIC CAPITAL X +1D480 ; FC_NFKC; 0079 # L& MATHEMATICAL BOLD ITALIC CAPITAL Y +1D481 ; FC_NFKC; 007A # L& MATHEMATICAL BOLD ITALIC CAPITAL Z +1D49C ; FC_NFKC; 0061 # L& MATHEMATICAL SCRIPT CAPITAL A +1D49E ; FC_NFKC; 0063 # L& MATHEMATICAL SCRIPT CAPITAL C +1D49F ; FC_NFKC; 0064 # L& MATHEMATICAL SCRIPT CAPITAL D +1D4A2 ; FC_NFKC; 0067 # L& MATHEMATICAL SCRIPT CAPITAL G +1D4A5 ; FC_NFKC; 006A # L& MATHEMATICAL SCRIPT CAPITAL J +1D4A6 ; FC_NFKC; 006B # L& MATHEMATICAL SCRIPT CAPITAL K +1D4A9 ; FC_NFKC; 006E # L& MATHEMATICAL SCRIPT CAPITAL N +1D4AA ; FC_NFKC; 006F # L& MATHEMATICAL SCRIPT CAPITAL O +1D4AB ; FC_NFKC; 0070 # L& MATHEMATICAL SCRIPT CAPITAL P +1D4AC ; FC_NFKC; 0071 # L& MATHEMATICAL SCRIPT CAPITAL Q +1D4AE ; FC_NFKC; 0073 # L& MATHEMATICAL SCRIPT CAPITAL S +1D4AF ; FC_NFKC; 0074 # L& MATHEMATICAL SCRIPT CAPITAL T +1D4B0 ; FC_NFKC; 0075 # L& MATHEMATICAL SCRIPT CAPITAL U +1D4B1 ; FC_NFKC; 0076 # L& MATHEMATICAL SCRIPT CAPITAL V +1D4B2 ; FC_NFKC; 0077 # L& MATHEMATICAL SCRIPT CAPITAL W +1D4B3 ; FC_NFKC; 0078 # L& MATHEMATICAL SCRIPT CAPITAL X +1D4B4 ; FC_NFKC; 0079 # L& MATHEMATICAL SCRIPT CAPITAL Y +1D4B5 ; FC_NFKC; 007A # L& MATHEMATICAL SCRIPT CAPITAL Z +1D4D0 ; FC_NFKC; 0061 # L& MATHEMATICAL BOLD SCRIPT CAPITAL A +1D4D1 ; FC_NFKC; 0062 # L& MATHEMATICAL BOLD SCRIPT CAPITAL B +1D4D2 ; FC_NFKC; 0063 # L& MATHEMATICAL BOLD SCRIPT CAPITAL C +1D4D3 ; FC_NFKC; 0064 # L& MATHEMATICAL BOLD SCRIPT CAPITAL D +1D4D4 ; FC_NFKC; 0065 # L& MATHEMATICAL BOLD SCRIPT CAPITAL E +1D4D5 ; FC_NFKC; 0066 # L& MATHEMATICAL BOLD SCRIPT CAPITAL F +1D4D6 ; FC_NFKC; 0067 # L& MATHEMATICAL BOLD SCRIPT CAPITAL G +1D4D7 ; FC_NFKC; 0068 # L& MATHEMATICAL BOLD SCRIPT CAPITAL H +1D4D8 ; FC_NFKC; 0069 # L& MATHEMATICAL BOLD SCRIPT CAPITAL I +1D4D9 ; FC_NFKC; 006A # L& MATHEMATICAL BOLD SCRIPT CAPITAL J +1D4DA ; FC_NFKC; 006B # L& MATHEMATICAL BOLD SCRIPT CAPITAL K +1D4DB ; FC_NFKC; 006C # L& MATHEMATICAL BOLD SCRIPT CAPITAL L +1D4DC ; FC_NFKC; 006D # L& MATHEMATICAL BOLD SCRIPT CAPITAL M +1D4DD ; FC_NFKC; 006E # L& MATHEMATICAL BOLD SCRIPT CAPITAL N +1D4DE ; FC_NFKC; 006F # L& MATHEMATICAL BOLD SCRIPT CAPITAL O +1D4DF ; FC_NFKC; 0070 # L& MATHEMATICAL BOLD SCRIPT CAPITAL P +1D4E0 ; FC_NFKC; 0071 # L& MATHEMATICAL BOLD SCRIPT CAPITAL Q +1D4E1 ; FC_NFKC; 0072 # L& MATHEMATICAL BOLD SCRIPT CAPITAL R +1D4E2 ; FC_NFKC; 0073 # L& MATHEMATICAL BOLD SCRIPT CAPITAL S +1D4E3 ; FC_NFKC; 0074 # L& MATHEMATICAL BOLD SCRIPT CAPITAL T +1D4E4 ; FC_NFKC; 0075 # L& MATHEMATICAL BOLD SCRIPT CAPITAL U +1D4E5 ; FC_NFKC; 0076 # L& MATHEMATICAL BOLD SCRIPT CAPITAL V +1D4E6 ; FC_NFKC; 0077 # L& MATHEMATICAL BOLD SCRIPT CAPITAL W +1D4E7 ; FC_NFKC; 0078 # L& MATHEMATICAL BOLD SCRIPT CAPITAL X +1D4E8 ; FC_NFKC; 0079 # L& MATHEMATICAL BOLD SCRIPT CAPITAL Y +1D4E9 ; FC_NFKC; 007A # L& MATHEMATICAL BOLD SCRIPT CAPITAL Z +1D504 ; FC_NFKC; 0061 # L& MATHEMATICAL FRAKTUR CAPITAL A +1D505 ; FC_NFKC; 0062 # L& MATHEMATICAL FRAKTUR CAPITAL B +1D507 ; FC_NFKC; 0064 # L& MATHEMATICAL FRAKTUR CAPITAL D +1D508 ; FC_NFKC; 0065 # L& MATHEMATICAL FRAKTUR CAPITAL E +1D509 ; FC_NFKC; 0066 # L& MATHEMATICAL FRAKTUR CAPITAL F +1D50A ; FC_NFKC; 0067 # L& MATHEMATICAL FRAKTUR CAPITAL G +1D50D ; FC_NFKC; 006A # L& MATHEMATICAL FRAKTUR CAPITAL J +1D50E ; FC_NFKC; 006B # L& MATHEMATICAL FRAKTUR CAPITAL K +1D50F ; FC_NFKC; 006C # L& MATHEMATICAL FRAKTUR CAPITAL L +1D510 ; FC_NFKC; 006D # L& MATHEMATICAL FRAKTUR CAPITAL M +1D511 ; FC_NFKC; 006E # L& MATHEMATICAL FRAKTUR CAPITAL N +1D512 ; FC_NFKC; 006F # L& MATHEMATICAL FRAKTUR CAPITAL O +1D513 ; FC_NFKC; 0070 # L& MATHEMATICAL FRAKTUR CAPITAL P +1D514 ; FC_NFKC; 0071 # L& MATHEMATICAL FRAKTUR CAPITAL Q +1D516 ; FC_NFKC; 0073 # L& MATHEMATICAL FRAKTUR CAPITAL S +1D517 ; FC_NFKC; 0074 # L& MATHEMATICAL FRAKTUR CAPITAL T +1D518 ; FC_NFKC; 0075 # L& MATHEMATICAL FRAKTUR CAPITAL U +1D519 ; FC_NFKC; 0076 # L& MATHEMATICAL FRAKTUR CAPITAL V +1D51A ; FC_NFKC; 0077 # L& MATHEMATICAL FRAKTUR CAPITAL W +1D51B ; FC_NFKC; 0078 # L& MATHEMATICAL FRAKTUR CAPITAL X +1D51C ; FC_NFKC; 0079 # L& MATHEMATICAL FRAKTUR CAPITAL Y +1D538 ; FC_NFKC; 0061 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL A +1D539 ; FC_NFKC; 0062 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL B +1D53B ; FC_NFKC; 0064 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL D +1D53C ; FC_NFKC; 0065 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL E +1D53D ; FC_NFKC; 0066 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL F +1D53E ; FC_NFKC; 0067 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL G +1D540 ; FC_NFKC; 0069 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL I +1D541 ; FC_NFKC; 006A # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL J +1D542 ; FC_NFKC; 006B # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL K +1D543 ; FC_NFKC; 006C # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL L +1D544 ; FC_NFKC; 006D # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL M +1D546 ; FC_NFKC; 006F # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O +1D54A ; FC_NFKC; 0073 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL S +1D54B ; FC_NFKC; 0074 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL T +1D54C ; FC_NFKC; 0075 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL U +1D54D ; FC_NFKC; 0076 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL V +1D54E ; FC_NFKC; 0077 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL W +1D54F ; FC_NFKC; 0078 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL X +1D550 ; FC_NFKC; 0079 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL Y +1D56C ; FC_NFKC; 0061 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL A +1D56D ; FC_NFKC; 0062 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL B +1D56E ; FC_NFKC; 0063 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL C +1D56F ; FC_NFKC; 0064 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL D +1D570 ; FC_NFKC; 0065 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL E +1D571 ; FC_NFKC; 0066 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL F +1D572 ; FC_NFKC; 0067 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL G +1D573 ; FC_NFKC; 0068 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL H +1D574 ; FC_NFKC; 0069 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL I +1D575 ; FC_NFKC; 006A # L& MATHEMATICAL BOLD FRAKTUR CAPITAL J +1D576 ; FC_NFKC; 006B # L& MATHEMATICAL BOLD FRAKTUR CAPITAL K +1D577 ; FC_NFKC; 006C # L& MATHEMATICAL BOLD FRAKTUR CAPITAL L +1D578 ; FC_NFKC; 006D # L& MATHEMATICAL BOLD FRAKTUR CAPITAL M +1D579 ; FC_NFKC; 006E # L& MATHEMATICAL BOLD FRAKTUR CAPITAL N +1D57A ; FC_NFKC; 006F # L& MATHEMATICAL BOLD FRAKTUR CAPITAL O +1D57B ; FC_NFKC; 0070 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL P +1D57C ; FC_NFKC; 0071 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL Q +1D57D ; FC_NFKC; 0072 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL R +1D57E ; FC_NFKC; 0073 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL S +1D57F ; FC_NFKC; 0074 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL T +1D580 ; FC_NFKC; 0075 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL U +1D581 ; FC_NFKC; 0076 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL V +1D582 ; FC_NFKC; 0077 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL W +1D583 ; FC_NFKC; 0078 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL X +1D584 ; FC_NFKC; 0079 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL Y +1D585 ; FC_NFKC; 007A # L& MATHEMATICAL BOLD FRAKTUR CAPITAL Z +1D5A0 ; FC_NFKC; 0061 # L& MATHEMATICAL SANS-SERIF CAPITAL A +1D5A1 ; FC_NFKC; 0062 # L& MATHEMATICAL SANS-SERIF CAPITAL B +1D5A2 ; FC_NFKC; 0063 # L& MATHEMATICAL SANS-SERIF CAPITAL C +1D5A3 ; FC_NFKC; 0064 # L& MATHEMATICAL SANS-SERIF CAPITAL D +1D5A4 ; FC_NFKC; 0065 # L& MATHEMATICAL SANS-SERIF CAPITAL E +1D5A5 ; FC_NFKC; 0066 # L& MATHEMATICAL SANS-SERIF CAPITAL F +1D5A6 ; FC_NFKC; 0067 # L& MATHEMATICAL SANS-SERIF CAPITAL G +1D5A7 ; FC_NFKC; 0068 # L& MATHEMATICAL SANS-SERIF CAPITAL H +1D5A8 ; FC_NFKC; 0069 # L& MATHEMATICAL SANS-SERIF CAPITAL I +1D5A9 ; FC_NFKC; 006A # L& MATHEMATICAL SANS-SERIF CAPITAL J +1D5AA ; FC_NFKC; 006B # L& MATHEMATICAL SANS-SERIF CAPITAL K +1D5AB ; FC_NFKC; 006C # L& MATHEMATICAL SANS-SERIF CAPITAL L +1D5AC ; FC_NFKC; 006D # L& MATHEMATICAL SANS-SERIF CAPITAL M +1D5AD ; FC_NFKC; 006E # L& MATHEMATICAL SANS-SERIF CAPITAL N +1D5AE ; FC_NFKC; 006F # L& MATHEMATICAL SANS-SERIF CAPITAL O +1D5AF ; FC_NFKC; 0070 # L& MATHEMATICAL SANS-SERIF CAPITAL P +1D5B0 ; FC_NFKC; 0071 # L& MATHEMATICAL SANS-SERIF CAPITAL Q +1D5B1 ; FC_NFKC; 0072 # L& MATHEMATICAL SANS-SERIF CAPITAL R +1D5B2 ; FC_NFKC; 0073 # L& MATHEMATICAL SANS-SERIF CAPITAL S +1D5B3 ; FC_NFKC; 0074 # L& MATHEMATICAL SANS-SERIF CAPITAL T +1D5B4 ; FC_NFKC; 0075 # L& MATHEMATICAL SANS-SERIF CAPITAL U +1D5B5 ; FC_NFKC; 0076 # L& MATHEMATICAL SANS-SERIF CAPITAL V +1D5B6 ; FC_NFKC; 0077 # L& MATHEMATICAL SANS-SERIF CAPITAL W +1D5B7 ; FC_NFKC; 0078 # L& MATHEMATICAL SANS-SERIF CAPITAL X +1D5B8 ; FC_NFKC; 0079 # L& MATHEMATICAL SANS-SERIF CAPITAL Y +1D5B9 ; FC_NFKC; 007A # L& MATHEMATICAL SANS-SERIF CAPITAL Z +1D5D4 ; FC_NFKC; 0061 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL A +1D5D5 ; FC_NFKC; 0062 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL B +1D5D6 ; FC_NFKC; 0063 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL C +1D5D7 ; FC_NFKC; 0064 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL D +1D5D8 ; FC_NFKC; 0065 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL E +1D5D9 ; FC_NFKC; 0066 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL F +1D5DA ; FC_NFKC; 0067 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL G +1D5DB ; FC_NFKC; 0068 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL H +1D5DC ; FC_NFKC; 0069 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL I +1D5DD ; FC_NFKC; 006A # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL J +1D5DE ; FC_NFKC; 006B # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL K +1D5DF ; FC_NFKC; 006C # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL L +1D5E0 ; FC_NFKC; 006D # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL M +1D5E1 ; FC_NFKC; 006E # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL N +1D5E2 ; FC_NFKC; 006F # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL O +1D5E3 ; FC_NFKC; 0070 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL P +1D5E4 ; FC_NFKC; 0071 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL Q +1D5E5 ; FC_NFKC; 0072 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL R +1D5E6 ; FC_NFKC; 0073 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL S +1D5E7 ; FC_NFKC; 0074 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL T +1D5E8 ; FC_NFKC; 0075 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL U +1D5E9 ; FC_NFKC; 0076 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL V +1D5EA ; FC_NFKC; 0077 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL W +1D5EB ; FC_NFKC; 0078 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL X +1D5EC ; FC_NFKC; 0079 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL Y +1D5ED ; FC_NFKC; 007A # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL Z +1D608 ; FC_NFKC; 0061 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL A +1D609 ; FC_NFKC; 0062 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL B +1D60A ; FC_NFKC; 0063 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL C +1D60B ; FC_NFKC; 0064 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL D +1D60C ; FC_NFKC; 0065 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL E +1D60D ; FC_NFKC; 0066 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL F +1D60E ; FC_NFKC; 0067 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL G +1D60F ; FC_NFKC; 0068 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL H +1D610 ; FC_NFKC; 0069 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL I +1D611 ; FC_NFKC; 006A # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL J +1D612 ; FC_NFKC; 006B # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL K +1D613 ; FC_NFKC; 006C # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL L +1D614 ; FC_NFKC; 006D # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL M +1D615 ; FC_NFKC; 006E # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL N +1D616 ; FC_NFKC; 006F # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL O +1D617 ; FC_NFKC; 0070 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL P +1D618 ; FC_NFKC; 0071 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q +1D619 ; FC_NFKC; 0072 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL R +1D61A ; FC_NFKC; 0073 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL S +1D61B ; FC_NFKC; 0074 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL T +1D61C ; FC_NFKC; 0075 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL U +1D61D ; FC_NFKC; 0076 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL V +1D61E ; FC_NFKC; 0077 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL W +1D61F ; FC_NFKC; 0078 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL X +1D620 ; FC_NFKC; 0079 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y +1D621 ; FC_NFKC; 007A # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z +1D63C ; FC_NFKC; 0061 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A +1D63D ; FC_NFKC; 0062 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B +1D63E ; FC_NFKC; 0063 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C +1D63F ; FC_NFKC; 0064 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D +1D640 ; FC_NFKC; 0065 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E +1D641 ; FC_NFKC; 0066 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F +1D642 ; FC_NFKC; 0067 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G +1D643 ; FC_NFKC; 0068 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H +1D644 ; FC_NFKC; 0069 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I +1D645 ; FC_NFKC; 006A # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J +1D646 ; FC_NFKC; 006B # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K +1D647 ; FC_NFKC; 006C # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L +1D648 ; FC_NFKC; 006D # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M +1D649 ; FC_NFKC; 006E # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N +1D64A ; FC_NFKC; 006F # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O +1D64B ; FC_NFKC; 0070 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P +1D64C ; FC_NFKC; 0071 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q +1D64D ; FC_NFKC; 0072 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R +1D64E ; FC_NFKC; 0073 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S +1D64F ; FC_NFKC; 0074 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T +1D650 ; FC_NFKC; 0075 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U +1D651 ; FC_NFKC; 0076 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V +1D652 ; FC_NFKC; 0077 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W +1D653 ; FC_NFKC; 0078 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X +1D654 ; FC_NFKC; 0079 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y +1D655 ; FC_NFKC; 007A # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z +1D670 ; FC_NFKC; 0061 # L& MATHEMATICAL MONOSPACE CAPITAL A +1D671 ; FC_NFKC; 0062 # L& MATHEMATICAL MONOSPACE CAPITAL B +1D672 ; FC_NFKC; 0063 # L& MATHEMATICAL MONOSPACE CAPITAL C +1D673 ; FC_NFKC; 0064 # L& MATHEMATICAL MONOSPACE CAPITAL D +1D674 ; FC_NFKC; 0065 # L& MATHEMATICAL MONOSPACE CAPITAL E +1D675 ; FC_NFKC; 0066 # L& MATHEMATICAL MONOSPACE CAPITAL F +1D676 ; FC_NFKC; 0067 # L& MATHEMATICAL MONOSPACE CAPITAL G +1D677 ; FC_NFKC; 0068 # L& MATHEMATICAL MONOSPACE CAPITAL H +1D678 ; FC_NFKC; 0069 # L& MATHEMATICAL MONOSPACE CAPITAL I +1D679 ; FC_NFKC; 006A # L& MATHEMATICAL MONOSPACE CAPITAL J +1D67A ; FC_NFKC; 006B # L& MATHEMATICAL MONOSPACE CAPITAL K +1D67B ; FC_NFKC; 006C # L& MATHEMATICAL MONOSPACE CAPITAL L +1D67C ; FC_NFKC; 006D # L& MATHEMATICAL MONOSPACE CAPITAL M +1D67D ; FC_NFKC; 006E # L& MATHEMATICAL MONOSPACE CAPITAL N +1D67E ; FC_NFKC; 006F # L& MATHEMATICAL MONOSPACE CAPITAL O +1D67F ; FC_NFKC; 0070 # L& MATHEMATICAL MONOSPACE CAPITAL P +1D680 ; FC_NFKC; 0071 # L& MATHEMATICAL MONOSPACE CAPITAL Q +1D681 ; FC_NFKC; 0072 # L& MATHEMATICAL MONOSPACE CAPITAL R +1D682 ; FC_NFKC; 0073 # L& MATHEMATICAL MONOSPACE CAPITAL S +1D683 ; FC_NFKC; 0074 # L& MATHEMATICAL MONOSPACE CAPITAL T +1D684 ; FC_NFKC; 0075 # L& MATHEMATICAL MONOSPACE CAPITAL U +1D685 ; FC_NFKC; 0076 # L& MATHEMATICAL MONOSPACE CAPITAL V +1D686 ; FC_NFKC; 0077 # L& MATHEMATICAL MONOSPACE CAPITAL W +1D687 ; FC_NFKC; 0078 # L& MATHEMATICAL MONOSPACE CAPITAL X +1D688 ; FC_NFKC; 0079 # L& MATHEMATICAL MONOSPACE CAPITAL Y +1D689 ; FC_NFKC; 007A # L& MATHEMATICAL MONOSPACE CAPITAL Z +1D6A8 ; FC_NFKC; 03B1 # L& MATHEMATICAL BOLD CAPITAL ALPHA +1D6A9 ; FC_NFKC; 03B2 # L& MATHEMATICAL BOLD CAPITAL BETA +1D6AA ; FC_NFKC; 03B3 # L& MATHEMATICAL BOLD CAPITAL GAMMA +1D6AB ; FC_NFKC; 03B4 # L& MATHEMATICAL BOLD CAPITAL DELTA +1D6AC ; FC_NFKC; 03B5 # L& MATHEMATICAL BOLD CAPITAL EPSILON +1D6AD ; FC_NFKC; 03B6 # L& MATHEMATICAL BOLD CAPITAL ZETA +1D6AE ; FC_NFKC; 03B7 # L& MATHEMATICAL BOLD CAPITAL ETA +1D6AF ; FC_NFKC; 03B8 # L& MATHEMATICAL BOLD CAPITAL THETA +1D6B0 ; FC_NFKC; 03B9 # L& MATHEMATICAL BOLD CAPITAL IOTA +1D6B1 ; FC_NFKC; 03BA # L& MATHEMATICAL BOLD CAPITAL KAPPA +1D6B2 ; FC_NFKC; 03BB # L& MATHEMATICAL BOLD CAPITAL LAMDA +1D6B3 ; FC_NFKC; 03BC # L& MATHEMATICAL BOLD CAPITAL MU +1D6B4 ; FC_NFKC; 03BD # L& MATHEMATICAL BOLD CAPITAL NU +1D6B5 ; FC_NFKC; 03BE # L& MATHEMATICAL BOLD CAPITAL XI +1D6B6 ; FC_NFKC; 03BF # L& MATHEMATICAL BOLD CAPITAL OMICRON +1D6B7 ; FC_NFKC; 03C0 # L& MATHEMATICAL BOLD CAPITAL PI +1D6B8 ; FC_NFKC; 03C1 # L& MATHEMATICAL BOLD CAPITAL RHO +1D6B9 ; FC_NFKC; 03B8 # L& MATHEMATICAL BOLD CAPITAL THETA SYMBOL +1D6BA ; FC_NFKC; 03C3 # L& MATHEMATICAL BOLD CAPITAL SIGMA +1D6BB ; FC_NFKC; 03C4 # L& MATHEMATICAL BOLD CAPITAL TAU +1D6BC ; FC_NFKC; 03C5 # L& MATHEMATICAL BOLD CAPITAL UPSILON +1D6BD ; FC_NFKC; 03C6 # L& MATHEMATICAL BOLD CAPITAL PHI +1D6BE ; FC_NFKC; 03C7 # L& MATHEMATICAL BOLD CAPITAL CHI +1D6BF ; FC_NFKC; 03C8 # L& MATHEMATICAL BOLD CAPITAL PSI +1D6C0 ; FC_NFKC; 03C9 # L& MATHEMATICAL BOLD CAPITAL OMEGA +1D6D3 ; FC_NFKC; 03C3 # L& MATHEMATICAL BOLD SMALL FINAL SIGMA +1D6E2 ; FC_NFKC; 03B1 # L& MATHEMATICAL ITALIC CAPITAL ALPHA +1D6E3 ; FC_NFKC; 03B2 # L& MATHEMATICAL ITALIC CAPITAL BETA +1D6E4 ; FC_NFKC; 03B3 # L& MATHEMATICAL ITALIC CAPITAL GAMMA +1D6E5 ; FC_NFKC; 03B4 # L& MATHEMATICAL ITALIC CAPITAL DELTA +1D6E6 ; FC_NFKC; 03B5 # L& MATHEMATICAL ITALIC CAPITAL EPSILON +1D6E7 ; FC_NFKC; 03B6 # L& MATHEMATICAL ITALIC CAPITAL ZETA +1D6E8 ; FC_NFKC; 03B7 # L& MATHEMATICAL ITALIC CAPITAL ETA +1D6E9 ; FC_NFKC; 03B8 # L& MATHEMATICAL ITALIC CAPITAL THETA +1D6EA ; FC_NFKC; 03B9 # L& MATHEMATICAL ITALIC CAPITAL IOTA +1D6EB ; FC_NFKC; 03BA # L& MATHEMATICAL ITALIC CAPITAL KAPPA +1D6EC ; FC_NFKC; 03BB # L& MATHEMATICAL ITALIC CAPITAL LAMDA +1D6ED ; FC_NFKC; 03BC # L& MATHEMATICAL ITALIC CAPITAL MU +1D6EE ; FC_NFKC; 03BD # L& MATHEMATICAL ITALIC CAPITAL NU +1D6EF ; FC_NFKC; 03BE # L& MATHEMATICAL ITALIC CAPITAL XI +1D6F0 ; FC_NFKC; 03BF # L& MATHEMATICAL ITALIC CAPITAL OMICRON +1D6F1 ; FC_NFKC; 03C0 # L& MATHEMATICAL ITALIC CAPITAL PI +1D6F2 ; FC_NFKC; 03C1 # L& MATHEMATICAL ITALIC CAPITAL RHO +1D6F3 ; FC_NFKC; 03B8 # L& MATHEMATICAL ITALIC CAPITAL THETA SYMBOL +1D6F4 ; FC_NFKC; 03C3 # L& MATHEMATICAL ITALIC CAPITAL SIGMA +1D6F5 ; FC_NFKC; 03C4 # L& MATHEMATICAL ITALIC CAPITAL TAU +1D6F6 ; FC_NFKC; 03C5 # L& MATHEMATICAL ITALIC CAPITAL UPSILON +1D6F7 ; FC_NFKC; 03C6 # L& MATHEMATICAL ITALIC CAPITAL PHI +1D6F8 ; FC_NFKC; 03C7 # L& MATHEMATICAL ITALIC CAPITAL CHI +1D6F9 ; FC_NFKC; 03C8 # L& MATHEMATICAL ITALIC CAPITAL PSI +1D6FA ; FC_NFKC; 03C9 # L& MATHEMATICAL ITALIC CAPITAL OMEGA +1D70D ; FC_NFKC; 03C3 # L& MATHEMATICAL ITALIC SMALL FINAL SIGMA +1D71C ; FC_NFKC; 03B1 # L& MATHEMATICAL BOLD ITALIC CAPITAL ALPHA +1D71D ; FC_NFKC; 03B2 # L& MATHEMATICAL BOLD ITALIC CAPITAL BETA +1D71E ; FC_NFKC; 03B3 # L& MATHEMATICAL BOLD ITALIC CAPITAL GAMMA +1D71F ; FC_NFKC; 03B4 # L& MATHEMATICAL BOLD ITALIC CAPITAL DELTA +1D720 ; FC_NFKC; 03B5 # L& MATHEMATICAL BOLD ITALIC CAPITAL EPSILON +1D721 ; FC_NFKC; 03B6 # L& MATHEMATICAL BOLD ITALIC CAPITAL ZETA +1D722 ; FC_NFKC; 03B7 # L& MATHEMATICAL BOLD ITALIC CAPITAL ETA +1D723 ; FC_NFKC; 03B8 # L& MATHEMATICAL BOLD ITALIC CAPITAL THETA +1D724 ; FC_NFKC; 03B9 # L& MATHEMATICAL BOLD ITALIC CAPITAL IOTA +1D725 ; FC_NFKC; 03BA # L& MATHEMATICAL BOLD ITALIC CAPITAL KAPPA +1D726 ; FC_NFKC; 03BB # L& MATHEMATICAL BOLD ITALIC CAPITAL LAMDA +1D727 ; FC_NFKC; 03BC # L& MATHEMATICAL BOLD ITALIC CAPITAL MU +1D728 ; FC_NFKC; 03BD # L& MATHEMATICAL BOLD ITALIC CAPITAL NU +1D729 ; FC_NFKC; 03BE # L& MATHEMATICAL BOLD ITALIC CAPITAL XI +1D72A ; FC_NFKC; 03BF # L& MATHEMATICAL BOLD ITALIC CAPITAL OMICRON +1D72B ; FC_NFKC; 03C0 # L& MATHEMATICAL BOLD ITALIC CAPITAL PI +1D72C ; FC_NFKC; 03C1 # L& MATHEMATICAL BOLD ITALIC CAPITAL RHO +1D72D ; FC_NFKC; 03B8 # L& MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL +1D72E ; FC_NFKC; 03C3 # L& MATHEMATICAL BOLD ITALIC CAPITAL SIGMA +1D72F ; FC_NFKC; 03C4 # L& MATHEMATICAL BOLD ITALIC CAPITAL TAU +1D730 ; FC_NFKC; 03C5 # L& MATHEMATICAL BOLD ITALIC CAPITAL UPSILON +1D731 ; FC_NFKC; 03C6 # L& MATHEMATICAL BOLD ITALIC CAPITAL PHI +1D732 ; FC_NFKC; 03C7 # L& MATHEMATICAL BOLD ITALIC CAPITAL CHI +1D733 ; FC_NFKC; 03C8 # L& MATHEMATICAL BOLD ITALIC CAPITAL PSI +1D734 ; FC_NFKC; 03C9 # L& MATHEMATICAL BOLD ITALIC CAPITAL OMEGA +1D747 ; FC_NFKC; 03C3 # L& MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA +1D756 ; FC_NFKC; 03B1 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA +1D757 ; FC_NFKC; 03B2 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA +1D758 ; FC_NFKC; 03B3 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA +1D759 ; FC_NFKC; 03B4 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA +1D75A ; FC_NFKC; 03B5 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON +1D75B ; FC_NFKC; 03B6 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA +1D75C ; FC_NFKC; 03B7 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA +1D75D ; FC_NFKC; 03B8 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA +1D75E ; FC_NFKC; 03B9 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA +1D75F ; FC_NFKC; 03BA # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA +1D760 ; FC_NFKC; 03BB # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA +1D761 ; FC_NFKC; 03BC # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL MU +1D762 ; FC_NFKC; 03BD # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL NU +1D763 ; FC_NFKC; 03BE # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL XI +1D764 ; FC_NFKC; 03BF # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON +1D765 ; FC_NFKC; 03C0 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL PI +1D766 ; FC_NFKC; 03C1 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO +1D767 ; FC_NFKC; 03B8 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL +1D768 ; FC_NFKC; 03C3 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA +1D769 ; FC_NFKC; 03C4 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU +1D76A ; FC_NFKC; 03C5 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON +1D76B ; FC_NFKC; 03C6 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI +1D76C ; FC_NFKC; 03C7 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI +1D76D ; FC_NFKC; 03C8 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI +1D76E ; FC_NFKC; 03C9 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA +1D781 ; FC_NFKC; 03C3 # L& MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA +1D790 ; FC_NFKC; 03B1 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA +1D791 ; FC_NFKC; 03B2 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA +1D792 ; FC_NFKC; 03B3 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA +1D793 ; FC_NFKC; 03B4 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA +1D794 ; FC_NFKC; 03B5 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON +1D795 ; FC_NFKC; 03B6 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA +1D796 ; FC_NFKC; 03B7 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA +1D797 ; FC_NFKC; 03B8 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA +1D798 ; FC_NFKC; 03B9 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA +1D799 ; FC_NFKC; 03BA # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA +1D79A ; FC_NFKC; 03BB # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA +1D79B ; FC_NFKC; 03BC # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU +1D79C ; FC_NFKC; 03BD # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU +1D79D ; FC_NFKC; 03BE # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI +1D79E ; FC_NFKC; 03BF # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON +1D79F ; FC_NFKC; 03C0 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI +1D7A0 ; FC_NFKC; 03C1 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO +1D7A1 ; FC_NFKC; 03B8 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL +1D7A2 ; FC_NFKC; 03C3 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA +1D7A3 ; FC_NFKC; 03C4 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU +1D7A4 ; FC_NFKC; 03C5 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON +1D7A5 ; FC_NFKC; 03C6 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI +1D7A6 ; FC_NFKC; 03C7 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI +1D7A7 ; FC_NFKC; 03C8 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI +1D7A8 ; FC_NFKC; 03C9 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA +1D7BB ; FC_NFKC; 03C3 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA +1D7CA ; FC_NFKC; 03DD # L& MATHEMATICAL BOLD CAPITAL DIGAMMA + +# Total code points: 565 + +# ================================================ + +# Derived Property: Full_Composition_Exclusion +# Generated from: Composition Exclusions + Singletons + Non-Starter Decompositions + +0340..0341 ; Full_Composition_Exclusion # Mn [2] COMBINING GRAVE TONE MARK..COMBINING ACUTE TONE MARK +0343..0344 ; Full_Composition_Exclusion # Mn [2] COMBINING GREEK KORONIS..COMBINING GREEK DIALYTIKA TONOS +0374 ; Full_Composition_Exclusion # Sk GREEK NUMERAL SIGN +037E ; Full_Composition_Exclusion # Po GREEK QUESTION MARK +0387 ; Full_Composition_Exclusion # Po GREEK ANO TELEIA +0958..095F ; Full_Composition_Exclusion # Lo [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA +09DC..09DD ; Full_Composition_Exclusion # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA +09DF ; Full_Composition_Exclusion # Lo BENGALI LETTER YYA +0A33 ; Full_Composition_Exclusion # Lo GURMUKHI LETTER LLA +0A36 ; Full_Composition_Exclusion # Lo GURMUKHI LETTER SHA +0A59..0A5B ; Full_Composition_Exclusion # Lo [3] GURMUKHI LETTER KHHA..GURMUKHI LETTER ZA +0A5E ; Full_Composition_Exclusion # Lo GURMUKHI LETTER FA +0B5C..0B5D ; Full_Composition_Exclusion # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA +0F43 ; Full_Composition_Exclusion # Lo TIBETAN LETTER GHA +0F4D ; Full_Composition_Exclusion # Lo TIBETAN LETTER DDHA +0F52 ; Full_Composition_Exclusion # Lo TIBETAN LETTER DHA +0F57 ; Full_Composition_Exclusion # Lo TIBETAN LETTER BHA +0F5C ; Full_Composition_Exclusion # Lo TIBETAN LETTER DZHA +0F69 ; Full_Composition_Exclusion # Lo TIBETAN LETTER KSSA +0F73 ; Full_Composition_Exclusion # Mn TIBETAN VOWEL SIGN II +0F75..0F76 ; Full_Composition_Exclusion # Mn [2] TIBETAN VOWEL SIGN UU..TIBETAN VOWEL SIGN VOCALIC R +0F78 ; Full_Composition_Exclusion # Mn TIBETAN VOWEL SIGN VOCALIC L +0F81 ; Full_Composition_Exclusion # Mn TIBETAN VOWEL SIGN REVERSED II +0F93 ; Full_Composition_Exclusion # Mn TIBETAN SUBJOINED LETTER GHA +0F9D ; Full_Composition_Exclusion # Mn TIBETAN SUBJOINED LETTER DDHA +0FA2 ; Full_Composition_Exclusion # Mn TIBETAN SUBJOINED LETTER DHA +0FA7 ; Full_Composition_Exclusion # Mn TIBETAN SUBJOINED LETTER BHA +0FAC ; Full_Composition_Exclusion # Mn TIBETAN SUBJOINED LETTER DZHA +0FB9 ; Full_Composition_Exclusion # Mn TIBETAN SUBJOINED LETTER KSSA +1F71 ; Full_Composition_Exclusion # L& GREEK SMALL LETTER ALPHA WITH OXIA +1F73 ; Full_Composition_Exclusion # L& GREEK SMALL LETTER EPSILON WITH OXIA +1F75 ; Full_Composition_Exclusion # L& GREEK SMALL LETTER ETA WITH OXIA +1F77 ; Full_Composition_Exclusion # L& GREEK SMALL LETTER IOTA WITH OXIA +1F79 ; Full_Composition_Exclusion # L& GREEK SMALL LETTER OMICRON WITH OXIA +1F7B ; Full_Composition_Exclusion # L& GREEK SMALL LETTER UPSILON WITH OXIA +1F7D ; Full_Composition_Exclusion # L& GREEK SMALL LETTER OMEGA WITH OXIA +1FBB ; Full_Composition_Exclusion # L& GREEK CAPITAL LETTER ALPHA WITH OXIA +1FBE ; Full_Composition_Exclusion # L& GREEK PROSGEGRAMMENI +1FC9 ; Full_Composition_Exclusion # L& GREEK CAPITAL LETTER EPSILON WITH OXIA +1FCB ; Full_Composition_Exclusion # L& GREEK CAPITAL LETTER ETA WITH OXIA +1FD3 ; Full_Composition_Exclusion # L& GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FDB ; Full_Composition_Exclusion # L& GREEK CAPITAL LETTER IOTA WITH OXIA +1FE3 ; Full_Composition_Exclusion # L& GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA +1FEB ; Full_Composition_Exclusion # L& GREEK CAPITAL LETTER UPSILON WITH OXIA +1FEE..1FEF ; Full_Composition_Exclusion # Sk [2] GREEK DIALYTIKA AND OXIA..GREEK VARIA +1FF9 ; Full_Composition_Exclusion # L& GREEK CAPITAL LETTER OMICRON WITH OXIA +1FFB ; Full_Composition_Exclusion # L& GREEK CAPITAL LETTER OMEGA WITH OXIA +1FFD ; Full_Composition_Exclusion # Sk GREEK OXIA +2000..2001 ; Full_Composition_Exclusion # Zs [2] EN QUAD..EM QUAD +2126 ; Full_Composition_Exclusion # L& OHM SIGN +212A..212B ; Full_Composition_Exclusion # L& [2] KELVIN SIGN..ANGSTROM SIGN +2329 ; Full_Composition_Exclusion # Ps LEFT-POINTING ANGLE BRACKET +232A ; Full_Composition_Exclusion # Pe RIGHT-POINTING ANGLE BRACKET +2ADC ; Full_Composition_Exclusion # Sm FORKING +F900..FA0D ; Full_Composition_Exclusion # Lo [270] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA0D +FA10 ; Full_Composition_Exclusion # Lo CJK COMPATIBILITY IDEOGRAPH-FA10 +FA12 ; Full_Composition_Exclusion # Lo CJK COMPATIBILITY IDEOGRAPH-FA12 +FA15..FA1E ; Full_Composition_Exclusion # Lo [10] CJK COMPATIBILITY IDEOGRAPH-FA15..CJK COMPATIBILITY IDEOGRAPH-FA1E +FA20 ; Full_Composition_Exclusion # Lo CJK COMPATIBILITY IDEOGRAPH-FA20 +FA22 ; Full_Composition_Exclusion # Lo CJK COMPATIBILITY IDEOGRAPH-FA22 +FA25..FA26 ; Full_Composition_Exclusion # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA25..CJK COMPATIBILITY IDEOGRAPH-FA26 +FA2A..FA2D ; Full_Composition_Exclusion # Lo [4] CJK COMPATIBILITY IDEOGRAPH-FA2A..CJK COMPATIBILITY IDEOGRAPH-FA2D +FA30..FA6A ; Full_Composition_Exclusion # Lo [59] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6A +FA70..FAD9 ; Full_Composition_Exclusion # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 +FB1D ; Full_Composition_Exclusion # Lo HEBREW LETTER YOD WITH HIRIQ +FB1F ; Full_Composition_Exclusion # Lo HEBREW LIGATURE YIDDISH YOD YOD PATAH +FB2A..FB36 ; Full_Composition_Exclusion # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH +FB38..FB3C ; Full_Composition_Exclusion # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH +FB3E ; Full_Composition_Exclusion # Lo HEBREW LETTER MEM WITH DAGESH +FB40..FB41 ; Full_Composition_Exclusion # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH +FB43..FB44 ; Full_Composition_Exclusion # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH +FB46..FB4E ; Full_Composition_Exclusion # Lo [9] HEBREW LETTER TSADI WITH DAGESH..HEBREW LETTER PE WITH RAFE +1D15E..1D164 ; Full_Composition_Exclusion # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE +1D1BB..1D1C0 ; Full_Composition_Exclusion # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK +2F800..2FA1D ; Full_Composition_Exclusion # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D + +# Total code points: 1115 + +# ================================================ + +# Property: NFD_Quick_Check + +# All code points not explicitly listed for NFD_Quick_Check +# have the value Yes (Y). + +# @missing: 0000..10FFFF; NFD_QC; Yes + +# ================================================ + +# NFD_Quick_Check=No + +00C0..00C5 ; NFD_QC; N # L& [6] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER A WITH RING ABOVE +00C7..00CF ; NFD_QC; N # L& [9] LATIN CAPITAL LETTER C WITH CEDILLA..LATIN CAPITAL LETTER I WITH DIAERESIS +00D1..00D6 ; NFD_QC; N # L& [6] LATIN CAPITAL LETTER N WITH TILDE..LATIN CAPITAL LETTER O WITH DIAERESIS +00D9..00DD ; NFD_QC; N # L& [5] LATIN CAPITAL LETTER U WITH GRAVE..LATIN CAPITAL LETTER Y WITH ACUTE +00E0..00E5 ; NFD_QC; N # L& [6] LATIN SMALL LETTER A WITH GRAVE..LATIN SMALL LETTER A WITH RING ABOVE +00E7..00EF ; NFD_QC; N # L& [9] LATIN SMALL LETTER C WITH CEDILLA..LATIN SMALL LETTER I WITH DIAERESIS +00F1..00F6 ; NFD_QC; N # L& [6] LATIN SMALL LETTER N WITH TILDE..LATIN SMALL LETTER O WITH DIAERESIS +00F9..00FD ; NFD_QC; N # L& [5] LATIN SMALL LETTER U WITH GRAVE..LATIN SMALL LETTER Y WITH ACUTE +00FF..010F ; NFD_QC; N # L& [17] LATIN SMALL LETTER Y WITH DIAERESIS..LATIN SMALL LETTER D WITH CARON +0112..0125 ; NFD_QC; N # L& [20] LATIN CAPITAL LETTER E WITH MACRON..LATIN SMALL LETTER H WITH CIRCUMFLEX +0128..0130 ; NFD_QC; N # L& [9] LATIN CAPITAL LETTER I WITH TILDE..LATIN CAPITAL LETTER I WITH DOT ABOVE +0134..0137 ; NFD_QC; N # L& [4] LATIN CAPITAL LETTER J WITH CIRCUMFLEX..LATIN SMALL LETTER K WITH CEDILLA +0139..013E ; NFD_QC; N # L& [6] LATIN CAPITAL LETTER L WITH ACUTE..LATIN SMALL LETTER L WITH CARON +0143..0148 ; NFD_QC; N # L& [6] LATIN CAPITAL LETTER N WITH ACUTE..LATIN SMALL LETTER N WITH CARON +014C..0151 ; NFD_QC; N # L& [6] LATIN CAPITAL LETTER O WITH MACRON..LATIN SMALL LETTER O WITH DOUBLE ACUTE +0154..0165 ; NFD_QC; N # L& [18] LATIN CAPITAL LETTER R WITH ACUTE..LATIN SMALL LETTER T WITH CARON +0168..017E ; NFD_QC; N # L& [23] LATIN CAPITAL LETTER U WITH TILDE..LATIN SMALL LETTER Z WITH CARON +01A0..01A1 ; NFD_QC; N # L& [2] LATIN CAPITAL LETTER O WITH HORN..LATIN SMALL LETTER O WITH HORN +01AF..01B0 ; NFD_QC; N # L& [2] LATIN CAPITAL LETTER U WITH HORN..LATIN SMALL LETTER U WITH HORN +01CD..01DC ; NFD_QC; N # L& [16] LATIN CAPITAL LETTER A WITH CARON..LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DE..01E3 ; NFD_QC; N # L& [6] LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON..LATIN SMALL LETTER AE WITH MACRON +01E6..01F0 ; NFD_QC; N # L& [11] LATIN CAPITAL LETTER G WITH CARON..LATIN SMALL LETTER J WITH CARON +01F4..01F5 ; NFD_QC; N # L& [2] LATIN CAPITAL LETTER G WITH ACUTE..LATIN SMALL LETTER G WITH ACUTE +01F8..021B ; NFD_QC; N # L& [36] LATIN CAPITAL LETTER N WITH GRAVE..LATIN SMALL LETTER T WITH COMMA BELOW +021E..021F ; NFD_QC; N # L& [2] LATIN CAPITAL LETTER H WITH CARON..LATIN SMALL LETTER H WITH CARON +0226..0233 ; NFD_QC; N # L& [14] LATIN CAPITAL LETTER A WITH DOT ABOVE..LATIN SMALL LETTER Y WITH MACRON +0340..0341 ; NFD_QC; N # Mn [2] COMBINING GRAVE TONE MARK..COMBINING ACUTE TONE MARK +0343..0344 ; NFD_QC; N # Mn [2] COMBINING GREEK KORONIS..COMBINING GREEK DIALYTIKA TONOS +0374 ; NFD_QC; N # Sk GREEK NUMERAL SIGN +037E ; NFD_QC; N # Po GREEK QUESTION MARK +0385 ; NFD_QC; N # Sk GREEK DIALYTIKA TONOS +0386 ; NFD_QC; N # L& GREEK CAPITAL LETTER ALPHA WITH TONOS +0387 ; NFD_QC; N # Po GREEK ANO TELEIA +0388..038A ; NFD_QC; N # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS +038C ; NFD_QC; N # L& GREEK CAPITAL LETTER OMICRON WITH TONOS +038E..0390 ; NFD_QC; N # L& [3] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +03AA..03B0 ; NFD_QC; N # L& [7] GREEK CAPITAL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +03CA..03CE ; NFD_QC; N # L& [5] GREEK SMALL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER OMEGA WITH TONOS +03D3..03D4 ; NFD_QC; N # L& [2] GREEK UPSILON WITH ACUTE AND HOOK SYMBOL..GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL +0400..0401 ; NFD_QC; N # L& [2] CYRILLIC CAPITAL LETTER IE WITH GRAVE..CYRILLIC CAPITAL LETTER IO +0403 ; NFD_QC; N # L& CYRILLIC CAPITAL LETTER GJE +0407 ; NFD_QC; N # L& CYRILLIC CAPITAL LETTER YI +040C..040E ; NFD_QC; N # L& [3] CYRILLIC CAPITAL LETTER KJE..CYRILLIC CAPITAL LETTER SHORT U +0419 ; NFD_QC; N # L& CYRILLIC CAPITAL LETTER SHORT I +0439 ; NFD_QC; N # L& CYRILLIC SMALL LETTER SHORT I +0450..0451 ; NFD_QC; N # L& [2] CYRILLIC SMALL LETTER IE WITH GRAVE..CYRILLIC SMALL LETTER IO +0453 ; NFD_QC; N # L& CYRILLIC SMALL LETTER GJE +0457 ; NFD_QC; N # L& CYRILLIC SMALL LETTER YI +045C..045E ; NFD_QC; N # L& [3] CYRILLIC SMALL LETTER KJE..CYRILLIC SMALL LETTER SHORT U +0476..0477 ; NFD_QC; N # L& [2] CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT..CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT +04C1..04C2 ; NFD_QC; N # L& [2] CYRILLIC CAPITAL LETTER ZHE WITH BREVE..CYRILLIC SMALL LETTER ZHE WITH BREVE +04D0..04D3 ; NFD_QC; N # L& [4] CYRILLIC CAPITAL LETTER A WITH BREVE..CYRILLIC SMALL LETTER A WITH DIAERESIS +04D6..04D7 ; NFD_QC; N # L& [2] CYRILLIC CAPITAL LETTER IE WITH BREVE..CYRILLIC SMALL LETTER IE WITH BREVE +04DA..04DF ; NFD_QC; N # L& [6] CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS..CYRILLIC SMALL LETTER ZE WITH DIAERESIS +04E2..04E7 ; NFD_QC; N # L& [6] CYRILLIC CAPITAL LETTER I WITH MACRON..CYRILLIC SMALL LETTER O WITH DIAERESIS +04EA..04F5 ; NFD_QC; N # L& [12] CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS..CYRILLIC SMALL LETTER CHE WITH DIAERESIS +04F8..04F9 ; NFD_QC; N # L& [2] CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS..CYRILLIC SMALL LETTER YERU WITH DIAERESIS +0622..0626 ; NFD_QC; N # Lo [5] ARABIC LETTER ALEF WITH MADDA ABOVE..ARABIC LETTER YEH WITH HAMZA ABOVE +06C0 ; NFD_QC; N # Lo ARABIC LETTER HEH WITH YEH ABOVE +06C2 ; NFD_QC; N # Lo ARABIC LETTER HEH GOAL WITH HAMZA ABOVE +06D3 ; NFD_QC; N # Lo ARABIC LETTER YEH BARREE WITH HAMZA ABOVE +0929 ; NFD_QC; N # Lo DEVANAGARI LETTER NNNA +0931 ; NFD_QC; N # Lo DEVANAGARI LETTER RRA +0934 ; NFD_QC; N # Lo DEVANAGARI LETTER LLLA +0958..095F ; NFD_QC; N # Lo [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA +09CB..09CC ; NFD_QC; N # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU +09DC..09DD ; NFD_QC; N # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA +09DF ; NFD_QC; N # Lo BENGALI LETTER YYA +0A33 ; NFD_QC; N # Lo GURMUKHI LETTER LLA +0A36 ; NFD_QC; N # Lo GURMUKHI LETTER SHA +0A59..0A5B ; NFD_QC; N # Lo [3] GURMUKHI LETTER KHHA..GURMUKHI LETTER ZA +0A5E ; NFD_QC; N # Lo GURMUKHI LETTER FA +0B48 ; NFD_QC; N # Mc ORIYA VOWEL SIGN AI +0B4B..0B4C ; NFD_QC; N # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU +0B5C..0B5D ; NFD_QC; N # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA +0B94 ; NFD_QC; N # Lo TAMIL LETTER AU +0BCA..0BCC ; NFD_QC; N # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU +0C48 ; NFD_QC; N # Mn TELUGU VOWEL SIGN AI +0CC0 ; NFD_QC; N # Mc KANNADA VOWEL SIGN II +0CC7..0CC8 ; NFD_QC; N # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI +0CCA..0CCB ; NFD_QC; N # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO +0D4A..0D4C ; NFD_QC; N # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU +0DDA ; NFD_QC; N # Mc SINHALA VOWEL SIGN DIGA KOMBUVA +0DDC..0DDE ; NFD_QC; N # Mc [3] SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA +0F43 ; NFD_QC; N # Lo TIBETAN LETTER GHA +0F4D ; NFD_QC; N # Lo TIBETAN LETTER DDHA +0F52 ; NFD_QC; N # Lo TIBETAN LETTER DHA +0F57 ; NFD_QC; N # Lo TIBETAN LETTER BHA +0F5C ; NFD_QC; N # Lo TIBETAN LETTER DZHA +0F69 ; NFD_QC; N # Lo TIBETAN LETTER KSSA +0F73 ; NFD_QC; N # Mn TIBETAN VOWEL SIGN II +0F75..0F76 ; NFD_QC; N # Mn [2] TIBETAN VOWEL SIGN UU..TIBETAN VOWEL SIGN VOCALIC R +0F78 ; NFD_QC; N # Mn TIBETAN VOWEL SIGN VOCALIC L +0F81 ; NFD_QC; N # Mn TIBETAN VOWEL SIGN REVERSED II +0F93 ; NFD_QC; N # Mn TIBETAN SUBJOINED LETTER GHA +0F9D ; NFD_QC; N # Mn TIBETAN SUBJOINED LETTER DDHA +0FA2 ; NFD_QC; N # Mn TIBETAN SUBJOINED LETTER DHA +0FA7 ; NFD_QC; N # Mn TIBETAN SUBJOINED LETTER BHA +0FAC ; NFD_QC; N # Mn TIBETAN SUBJOINED LETTER DZHA +0FB9 ; NFD_QC; N # Mn TIBETAN SUBJOINED LETTER KSSA +1026 ; NFD_QC; N # Lo MYANMAR LETTER UU +1B06 ; NFD_QC; N # Lo BALINESE LETTER AKARA TEDUNG +1B08 ; NFD_QC; N # Lo BALINESE LETTER IKARA TEDUNG +1B0A ; NFD_QC; N # Lo BALINESE LETTER UKARA TEDUNG +1B0C ; NFD_QC; N # Lo BALINESE LETTER RA REPA TEDUNG +1B0E ; NFD_QC; N # Lo BALINESE LETTER LA LENGA TEDUNG +1B12 ; NFD_QC; N # Lo BALINESE LETTER OKARA TEDUNG +1B3B ; NFD_QC; N # Mc BALINESE VOWEL SIGN RA REPA TEDUNG +1B3D ; NFD_QC; N # Mc BALINESE VOWEL SIGN LA LENGA TEDUNG +1B40..1B41 ; NFD_QC; N # Mc [2] BALINESE VOWEL SIGN TALING TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG +1B43 ; NFD_QC; N # Mc BALINESE VOWEL SIGN PEPET TEDUNG +1E00..1E99 ; NFD_QC; N # L& [154] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH RING ABOVE +1E9B ; NFD_QC; N # L& LATIN SMALL LETTER LONG S WITH DOT ABOVE +1EA0..1EF9 ; NFD_QC; N # L& [90] LATIN CAPITAL LETTER A WITH DOT BELOW..LATIN SMALL LETTER Y WITH TILDE +1F00..1F15 ; NFD_QC; N # L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA +1F18..1F1D ; NFD_QC; N # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F20..1F45 ; NFD_QC; N # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA +1F48..1F4D ; NFD_QC; N # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F50..1F57 ; NFD_QC; N # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F59 ; NFD_QC; N # L& GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B ; NFD_QC; N # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D ; NFD_QC; N # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F..1F7D ; NFD_QC; N # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA +1F80..1FB4 ; NFD_QC; N # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB6..1FBC ; NFD_QC; N # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBE ; NFD_QC; N # L& GREEK PROSGEGRAMMENI +1FC1 ; NFD_QC; N # Sk GREEK DIALYTIKA AND PERISPOMENI +1FC2..1FC4 ; NFD_QC; N # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC6..1FCC ; NFD_QC; N # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FCD..1FCF ; NFD_QC; N # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI +1FD0..1FD3 ; NFD_QC; N # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD6..1FDB ; NFD_QC; N # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA +1FDD..1FDF ; NFD_QC; N # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI +1FE0..1FEC ; NFD_QC; N # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA +1FED..1FEF ; NFD_QC; N # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA +1FF2..1FF4 ; NFD_QC; N # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF6..1FFC ; NFD_QC; N # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +1FFD ; NFD_QC; N # Sk GREEK OXIA +2000..2001 ; NFD_QC; N # Zs [2] EN QUAD..EM QUAD +2126 ; NFD_QC; N # L& OHM SIGN +212A..212B ; NFD_QC; N # L& [2] KELVIN SIGN..ANGSTROM SIGN +219A..219B ; NFD_QC; N # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE +21AE ; NFD_QC; N # Sm LEFT RIGHT ARROW WITH STROKE +21CD ; NFD_QC; N # So LEFTWARDS DOUBLE ARROW WITH STROKE +21CE..21CF ; NFD_QC; N # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE +2204 ; NFD_QC; N # Sm THERE DOES NOT EXIST +2209 ; NFD_QC; N # Sm NOT AN ELEMENT OF +220C ; NFD_QC; N # Sm DOES NOT CONTAIN AS MEMBER +2224 ; NFD_QC; N # Sm DOES NOT DIVIDE +2226 ; NFD_QC; N # Sm NOT PARALLEL TO +2241 ; NFD_QC; N # Sm NOT TILDE +2244 ; NFD_QC; N # Sm NOT ASYMPTOTICALLY EQUAL TO +2247 ; NFD_QC; N # Sm NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO +2249 ; NFD_QC; N # Sm NOT ALMOST EQUAL TO +2260 ; NFD_QC; N # Sm NOT EQUAL TO +2262 ; NFD_QC; N # Sm NOT IDENTICAL TO +226D..2271 ; NFD_QC; N # Sm [5] NOT EQUIVALENT TO..NEITHER GREATER-THAN NOR EQUAL TO +2274..2275 ; NFD_QC; N # Sm [2] NEITHER LESS-THAN NOR EQUIVALENT TO..NEITHER GREATER-THAN NOR EQUIVALENT TO +2278..2279 ; NFD_QC; N # Sm [2] NEITHER LESS-THAN NOR GREATER-THAN..NEITHER GREATER-THAN NOR LESS-THAN +2280..2281 ; NFD_QC; N # Sm [2] DOES NOT PRECEDE..DOES NOT SUCCEED +2284..2285 ; NFD_QC; N # Sm [2] NOT A SUBSET OF..NOT A SUPERSET OF +2288..2289 ; NFD_QC; N # Sm [2] NEITHER A SUBSET OF NOR EQUAL TO..NEITHER A SUPERSET OF NOR EQUAL TO +22AC..22AF ; NFD_QC; N # Sm [4] DOES NOT PROVE..NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE +22E0..22E3 ; NFD_QC; N # Sm [4] DOES NOT PRECEDE OR EQUAL..NOT SQUARE ORIGINAL OF OR EQUAL TO +22EA..22ED ; NFD_QC; N # Sm [4] NOT NORMAL SUBGROUP OF..DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL +2329 ; NFD_QC; N # Ps LEFT-POINTING ANGLE BRACKET +232A ; NFD_QC; N # Pe RIGHT-POINTING ANGLE BRACKET +2ADC ; NFD_QC; N # Sm FORKING +304C ; NFD_QC; N # Lo HIRAGANA LETTER GA +304E ; NFD_QC; N # Lo HIRAGANA LETTER GI +3050 ; NFD_QC; N # Lo HIRAGANA LETTER GU +3052 ; NFD_QC; N # Lo HIRAGANA LETTER GE +3054 ; NFD_QC; N # Lo HIRAGANA LETTER GO +3056 ; NFD_QC; N # Lo HIRAGANA LETTER ZA +3058 ; NFD_QC; N # Lo HIRAGANA LETTER ZI +305A ; NFD_QC; N # Lo HIRAGANA LETTER ZU +305C ; NFD_QC; N # Lo HIRAGANA LETTER ZE +305E ; NFD_QC; N # Lo HIRAGANA LETTER ZO +3060 ; NFD_QC; N # Lo HIRAGANA LETTER DA +3062 ; NFD_QC; N # Lo HIRAGANA LETTER DI +3065 ; NFD_QC; N # Lo HIRAGANA LETTER DU +3067 ; NFD_QC; N # Lo HIRAGANA LETTER DE +3069 ; NFD_QC; N # Lo HIRAGANA LETTER DO +3070..3071 ; NFD_QC; N # Lo [2] HIRAGANA LETTER BA..HIRAGANA LETTER PA +3073..3074 ; NFD_QC; N # Lo [2] HIRAGANA LETTER BI..HIRAGANA LETTER PI +3076..3077 ; NFD_QC; N # Lo [2] HIRAGANA LETTER BU..HIRAGANA LETTER PU +3079..307A ; NFD_QC; N # Lo [2] HIRAGANA LETTER BE..HIRAGANA LETTER PE +307C..307D ; NFD_QC; N # Lo [2] HIRAGANA LETTER BO..HIRAGANA LETTER PO +3094 ; NFD_QC; N # Lo HIRAGANA LETTER VU +309E ; NFD_QC; N # Lm HIRAGANA VOICED ITERATION MARK +30AC ; NFD_QC; N # Lo KATAKANA LETTER GA +30AE ; NFD_QC; N # Lo KATAKANA LETTER GI +30B0 ; NFD_QC; N # Lo KATAKANA LETTER GU +30B2 ; NFD_QC; N # Lo KATAKANA LETTER GE +30B4 ; NFD_QC; N # Lo KATAKANA LETTER GO +30B6 ; NFD_QC; N # Lo KATAKANA LETTER ZA +30B8 ; NFD_QC; N # Lo KATAKANA LETTER ZI +30BA ; NFD_QC; N # Lo KATAKANA LETTER ZU +30BC ; NFD_QC; N # Lo KATAKANA LETTER ZE +30BE ; NFD_QC; N # Lo KATAKANA LETTER ZO +30C0 ; NFD_QC; N # Lo KATAKANA LETTER DA +30C2 ; NFD_QC; N # Lo KATAKANA LETTER DI +30C5 ; NFD_QC; N # Lo KATAKANA LETTER DU +30C7 ; NFD_QC; N # Lo KATAKANA LETTER DE +30C9 ; NFD_QC; N # Lo KATAKANA LETTER DO +30D0..30D1 ; NFD_QC; N # Lo [2] KATAKANA LETTER BA..KATAKANA LETTER PA +30D3..30D4 ; NFD_QC; N # Lo [2] KATAKANA LETTER BI..KATAKANA LETTER PI +30D6..30D7 ; NFD_QC; N # Lo [2] KATAKANA LETTER BU..KATAKANA LETTER PU +30D9..30DA ; NFD_QC; N # Lo [2] KATAKANA LETTER BE..KATAKANA LETTER PE +30DC..30DD ; NFD_QC; N # Lo [2] KATAKANA LETTER BO..KATAKANA LETTER PO +30F4 ; NFD_QC; N # Lo KATAKANA LETTER VU +30F7..30FA ; NFD_QC; N # Lo [4] KATAKANA LETTER VA..KATAKANA LETTER VO +30FE ; NFD_QC; N # Lm KATAKANA VOICED ITERATION MARK +AC00..D7A3 ; NFD_QC; N # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH +F900..FA0D ; NFD_QC; N # Lo [270] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA0D +FA10 ; NFD_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA10 +FA12 ; NFD_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA12 +FA15..FA1E ; NFD_QC; N # Lo [10] CJK COMPATIBILITY IDEOGRAPH-FA15..CJK COMPATIBILITY IDEOGRAPH-FA1E +FA20 ; NFD_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA20 +FA22 ; NFD_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA22 +FA25..FA26 ; NFD_QC; N # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA25..CJK COMPATIBILITY IDEOGRAPH-FA26 +FA2A..FA2D ; NFD_QC; N # Lo [4] CJK COMPATIBILITY IDEOGRAPH-FA2A..CJK COMPATIBILITY IDEOGRAPH-FA2D +FA30..FA6A ; NFD_QC; N # Lo [59] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6A +FA70..FAD9 ; NFD_QC; N # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 +FB1D ; NFD_QC; N # Lo HEBREW LETTER YOD WITH HIRIQ +FB1F ; NFD_QC; N # Lo HEBREW LIGATURE YIDDISH YOD YOD PATAH +FB2A..FB36 ; NFD_QC; N # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH +FB38..FB3C ; NFD_QC; N # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH +FB3E ; NFD_QC; N # Lo HEBREW LETTER MEM WITH DAGESH +FB40..FB41 ; NFD_QC; N # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH +FB43..FB44 ; NFD_QC; N # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH +FB46..FB4E ; NFD_QC; N # Lo [9] HEBREW LETTER TSADI WITH DAGESH..HEBREW LETTER PE WITH RAFE +1D15E..1D164 ; NFD_QC; N # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE +1D1BB..1D1C0 ; NFD_QC; N # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK +2F800..2FA1D ; NFD_QC; N # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D + +# Total code points: 13215 + +# ================================================ + +# Property: NFC_Quick_Check + +# All code points not explicitly listed for NFC_Quick_Check +# have the value Yes (Y). + +# @missing: 0000..10FFFF; NFC_QC; Yes + +# ================================================ + +# NFC_Quick_Check=No + +0340..0341 ; NFC_QC; N # Mn [2] COMBINING GRAVE TONE MARK..COMBINING ACUTE TONE MARK +0343..0344 ; NFC_QC; N # Mn [2] COMBINING GREEK KORONIS..COMBINING GREEK DIALYTIKA TONOS +0374 ; NFC_QC; N # Sk GREEK NUMERAL SIGN +037E ; NFC_QC; N # Po GREEK QUESTION MARK +0387 ; NFC_QC; N # Po GREEK ANO TELEIA +0958..095F ; NFC_QC; N # Lo [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA +09DC..09DD ; NFC_QC; N # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA +09DF ; NFC_QC; N # Lo BENGALI LETTER YYA +0A33 ; NFC_QC; N # Lo GURMUKHI LETTER LLA +0A36 ; NFC_QC; N # Lo GURMUKHI LETTER SHA +0A59..0A5B ; NFC_QC; N # Lo [3] GURMUKHI LETTER KHHA..GURMUKHI LETTER ZA +0A5E ; NFC_QC; N # Lo GURMUKHI LETTER FA +0B5C..0B5D ; NFC_QC; N # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA +0F43 ; NFC_QC; N # Lo TIBETAN LETTER GHA +0F4D ; NFC_QC; N # Lo TIBETAN LETTER DDHA +0F52 ; NFC_QC; N # Lo TIBETAN LETTER DHA +0F57 ; NFC_QC; N # Lo TIBETAN LETTER BHA +0F5C ; NFC_QC; N # Lo TIBETAN LETTER DZHA +0F69 ; NFC_QC; N # Lo TIBETAN LETTER KSSA +0F73 ; NFC_QC; N # Mn TIBETAN VOWEL SIGN II +0F75..0F76 ; NFC_QC; N # Mn [2] TIBETAN VOWEL SIGN UU..TIBETAN VOWEL SIGN VOCALIC R +0F78 ; NFC_QC; N # Mn TIBETAN VOWEL SIGN VOCALIC L +0F81 ; NFC_QC; N # Mn TIBETAN VOWEL SIGN REVERSED II +0F93 ; NFC_QC; N # Mn TIBETAN SUBJOINED LETTER GHA +0F9D ; NFC_QC; N # Mn TIBETAN SUBJOINED LETTER DDHA +0FA2 ; NFC_QC; N # Mn TIBETAN SUBJOINED LETTER DHA +0FA7 ; NFC_QC; N # Mn TIBETAN SUBJOINED LETTER BHA +0FAC ; NFC_QC; N # Mn TIBETAN SUBJOINED LETTER DZHA +0FB9 ; NFC_QC; N # Mn TIBETAN SUBJOINED LETTER KSSA +1F71 ; NFC_QC; N # L& GREEK SMALL LETTER ALPHA WITH OXIA +1F73 ; NFC_QC; N # L& GREEK SMALL LETTER EPSILON WITH OXIA +1F75 ; NFC_QC; N # L& GREEK SMALL LETTER ETA WITH OXIA +1F77 ; NFC_QC; N # L& GREEK SMALL LETTER IOTA WITH OXIA +1F79 ; NFC_QC; N # L& GREEK SMALL LETTER OMICRON WITH OXIA +1F7B ; NFC_QC; N # L& GREEK SMALL LETTER UPSILON WITH OXIA +1F7D ; NFC_QC; N # L& GREEK SMALL LETTER OMEGA WITH OXIA +1FBB ; NFC_QC; N # L& GREEK CAPITAL LETTER ALPHA WITH OXIA +1FBE ; NFC_QC; N # L& GREEK PROSGEGRAMMENI +1FC9 ; NFC_QC; N # L& GREEK CAPITAL LETTER EPSILON WITH OXIA +1FCB ; NFC_QC; N # L& GREEK CAPITAL LETTER ETA WITH OXIA +1FD3 ; NFC_QC; N # L& GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FDB ; NFC_QC; N # L& GREEK CAPITAL LETTER IOTA WITH OXIA +1FE3 ; NFC_QC; N # L& GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA +1FEB ; NFC_QC; N # L& GREEK CAPITAL LETTER UPSILON WITH OXIA +1FEE..1FEF ; NFC_QC; N # Sk [2] GREEK DIALYTIKA AND OXIA..GREEK VARIA +1FF9 ; NFC_QC; N # L& GREEK CAPITAL LETTER OMICRON WITH OXIA +1FFB ; NFC_QC; N # L& GREEK CAPITAL LETTER OMEGA WITH OXIA +1FFD ; NFC_QC; N # Sk GREEK OXIA +2000..2001 ; NFC_QC; N # Zs [2] EN QUAD..EM QUAD +2126 ; NFC_QC; N # L& OHM SIGN +212A..212B ; NFC_QC; N # L& [2] KELVIN SIGN..ANGSTROM SIGN +2329 ; NFC_QC; N # Ps LEFT-POINTING ANGLE BRACKET +232A ; NFC_QC; N # Pe RIGHT-POINTING ANGLE BRACKET +2ADC ; NFC_QC; N # Sm FORKING +F900..FA0D ; NFC_QC; N # Lo [270] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA0D +FA10 ; NFC_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA10 +FA12 ; NFC_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA12 +FA15..FA1E ; NFC_QC; N # Lo [10] CJK COMPATIBILITY IDEOGRAPH-FA15..CJK COMPATIBILITY IDEOGRAPH-FA1E +FA20 ; NFC_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA20 +FA22 ; NFC_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA22 +FA25..FA26 ; NFC_QC; N # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA25..CJK COMPATIBILITY IDEOGRAPH-FA26 +FA2A..FA2D ; NFC_QC; N # Lo [4] CJK COMPATIBILITY IDEOGRAPH-FA2A..CJK COMPATIBILITY IDEOGRAPH-FA2D +FA30..FA6A ; NFC_QC; N # Lo [59] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6A +FA70..FAD9 ; NFC_QC; N # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 +FB1D ; NFC_QC; N # Lo HEBREW LETTER YOD WITH HIRIQ +FB1F ; NFC_QC; N # Lo HEBREW LIGATURE YIDDISH YOD YOD PATAH +FB2A..FB36 ; NFC_QC; N # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH +FB38..FB3C ; NFC_QC; N # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH +FB3E ; NFC_QC; N # Lo HEBREW LETTER MEM WITH DAGESH +FB40..FB41 ; NFC_QC; N # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH +FB43..FB44 ; NFC_QC; N # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH +FB46..FB4E ; NFC_QC; N # Lo [9] HEBREW LETTER TSADI WITH DAGESH..HEBREW LETTER PE WITH RAFE +1D15E..1D164 ; NFC_QC; N # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE +1D1BB..1D1C0 ; NFC_QC; N # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK +2F800..2FA1D ; NFC_QC; N # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D + +# Total code points: 1115 + +# ================================================ + +# NFC_Quick_Check=Maybe + +0300..0304 ; NFC_QC; M # Mn [5] COMBINING GRAVE ACCENT..COMBINING MACRON +0306..030C ; NFC_QC; M # Mn [7] COMBINING BREVE..COMBINING CARON +030F ; NFC_QC; M # Mn COMBINING DOUBLE GRAVE ACCENT +0311 ; NFC_QC; M # Mn COMBINING INVERTED BREVE +0313..0314 ; NFC_QC; M # Mn [2] COMBINING COMMA ABOVE..COMBINING REVERSED COMMA ABOVE +031B ; NFC_QC; M # Mn COMBINING HORN +0323..0328 ; NFC_QC; M # Mn [6] COMBINING DOT BELOW..COMBINING OGONEK +032D..032E ; NFC_QC; M # Mn [2] COMBINING CIRCUMFLEX ACCENT BELOW..COMBINING BREVE BELOW +0330..0331 ; NFC_QC; M # Mn [2] COMBINING TILDE BELOW..COMBINING MACRON BELOW +0338 ; NFC_QC; M # Mn COMBINING LONG SOLIDUS OVERLAY +0342 ; NFC_QC; M # Mn COMBINING GREEK PERISPOMENI +0345 ; NFC_QC; M # Mn COMBINING GREEK YPOGEGRAMMENI +0653..0655 ; NFC_QC; M # Mn [3] ARABIC MADDAH ABOVE..ARABIC HAMZA BELOW +093C ; NFC_QC; M # Mn DEVANAGARI SIGN NUKTA +09BE ; NFC_QC; M # Mc BENGALI VOWEL SIGN AA +09D7 ; NFC_QC; M # Mc BENGALI AU LENGTH MARK +0B3E ; NFC_QC; M # Mc ORIYA VOWEL SIGN AA +0B56 ; NFC_QC; M # Mn ORIYA AI LENGTH MARK +0B57 ; NFC_QC; M # Mc ORIYA AU LENGTH MARK +0BBE ; NFC_QC; M # Mc TAMIL VOWEL SIGN AA +0BD7 ; NFC_QC; M # Mc TAMIL AU LENGTH MARK +0C56 ; NFC_QC; M # Mn TELUGU AI LENGTH MARK +0CC2 ; NFC_QC; M # Mc KANNADA VOWEL SIGN UU +0CD5..0CD6 ; NFC_QC; M # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK +0D3E ; NFC_QC; M # Mc MALAYALAM VOWEL SIGN AA +0D57 ; NFC_QC; M # Mc MALAYALAM AU LENGTH MARK +0DCA ; NFC_QC; M # Mn SINHALA SIGN AL-LAKUNA +0DCF ; NFC_QC; M # Mc SINHALA VOWEL SIGN AELA-PILLA +0DDF ; NFC_QC; M # Mc SINHALA VOWEL SIGN GAYANUKITTA +102E ; NFC_QC; M # Mn MYANMAR VOWEL SIGN II +1161..1175 ; NFC_QC; M # Lo [21] HANGUL JUNGSEONG A..HANGUL JUNGSEONG I +11A8..11C2 ; NFC_QC; M # Lo [27] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG HIEUH +1B35 ; NFC_QC; M # Mc BALINESE VOWEL SIGN TEDUNG +3099..309A ; NFC_QC; M # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + +# Total code points: 102 + +# ================================================ + +# Property: NFKD_Quick_Check + +# All code points not explicitly listed for NFKD_Quick_Check +# have the value Yes (Y). + +# @missing: 0000..10FFFF; NFKD_QC; Yes + +# ================================================ + +# NFKD_Quick_Check=No + +00A0 ; NFKD_QC; N # Zs NO-BREAK SPACE +00A8 ; NFKD_QC; N # Sk DIAERESIS +00AA ; NFKD_QC; N # L& FEMININE ORDINAL INDICATOR +00AF ; NFKD_QC; N # Sk MACRON +00B2..00B3 ; NFKD_QC; N # No [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE +00B4 ; NFKD_QC; N # Sk ACUTE ACCENT +00B5 ; NFKD_QC; N # L& MICRO SIGN +00B8 ; NFKD_QC; N # Sk CEDILLA +00B9 ; NFKD_QC; N # No SUPERSCRIPT ONE +00BA ; NFKD_QC; N # L& MASCULINE ORDINAL INDICATOR +00BC..00BE ; NFKD_QC; N # No [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS +00C0..00C5 ; NFKD_QC; N # L& [6] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER A WITH RING ABOVE +00C7..00CF ; NFKD_QC; N # L& [9] LATIN CAPITAL LETTER C WITH CEDILLA..LATIN CAPITAL LETTER I WITH DIAERESIS +00D1..00D6 ; NFKD_QC; N # L& [6] LATIN CAPITAL LETTER N WITH TILDE..LATIN CAPITAL LETTER O WITH DIAERESIS +00D9..00DD ; NFKD_QC; N # L& [5] LATIN CAPITAL LETTER U WITH GRAVE..LATIN CAPITAL LETTER Y WITH ACUTE +00E0..00E5 ; NFKD_QC; N # L& [6] LATIN SMALL LETTER A WITH GRAVE..LATIN SMALL LETTER A WITH RING ABOVE +00E7..00EF ; NFKD_QC; N # L& [9] LATIN SMALL LETTER C WITH CEDILLA..LATIN SMALL LETTER I WITH DIAERESIS +00F1..00F6 ; NFKD_QC; N # L& [6] LATIN SMALL LETTER N WITH TILDE..LATIN SMALL LETTER O WITH DIAERESIS +00F9..00FD ; NFKD_QC; N # L& [5] LATIN SMALL LETTER U WITH GRAVE..LATIN SMALL LETTER Y WITH ACUTE +00FF..010F ; NFKD_QC; N # L& [17] LATIN SMALL LETTER Y WITH DIAERESIS..LATIN SMALL LETTER D WITH CARON +0112..0125 ; NFKD_QC; N # L& [20] LATIN CAPITAL LETTER E WITH MACRON..LATIN SMALL LETTER H WITH CIRCUMFLEX +0128..0130 ; NFKD_QC; N # L& [9] LATIN CAPITAL LETTER I WITH TILDE..LATIN CAPITAL LETTER I WITH DOT ABOVE +0132..0137 ; NFKD_QC; N # L& [6] LATIN CAPITAL LIGATURE IJ..LATIN SMALL LETTER K WITH CEDILLA +0139..0140 ; NFKD_QC; N # L& [8] LATIN CAPITAL LETTER L WITH ACUTE..LATIN SMALL LETTER L WITH MIDDLE DOT +0143..0149 ; NFKD_QC; N # L& [7] LATIN CAPITAL LETTER N WITH ACUTE..LATIN SMALL LETTER N PRECEDED BY APOSTROPHE +014C..0151 ; NFKD_QC; N # L& [6] LATIN CAPITAL LETTER O WITH MACRON..LATIN SMALL LETTER O WITH DOUBLE ACUTE +0154..0165 ; NFKD_QC; N # L& [18] LATIN CAPITAL LETTER R WITH ACUTE..LATIN SMALL LETTER T WITH CARON +0168..017F ; NFKD_QC; N # L& [24] LATIN CAPITAL LETTER U WITH TILDE..LATIN SMALL LETTER LONG S +01A0..01A1 ; NFKD_QC; N # L& [2] LATIN CAPITAL LETTER O WITH HORN..LATIN SMALL LETTER O WITH HORN +01AF..01B0 ; NFKD_QC; N # L& [2] LATIN CAPITAL LETTER U WITH HORN..LATIN SMALL LETTER U WITH HORN +01C4..01DC ; NFKD_QC; N # L& [25] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DE..01E3 ; NFKD_QC; N # L& [6] LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON..LATIN SMALL LETTER AE WITH MACRON +01E6..01F5 ; NFKD_QC; N # L& [16] LATIN CAPITAL LETTER G WITH CARON..LATIN SMALL LETTER G WITH ACUTE +01F8..021B ; NFKD_QC; N # L& [36] LATIN CAPITAL LETTER N WITH GRAVE..LATIN SMALL LETTER T WITH COMMA BELOW +021E..021F ; NFKD_QC; N # L& [2] LATIN CAPITAL LETTER H WITH CARON..LATIN SMALL LETTER H WITH CARON +0226..0233 ; NFKD_QC; N # L& [14] LATIN CAPITAL LETTER A WITH DOT ABOVE..LATIN SMALL LETTER Y WITH MACRON +02B0..02B8 ; NFKD_QC; N # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y +02D8..02DD ; NFKD_QC; N # Sk [6] BREVE..DOUBLE ACUTE ACCENT +02E0..02E4 ; NFKD_QC; N # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP +0340..0341 ; NFKD_QC; N # Mn [2] COMBINING GRAVE TONE MARK..COMBINING ACUTE TONE MARK +0343..0344 ; NFKD_QC; N # Mn [2] COMBINING GREEK KORONIS..COMBINING GREEK DIALYTIKA TONOS +0374 ; NFKD_QC; N # Sk GREEK NUMERAL SIGN +037A ; NFKD_QC; N # Lm GREEK YPOGEGRAMMENI +037E ; NFKD_QC; N # Po GREEK QUESTION MARK +0384..0385 ; NFKD_QC; N # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS +0386 ; NFKD_QC; N # L& GREEK CAPITAL LETTER ALPHA WITH TONOS +0387 ; NFKD_QC; N # Po GREEK ANO TELEIA +0388..038A ; NFKD_QC; N # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS +038C ; NFKD_QC; N # L& GREEK CAPITAL LETTER OMICRON WITH TONOS +038E..0390 ; NFKD_QC; N # L& [3] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +03AA..03B0 ; NFKD_QC; N # L& [7] GREEK CAPITAL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +03CA..03CE ; NFKD_QC; N # L& [5] GREEK SMALL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER OMEGA WITH TONOS +03D0..03D6 ; NFKD_QC; N # L& [7] GREEK BETA SYMBOL..GREEK PI SYMBOL +03F0..03F2 ; NFKD_QC; N # L& [3] GREEK KAPPA SYMBOL..GREEK LUNATE SIGMA SYMBOL +03F4..03F5 ; NFKD_QC; N # L& [2] GREEK CAPITAL THETA SYMBOL..GREEK LUNATE EPSILON SYMBOL +03F9 ; NFKD_QC; N # L& GREEK CAPITAL LUNATE SIGMA SYMBOL +0400..0401 ; NFKD_QC; N # L& [2] CYRILLIC CAPITAL LETTER IE WITH GRAVE..CYRILLIC CAPITAL LETTER IO +0403 ; NFKD_QC; N # L& CYRILLIC CAPITAL LETTER GJE +0407 ; NFKD_QC; N # L& CYRILLIC CAPITAL LETTER YI +040C..040E ; NFKD_QC; N # L& [3] CYRILLIC CAPITAL LETTER KJE..CYRILLIC CAPITAL LETTER SHORT U +0419 ; NFKD_QC; N # L& CYRILLIC CAPITAL LETTER SHORT I +0439 ; NFKD_QC; N # L& CYRILLIC SMALL LETTER SHORT I +0450..0451 ; NFKD_QC; N # L& [2] CYRILLIC SMALL LETTER IE WITH GRAVE..CYRILLIC SMALL LETTER IO +0453 ; NFKD_QC; N # L& CYRILLIC SMALL LETTER GJE +0457 ; NFKD_QC; N # L& CYRILLIC SMALL LETTER YI +045C..045E ; NFKD_QC; N # L& [3] CYRILLIC SMALL LETTER KJE..CYRILLIC SMALL LETTER SHORT U +0476..0477 ; NFKD_QC; N # L& [2] CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT..CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT +04C1..04C2 ; NFKD_QC; N # L& [2] CYRILLIC CAPITAL LETTER ZHE WITH BREVE..CYRILLIC SMALL LETTER ZHE WITH BREVE +04D0..04D3 ; NFKD_QC; N # L& [4] CYRILLIC CAPITAL LETTER A WITH BREVE..CYRILLIC SMALL LETTER A WITH DIAERESIS +04D6..04D7 ; NFKD_QC; N # L& [2] CYRILLIC CAPITAL LETTER IE WITH BREVE..CYRILLIC SMALL LETTER IE WITH BREVE +04DA..04DF ; NFKD_QC; N # L& [6] CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS..CYRILLIC SMALL LETTER ZE WITH DIAERESIS +04E2..04E7 ; NFKD_QC; N # L& [6] CYRILLIC CAPITAL LETTER I WITH MACRON..CYRILLIC SMALL LETTER O WITH DIAERESIS +04EA..04F5 ; NFKD_QC; N # L& [12] CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS..CYRILLIC SMALL LETTER CHE WITH DIAERESIS +04F8..04F9 ; NFKD_QC; N # L& [2] CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS..CYRILLIC SMALL LETTER YERU WITH DIAERESIS +0587 ; NFKD_QC; N # L& ARMENIAN SMALL LIGATURE ECH YIWN +0622..0626 ; NFKD_QC; N # Lo [5] ARABIC LETTER ALEF WITH MADDA ABOVE..ARABIC LETTER YEH WITH HAMZA ABOVE +0675..0678 ; NFKD_QC; N # Lo [4] ARABIC LETTER HIGH HAMZA ALEF..ARABIC LETTER HIGH HAMZA YEH +06C0 ; NFKD_QC; N # Lo ARABIC LETTER HEH WITH YEH ABOVE +06C2 ; NFKD_QC; N # Lo ARABIC LETTER HEH GOAL WITH HAMZA ABOVE +06D3 ; NFKD_QC; N # Lo ARABIC LETTER YEH BARREE WITH HAMZA ABOVE +0929 ; NFKD_QC; N # Lo DEVANAGARI LETTER NNNA +0931 ; NFKD_QC; N # Lo DEVANAGARI LETTER RRA +0934 ; NFKD_QC; N # Lo DEVANAGARI LETTER LLLA +0958..095F ; NFKD_QC; N # Lo [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA +09CB..09CC ; NFKD_QC; N # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU +09DC..09DD ; NFKD_QC; N # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA +09DF ; NFKD_QC; N # Lo BENGALI LETTER YYA +0A33 ; NFKD_QC; N # Lo GURMUKHI LETTER LLA +0A36 ; NFKD_QC; N # Lo GURMUKHI LETTER SHA +0A59..0A5B ; NFKD_QC; N # Lo [3] GURMUKHI LETTER KHHA..GURMUKHI LETTER ZA +0A5E ; NFKD_QC; N # Lo GURMUKHI LETTER FA +0B48 ; NFKD_QC; N # Mc ORIYA VOWEL SIGN AI +0B4B..0B4C ; NFKD_QC; N # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU +0B5C..0B5D ; NFKD_QC; N # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA +0B94 ; NFKD_QC; N # Lo TAMIL LETTER AU +0BCA..0BCC ; NFKD_QC; N # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU +0C48 ; NFKD_QC; N # Mn TELUGU VOWEL SIGN AI +0CC0 ; NFKD_QC; N # Mc KANNADA VOWEL SIGN II +0CC7..0CC8 ; NFKD_QC; N # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI +0CCA..0CCB ; NFKD_QC; N # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO +0D4A..0D4C ; NFKD_QC; N # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU +0DDA ; NFKD_QC; N # Mc SINHALA VOWEL SIGN DIGA KOMBUVA +0DDC..0DDE ; NFKD_QC; N # Mc [3] SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA +0E33 ; NFKD_QC; N # Lo THAI CHARACTER SARA AM +0EB3 ; NFKD_QC; N # Lo LAO VOWEL SIGN AM +0EDC..0EDD ; NFKD_QC; N # Lo [2] LAO HO NO..LAO HO MO +0F0C ; NFKD_QC; N # Po TIBETAN MARK DELIMITER TSHEG BSTAR +0F43 ; NFKD_QC; N # Lo TIBETAN LETTER GHA +0F4D ; NFKD_QC; N # Lo TIBETAN LETTER DDHA +0F52 ; NFKD_QC; N # Lo TIBETAN LETTER DHA +0F57 ; NFKD_QC; N # Lo TIBETAN LETTER BHA +0F5C ; NFKD_QC; N # Lo TIBETAN LETTER DZHA +0F69 ; NFKD_QC; N # Lo TIBETAN LETTER KSSA +0F73 ; NFKD_QC; N # Mn TIBETAN VOWEL SIGN II +0F75..0F79 ; NFKD_QC; N # Mn [5] TIBETAN VOWEL SIGN UU..TIBETAN VOWEL SIGN VOCALIC LL +0F81 ; NFKD_QC; N # Mn TIBETAN VOWEL SIGN REVERSED II +0F93 ; NFKD_QC; N # Mn TIBETAN SUBJOINED LETTER GHA +0F9D ; NFKD_QC; N # Mn TIBETAN SUBJOINED LETTER DDHA +0FA2 ; NFKD_QC; N # Mn TIBETAN SUBJOINED LETTER DHA +0FA7 ; NFKD_QC; N # Mn TIBETAN SUBJOINED LETTER BHA +0FAC ; NFKD_QC; N # Mn TIBETAN SUBJOINED LETTER DZHA +0FB9 ; NFKD_QC; N # Mn TIBETAN SUBJOINED LETTER KSSA +1026 ; NFKD_QC; N # Lo MYANMAR LETTER UU +10FC ; NFKD_QC; N # Lm MODIFIER LETTER GEORGIAN NAR +1B06 ; NFKD_QC; N # Lo BALINESE LETTER AKARA TEDUNG +1B08 ; NFKD_QC; N # Lo BALINESE LETTER IKARA TEDUNG +1B0A ; NFKD_QC; N # Lo BALINESE LETTER UKARA TEDUNG +1B0C ; NFKD_QC; N # Lo BALINESE LETTER RA REPA TEDUNG +1B0E ; NFKD_QC; N # Lo BALINESE LETTER LA LENGA TEDUNG +1B12 ; NFKD_QC; N # Lo BALINESE LETTER OKARA TEDUNG +1B3B ; NFKD_QC; N # Mc BALINESE VOWEL SIGN RA REPA TEDUNG +1B3D ; NFKD_QC; N # Mc BALINESE VOWEL SIGN LA LENGA TEDUNG +1B40..1B41 ; NFKD_QC; N # Mc [2] BALINESE VOWEL SIGN TALING TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG +1B43 ; NFKD_QC; N # Mc BALINESE VOWEL SIGN PEPET TEDUNG +1D2C..1D2E ; NFKD_QC; N # Lm [3] MODIFIER LETTER CAPITAL A..MODIFIER LETTER CAPITAL B +1D30..1D3A ; NFKD_QC; N # Lm [11] MODIFIER LETTER CAPITAL D..MODIFIER LETTER CAPITAL N +1D3C..1D4D ; NFKD_QC; N # Lm [18] MODIFIER LETTER CAPITAL O..MODIFIER LETTER SMALL G +1D4F..1D61 ; NFKD_QC; N # Lm [19] MODIFIER LETTER SMALL K..MODIFIER LETTER SMALL CHI +1D62..1D6A ; NFKD_QC; N # L& [9] LATIN SUBSCRIPT SMALL LETTER I..GREEK SUBSCRIPT SMALL LETTER CHI +1D78 ; NFKD_QC; N # Lm MODIFIER LETTER CYRILLIC EN +1D9B..1DBF ; NFKD_QC; N # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA +1E00..1E9B ; NFKD_QC; N # L& [156] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER LONG S WITH DOT ABOVE +1EA0..1EF9 ; NFKD_QC; N # L& [90] LATIN CAPITAL LETTER A WITH DOT BELOW..LATIN SMALL LETTER Y WITH TILDE +1F00..1F15 ; NFKD_QC; N # L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA +1F18..1F1D ; NFKD_QC; N # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F20..1F45 ; NFKD_QC; N # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA +1F48..1F4D ; NFKD_QC; N # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F50..1F57 ; NFKD_QC; N # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F59 ; NFKD_QC; N # L& GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B ; NFKD_QC; N # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D ; NFKD_QC; N # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F..1F7D ; NFKD_QC; N # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA +1F80..1FB4 ; NFKD_QC; N # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB6..1FBC ; NFKD_QC; N # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBD ; NFKD_QC; N # Sk GREEK KORONIS +1FBE ; NFKD_QC; N # L& GREEK PROSGEGRAMMENI +1FBF..1FC1 ; NFKD_QC; N # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI +1FC2..1FC4 ; NFKD_QC; N # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC6..1FCC ; NFKD_QC; N # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FCD..1FCF ; NFKD_QC; N # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI +1FD0..1FD3 ; NFKD_QC; N # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD6..1FDB ; NFKD_QC; N # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA +1FDD..1FDF ; NFKD_QC; N # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI +1FE0..1FEC ; NFKD_QC; N # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA +1FED..1FEF ; NFKD_QC; N # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA +1FF2..1FF4 ; NFKD_QC; N # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF6..1FFC ; NFKD_QC; N # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +1FFD..1FFE ; NFKD_QC; N # Sk [2] GREEK OXIA..GREEK DASIA +2000..200A ; NFKD_QC; N # Zs [11] EN QUAD..HAIR SPACE +2011 ; NFKD_QC; N # Pd NON-BREAKING HYPHEN +2017 ; NFKD_QC; N # Po DOUBLE LOW LINE +2024..2026 ; NFKD_QC; N # Po [3] ONE DOT LEADER..HORIZONTAL ELLIPSIS +202F ; NFKD_QC; N # Zs NARROW NO-BREAK SPACE +2033..2034 ; NFKD_QC; N # Po [2] DOUBLE PRIME..TRIPLE PRIME +2036..2037 ; NFKD_QC; N # Po [2] REVERSED DOUBLE PRIME..REVERSED TRIPLE PRIME +203C ; NFKD_QC; N # Po DOUBLE EXCLAMATION MARK +203E ; NFKD_QC; N # Po OVERLINE +2047..2049 ; NFKD_QC; N # Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK +2057 ; NFKD_QC; N # Po QUADRUPLE PRIME +205F ; NFKD_QC; N # Zs MEDIUM MATHEMATICAL SPACE +2070 ; NFKD_QC; N # No SUPERSCRIPT ZERO +2071 ; NFKD_QC; N # L& SUPERSCRIPT LATIN SMALL LETTER I +2074..2079 ; NFKD_QC; N # No [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE +207A..207C ; NFKD_QC; N # Sm [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN +207D ; NFKD_QC; N # Ps SUPERSCRIPT LEFT PARENTHESIS +207E ; NFKD_QC; N # Pe SUPERSCRIPT RIGHT PARENTHESIS +207F ; NFKD_QC; N # L& SUPERSCRIPT LATIN SMALL LETTER N +2080..2089 ; NFKD_QC; N # No [10] SUBSCRIPT ZERO..SUBSCRIPT NINE +208A..208C ; NFKD_QC; N # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN +208D ; NFKD_QC; N # Ps SUBSCRIPT LEFT PARENTHESIS +208E ; NFKD_QC; N # Pe SUBSCRIPT RIGHT PARENTHESIS +2090..2094 ; NFKD_QC; N # Lm [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA +20A8 ; NFKD_QC; N # Sc RUPEE SIGN +2100..2101 ; NFKD_QC; N # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT +2102 ; NFKD_QC; N # L& DOUBLE-STRUCK CAPITAL C +2103 ; NFKD_QC; N # So DEGREE CELSIUS +2105..2106 ; NFKD_QC; N # So [2] CARE OF..CADA UNA +2107 ; NFKD_QC; N # L& EULER CONSTANT +2109 ; NFKD_QC; N # So DEGREE FAHRENHEIT +210A..2113 ; NFKD_QC; N # L& [10] SCRIPT SMALL G..SCRIPT SMALL L +2115 ; NFKD_QC; N # L& DOUBLE-STRUCK CAPITAL N +2116 ; NFKD_QC; N # So NUMERO SIGN +2119..211D ; NFKD_QC; N # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R +2120..2122 ; NFKD_QC; N # So [3] SERVICE MARK..TRADE MARK SIGN +2124 ; NFKD_QC; N # L& DOUBLE-STRUCK CAPITAL Z +2126 ; NFKD_QC; N # L& OHM SIGN +2128 ; NFKD_QC; N # L& BLACK-LETTER CAPITAL Z +212A..212D ; NFKD_QC; N # L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C +212F..2131 ; NFKD_QC; N # L& [3] SCRIPT SMALL E..SCRIPT CAPITAL F +2133..2134 ; NFKD_QC; N # L& [2] SCRIPT CAPITAL M..SCRIPT SMALL O +2135..2138 ; NFKD_QC; N # Lo [4] ALEF SYMBOL..DALET SYMBOL +2139 ; NFKD_QC; N # L& INFORMATION SOURCE +213B ; NFKD_QC; N # So FACSIMILE SIGN +213C..213F ; NFKD_QC; N # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI +2140 ; NFKD_QC; N # Sm DOUBLE-STRUCK N-ARY SUMMATION +2145..2149 ; NFKD_QC; N # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J +2153..215F ; NFKD_QC; N # No [13] VULGAR FRACTION ONE THIRD..FRACTION NUMERATOR ONE +2160..217F ; NFKD_QC; N # Nl [32] ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND +219A..219B ; NFKD_QC; N # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE +21AE ; NFKD_QC; N # Sm LEFT RIGHT ARROW WITH STROKE +21CD ; NFKD_QC; N # So LEFTWARDS DOUBLE ARROW WITH STROKE +21CE..21CF ; NFKD_QC; N # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE +2204 ; NFKD_QC; N # Sm THERE DOES NOT EXIST +2209 ; NFKD_QC; N # Sm NOT AN ELEMENT OF +220C ; NFKD_QC; N # Sm DOES NOT CONTAIN AS MEMBER +2224 ; NFKD_QC; N # Sm DOES NOT DIVIDE +2226 ; NFKD_QC; N # Sm NOT PARALLEL TO +222C..222D ; NFKD_QC; N # Sm [2] DOUBLE INTEGRAL..TRIPLE INTEGRAL +222F..2230 ; NFKD_QC; N # Sm [2] SURFACE INTEGRAL..VOLUME INTEGRAL +2241 ; NFKD_QC; N # Sm NOT TILDE +2244 ; NFKD_QC; N # Sm NOT ASYMPTOTICALLY EQUAL TO +2247 ; NFKD_QC; N # Sm NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO +2249 ; NFKD_QC; N # Sm NOT ALMOST EQUAL TO +2260 ; NFKD_QC; N # Sm NOT EQUAL TO +2262 ; NFKD_QC; N # Sm NOT IDENTICAL TO +226D..2271 ; NFKD_QC; N # Sm [5] NOT EQUIVALENT TO..NEITHER GREATER-THAN NOR EQUAL TO +2274..2275 ; NFKD_QC; N # Sm [2] NEITHER LESS-THAN NOR EQUIVALENT TO..NEITHER GREATER-THAN NOR EQUIVALENT TO +2278..2279 ; NFKD_QC; N # Sm [2] NEITHER LESS-THAN NOR GREATER-THAN..NEITHER GREATER-THAN NOR LESS-THAN +2280..2281 ; NFKD_QC; N # Sm [2] DOES NOT PRECEDE..DOES NOT SUCCEED +2284..2285 ; NFKD_QC; N # Sm [2] NOT A SUBSET OF..NOT A SUPERSET OF +2288..2289 ; NFKD_QC; N # Sm [2] NEITHER A SUBSET OF NOR EQUAL TO..NEITHER A SUPERSET OF NOR EQUAL TO +22AC..22AF ; NFKD_QC; N # Sm [4] DOES NOT PROVE..NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE +22E0..22E3 ; NFKD_QC; N # Sm [4] DOES NOT PRECEDE OR EQUAL..NOT SQUARE ORIGINAL OF OR EQUAL TO +22EA..22ED ; NFKD_QC; N # Sm [4] NOT NORMAL SUBGROUP OF..DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL +2329 ; NFKD_QC; N # Ps LEFT-POINTING ANGLE BRACKET +232A ; NFKD_QC; N # Pe RIGHT-POINTING ANGLE BRACKET +2460..249B ; NFKD_QC; N # No [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP +249C..24E9 ; NFKD_QC; N # So [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z +24EA ; NFKD_QC; N # No CIRCLED DIGIT ZERO +2A0C ; NFKD_QC; N # Sm QUADRUPLE INTEGRAL OPERATOR +2A74..2A76 ; NFKD_QC; N # Sm [3] DOUBLE COLON EQUAL..THREE CONSECUTIVE EQUALS SIGNS +2ADC ; NFKD_QC; N # Sm FORKING +2D6F ; NFKD_QC; N # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK +2E9F ; NFKD_QC; N # So CJK RADICAL MOTHER +2EF3 ; NFKD_QC; N # So CJK RADICAL C-SIMPLIFIED TURTLE +2F00..2FD5 ; NFKD_QC; N # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE +3000 ; NFKD_QC; N # Zs IDEOGRAPHIC SPACE +3036 ; NFKD_QC; N # So CIRCLED POSTAL MARK +3038..303A ; NFKD_QC; N # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY +304C ; NFKD_QC; N # Lo HIRAGANA LETTER GA +304E ; NFKD_QC; N # Lo HIRAGANA LETTER GI +3050 ; NFKD_QC; N # Lo HIRAGANA LETTER GU +3052 ; NFKD_QC; N # Lo HIRAGANA LETTER GE +3054 ; NFKD_QC; N # Lo HIRAGANA LETTER GO +3056 ; NFKD_QC; N # Lo HIRAGANA LETTER ZA +3058 ; NFKD_QC; N # Lo HIRAGANA LETTER ZI +305A ; NFKD_QC; N # Lo HIRAGANA LETTER ZU +305C ; NFKD_QC; N # Lo HIRAGANA LETTER ZE +305E ; NFKD_QC; N # Lo HIRAGANA LETTER ZO +3060 ; NFKD_QC; N # Lo HIRAGANA LETTER DA +3062 ; NFKD_QC; N # Lo HIRAGANA LETTER DI +3065 ; NFKD_QC; N # Lo HIRAGANA LETTER DU +3067 ; NFKD_QC; N # Lo HIRAGANA LETTER DE +3069 ; NFKD_QC; N # Lo HIRAGANA LETTER DO +3070..3071 ; NFKD_QC; N # Lo [2] HIRAGANA LETTER BA..HIRAGANA LETTER PA +3073..3074 ; NFKD_QC; N # Lo [2] HIRAGANA LETTER BI..HIRAGANA LETTER PI +3076..3077 ; NFKD_QC; N # Lo [2] HIRAGANA LETTER BU..HIRAGANA LETTER PU +3079..307A ; NFKD_QC; N # Lo [2] HIRAGANA LETTER BE..HIRAGANA LETTER PE +307C..307D ; NFKD_QC; N # Lo [2] HIRAGANA LETTER BO..HIRAGANA LETTER PO +3094 ; NFKD_QC; N # Lo HIRAGANA LETTER VU +309B..309C ; NFKD_QC; N # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +309E ; NFKD_QC; N # Lm HIRAGANA VOICED ITERATION MARK +309F ; NFKD_QC; N # Lo HIRAGANA DIGRAPH YORI +30AC ; NFKD_QC; N # Lo KATAKANA LETTER GA +30AE ; NFKD_QC; N # Lo KATAKANA LETTER GI +30B0 ; NFKD_QC; N # Lo KATAKANA LETTER GU +30B2 ; NFKD_QC; N # Lo KATAKANA LETTER GE +30B4 ; NFKD_QC; N # Lo KATAKANA LETTER GO +30B6 ; NFKD_QC; N # Lo KATAKANA LETTER ZA +30B8 ; NFKD_QC; N # Lo KATAKANA LETTER ZI +30BA ; NFKD_QC; N # Lo KATAKANA LETTER ZU +30BC ; NFKD_QC; N # Lo KATAKANA LETTER ZE +30BE ; NFKD_QC; N # Lo KATAKANA LETTER ZO +30C0 ; NFKD_QC; N # Lo KATAKANA LETTER DA +30C2 ; NFKD_QC; N # Lo KATAKANA LETTER DI +30C5 ; NFKD_QC; N # Lo KATAKANA LETTER DU +30C7 ; NFKD_QC; N # Lo KATAKANA LETTER DE +30C9 ; NFKD_QC; N # Lo KATAKANA LETTER DO +30D0..30D1 ; NFKD_QC; N # Lo [2] KATAKANA LETTER BA..KATAKANA LETTER PA +30D3..30D4 ; NFKD_QC; N # Lo [2] KATAKANA LETTER BI..KATAKANA LETTER PI +30D6..30D7 ; NFKD_QC; N # Lo [2] KATAKANA LETTER BU..KATAKANA LETTER PU +30D9..30DA ; NFKD_QC; N # Lo [2] KATAKANA LETTER BE..KATAKANA LETTER PE +30DC..30DD ; NFKD_QC; N # Lo [2] KATAKANA LETTER BO..KATAKANA LETTER PO +30F4 ; NFKD_QC; N # Lo KATAKANA LETTER VU +30F7..30FA ; NFKD_QC; N # Lo [4] KATAKANA LETTER VA..KATAKANA LETTER VO +30FE ; NFKD_QC; N # Lm KATAKANA VOICED ITERATION MARK +30FF ; NFKD_QC; N # Lo KATAKANA DIGRAPH KOTO +3131..318E ; NFKD_QC; N # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE +3192..3195 ; NFKD_QC; N # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK +3196..319F ; NFKD_QC; N # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK +3200..321E ; NFKD_QC; N # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU +3220..3229 ; NFKD_QC; N # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN +322A..3243 ; NFKD_QC; N # So [26] PARENTHESIZED IDEOGRAPH MOON..PARENTHESIZED IDEOGRAPH REACH +3250 ; NFKD_QC; N # So PARTNERSHIP SIGN +3251..325F ; NFKD_QC; N # No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE +3260..327E ; NFKD_QC; N # So [31] CIRCLED HANGUL KIYEOK..CIRCLED HANGUL IEUNG U +3280..3289 ; NFKD_QC; N # No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN +328A..32B0 ; NFKD_QC; N # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT +32B1..32BF ; NFKD_QC; N # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY +32C0..32FE ; NFKD_QC; N # So [63] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..CIRCLED KATAKANA WO +3300..33FF ; NFKD_QC; N # So [256] SQUARE APAATO..SQUARE GAL +AC00..D7A3 ; NFKD_QC; N # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH +F900..FA0D ; NFKD_QC; N # Lo [270] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA0D +FA10 ; NFKD_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA10 +FA12 ; NFKD_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA12 +FA15..FA1E ; NFKD_QC; N # Lo [10] CJK COMPATIBILITY IDEOGRAPH-FA15..CJK COMPATIBILITY IDEOGRAPH-FA1E +FA20 ; NFKD_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA20 +FA22 ; NFKD_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA22 +FA25..FA26 ; NFKD_QC; N # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA25..CJK COMPATIBILITY IDEOGRAPH-FA26 +FA2A..FA2D ; NFKD_QC; N # Lo [4] CJK COMPATIBILITY IDEOGRAPH-FA2A..CJK COMPATIBILITY IDEOGRAPH-FA2D +FA30..FA6A ; NFKD_QC; N # Lo [59] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6A +FA70..FAD9 ; NFKD_QC; N # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 +FB00..FB06 ; NFKD_QC; N # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST +FB13..FB17 ; NFKD_QC; N # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH +FB1D ; NFKD_QC; N # Lo HEBREW LETTER YOD WITH HIRIQ +FB1F..FB28 ; NFKD_QC; N # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV +FB29 ; NFKD_QC; N # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN +FB2A..FB36 ; NFKD_QC; N # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH +FB38..FB3C ; NFKD_QC; N # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH +FB3E ; NFKD_QC; N # Lo HEBREW LETTER MEM WITH DAGESH +FB40..FB41 ; NFKD_QC; N # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH +FB43..FB44 ; NFKD_QC; N # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH +FB46..FBB1 ; NFKD_QC; N # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM +FBD3..FD3D ; NFKD_QC; N # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM +FD50..FD8F ; NFKD_QC; N # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM +FD92..FDC7 ; NFKD_QC; N # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM +FDF0..FDFB ; NFKD_QC; N # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU +FDFC ; NFKD_QC; N # Sc RIAL SIGN +FE10..FE16 ; NFKD_QC; N # Po [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK +FE17 ; NFKD_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET +FE18 ; NFKD_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET +FE19 ; NFKD_QC; N # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS +FE30 ; NFKD_QC; N # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER +FE31..FE32 ; NFKD_QC; N # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH +FE33..FE34 ; NFKD_QC; N # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE +FE35 ; NFKD_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS +FE36 ; NFKD_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS +FE37 ; NFKD_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET +FE38 ; NFKD_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET +FE39 ; NFKD_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET +FE3A ; NFKD_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET +FE3B ; NFKD_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET +FE3C ; NFKD_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET +FE3D ; NFKD_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET +FE3E ; NFKD_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET +FE3F ; NFKD_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET +FE40 ; NFKD_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET +FE41 ; NFKD_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET +FE42 ; NFKD_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET +FE43 ; NFKD_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET +FE44 ; NFKD_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET +FE47 ; NFKD_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET +FE48 ; NFKD_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET +FE49..FE4C ; NFKD_QC; N # Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE +FE4D..FE4F ; NFKD_QC; N # Pc [3] DASHED LOW LINE..WAVY LOW LINE +FE50..FE52 ; NFKD_QC; N # Po [3] SMALL COMMA..SMALL FULL STOP +FE54..FE57 ; NFKD_QC; N # Po [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK +FE58 ; NFKD_QC; N # Pd SMALL EM DASH +FE59 ; NFKD_QC; N # Ps SMALL LEFT PARENTHESIS +FE5A ; NFKD_QC; N # Pe SMALL RIGHT PARENTHESIS +FE5B ; NFKD_QC; N # Ps SMALL LEFT CURLY BRACKET +FE5C ; NFKD_QC; N # Pe SMALL RIGHT CURLY BRACKET +FE5D ; NFKD_QC; N # Ps SMALL LEFT TORTOISE SHELL BRACKET +FE5E ; NFKD_QC; N # Pe SMALL RIGHT TORTOISE SHELL BRACKET +FE5F..FE61 ; NFKD_QC; N # Po [3] SMALL NUMBER SIGN..SMALL ASTERISK +FE62 ; NFKD_QC; N # Sm SMALL PLUS SIGN +FE63 ; NFKD_QC; N # Pd SMALL HYPHEN-MINUS +FE64..FE66 ; NFKD_QC; N # Sm [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN +FE68 ; NFKD_QC; N # Po SMALL REVERSE SOLIDUS +FE69 ; NFKD_QC; N # Sc SMALL DOLLAR SIGN +FE6A..FE6B ; NFKD_QC; N # Po [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT +FE70..FE72 ; NFKD_QC; N # Lo [3] ARABIC FATHATAN ISOLATED FORM..ARABIC DAMMATAN ISOLATED FORM +FE74 ; NFKD_QC; N # Lo ARABIC KASRATAN ISOLATED FORM +FE76..FEFC ; NFKD_QC; N # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM +FF01..FF03 ; NFKD_QC; N # Po [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN +FF04 ; NFKD_QC; N # Sc FULLWIDTH DOLLAR SIGN +FF05..FF07 ; NFKD_QC; N # Po [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE +FF08 ; NFKD_QC; N # Ps FULLWIDTH LEFT PARENTHESIS +FF09 ; NFKD_QC; N # Pe FULLWIDTH RIGHT PARENTHESIS +FF0A ; NFKD_QC; N # Po FULLWIDTH ASTERISK +FF0B ; NFKD_QC; N # Sm FULLWIDTH PLUS SIGN +FF0C ; NFKD_QC; N # Po FULLWIDTH COMMA +FF0D ; NFKD_QC; N # Pd FULLWIDTH HYPHEN-MINUS +FF0E..FF0F ; NFKD_QC; N # Po [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS +FF10..FF19 ; NFKD_QC; N # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE +FF1A..FF1B ; NFKD_QC; N # Po [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON +FF1C..FF1E ; NFKD_QC; N # Sm [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN +FF1F..FF20 ; NFKD_QC; N # Po [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT +FF21..FF3A ; NFKD_QC; N # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z +FF3B ; NFKD_QC; N # Ps FULLWIDTH LEFT SQUARE BRACKET +FF3C ; NFKD_QC; N # Po FULLWIDTH REVERSE SOLIDUS +FF3D ; NFKD_QC; N # Pe FULLWIDTH RIGHT SQUARE BRACKET +FF3E ; NFKD_QC; N # Sk FULLWIDTH CIRCUMFLEX ACCENT +FF3F ; NFKD_QC; N # Pc FULLWIDTH LOW LINE +FF40 ; NFKD_QC; N # Sk FULLWIDTH GRAVE ACCENT +FF41..FF5A ; NFKD_QC; N # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z +FF5B ; NFKD_QC; N # Ps FULLWIDTH LEFT CURLY BRACKET +FF5C ; NFKD_QC; N # Sm FULLWIDTH VERTICAL LINE +FF5D ; NFKD_QC; N # Pe FULLWIDTH RIGHT CURLY BRACKET +FF5E ; NFKD_QC; N # Sm FULLWIDTH TILDE +FF5F ; NFKD_QC; N # Ps FULLWIDTH LEFT WHITE PARENTHESIS +FF60 ; NFKD_QC; N # Pe FULLWIDTH RIGHT WHITE PARENTHESIS +FF61 ; NFKD_QC; N # Po HALFWIDTH IDEOGRAPHIC FULL STOP +FF62 ; NFKD_QC; N # Ps HALFWIDTH LEFT CORNER BRACKET +FF63 ; NFKD_QC; N # Pe HALFWIDTH RIGHT CORNER BRACKET +FF64..FF65 ; NFKD_QC; N # Po [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT +FF66..FF6F ; NFKD_QC; N # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU +FF70 ; NFKD_QC; N # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +FF71..FF9D ; NFKD_QC; N # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N +FF9E..FF9F ; NFKD_QC; N # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +FFA0..FFBE ; NFKD_QC; N # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH +FFC2..FFC7 ; NFKD_QC; N # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E +FFCA..FFCF ; NFKD_QC; N # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE +FFD2..FFD7 ; NFKD_QC; N # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU +FFDA..FFDC ; NFKD_QC; N # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I +FFE0..FFE1 ; NFKD_QC; N # Sc [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN +FFE2 ; NFKD_QC; N # Sm FULLWIDTH NOT SIGN +FFE3 ; NFKD_QC; N # Sk FULLWIDTH MACRON +FFE4 ; NFKD_QC; N # So FULLWIDTH BROKEN BAR +FFE5..FFE6 ; NFKD_QC; N # Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN +FFE8 ; NFKD_QC; N # So HALFWIDTH FORMS LIGHT VERTICAL +FFE9..FFEC ; NFKD_QC; N # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW +FFED..FFEE ; NFKD_QC; N # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE +1D15E..1D164 ; NFKD_QC; N # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE +1D1BB..1D1C0 ; NFKD_QC; N # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK +1D400..1D454 ; NFKD_QC; N # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G +1D456..1D49C ; NFKD_QC; N # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A +1D49E..1D49F ; NFKD_QC; N # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D +1D4A2 ; NFKD_QC; N # L& MATHEMATICAL SCRIPT CAPITAL G +1D4A5..1D4A6 ; NFKD_QC; N # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K +1D4A9..1D4AC ; NFKD_QC; N # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q +1D4AE..1D4B9 ; NFKD_QC; N # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D +1D4BB ; NFKD_QC; N # L& MATHEMATICAL SCRIPT SMALL F +1D4BD..1D4C3 ; NFKD_QC; N # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N +1D4C5..1D505 ; NFKD_QC; N # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B +1D507..1D50A ; NFKD_QC; N # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G +1D50D..1D514 ; NFKD_QC; N # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q +1D516..1D51C ; NFKD_QC; N # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y +1D51E..1D539 ; NFKD_QC; N # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B +1D53B..1D53E ; NFKD_QC; N # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G +1D540..1D544 ; NFKD_QC; N # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M +1D546 ; NFKD_QC; N # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O +1D54A..1D550 ; NFKD_QC; N # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y +1D552..1D6A5 ; NFKD_QC; N # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J +1D6A8..1D6C0 ; NFKD_QC; N # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA +1D6C1 ; NFKD_QC; N # Sm MATHEMATICAL BOLD NABLA +1D6C2..1D6DA ; NFKD_QC; N # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA +1D6DB ; NFKD_QC; N # Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL +1D6DC..1D6FA ; NFKD_QC; N # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA +1D6FB ; NFKD_QC; N # Sm MATHEMATICAL ITALIC NABLA +1D6FC..1D714 ; NFKD_QC; N # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA +1D715 ; NFKD_QC; N # Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL +1D716..1D734 ; NFKD_QC; N # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA +1D735 ; NFKD_QC; N # Sm MATHEMATICAL BOLD ITALIC NABLA +1D736..1D74E ; NFKD_QC; N # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA +1D74F ; NFKD_QC; N # Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL +1D750..1D76E ; NFKD_QC; N # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA +1D76F ; NFKD_QC; N # Sm MATHEMATICAL SANS-SERIF BOLD NABLA +1D770..1D788 ; NFKD_QC; N # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA +1D789 ; NFKD_QC; N # Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL +1D78A..1D7A8 ; NFKD_QC; N # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA +1D7A9 ; NFKD_QC; N # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA +1D7AA..1D7C2 ; NFKD_QC; N # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA +1D7C3 ; NFKD_QC; N # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL +1D7C4..1D7CB ; NFKD_QC; N # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA +1D7CE..1D7FF ; NFKD_QC; N # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE +2F800..2FA1D ; NFKD_QC; N # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D + +# Total code points: 16574 + +# ================================================ + +# Property: NFKC_Quick_Check + +# All code points not explicitly listed for NFKC_Quick_Check +# have the value Yes (Y). + +# @missing: 0000..10FFFF; NFKC_QC; Yes + +# ================================================ + +# NFKC_Quick_Check=No + +00A0 ; NFKC_QC; N # Zs NO-BREAK SPACE +00A8 ; NFKC_QC; N # Sk DIAERESIS +00AA ; NFKC_QC; N # L& FEMININE ORDINAL INDICATOR +00AF ; NFKC_QC; N # Sk MACRON +00B2..00B3 ; NFKC_QC; N # No [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE +00B4 ; NFKC_QC; N # Sk ACUTE ACCENT +00B5 ; NFKC_QC; N # L& MICRO SIGN +00B8 ; NFKC_QC; N # Sk CEDILLA +00B9 ; NFKC_QC; N # No SUPERSCRIPT ONE +00BA ; NFKC_QC; N # L& MASCULINE ORDINAL INDICATOR +00BC..00BE ; NFKC_QC; N # No [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS +0132..0133 ; NFKC_QC; N # L& [2] LATIN CAPITAL LIGATURE IJ..LATIN SMALL LIGATURE IJ +013F..0140 ; NFKC_QC; N # L& [2] LATIN CAPITAL LETTER L WITH MIDDLE DOT..LATIN SMALL LETTER L WITH MIDDLE DOT +0149 ; NFKC_QC; N # L& LATIN SMALL LETTER N PRECEDED BY APOSTROPHE +017F ; NFKC_QC; N # L& LATIN SMALL LETTER LONG S +01C4..01CC ; NFKC_QC; N # L& [9] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER NJ +01F1..01F3 ; NFKC_QC; N # L& [3] LATIN CAPITAL LETTER DZ..LATIN SMALL LETTER DZ +02B0..02B8 ; NFKC_QC; N # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y +02D8..02DD ; NFKC_QC; N # Sk [6] BREVE..DOUBLE ACUTE ACCENT +02E0..02E4 ; NFKC_QC; N # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP +0340..0341 ; NFKC_QC; N # Mn [2] COMBINING GRAVE TONE MARK..COMBINING ACUTE TONE MARK +0343..0344 ; NFKC_QC; N # Mn [2] COMBINING GREEK KORONIS..COMBINING GREEK DIALYTIKA TONOS +0374 ; NFKC_QC; N # Sk GREEK NUMERAL SIGN +037A ; NFKC_QC; N # Lm GREEK YPOGEGRAMMENI +037E ; NFKC_QC; N # Po GREEK QUESTION MARK +0384..0385 ; NFKC_QC; N # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS +0387 ; NFKC_QC; N # Po GREEK ANO TELEIA +03D0..03D6 ; NFKC_QC; N # L& [7] GREEK BETA SYMBOL..GREEK PI SYMBOL +03F0..03F2 ; NFKC_QC; N # L& [3] GREEK KAPPA SYMBOL..GREEK LUNATE SIGMA SYMBOL +03F4..03F5 ; NFKC_QC; N # L& [2] GREEK CAPITAL THETA SYMBOL..GREEK LUNATE EPSILON SYMBOL +03F9 ; NFKC_QC; N # L& GREEK CAPITAL LUNATE SIGMA SYMBOL +0587 ; NFKC_QC; N # L& ARMENIAN SMALL LIGATURE ECH YIWN +0675..0678 ; NFKC_QC; N # Lo [4] ARABIC LETTER HIGH HAMZA ALEF..ARABIC LETTER HIGH HAMZA YEH +0958..095F ; NFKC_QC; N # Lo [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA +09DC..09DD ; NFKC_QC; N # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA +09DF ; NFKC_QC; N # Lo BENGALI LETTER YYA +0A33 ; NFKC_QC; N # Lo GURMUKHI LETTER LLA +0A36 ; NFKC_QC; N # Lo GURMUKHI LETTER SHA +0A59..0A5B ; NFKC_QC; N # Lo [3] GURMUKHI LETTER KHHA..GURMUKHI LETTER ZA +0A5E ; NFKC_QC; N # Lo GURMUKHI LETTER FA +0B5C..0B5D ; NFKC_QC; N # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA +0E33 ; NFKC_QC; N # Lo THAI CHARACTER SARA AM +0EB3 ; NFKC_QC; N # Lo LAO VOWEL SIGN AM +0EDC..0EDD ; NFKC_QC; N # Lo [2] LAO HO NO..LAO HO MO +0F0C ; NFKC_QC; N # Po TIBETAN MARK DELIMITER TSHEG BSTAR +0F43 ; NFKC_QC; N # Lo TIBETAN LETTER GHA +0F4D ; NFKC_QC; N # Lo TIBETAN LETTER DDHA +0F52 ; NFKC_QC; N # Lo TIBETAN LETTER DHA +0F57 ; NFKC_QC; N # Lo TIBETAN LETTER BHA +0F5C ; NFKC_QC; N # Lo TIBETAN LETTER DZHA +0F69 ; NFKC_QC; N # Lo TIBETAN LETTER KSSA +0F73 ; NFKC_QC; N # Mn TIBETAN VOWEL SIGN II +0F75..0F79 ; NFKC_QC; N # Mn [5] TIBETAN VOWEL SIGN UU..TIBETAN VOWEL SIGN VOCALIC LL +0F81 ; NFKC_QC; N # Mn TIBETAN VOWEL SIGN REVERSED II +0F93 ; NFKC_QC; N # Mn TIBETAN SUBJOINED LETTER GHA +0F9D ; NFKC_QC; N # Mn TIBETAN SUBJOINED LETTER DDHA +0FA2 ; NFKC_QC; N # Mn TIBETAN SUBJOINED LETTER DHA +0FA7 ; NFKC_QC; N # Mn TIBETAN SUBJOINED LETTER BHA +0FAC ; NFKC_QC; N # Mn TIBETAN SUBJOINED LETTER DZHA +0FB9 ; NFKC_QC; N # Mn TIBETAN SUBJOINED LETTER KSSA +10FC ; NFKC_QC; N # Lm MODIFIER LETTER GEORGIAN NAR +1D2C..1D2E ; NFKC_QC; N # Lm [3] MODIFIER LETTER CAPITAL A..MODIFIER LETTER CAPITAL B +1D30..1D3A ; NFKC_QC; N # Lm [11] MODIFIER LETTER CAPITAL D..MODIFIER LETTER CAPITAL N +1D3C..1D4D ; NFKC_QC; N # Lm [18] MODIFIER LETTER CAPITAL O..MODIFIER LETTER SMALL G +1D4F..1D61 ; NFKC_QC; N # Lm [19] MODIFIER LETTER SMALL K..MODIFIER LETTER SMALL CHI +1D62..1D6A ; NFKC_QC; N # L& [9] LATIN SUBSCRIPT SMALL LETTER I..GREEK SUBSCRIPT SMALL LETTER CHI +1D78 ; NFKC_QC; N # Lm MODIFIER LETTER CYRILLIC EN +1D9B..1DBF ; NFKC_QC; N # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA +1E9A..1E9B ; NFKC_QC; N # L& [2] LATIN SMALL LETTER A WITH RIGHT HALF RING..LATIN SMALL LETTER LONG S WITH DOT ABOVE +1F71 ; NFKC_QC; N # L& GREEK SMALL LETTER ALPHA WITH OXIA +1F73 ; NFKC_QC; N # L& GREEK SMALL LETTER EPSILON WITH OXIA +1F75 ; NFKC_QC; N # L& GREEK SMALL LETTER ETA WITH OXIA +1F77 ; NFKC_QC; N # L& GREEK SMALL LETTER IOTA WITH OXIA +1F79 ; NFKC_QC; N # L& GREEK SMALL LETTER OMICRON WITH OXIA +1F7B ; NFKC_QC; N # L& GREEK SMALL LETTER UPSILON WITH OXIA +1F7D ; NFKC_QC; N # L& GREEK SMALL LETTER OMEGA WITH OXIA +1FBB ; NFKC_QC; N # L& GREEK CAPITAL LETTER ALPHA WITH OXIA +1FBD ; NFKC_QC; N # Sk GREEK KORONIS +1FBE ; NFKC_QC; N # L& GREEK PROSGEGRAMMENI +1FBF..1FC1 ; NFKC_QC; N # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI +1FC9 ; NFKC_QC; N # L& GREEK CAPITAL LETTER EPSILON WITH OXIA +1FCB ; NFKC_QC; N # L& GREEK CAPITAL LETTER ETA WITH OXIA +1FCD..1FCF ; NFKC_QC; N # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI +1FD3 ; NFKC_QC; N # L& GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FDB ; NFKC_QC; N # L& GREEK CAPITAL LETTER IOTA WITH OXIA +1FDD..1FDF ; NFKC_QC; N # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI +1FE3 ; NFKC_QC; N # L& GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA +1FEB ; NFKC_QC; N # L& GREEK CAPITAL LETTER UPSILON WITH OXIA +1FED..1FEF ; NFKC_QC; N # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA +1FF9 ; NFKC_QC; N # L& GREEK CAPITAL LETTER OMICRON WITH OXIA +1FFB ; NFKC_QC; N # L& GREEK CAPITAL LETTER OMEGA WITH OXIA +1FFD..1FFE ; NFKC_QC; N # Sk [2] GREEK OXIA..GREEK DASIA +2000..200A ; NFKC_QC; N # Zs [11] EN QUAD..HAIR SPACE +2011 ; NFKC_QC; N # Pd NON-BREAKING HYPHEN +2017 ; NFKC_QC; N # Po DOUBLE LOW LINE +2024..2026 ; NFKC_QC; N # Po [3] ONE DOT LEADER..HORIZONTAL ELLIPSIS +202F ; NFKC_QC; N # Zs NARROW NO-BREAK SPACE +2033..2034 ; NFKC_QC; N # Po [2] DOUBLE PRIME..TRIPLE PRIME +2036..2037 ; NFKC_QC; N # Po [2] REVERSED DOUBLE PRIME..REVERSED TRIPLE PRIME +203C ; NFKC_QC; N # Po DOUBLE EXCLAMATION MARK +203E ; NFKC_QC; N # Po OVERLINE +2047..2049 ; NFKC_QC; N # Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK +2057 ; NFKC_QC; N # Po QUADRUPLE PRIME +205F ; NFKC_QC; N # Zs MEDIUM MATHEMATICAL SPACE +2070 ; NFKC_QC; N # No SUPERSCRIPT ZERO +2071 ; NFKC_QC; N # L& SUPERSCRIPT LATIN SMALL LETTER I +2074..2079 ; NFKC_QC; N # No [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE +207A..207C ; NFKC_QC; N # Sm [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN +207D ; NFKC_QC; N # Ps SUPERSCRIPT LEFT PARENTHESIS +207E ; NFKC_QC; N # Pe SUPERSCRIPT RIGHT PARENTHESIS +207F ; NFKC_QC; N # L& SUPERSCRIPT LATIN SMALL LETTER N +2080..2089 ; NFKC_QC; N # No [10] SUBSCRIPT ZERO..SUBSCRIPT NINE +208A..208C ; NFKC_QC; N # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN +208D ; NFKC_QC; N # Ps SUBSCRIPT LEFT PARENTHESIS +208E ; NFKC_QC; N # Pe SUBSCRIPT RIGHT PARENTHESIS +2090..2094 ; NFKC_QC; N # Lm [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA +20A8 ; NFKC_QC; N # Sc RUPEE SIGN +2100..2101 ; NFKC_QC; N # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT +2102 ; NFKC_QC; N # L& DOUBLE-STRUCK CAPITAL C +2103 ; NFKC_QC; N # So DEGREE CELSIUS +2105..2106 ; NFKC_QC; N # So [2] CARE OF..CADA UNA +2107 ; NFKC_QC; N # L& EULER CONSTANT +2109 ; NFKC_QC; N # So DEGREE FAHRENHEIT +210A..2113 ; NFKC_QC; N # L& [10] SCRIPT SMALL G..SCRIPT SMALL L +2115 ; NFKC_QC; N # L& DOUBLE-STRUCK CAPITAL N +2116 ; NFKC_QC; N # So NUMERO SIGN +2119..211D ; NFKC_QC; N # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R +2120..2122 ; NFKC_QC; N # So [3] SERVICE MARK..TRADE MARK SIGN +2124 ; NFKC_QC; N # L& DOUBLE-STRUCK CAPITAL Z +2126 ; NFKC_QC; N # L& OHM SIGN +2128 ; NFKC_QC; N # L& BLACK-LETTER CAPITAL Z +212A..212D ; NFKC_QC; N # L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C +212F..2131 ; NFKC_QC; N # L& [3] SCRIPT SMALL E..SCRIPT CAPITAL F +2133..2134 ; NFKC_QC; N # L& [2] SCRIPT CAPITAL M..SCRIPT SMALL O +2135..2138 ; NFKC_QC; N # Lo [4] ALEF SYMBOL..DALET SYMBOL +2139 ; NFKC_QC; N # L& INFORMATION SOURCE +213B ; NFKC_QC; N # So FACSIMILE SIGN +213C..213F ; NFKC_QC; N # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI +2140 ; NFKC_QC; N # Sm DOUBLE-STRUCK N-ARY SUMMATION +2145..2149 ; NFKC_QC; N # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J +2153..215F ; NFKC_QC; N # No [13] VULGAR FRACTION ONE THIRD..FRACTION NUMERATOR ONE +2160..217F ; NFKC_QC; N # Nl [32] ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND +222C..222D ; NFKC_QC; N # Sm [2] DOUBLE INTEGRAL..TRIPLE INTEGRAL +222F..2230 ; NFKC_QC; N # Sm [2] SURFACE INTEGRAL..VOLUME INTEGRAL +2329 ; NFKC_QC; N # Ps LEFT-POINTING ANGLE BRACKET +232A ; NFKC_QC; N # Pe RIGHT-POINTING ANGLE BRACKET +2460..249B ; NFKC_QC; N # No [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP +249C..24E9 ; NFKC_QC; N # So [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z +24EA ; NFKC_QC; N # No CIRCLED DIGIT ZERO +2A0C ; NFKC_QC; N # Sm QUADRUPLE INTEGRAL OPERATOR +2A74..2A76 ; NFKC_QC; N # Sm [3] DOUBLE COLON EQUAL..THREE CONSECUTIVE EQUALS SIGNS +2ADC ; NFKC_QC; N # Sm FORKING +2D6F ; NFKC_QC; N # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK +2E9F ; NFKC_QC; N # So CJK RADICAL MOTHER +2EF3 ; NFKC_QC; N # So CJK RADICAL C-SIMPLIFIED TURTLE +2F00..2FD5 ; NFKC_QC; N # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE +3000 ; NFKC_QC; N # Zs IDEOGRAPHIC SPACE +3036 ; NFKC_QC; N # So CIRCLED POSTAL MARK +3038..303A ; NFKC_QC; N # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY +309B..309C ; NFKC_QC; N # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +309F ; NFKC_QC; N # Lo HIRAGANA DIGRAPH YORI +30FF ; NFKC_QC; N # Lo KATAKANA DIGRAPH KOTO +3131..318E ; NFKC_QC; N # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE +3192..3195 ; NFKC_QC; N # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK +3196..319F ; NFKC_QC; N # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK +3200..321E ; NFKC_QC; N # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU +3220..3229 ; NFKC_QC; N # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN +322A..3243 ; NFKC_QC; N # So [26] PARENTHESIZED IDEOGRAPH MOON..PARENTHESIZED IDEOGRAPH REACH +3250 ; NFKC_QC; N # So PARTNERSHIP SIGN +3251..325F ; NFKC_QC; N # No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE +3260..327E ; NFKC_QC; N # So [31] CIRCLED HANGUL KIYEOK..CIRCLED HANGUL IEUNG U +3280..3289 ; NFKC_QC; N # No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN +328A..32B0 ; NFKC_QC; N # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT +32B1..32BF ; NFKC_QC; N # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY +32C0..32FE ; NFKC_QC; N # So [63] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..CIRCLED KATAKANA WO +3300..33FF ; NFKC_QC; N # So [256] SQUARE APAATO..SQUARE GAL +F900..FA0D ; NFKC_QC; N # Lo [270] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA0D +FA10 ; NFKC_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA10 +FA12 ; NFKC_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA12 +FA15..FA1E ; NFKC_QC; N # Lo [10] CJK COMPATIBILITY IDEOGRAPH-FA15..CJK COMPATIBILITY IDEOGRAPH-FA1E +FA20 ; NFKC_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA20 +FA22 ; NFKC_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA22 +FA25..FA26 ; NFKC_QC; N # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA25..CJK COMPATIBILITY IDEOGRAPH-FA26 +FA2A..FA2D ; NFKC_QC; N # Lo [4] CJK COMPATIBILITY IDEOGRAPH-FA2A..CJK COMPATIBILITY IDEOGRAPH-FA2D +FA30..FA6A ; NFKC_QC; N # Lo [59] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6A +FA70..FAD9 ; NFKC_QC; N # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 +FB00..FB06 ; NFKC_QC; N # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST +FB13..FB17 ; NFKC_QC; N # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH +FB1D ; NFKC_QC; N # Lo HEBREW LETTER YOD WITH HIRIQ +FB1F..FB28 ; NFKC_QC; N # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV +FB29 ; NFKC_QC; N # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN +FB2A..FB36 ; NFKC_QC; N # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH +FB38..FB3C ; NFKC_QC; N # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH +FB3E ; NFKC_QC; N # Lo HEBREW LETTER MEM WITH DAGESH +FB40..FB41 ; NFKC_QC; N # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH +FB43..FB44 ; NFKC_QC; N # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH +FB46..FBB1 ; NFKC_QC; N # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM +FBD3..FD3D ; NFKC_QC; N # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM +FD50..FD8F ; NFKC_QC; N # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM +FD92..FDC7 ; NFKC_QC; N # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM +FDF0..FDFB ; NFKC_QC; N # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU +FDFC ; NFKC_QC; N # Sc RIAL SIGN +FE10..FE16 ; NFKC_QC; N # Po [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK +FE17 ; NFKC_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET +FE18 ; NFKC_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET +FE19 ; NFKC_QC; N # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS +FE30 ; NFKC_QC; N # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER +FE31..FE32 ; NFKC_QC; N # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH +FE33..FE34 ; NFKC_QC; N # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE +FE35 ; NFKC_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS +FE36 ; NFKC_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS +FE37 ; NFKC_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET +FE38 ; NFKC_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET +FE39 ; NFKC_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET +FE3A ; NFKC_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET +FE3B ; NFKC_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET +FE3C ; NFKC_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET +FE3D ; NFKC_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET +FE3E ; NFKC_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET +FE3F ; NFKC_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET +FE40 ; NFKC_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET +FE41 ; NFKC_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET +FE42 ; NFKC_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET +FE43 ; NFKC_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET +FE44 ; NFKC_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET +FE47 ; NFKC_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET +FE48 ; NFKC_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET +FE49..FE4C ; NFKC_QC; N # Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE +FE4D..FE4F ; NFKC_QC; N # Pc [3] DASHED LOW LINE..WAVY LOW LINE +FE50..FE52 ; NFKC_QC; N # Po [3] SMALL COMMA..SMALL FULL STOP +FE54..FE57 ; NFKC_QC; N # Po [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK +FE58 ; NFKC_QC; N # Pd SMALL EM DASH +FE59 ; NFKC_QC; N # Ps SMALL LEFT PARENTHESIS +FE5A ; NFKC_QC; N # Pe SMALL RIGHT PARENTHESIS +FE5B ; NFKC_QC; N # Ps SMALL LEFT CURLY BRACKET +FE5C ; NFKC_QC; N # Pe SMALL RIGHT CURLY BRACKET +FE5D ; NFKC_QC; N # Ps SMALL LEFT TORTOISE SHELL BRACKET +FE5E ; NFKC_QC; N # Pe SMALL RIGHT TORTOISE SHELL BRACKET +FE5F..FE61 ; NFKC_QC; N # Po [3] SMALL NUMBER SIGN..SMALL ASTERISK +FE62 ; NFKC_QC; N # Sm SMALL PLUS SIGN +FE63 ; NFKC_QC; N # Pd SMALL HYPHEN-MINUS +FE64..FE66 ; NFKC_QC; N # Sm [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN +FE68 ; NFKC_QC; N # Po SMALL REVERSE SOLIDUS +FE69 ; NFKC_QC; N # Sc SMALL DOLLAR SIGN +FE6A..FE6B ; NFKC_QC; N # Po [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT +FE70..FE72 ; NFKC_QC; N # Lo [3] ARABIC FATHATAN ISOLATED FORM..ARABIC DAMMATAN ISOLATED FORM +FE74 ; NFKC_QC; N # Lo ARABIC KASRATAN ISOLATED FORM +FE76..FEFC ; NFKC_QC; N # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM +FF01..FF03 ; NFKC_QC; N # Po [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN +FF04 ; NFKC_QC; N # Sc FULLWIDTH DOLLAR SIGN +FF05..FF07 ; NFKC_QC; N # Po [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE +FF08 ; NFKC_QC; N # Ps FULLWIDTH LEFT PARENTHESIS +FF09 ; NFKC_QC; N # Pe FULLWIDTH RIGHT PARENTHESIS +FF0A ; NFKC_QC; N # Po FULLWIDTH ASTERISK +FF0B ; NFKC_QC; N # Sm FULLWIDTH PLUS SIGN +FF0C ; NFKC_QC; N # Po FULLWIDTH COMMA +FF0D ; NFKC_QC; N # Pd FULLWIDTH HYPHEN-MINUS +FF0E..FF0F ; NFKC_QC; N # Po [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS +FF10..FF19 ; NFKC_QC; N # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE +FF1A..FF1B ; NFKC_QC; N # Po [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON +FF1C..FF1E ; NFKC_QC; N # Sm [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN +FF1F..FF20 ; NFKC_QC; N # Po [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT +FF21..FF3A ; NFKC_QC; N # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z +FF3B ; NFKC_QC; N # Ps FULLWIDTH LEFT SQUARE BRACKET +FF3C ; NFKC_QC; N # Po FULLWIDTH REVERSE SOLIDUS +FF3D ; NFKC_QC; N # Pe FULLWIDTH RIGHT SQUARE BRACKET +FF3E ; NFKC_QC; N # Sk FULLWIDTH CIRCUMFLEX ACCENT +FF3F ; NFKC_QC; N # Pc FULLWIDTH LOW LINE +FF40 ; NFKC_QC; N # Sk FULLWIDTH GRAVE ACCENT +FF41..FF5A ; NFKC_QC; N # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z +FF5B ; NFKC_QC; N # Ps FULLWIDTH LEFT CURLY BRACKET +FF5C ; NFKC_QC; N # Sm FULLWIDTH VERTICAL LINE +FF5D ; NFKC_QC; N # Pe FULLWIDTH RIGHT CURLY BRACKET +FF5E ; NFKC_QC; N # Sm FULLWIDTH TILDE +FF5F ; NFKC_QC; N # Ps FULLWIDTH LEFT WHITE PARENTHESIS +FF60 ; NFKC_QC; N # Pe FULLWIDTH RIGHT WHITE PARENTHESIS +FF61 ; NFKC_QC; N # Po HALFWIDTH IDEOGRAPHIC FULL STOP +FF62 ; NFKC_QC; N # Ps HALFWIDTH LEFT CORNER BRACKET +FF63 ; NFKC_QC; N # Pe HALFWIDTH RIGHT CORNER BRACKET +FF64..FF65 ; NFKC_QC; N # Po [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT +FF66..FF6F ; NFKC_QC; N # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU +FF70 ; NFKC_QC; N # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +FF71..FF9D ; NFKC_QC; N # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N +FF9E..FF9F ; NFKC_QC; N # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +FFA0..FFBE ; NFKC_QC; N # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH +FFC2..FFC7 ; NFKC_QC; N # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E +FFCA..FFCF ; NFKC_QC; N # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE +FFD2..FFD7 ; NFKC_QC; N # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU +FFDA..FFDC ; NFKC_QC; N # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I +FFE0..FFE1 ; NFKC_QC; N # Sc [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN +FFE2 ; NFKC_QC; N # Sm FULLWIDTH NOT SIGN +FFE3 ; NFKC_QC; N # Sk FULLWIDTH MACRON +FFE4 ; NFKC_QC; N # So FULLWIDTH BROKEN BAR +FFE5..FFE6 ; NFKC_QC; N # Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN +FFE8 ; NFKC_QC; N # So HALFWIDTH FORMS LIGHT VERTICAL +FFE9..FFEC ; NFKC_QC; N # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW +FFED..FFEE ; NFKC_QC; N # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE +1D15E..1D164 ; NFKC_QC; N # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE +1D1BB..1D1C0 ; NFKC_QC; N # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK +1D400..1D454 ; NFKC_QC; N # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G +1D456..1D49C ; NFKC_QC; N # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A +1D49E..1D49F ; NFKC_QC; N # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D +1D4A2 ; NFKC_QC; N # L& MATHEMATICAL SCRIPT CAPITAL G +1D4A5..1D4A6 ; NFKC_QC; N # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K +1D4A9..1D4AC ; NFKC_QC; N # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q +1D4AE..1D4B9 ; NFKC_QC; N # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D +1D4BB ; NFKC_QC; N # L& MATHEMATICAL SCRIPT SMALL F +1D4BD..1D4C3 ; NFKC_QC; N # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N +1D4C5..1D505 ; NFKC_QC; N # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B +1D507..1D50A ; NFKC_QC; N # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G +1D50D..1D514 ; NFKC_QC; N # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q +1D516..1D51C ; NFKC_QC; N # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y +1D51E..1D539 ; NFKC_QC; N # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B +1D53B..1D53E ; NFKC_QC; N # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G +1D540..1D544 ; NFKC_QC; N # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M +1D546 ; NFKC_QC; N # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O +1D54A..1D550 ; NFKC_QC; N # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y +1D552..1D6A5 ; NFKC_QC; N # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J +1D6A8..1D6C0 ; NFKC_QC; N # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA +1D6C1 ; NFKC_QC; N # Sm MATHEMATICAL BOLD NABLA +1D6C2..1D6DA ; NFKC_QC; N # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA +1D6DB ; NFKC_QC; N # Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL +1D6DC..1D6FA ; NFKC_QC; N # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA +1D6FB ; NFKC_QC; N # Sm MATHEMATICAL ITALIC NABLA +1D6FC..1D714 ; NFKC_QC; N # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA +1D715 ; NFKC_QC; N # Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL +1D716..1D734 ; NFKC_QC; N # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA +1D735 ; NFKC_QC; N # Sm MATHEMATICAL BOLD ITALIC NABLA +1D736..1D74E ; NFKC_QC; N # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA +1D74F ; NFKC_QC; N # Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL +1D750..1D76E ; NFKC_QC; N # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA +1D76F ; NFKC_QC; N # Sm MATHEMATICAL SANS-SERIF BOLD NABLA +1D770..1D788 ; NFKC_QC; N # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA +1D789 ; NFKC_QC; N # Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL +1D78A..1D7A8 ; NFKC_QC; N # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA +1D7A9 ; NFKC_QC; N # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA +1D7AA..1D7C2 ; NFKC_QC; N # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA +1D7C3 ; NFKC_QC; N # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL +1D7C4..1D7CB ; NFKC_QC; N # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA +1D7CE..1D7FF ; NFKC_QC; N # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE +2F800..2FA1D ; NFKC_QC; N # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D + +# Total code points: 4486 + +# ================================================ + +# NFKC_Quick_Check=Maybe + +0300..0304 ; NFKC_QC; M # Mn [5] COMBINING GRAVE ACCENT..COMBINING MACRON +0306..030C ; NFKC_QC; M # Mn [7] COMBINING BREVE..COMBINING CARON +030F ; NFKC_QC; M # Mn COMBINING DOUBLE GRAVE ACCENT +0311 ; NFKC_QC; M # Mn COMBINING INVERTED BREVE +0313..0314 ; NFKC_QC; M # Mn [2] COMBINING COMMA ABOVE..COMBINING REVERSED COMMA ABOVE +031B ; NFKC_QC; M # Mn COMBINING HORN +0323..0328 ; NFKC_QC; M # Mn [6] COMBINING DOT BELOW..COMBINING OGONEK +032D..032E ; NFKC_QC; M # Mn [2] COMBINING CIRCUMFLEX ACCENT BELOW..COMBINING BREVE BELOW +0330..0331 ; NFKC_QC; M # Mn [2] COMBINING TILDE BELOW..COMBINING MACRON BELOW +0338 ; NFKC_QC; M # Mn COMBINING LONG SOLIDUS OVERLAY +0342 ; NFKC_QC; M # Mn COMBINING GREEK PERISPOMENI +0345 ; NFKC_QC; M # Mn COMBINING GREEK YPOGEGRAMMENI +0653..0655 ; NFKC_QC; M # Mn [3] ARABIC MADDAH ABOVE..ARABIC HAMZA BELOW +093C ; NFKC_QC; M # Mn DEVANAGARI SIGN NUKTA +09BE ; NFKC_QC; M # Mc BENGALI VOWEL SIGN AA +09D7 ; NFKC_QC; M # Mc BENGALI AU LENGTH MARK +0B3E ; NFKC_QC; M # Mc ORIYA VOWEL SIGN AA +0B56 ; NFKC_QC; M # Mn ORIYA AI LENGTH MARK +0B57 ; NFKC_QC; M # Mc ORIYA AU LENGTH MARK +0BBE ; NFKC_QC; M # Mc TAMIL VOWEL SIGN AA +0BD7 ; NFKC_QC; M # Mc TAMIL AU LENGTH MARK +0C56 ; NFKC_QC; M # Mn TELUGU AI LENGTH MARK +0CC2 ; NFKC_QC; M # Mc KANNADA VOWEL SIGN UU +0CD5..0CD6 ; NFKC_QC; M # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK +0D3E ; NFKC_QC; M # Mc MALAYALAM VOWEL SIGN AA +0D57 ; NFKC_QC; M # Mc MALAYALAM AU LENGTH MARK +0DCA ; NFKC_QC; M # Mn SINHALA SIGN AL-LAKUNA +0DCF ; NFKC_QC; M # Mc SINHALA VOWEL SIGN AELA-PILLA +0DDF ; NFKC_QC; M # Mc SINHALA VOWEL SIGN GAYANUKITTA +102E ; NFKC_QC; M # Mn MYANMAR VOWEL SIGN II +1161..1175 ; NFKC_QC; M # Lo [21] HANGUL JUNGSEONG A..HANGUL JUNGSEONG I +11A8..11C2 ; NFKC_QC; M # Lo [27] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG HIEUH +1B35 ; NFKC_QC; M # Mc BALINESE VOWEL SIGN TEDUNG +3099..309A ; NFKC_QC; M # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + +# Total code points: 102 + +# ================================================ + +# Derived Property: Expands_On_NFD +# Generated according to UAX #15. +# Characters whose normalized length is not one. +# WARNING: Normalization of STRINGS must use the algorithm in UAX #15 because characters may interact. +# The length of a normalized string is not necessarily the sum of the lengths of the normalized characters! + +00C0..00C5 ; Expands_On_NFD # L& [6] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER A WITH RING ABOVE +00C7..00CF ; Expands_On_NFD # L& [9] LATIN CAPITAL LETTER C WITH CEDILLA..LATIN CAPITAL LETTER I WITH DIAERESIS +00D1..00D6 ; Expands_On_NFD # L& [6] LATIN CAPITAL LETTER N WITH TILDE..LATIN CAPITAL LETTER O WITH DIAERESIS +00D9..00DD ; Expands_On_NFD # L& [5] LATIN CAPITAL LETTER U WITH GRAVE..LATIN CAPITAL LETTER Y WITH ACUTE +00E0..00E5 ; Expands_On_NFD # L& [6] LATIN SMALL LETTER A WITH GRAVE..LATIN SMALL LETTER A WITH RING ABOVE +00E7..00EF ; Expands_On_NFD # L& [9] LATIN SMALL LETTER C WITH CEDILLA..LATIN SMALL LETTER I WITH DIAERESIS +00F1..00F6 ; Expands_On_NFD # L& [6] LATIN SMALL LETTER N WITH TILDE..LATIN SMALL LETTER O WITH DIAERESIS +00F9..00FD ; Expands_On_NFD # L& [5] LATIN SMALL LETTER U WITH GRAVE..LATIN SMALL LETTER Y WITH ACUTE +00FF..010F ; Expands_On_NFD # L& [17] LATIN SMALL LETTER Y WITH DIAERESIS..LATIN SMALL LETTER D WITH CARON +0112..0125 ; Expands_On_NFD # L& [20] LATIN CAPITAL LETTER E WITH MACRON..LATIN SMALL LETTER H WITH CIRCUMFLEX +0128..0130 ; Expands_On_NFD # L& [9] LATIN CAPITAL LETTER I WITH TILDE..LATIN CAPITAL LETTER I WITH DOT ABOVE +0134..0137 ; Expands_On_NFD # L& [4] LATIN CAPITAL LETTER J WITH CIRCUMFLEX..LATIN SMALL LETTER K WITH CEDILLA +0139..013E ; Expands_On_NFD # L& [6] LATIN CAPITAL LETTER L WITH ACUTE..LATIN SMALL LETTER L WITH CARON +0143..0148 ; Expands_On_NFD # L& [6] LATIN CAPITAL LETTER N WITH ACUTE..LATIN SMALL LETTER N WITH CARON +014C..0151 ; Expands_On_NFD # L& [6] LATIN CAPITAL LETTER O WITH MACRON..LATIN SMALL LETTER O WITH DOUBLE ACUTE +0154..0165 ; Expands_On_NFD # L& [18] LATIN CAPITAL LETTER R WITH ACUTE..LATIN SMALL LETTER T WITH CARON +0168..017E ; Expands_On_NFD # L& [23] LATIN CAPITAL LETTER U WITH TILDE..LATIN SMALL LETTER Z WITH CARON +01A0..01A1 ; Expands_On_NFD # L& [2] LATIN CAPITAL LETTER O WITH HORN..LATIN SMALL LETTER O WITH HORN +01AF..01B0 ; Expands_On_NFD # L& [2] LATIN CAPITAL LETTER U WITH HORN..LATIN SMALL LETTER U WITH HORN +01CD..01DC ; Expands_On_NFD # L& [16] LATIN CAPITAL LETTER A WITH CARON..LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DE..01E3 ; Expands_On_NFD # L& [6] LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON..LATIN SMALL LETTER AE WITH MACRON +01E6..01F0 ; Expands_On_NFD # L& [11] LATIN CAPITAL LETTER G WITH CARON..LATIN SMALL LETTER J WITH CARON +01F4..01F5 ; Expands_On_NFD # L& [2] LATIN CAPITAL LETTER G WITH ACUTE..LATIN SMALL LETTER G WITH ACUTE +01F8..021B ; Expands_On_NFD # L& [36] LATIN CAPITAL LETTER N WITH GRAVE..LATIN SMALL LETTER T WITH COMMA BELOW +021E..021F ; Expands_On_NFD # L& [2] LATIN CAPITAL LETTER H WITH CARON..LATIN SMALL LETTER H WITH CARON +0226..0233 ; Expands_On_NFD # L& [14] LATIN CAPITAL LETTER A WITH DOT ABOVE..LATIN SMALL LETTER Y WITH MACRON +0344 ; Expands_On_NFD # Mn COMBINING GREEK DIALYTIKA TONOS +0385 ; Expands_On_NFD # Sk GREEK DIALYTIKA TONOS +0386 ; Expands_On_NFD # L& GREEK CAPITAL LETTER ALPHA WITH TONOS +0388..038A ; Expands_On_NFD # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS +038C ; Expands_On_NFD # L& GREEK CAPITAL LETTER OMICRON WITH TONOS +038E..0390 ; Expands_On_NFD # L& [3] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +03AA..03B0 ; Expands_On_NFD # L& [7] GREEK CAPITAL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +03CA..03CE ; Expands_On_NFD # L& [5] GREEK SMALL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER OMEGA WITH TONOS +03D3..03D4 ; Expands_On_NFD # L& [2] GREEK UPSILON WITH ACUTE AND HOOK SYMBOL..GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL +0400..0401 ; Expands_On_NFD # L& [2] CYRILLIC CAPITAL LETTER IE WITH GRAVE..CYRILLIC CAPITAL LETTER IO +0403 ; Expands_On_NFD # L& CYRILLIC CAPITAL LETTER GJE +0407 ; Expands_On_NFD # L& CYRILLIC CAPITAL LETTER YI +040C..040E ; Expands_On_NFD # L& [3] CYRILLIC CAPITAL LETTER KJE..CYRILLIC CAPITAL LETTER SHORT U +0419 ; Expands_On_NFD # L& CYRILLIC CAPITAL LETTER SHORT I +0439 ; Expands_On_NFD # L& CYRILLIC SMALL LETTER SHORT I +0450..0451 ; Expands_On_NFD # L& [2] CYRILLIC SMALL LETTER IE WITH GRAVE..CYRILLIC SMALL LETTER IO +0453 ; Expands_On_NFD # L& CYRILLIC SMALL LETTER GJE +0457 ; Expands_On_NFD # L& CYRILLIC SMALL LETTER YI +045C..045E ; Expands_On_NFD # L& [3] CYRILLIC SMALL LETTER KJE..CYRILLIC SMALL LETTER SHORT U +0476..0477 ; Expands_On_NFD # L& [2] CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT..CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT +04C1..04C2 ; Expands_On_NFD # L& [2] CYRILLIC CAPITAL LETTER ZHE WITH BREVE..CYRILLIC SMALL LETTER ZHE WITH BREVE +04D0..04D3 ; Expands_On_NFD # L& [4] CYRILLIC CAPITAL LETTER A WITH BREVE..CYRILLIC SMALL LETTER A WITH DIAERESIS +04D6..04D7 ; Expands_On_NFD # L& [2] CYRILLIC CAPITAL LETTER IE WITH BREVE..CYRILLIC SMALL LETTER IE WITH BREVE +04DA..04DF ; Expands_On_NFD # L& [6] CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS..CYRILLIC SMALL LETTER ZE WITH DIAERESIS +04E2..04E7 ; Expands_On_NFD # L& [6] CYRILLIC CAPITAL LETTER I WITH MACRON..CYRILLIC SMALL LETTER O WITH DIAERESIS +04EA..04F5 ; Expands_On_NFD # L& [12] CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS..CYRILLIC SMALL LETTER CHE WITH DIAERESIS +04F8..04F9 ; Expands_On_NFD # L& [2] CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS..CYRILLIC SMALL LETTER YERU WITH DIAERESIS +0622..0626 ; Expands_On_NFD # Lo [5] ARABIC LETTER ALEF WITH MADDA ABOVE..ARABIC LETTER YEH WITH HAMZA ABOVE +06C0 ; Expands_On_NFD # Lo ARABIC LETTER HEH WITH YEH ABOVE +06C2 ; Expands_On_NFD # Lo ARABIC LETTER HEH GOAL WITH HAMZA ABOVE +06D3 ; Expands_On_NFD # Lo ARABIC LETTER YEH BARREE WITH HAMZA ABOVE +0929 ; Expands_On_NFD # Lo DEVANAGARI LETTER NNNA +0931 ; Expands_On_NFD # Lo DEVANAGARI LETTER RRA +0934 ; Expands_On_NFD # Lo DEVANAGARI LETTER LLLA +0958..095F ; Expands_On_NFD # Lo [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA +09CB..09CC ; Expands_On_NFD # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU +09DC..09DD ; Expands_On_NFD # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA +09DF ; Expands_On_NFD # Lo BENGALI LETTER YYA +0A33 ; Expands_On_NFD # Lo GURMUKHI LETTER LLA +0A36 ; Expands_On_NFD # Lo GURMUKHI LETTER SHA +0A59..0A5B ; Expands_On_NFD # Lo [3] GURMUKHI LETTER KHHA..GURMUKHI LETTER ZA +0A5E ; Expands_On_NFD # Lo GURMUKHI LETTER FA +0B48 ; Expands_On_NFD # Mc ORIYA VOWEL SIGN AI +0B4B..0B4C ; Expands_On_NFD # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU +0B5C..0B5D ; Expands_On_NFD # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA +0B94 ; Expands_On_NFD # Lo TAMIL LETTER AU +0BCA..0BCC ; Expands_On_NFD # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU +0C48 ; Expands_On_NFD # Mn TELUGU VOWEL SIGN AI +0CC0 ; Expands_On_NFD # Mc KANNADA VOWEL SIGN II +0CC7..0CC8 ; Expands_On_NFD # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI +0CCA..0CCB ; Expands_On_NFD # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO +0D4A..0D4C ; Expands_On_NFD # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU +0DDA ; Expands_On_NFD # Mc SINHALA VOWEL SIGN DIGA KOMBUVA +0DDC..0DDE ; Expands_On_NFD # Mc [3] SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA +0F43 ; Expands_On_NFD # Lo TIBETAN LETTER GHA +0F4D ; Expands_On_NFD # Lo TIBETAN LETTER DDHA +0F52 ; Expands_On_NFD # Lo TIBETAN LETTER DHA +0F57 ; Expands_On_NFD # Lo TIBETAN LETTER BHA +0F5C ; Expands_On_NFD # Lo TIBETAN LETTER DZHA +0F69 ; Expands_On_NFD # Lo TIBETAN LETTER KSSA +0F73 ; Expands_On_NFD # Mn TIBETAN VOWEL SIGN II +0F75..0F76 ; Expands_On_NFD # Mn [2] TIBETAN VOWEL SIGN UU..TIBETAN VOWEL SIGN VOCALIC R +0F78 ; Expands_On_NFD # Mn TIBETAN VOWEL SIGN VOCALIC L +0F81 ; Expands_On_NFD # Mn TIBETAN VOWEL SIGN REVERSED II +0F93 ; Expands_On_NFD # Mn TIBETAN SUBJOINED LETTER GHA +0F9D ; Expands_On_NFD # Mn TIBETAN SUBJOINED LETTER DDHA +0FA2 ; Expands_On_NFD # Mn TIBETAN SUBJOINED LETTER DHA +0FA7 ; Expands_On_NFD # Mn TIBETAN SUBJOINED LETTER BHA +0FAC ; Expands_On_NFD # Mn TIBETAN SUBJOINED LETTER DZHA +0FB9 ; Expands_On_NFD # Mn TIBETAN SUBJOINED LETTER KSSA +1026 ; Expands_On_NFD # Lo MYANMAR LETTER UU +1B06 ; Expands_On_NFD # Lo BALINESE LETTER AKARA TEDUNG +1B08 ; Expands_On_NFD # Lo BALINESE LETTER IKARA TEDUNG +1B0A ; Expands_On_NFD # Lo BALINESE LETTER UKARA TEDUNG +1B0C ; Expands_On_NFD # Lo BALINESE LETTER RA REPA TEDUNG +1B0E ; Expands_On_NFD # Lo BALINESE LETTER LA LENGA TEDUNG +1B12 ; Expands_On_NFD # Lo BALINESE LETTER OKARA TEDUNG +1B3B ; Expands_On_NFD # Mc BALINESE VOWEL SIGN RA REPA TEDUNG +1B3D ; Expands_On_NFD # Mc BALINESE VOWEL SIGN LA LENGA TEDUNG +1B40..1B41 ; Expands_On_NFD # Mc [2] BALINESE VOWEL SIGN TALING TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG +1B43 ; Expands_On_NFD # Mc BALINESE VOWEL SIGN PEPET TEDUNG +1E00..1E99 ; Expands_On_NFD # L& [154] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH RING ABOVE +1E9B ; Expands_On_NFD # L& LATIN SMALL LETTER LONG S WITH DOT ABOVE +1EA0..1EF9 ; Expands_On_NFD # L& [90] LATIN CAPITAL LETTER A WITH DOT BELOW..LATIN SMALL LETTER Y WITH TILDE +1F00..1F15 ; Expands_On_NFD # L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA +1F18..1F1D ; Expands_On_NFD # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F20..1F45 ; Expands_On_NFD # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA +1F48..1F4D ; Expands_On_NFD # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F50..1F57 ; Expands_On_NFD # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F59 ; Expands_On_NFD # L& GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B ; Expands_On_NFD # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D ; Expands_On_NFD # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F..1F7D ; Expands_On_NFD # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA +1F80..1FB4 ; Expands_On_NFD # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB6..1FBC ; Expands_On_NFD # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FC1 ; Expands_On_NFD # Sk GREEK DIALYTIKA AND PERISPOMENI +1FC2..1FC4 ; Expands_On_NFD # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC6..1FCC ; Expands_On_NFD # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FCD..1FCF ; Expands_On_NFD # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI +1FD0..1FD3 ; Expands_On_NFD # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD6..1FDB ; Expands_On_NFD # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA +1FDD..1FDF ; Expands_On_NFD # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI +1FE0..1FEC ; Expands_On_NFD # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA +1FED..1FEE ; Expands_On_NFD # Sk [2] GREEK DIALYTIKA AND VARIA..GREEK DIALYTIKA AND OXIA +1FF2..1FF4 ; Expands_On_NFD # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF6..1FFC ; Expands_On_NFD # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +212B ; Expands_On_NFD # L& ANGSTROM SIGN +219A..219B ; Expands_On_NFD # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE +21AE ; Expands_On_NFD # Sm LEFT RIGHT ARROW WITH STROKE +21CD ; Expands_On_NFD # So LEFTWARDS DOUBLE ARROW WITH STROKE +21CE..21CF ; Expands_On_NFD # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE +2204 ; Expands_On_NFD # Sm THERE DOES NOT EXIST +2209 ; Expands_On_NFD # Sm NOT AN ELEMENT OF +220C ; Expands_On_NFD # Sm DOES NOT CONTAIN AS MEMBER +2224 ; Expands_On_NFD # Sm DOES NOT DIVIDE +2226 ; Expands_On_NFD # Sm NOT PARALLEL TO +2241 ; Expands_On_NFD # Sm NOT TILDE +2244 ; Expands_On_NFD # Sm NOT ASYMPTOTICALLY EQUAL TO +2247 ; Expands_On_NFD # Sm NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO +2249 ; Expands_On_NFD # Sm NOT ALMOST EQUAL TO +2260 ; Expands_On_NFD # Sm NOT EQUAL TO +2262 ; Expands_On_NFD # Sm NOT IDENTICAL TO +226D..2271 ; Expands_On_NFD # Sm [5] NOT EQUIVALENT TO..NEITHER GREATER-THAN NOR EQUAL TO +2274..2275 ; Expands_On_NFD # Sm [2] NEITHER LESS-THAN NOR EQUIVALENT TO..NEITHER GREATER-THAN NOR EQUIVALENT TO +2278..2279 ; Expands_On_NFD # Sm [2] NEITHER LESS-THAN NOR GREATER-THAN..NEITHER GREATER-THAN NOR LESS-THAN +2280..2281 ; Expands_On_NFD # Sm [2] DOES NOT PRECEDE..DOES NOT SUCCEED +2284..2285 ; Expands_On_NFD # Sm [2] NOT A SUBSET OF..NOT A SUPERSET OF +2288..2289 ; Expands_On_NFD # Sm [2] NEITHER A SUBSET OF NOR EQUAL TO..NEITHER A SUPERSET OF NOR EQUAL TO +22AC..22AF ; Expands_On_NFD # Sm [4] DOES NOT PROVE..NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE +22E0..22E3 ; Expands_On_NFD # Sm [4] DOES NOT PRECEDE OR EQUAL..NOT SQUARE ORIGINAL OF OR EQUAL TO +22EA..22ED ; Expands_On_NFD # Sm [4] NOT NORMAL SUBGROUP OF..DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL +2ADC ; Expands_On_NFD # Sm FORKING +304C ; Expands_On_NFD # Lo HIRAGANA LETTER GA +304E ; Expands_On_NFD # Lo HIRAGANA LETTER GI +3050 ; Expands_On_NFD # Lo HIRAGANA LETTER GU +3052 ; Expands_On_NFD # Lo HIRAGANA LETTER GE +3054 ; Expands_On_NFD # Lo HIRAGANA LETTER GO +3056 ; Expands_On_NFD # Lo HIRAGANA LETTER ZA +3058 ; Expands_On_NFD # Lo HIRAGANA LETTER ZI +305A ; Expands_On_NFD # Lo HIRAGANA LETTER ZU +305C ; Expands_On_NFD # Lo HIRAGANA LETTER ZE +305E ; Expands_On_NFD # Lo HIRAGANA LETTER ZO +3060 ; Expands_On_NFD # Lo HIRAGANA LETTER DA +3062 ; Expands_On_NFD # Lo HIRAGANA LETTER DI +3065 ; Expands_On_NFD # Lo HIRAGANA LETTER DU +3067 ; Expands_On_NFD # Lo HIRAGANA LETTER DE +3069 ; Expands_On_NFD # Lo HIRAGANA LETTER DO +3070..3071 ; Expands_On_NFD # Lo [2] HIRAGANA LETTER BA..HIRAGANA LETTER PA +3073..3074 ; Expands_On_NFD # Lo [2] HIRAGANA LETTER BI..HIRAGANA LETTER PI +3076..3077 ; Expands_On_NFD # Lo [2] HIRAGANA LETTER BU..HIRAGANA LETTER PU +3079..307A ; Expands_On_NFD # Lo [2] HIRAGANA LETTER BE..HIRAGANA LETTER PE +307C..307D ; Expands_On_NFD # Lo [2] HIRAGANA LETTER BO..HIRAGANA LETTER PO +3094 ; Expands_On_NFD # Lo HIRAGANA LETTER VU +309E ; Expands_On_NFD # Lm HIRAGANA VOICED ITERATION MARK +30AC ; Expands_On_NFD # Lo KATAKANA LETTER GA +30AE ; Expands_On_NFD # Lo KATAKANA LETTER GI +30B0 ; Expands_On_NFD # Lo KATAKANA LETTER GU +30B2 ; Expands_On_NFD # Lo KATAKANA LETTER GE +30B4 ; Expands_On_NFD # Lo KATAKANA LETTER GO +30B6 ; Expands_On_NFD # Lo KATAKANA LETTER ZA +30B8 ; Expands_On_NFD # Lo KATAKANA LETTER ZI +30BA ; Expands_On_NFD # Lo KATAKANA LETTER ZU +30BC ; Expands_On_NFD # Lo KATAKANA LETTER ZE +30BE ; Expands_On_NFD # Lo KATAKANA LETTER ZO +30C0 ; Expands_On_NFD # Lo KATAKANA LETTER DA +30C2 ; Expands_On_NFD # Lo KATAKANA LETTER DI +30C5 ; Expands_On_NFD # Lo KATAKANA LETTER DU +30C7 ; Expands_On_NFD # Lo KATAKANA LETTER DE +30C9 ; Expands_On_NFD # Lo KATAKANA LETTER DO +30D0..30D1 ; Expands_On_NFD # Lo [2] KATAKANA LETTER BA..KATAKANA LETTER PA +30D3..30D4 ; Expands_On_NFD # Lo [2] KATAKANA LETTER BI..KATAKANA LETTER PI +30D6..30D7 ; Expands_On_NFD # Lo [2] KATAKANA LETTER BU..KATAKANA LETTER PU +30D9..30DA ; Expands_On_NFD # Lo [2] KATAKANA LETTER BE..KATAKANA LETTER PE +30DC..30DD ; Expands_On_NFD # Lo [2] KATAKANA LETTER BO..KATAKANA LETTER PO +30F4 ; Expands_On_NFD # Lo KATAKANA LETTER VU +30F7..30FA ; Expands_On_NFD # Lo [4] KATAKANA LETTER VA..KATAKANA LETTER VO +30FE ; Expands_On_NFD # Lm KATAKANA VOICED ITERATION MARK +AC00..D7A3 ; Expands_On_NFD # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH +FB1D ; Expands_On_NFD # Lo HEBREW LETTER YOD WITH HIRIQ +FB1F ; Expands_On_NFD # Lo HEBREW LIGATURE YIDDISH YOD YOD PATAH +FB2A..FB36 ; Expands_On_NFD # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH +FB38..FB3C ; Expands_On_NFD # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH +FB3E ; Expands_On_NFD # Lo HEBREW LETTER MEM WITH DAGESH +FB40..FB41 ; Expands_On_NFD # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH +FB43..FB44 ; Expands_On_NFD # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH +FB46..FB4E ; Expands_On_NFD # Lo [9] HEBREW LETTER TSADI WITH DAGESH..HEBREW LETTER PE WITH RAFE +1D15E..1D164 ; Expands_On_NFD # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE +1D1BB..1D1C0 ; Expands_On_NFD # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK + +# Total code points: 12203 + +# ================================================ + +# Derived Property: Expands_On_NFC +# Generated according to UAX #15. +# Characters whose normalized length is not one. +# WARNING: Normalization of STRINGS must use the algorithm in UAX #15 because characters may interact. +# The length of a normalized string is not necessarily the sum of the lengths of the normalized characters! + +0344 ; Expands_On_NFC # Mn COMBINING GREEK DIALYTIKA TONOS +0958..095F ; Expands_On_NFC # Lo [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA +09DC..09DD ; Expands_On_NFC # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA +09DF ; Expands_On_NFC # Lo BENGALI LETTER YYA +0A33 ; Expands_On_NFC # Lo GURMUKHI LETTER LLA +0A36 ; Expands_On_NFC # Lo GURMUKHI LETTER SHA +0A59..0A5B ; Expands_On_NFC # Lo [3] GURMUKHI LETTER KHHA..GURMUKHI LETTER ZA +0A5E ; Expands_On_NFC # Lo GURMUKHI LETTER FA +0B5C..0B5D ; Expands_On_NFC # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA +0F43 ; Expands_On_NFC # Lo TIBETAN LETTER GHA +0F4D ; Expands_On_NFC # Lo TIBETAN LETTER DDHA +0F52 ; Expands_On_NFC # Lo TIBETAN LETTER DHA +0F57 ; Expands_On_NFC # Lo TIBETAN LETTER BHA +0F5C ; Expands_On_NFC # Lo TIBETAN LETTER DZHA +0F69 ; Expands_On_NFC # Lo TIBETAN LETTER KSSA +0F73 ; Expands_On_NFC # Mn TIBETAN VOWEL SIGN II +0F75..0F76 ; Expands_On_NFC # Mn [2] TIBETAN VOWEL SIGN UU..TIBETAN VOWEL SIGN VOCALIC R +0F78 ; Expands_On_NFC # Mn TIBETAN VOWEL SIGN VOCALIC L +0F81 ; Expands_On_NFC # Mn TIBETAN VOWEL SIGN REVERSED II +0F93 ; Expands_On_NFC # Mn TIBETAN SUBJOINED LETTER GHA +0F9D ; Expands_On_NFC # Mn TIBETAN SUBJOINED LETTER DDHA +0FA2 ; Expands_On_NFC # Mn TIBETAN SUBJOINED LETTER DHA +0FA7 ; Expands_On_NFC # Mn TIBETAN SUBJOINED LETTER BHA +0FAC ; Expands_On_NFC # Mn TIBETAN SUBJOINED LETTER DZHA +0FB9 ; Expands_On_NFC # Mn TIBETAN SUBJOINED LETTER KSSA +2ADC ; Expands_On_NFC # Sm FORKING +FB1D ; Expands_On_NFC # Lo HEBREW LETTER YOD WITH HIRIQ +FB1F ; Expands_On_NFC # Lo HEBREW LIGATURE YIDDISH YOD YOD PATAH +FB2A..FB36 ; Expands_On_NFC # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH +FB38..FB3C ; Expands_On_NFC # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH +FB3E ; Expands_On_NFC # Lo HEBREW LETTER MEM WITH DAGESH +FB40..FB41 ; Expands_On_NFC # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH +FB43..FB44 ; Expands_On_NFC # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH +FB46..FB4E ; Expands_On_NFC # Lo [9] HEBREW LETTER TSADI WITH DAGESH..HEBREW LETTER PE WITH RAFE +1D15E..1D164 ; Expands_On_NFC # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE +1D1BB..1D1C0 ; Expands_On_NFC # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK + +# Total code points: 85 + +# ================================================ + +# Derived Property: Expands_On_NFKD +# Generated according to UAX #15. +# Characters whose normalized length is not one. +# WARNING: Normalization of STRINGS must use the algorithm in UAX #15 because characters may interact. +# The length of a normalized string is not necessarily the sum of the lengths of the normalized characters! + +00A8 ; Expands_On_NFKD # Sk DIAERESIS +00AF ; Expands_On_NFKD # Sk MACRON +00B4 ; Expands_On_NFKD # Sk ACUTE ACCENT +00B8 ; Expands_On_NFKD # Sk CEDILLA +00BC..00BE ; Expands_On_NFKD # No [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS +00C0..00C5 ; Expands_On_NFKD # L& [6] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER A WITH RING ABOVE +00C7..00CF ; Expands_On_NFKD # L& [9] LATIN CAPITAL LETTER C WITH CEDILLA..LATIN CAPITAL LETTER I WITH DIAERESIS +00D1..00D6 ; Expands_On_NFKD # L& [6] LATIN CAPITAL LETTER N WITH TILDE..LATIN CAPITAL LETTER O WITH DIAERESIS +00D9..00DD ; Expands_On_NFKD # L& [5] LATIN CAPITAL LETTER U WITH GRAVE..LATIN CAPITAL LETTER Y WITH ACUTE +00E0..00E5 ; Expands_On_NFKD # L& [6] LATIN SMALL LETTER A WITH GRAVE..LATIN SMALL LETTER A WITH RING ABOVE +00E7..00EF ; Expands_On_NFKD # L& [9] LATIN SMALL LETTER C WITH CEDILLA..LATIN SMALL LETTER I WITH DIAERESIS +00F1..00F6 ; Expands_On_NFKD # L& [6] LATIN SMALL LETTER N WITH TILDE..LATIN SMALL LETTER O WITH DIAERESIS +00F9..00FD ; Expands_On_NFKD # L& [5] LATIN SMALL LETTER U WITH GRAVE..LATIN SMALL LETTER Y WITH ACUTE +00FF..010F ; Expands_On_NFKD # L& [17] LATIN SMALL LETTER Y WITH DIAERESIS..LATIN SMALL LETTER D WITH CARON +0112..0125 ; Expands_On_NFKD # L& [20] LATIN CAPITAL LETTER E WITH MACRON..LATIN SMALL LETTER H WITH CIRCUMFLEX +0128..0130 ; Expands_On_NFKD # L& [9] LATIN CAPITAL LETTER I WITH TILDE..LATIN CAPITAL LETTER I WITH DOT ABOVE +0132..0137 ; Expands_On_NFKD # L& [6] LATIN CAPITAL LIGATURE IJ..LATIN SMALL LETTER K WITH CEDILLA +0139..0140 ; Expands_On_NFKD # L& [8] LATIN CAPITAL LETTER L WITH ACUTE..LATIN SMALL LETTER L WITH MIDDLE DOT +0143..0149 ; Expands_On_NFKD # L& [7] LATIN CAPITAL LETTER N WITH ACUTE..LATIN SMALL LETTER N PRECEDED BY APOSTROPHE +014C..0151 ; Expands_On_NFKD # L& [6] LATIN CAPITAL LETTER O WITH MACRON..LATIN SMALL LETTER O WITH DOUBLE ACUTE +0154..0165 ; Expands_On_NFKD # L& [18] LATIN CAPITAL LETTER R WITH ACUTE..LATIN SMALL LETTER T WITH CARON +0168..017E ; Expands_On_NFKD # L& [23] LATIN CAPITAL LETTER U WITH TILDE..LATIN SMALL LETTER Z WITH CARON +01A0..01A1 ; Expands_On_NFKD # L& [2] LATIN CAPITAL LETTER O WITH HORN..LATIN SMALL LETTER O WITH HORN +01AF..01B0 ; Expands_On_NFKD # L& [2] LATIN CAPITAL LETTER U WITH HORN..LATIN SMALL LETTER U WITH HORN +01C4..01DC ; Expands_On_NFKD # L& [25] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DE..01E3 ; Expands_On_NFKD # L& [6] LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON..LATIN SMALL LETTER AE WITH MACRON +01E6..01F5 ; Expands_On_NFKD # L& [16] LATIN CAPITAL LETTER G WITH CARON..LATIN SMALL LETTER G WITH ACUTE +01F8..021B ; Expands_On_NFKD # L& [36] LATIN CAPITAL LETTER N WITH GRAVE..LATIN SMALL LETTER T WITH COMMA BELOW +021E..021F ; Expands_On_NFKD # L& [2] LATIN CAPITAL LETTER H WITH CARON..LATIN SMALL LETTER H WITH CARON +0226..0233 ; Expands_On_NFKD # L& [14] LATIN CAPITAL LETTER A WITH DOT ABOVE..LATIN SMALL LETTER Y WITH MACRON +02D8..02DD ; Expands_On_NFKD # Sk [6] BREVE..DOUBLE ACUTE ACCENT +0344 ; Expands_On_NFKD # Mn COMBINING GREEK DIALYTIKA TONOS +037A ; Expands_On_NFKD # Lm GREEK YPOGEGRAMMENI +0384..0385 ; Expands_On_NFKD # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS +0386 ; Expands_On_NFKD # L& GREEK CAPITAL LETTER ALPHA WITH TONOS +0388..038A ; Expands_On_NFKD # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS +038C ; Expands_On_NFKD # L& GREEK CAPITAL LETTER OMICRON WITH TONOS +038E..0390 ; Expands_On_NFKD # L& [3] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +03AA..03B0 ; Expands_On_NFKD # L& [7] GREEK CAPITAL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +03CA..03CE ; Expands_On_NFKD # L& [5] GREEK SMALL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER OMEGA WITH TONOS +03D3..03D4 ; Expands_On_NFKD # L& [2] GREEK UPSILON WITH ACUTE AND HOOK SYMBOL..GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL +0400..0401 ; Expands_On_NFKD # L& [2] CYRILLIC CAPITAL LETTER IE WITH GRAVE..CYRILLIC CAPITAL LETTER IO +0403 ; Expands_On_NFKD # L& CYRILLIC CAPITAL LETTER GJE +0407 ; Expands_On_NFKD # L& CYRILLIC CAPITAL LETTER YI +040C..040E ; Expands_On_NFKD # L& [3] CYRILLIC CAPITAL LETTER KJE..CYRILLIC CAPITAL LETTER SHORT U +0419 ; Expands_On_NFKD # L& CYRILLIC CAPITAL LETTER SHORT I +0439 ; Expands_On_NFKD # L& CYRILLIC SMALL LETTER SHORT I +0450..0451 ; Expands_On_NFKD # L& [2] CYRILLIC SMALL LETTER IE WITH GRAVE..CYRILLIC SMALL LETTER IO +0453 ; Expands_On_NFKD # L& CYRILLIC SMALL LETTER GJE +0457 ; Expands_On_NFKD # L& CYRILLIC SMALL LETTER YI +045C..045E ; Expands_On_NFKD # L& [3] CYRILLIC SMALL LETTER KJE..CYRILLIC SMALL LETTER SHORT U +0476..0477 ; Expands_On_NFKD # L& [2] CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT..CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT +04C1..04C2 ; Expands_On_NFKD # L& [2] CYRILLIC CAPITAL LETTER ZHE WITH BREVE..CYRILLIC SMALL LETTER ZHE WITH BREVE +04D0..04D3 ; Expands_On_NFKD # L& [4] CYRILLIC CAPITAL LETTER A WITH BREVE..CYRILLIC SMALL LETTER A WITH DIAERESIS +04D6..04D7 ; Expands_On_NFKD # L& [2] CYRILLIC CAPITAL LETTER IE WITH BREVE..CYRILLIC SMALL LETTER IE WITH BREVE +04DA..04DF ; Expands_On_NFKD # L& [6] CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS..CYRILLIC SMALL LETTER ZE WITH DIAERESIS +04E2..04E7 ; Expands_On_NFKD # L& [6] CYRILLIC CAPITAL LETTER I WITH MACRON..CYRILLIC SMALL LETTER O WITH DIAERESIS +04EA..04F5 ; Expands_On_NFKD # L& [12] CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS..CYRILLIC SMALL LETTER CHE WITH DIAERESIS +04F8..04F9 ; Expands_On_NFKD # L& [2] CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS..CYRILLIC SMALL LETTER YERU WITH DIAERESIS +0587 ; Expands_On_NFKD # L& ARMENIAN SMALL LIGATURE ECH YIWN +0622..0626 ; Expands_On_NFKD # Lo [5] ARABIC LETTER ALEF WITH MADDA ABOVE..ARABIC LETTER YEH WITH HAMZA ABOVE +0675..0678 ; Expands_On_NFKD # Lo [4] ARABIC LETTER HIGH HAMZA ALEF..ARABIC LETTER HIGH HAMZA YEH +06C0 ; Expands_On_NFKD # Lo ARABIC LETTER HEH WITH YEH ABOVE +06C2 ; Expands_On_NFKD # Lo ARABIC LETTER HEH GOAL WITH HAMZA ABOVE +06D3 ; Expands_On_NFKD # Lo ARABIC LETTER YEH BARREE WITH HAMZA ABOVE +0929 ; Expands_On_NFKD # Lo DEVANAGARI LETTER NNNA +0931 ; Expands_On_NFKD # Lo DEVANAGARI LETTER RRA +0934 ; Expands_On_NFKD # Lo DEVANAGARI LETTER LLLA +0958..095F ; Expands_On_NFKD # Lo [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA +09CB..09CC ; Expands_On_NFKD # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU +09DC..09DD ; Expands_On_NFKD # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA +09DF ; Expands_On_NFKD # Lo BENGALI LETTER YYA +0A33 ; Expands_On_NFKD # Lo GURMUKHI LETTER LLA +0A36 ; Expands_On_NFKD # Lo GURMUKHI LETTER SHA +0A59..0A5B ; Expands_On_NFKD # Lo [3] GURMUKHI LETTER KHHA..GURMUKHI LETTER ZA +0A5E ; Expands_On_NFKD # Lo GURMUKHI LETTER FA +0B48 ; Expands_On_NFKD # Mc ORIYA VOWEL SIGN AI +0B4B..0B4C ; Expands_On_NFKD # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU +0B5C..0B5D ; Expands_On_NFKD # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA +0B94 ; Expands_On_NFKD # Lo TAMIL LETTER AU +0BCA..0BCC ; Expands_On_NFKD # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU +0C48 ; Expands_On_NFKD # Mn TELUGU VOWEL SIGN AI +0CC0 ; Expands_On_NFKD # Mc KANNADA VOWEL SIGN II +0CC7..0CC8 ; Expands_On_NFKD # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI +0CCA..0CCB ; Expands_On_NFKD # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO +0D4A..0D4C ; Expands_On_NFKD # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU +0DDA ; Expands_On_NFKD # Mc SINHALA VOWEL SIGN DIGA KOMBUVA +0DDC..0DDE ; Expands_On_NFKD # Mc [3] SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA +0E33 ; Expands_On_NFKD # Lo THAI CHARACTER SARA AM +0EB3 ; Expands_On_NFKD # Lo LAO VOWEL SIGN AM +0EDC..0EDD ; Expands_On_NFKD # Lo [2] LAO HO NO..LAO HO MO +0F43 ; Expands_On_NFKD # Lo TIBETAN LETTER GHA +0F4D ; Expands_On_NFKD # Lo TIBETAN LETTER DDHA +0F52 ; Expands_On_NFKD # Lo TIBETAN LETTER DHA +0F57 ; Expands_On_NFKD # Lo TIBETAN LETTER BHA +0F5C ; Expands_On_NFKD # Lo TIBETAN LETTER DZHA +0F69 ; Expands_On_NFKD # Lo TIBETAN LETTER KSSA +0F73 ; Expands_On_NFKD # Mn TIBETAN VOWEL SIGN II +0F75..0F79 ; Expands_On_NFKD # Mn [5] TIBETAN VOWEL SIGN UU..TIBETAN VOWEL SIGN VOCALIC LL +0F81 ; Expands_On_NFKD # Mn TIBETAN VOWEL SIGN REVERSED II +0F93 ; Expands_On_NFKD # Mn TIBETAN SUBJOINED LETTER GHA +0F9D ; Expands_On_NFKD # Mn TIBETAN SUBJOINED LETTER DDHA +0FA2 ; Expands_On_NFKD # Mn TIBETAN SUBJOINED LETTER DHA +0FA7 ; Expands_On_NFKD # Mn TIBETAN SUBJOINED LETTER BHA +0FAC ; Expands_On_NFKD # Mn TIBETAN SUBJOINED LETTER DZHA +0FB9 ; Expands_On_NFKD # Mn TIBETAN SUBJOINED LETTER KSSA +1026 ; Expands_On_NFKD # Lo MYANMAR LETTER UU +1B06 ; Expands_On_NFKD # Lo BALINESE LETTER AKARA TEDUNG +1B08 ; Expands_On_NFKD # Lo BALINESE LETTER IKARA TEDUNG +1B0A ; Expands_On_NFKD # Lo BALINESE LETTER UKARA TEDUNG +1B0C ; Expands_On_NFKD # Lo BALINESE LETTER RA REPA TEDUNG +1B0E ; Expands_On_NFKD # Lo BALINESE LETTER LA LENGA TEDUNG +1B12 ; Expands_On_NFKD # Lo BALINESE LETTER OKARA TEDUNG +1B3B ; Expands_On_NFKD # Mc BALINESE VOWEL SIGN RA REPA TEDUNG +1B3D ; Expands_On_NFKD # Mc BALINESE VOWEL SIGN LA LENGA TEDUNG +1B40..1B41 ; Expands_On_NFKD # Mc [2] BALINESE VOWEL SIGN TALING TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG +1B43 ; Expands_On_NFKD # Mc BALINESE VOWEL SIGN PEPET TEDUNG +1E00..1E9B ; Expands_On_NFKD # L& [156] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER LONG S WITH DOT ABOVE +1EA0..1EF9 ; Expands_On_NFKD # L& [90] LATIN CAPITAL LETTER A WITH DOT BELOW..LATIN SMALL LETTER Y WITH TILDE +1F00..1F15 ; Expands_On_NFKD # L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA +1F18..1F1D ; Expands_On_NFKD # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F20..1F45 ; Expands_On_NFKD # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA +1F48..1F4D ; Expands_On_NFKD # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F50..1F57 ; Expands_On_NFKD # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F59 ; Expands_On_NFKD # L& GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B ; Expands_On_NFKD # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D ; Expands_On_NFKD # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F..1F7D ; Expands_On_NFKD # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA +1F80..1FB4 ; Expands_On_NFKD # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB6..1FBC ; Expands_On_NFKD # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBD ; Expands_On_NFKD # Sk GREEK KORONIS +1FBF..1FC1 ; Expands_On_NFKD # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI +1FC2..1FC4 ; Expands_On_NFKD # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC6..1FCC ; Expands_On_NFKD # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FCD..1FCF ; Expands_On_NFKD # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI +1FD0..1FD3 ; Expands_On_NFKD # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD6..1FDB ; Expands_On_NFKD # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA +1FDD..1FDF ; Expands_On_NFKD # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI +1FE0..1FEC ; Expands_On_NFKD # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA +1FED..1FEE ; Expands_On_NFKD # Sk [2] GREEK DIALYTIKA AND VARIA..GREEK DIALYTIKA AND OXIA +1FF2..1FF4 ; Expands_On_NFKD # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF6..1FFC ; Expands_On_NFKD # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +1FFD..1FFE ; Expands_On_NFKD # Sk [2] GREEK OXIA..GREEK DASIA +2017 ; Expands_On_NFKD # Po DOUBLE LOW LINE +2025..2026 ; Expands_On_NFKD # Po [2] TWO DOT LEADER..HORIZONTAL ELLIPSIS +2033..2034 ; Expands_On_NFKD # Po [2] DOUBLE PRIME..TRIPLE PRIME +2036..2037 ; Expands_On_NFKD # Po [2] REVERSED DOUBLE PRIME..REVERSED TRIPLE PRIME +203C ; Expands_On_NFKD # Po DOUBLE EXCLAMATION MARK +203E ; Expands_On_NFKD # Po OVERLINE +2047..2049 ; Expands_On_NFKD # Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK +2057 ; Expands_On_NFKD # Po QUADRUPLE PRIME +20A8 ; Expands_On_NFKD # Sc RUPEE SIGN +2100..2101 ; Expands_On_NFKD # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT +2103 ; Expands_On_NFKD # So DEGREE CELSIUS +2105..2106 ; Expands_On_NFKD # So [2] CARE OF..CADA UNA +2109 ; Expands_On_NFKD # So DEGREE FAHRENHEIT +2116 ; Expands_On_NFKD # So NUMERO SIGN +2120..2122 ; Expands_On_NFKD # So [3] SERVICE MARK..TRADE MARK SIGN +212B ; Expands_On_NFKD # L& ANGSTROM SIGN +213B ; Expands_On_NFKD # So FACSIMILE SIGN +2153..215F ; Expands_On_NFKD # No [13] VULGAR FRACTION ONE THIRD..FRACTION NUMERATOR ONE +2161..2163 ; Expands_On_NFKD # Nl [3] ROMAN NUMERAL TWO..ROMAN NUMERAL FOUR +2165..2168 ; Expands_On_NFKD # Nl [4] ROMAN NUMERAL SIX..ROMAN NUMERAL NINE +216A..216B ; Expands_On_NFKD # Nl [2] ROMAN NUMERAL ELEVEN..ROMAN NUMERAL TWELVE +2171..2173 ; Expands_On_NFKD # Nl [3] SMALL ROMAN NUMERAL TWO..SMALL ROMAN NUMERAL FOUR +2175..2178 ; Expands_On_NFKD # Nl [4] SMALL ROMAN NUMERAL SIX..SMALL ROMAN NUMERAL NINE +217A..217B ; Expands_On_NFKD # Nl [2] SMALL ROMAN NUMERAL ELEVEN..SMALL ROMAN NUMERAL TWELVE +219A..219B ; Expands_On_NFKD # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE +21AE ; Expands_On_NFKD # Sm LEFT RIGHT ARROW WITH STROKE +21CD ; Expands_On_NFKD # So LEFTWARDS DOUBLE ARROW WITH STROKE +21CE..21CF ; Expands_On_NFKD # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE +2204 ; Expands_On_NFKD # Sm THERE DOES NOT EXIST +2209 ; Expands_On_NFKD # Sm NOT AN ELEMENT OF +220C ; Expands_On_NFKD # Sm DOES NOT CONTAIN AS MEMBER +2224 ; Expands_On_NFKD # Sm DOES NOT DIVIDE +2226 ; Expands_On_NFKD # Sm NOT PARALLEL TO +222C..222D ; Expands_On_NFKD # Sm [2] DOUBLE INTEGRAL..TRIPLE INTEGRAL +222F..2230 ; Expands_On_NFKD # Sm [2] SURFACE INTEGRAL..VOLUME INTEGRAL +2241 ; Expands_On_NFKD # Sm NOT TILDE +2244 ; Expands_On_NFKD # Sm NOT ASYMPTOTICALLY EQUAL TO +2247 ; Expands_On_NFKD # Sm NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO +2249 ; Expands_On_NFKD # Sm NOT ALMOST EQUAL TO +2260 ; Expands_On_NFKD # Sm NOT EQUAL TO +2262 ; Expands_On_NFKD # Sm NOT IDENTICAL TO +226D..2271 ; Expands_On_NFKD # Sm [5] NOT EQUIVALENT TO..NEITHER GREATER-THAN NOR EQUAL TO +2274..2275 ; Expands_On_NFKD # Sm [2] NEITHER LESS-THAN NOR EQUIVALENT TO..NEITHER GREATER-THAN NOR EQUIVALENT TO +2278..2279 ; Expands_On_NFKD # Sm [2] NEITHER LESS-THAN NOR GREATER-THAN..NEITHER GREATER-THAN NOR LESS-THAN +2280..2281 ; Expands_On_NFKD # Sm [2] DOES NOT PRECEDE..DOES NOT SUCCEED +2284..2285 ; Expands_On_NFKD # Sm [2] NOT A SUBSET OF..NOT A SUPERSET OF +2288..2289 ; Expands_On_NFKD # Sm [2] NEITHER A SUBSET OF NOR EQUAL TO..NEITHER A SUPERSET OF NOR EQUAL TO +22AC..22AF ; Expands_On_NFKD # Sm [4] DOES NOT PROVE..NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE +22E0..22E3 ; Expands_On_NFKD # Sm [4] DOES NOT PRECEDE OR EQUAL..NOT SQUARE ORIGINAL OF OR EQUAL TO +22EA..22ED ; Expands_On_NFKD # Sm [4] NOT NORMAL SUBGROUP OF..DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL +2469..249B ; Expands_On_NFKD # No [51] CIRCLED NUMBER TEN..NUMBER TWENTY FULL STOP +249C..24B5 ; Expands_On_NFKD # So [26] PARENTHESIZED LATIN SMALL LETTER A..PARENTHESIZED LATIN SMALL LETTER Z +2A0C ; Expands_On_NFKD # Sm QUADRUPLE INTEGRAL OPERATOR +2A74..2A76 ; Expands_On_NFKD # Sm [3] DOUBLE COLON EQUAL..THREE CONSECUTIVE EQUALS SIGNS +2ADC ; Expands_On_NFKD # Sm FORKING +304C ; Expands_On_NFKD # Lo HIRAGANA LETTER GA +304E ; Expands_On_NFKD # Lo HIRAGANA LETTER GI +3050 ; Expands_On_NFKD # Lo HIRAGANA LETTER GU +3052 ; Expands_On_NFKD # Lo HIRAGANA LETTER GE +3054 ; Expands_On_NFKD # Lo HIRAGANA LETTER GO +3056 ; Expands_On_NFKD # Lo HIRAGANA LETTER ZA +3058 ; Expands_On_NFKD # Lo HIRAGANA LETTER ZI +305A ; Expands_On_NFKD # Lo HIRAGANA LETTER ZU +305C ; Expands_On_NFKD # Lo HIRAGANA LETTER ZE +305E ; Expands_On_NFKD # Lo HIRAGANA LETTER ZO +3060 ; Expands_On_NFKD # Lo HIRAGANA LETTER DA +3062 ; Expands_On_NFKD # Lo HIRAGANA LETTER DI +3065 ; Expands_On_NFKD # Lo HIRAGANA LETTER DU +3067 ; Expands_On_NFKD # Lo HIRAGANA LETTER DE +3069 ; Expands_On_NFKD # Lo HIRAGANA LETTER DO +3070..3071 ; Expands_On_NFKD # Lo [2] HIRAGANA LETTER BA..HIRAGANA LETTER PA +3073..3074 ; Expands_On_NFKD # Lo [2] HIRAGANA LETTER BI..HIRAGANA LETTER PI +3076..3077 ; Expands_On_NFKD # Lo [2] HIRAGANA LETTER BU..HIRAGANA LETTER PU +3079..307A ; Expands_On_NFKD # Lo [2] HIRAGANA LETTER BE..HIRAGANA LETTER PE +307C..307D ; Expands_On_NFKD # Lo [2] HIRAGANA LETTER BO..HIRAGANA LETTER PO +3094 ; Expands_On_NFKD # Lo HIRAGANA LETTER VU +309B..309C ; Expands_On_NFKD # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +309E ; Expands_On_NFKD # Lm HIRAGANA VOICED ITERATION MARK +309F ; Expands_On_NFKD # Lo HIRAGANA DIGRAPH YORI +30AC ; Expands_On_NFKD # Lo KATAKANA LETTER GA +30AE ; Expands_On_NFKD # Lo KATAKANA LETTER GI +30B0 ; Expands_On_NFKD # Lo KATAKANA LETTER GU +30B2 ; Expands_On_NFKD # Lo KATAKANA LETTER GE +30B4 ; Expands_On_NFKD # Lo KATAKANA LETTER GO +30B6 ; Expands_On_NFKD # Lo KATAKANA LETTER ZA +30B8 ; Expands_On_NFKD # Lo KATAKANA LETTER ZI +30BA ; Expands_On_NFKD # Lo KATAKANA LETTER ZU +30BC ; Expands_On_NFKD # Lo KATAKANA LETTER ZE +30BE ; Expands_On_NFKD # Lo KATAKANA LETTER ZO +30C0 ; Expands_On_NFKD # Lo KATAKANA LETTER DA +30C2 ; Expands_On_NFKD # Lo KATAKANA LETTER DI +30C5 ; Expands_On_NFKD # Lo KATAKANA LETTER DU +30C7 ; Expands_On_NFKD # Lo KATAKANA LETTER DE +30C9 ; Expands_On_NFKD # Lo KATAKANA LETTER DO +30D0..30D1 ; Expands_On_NFKD # Lo [2] KATAKANA LETTER BA..KATAKANA LETTER PA +30D3..30D4 ; Expands_On_NFKD # Lo [2] KATAKANA LETTER BI..KATAKANA LETTER PI +30D6..30D7 ; Expands_On_NFKD # Lo [2] KATAKANA LETTER BU..KATAKANA LETTER PU +30D9..30DA ; Expands_On_NFKD # Lo [2] KATAKANA LETTER BE..KATAKANA LETTER PE +30DC..30DD ; Expands_On_NFKD # Lo [2] KATAKANA LETTER BO..KATAKANA LETTER PO +30F4 ; Expands_On_NFKD # Lo KATAKANA LETTER VU +30F7..30FA ; Expands_On_NFKD # Lo [4] KATAKANA LETTER VA..KATAKANA LETTER VO +30FE ; Expands_On_NFKD # Lm KATAKANA VOICED ITERATION MARK +30FF ; Expands_On_NFKD # Lo KATAKANA DIGRAPH KOTO +3200..321E ; Expands_On_NFKD # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU +3220..3229 ; Expands_On_NFKD # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN +322A..3243 ; Expands_On_NFKD # So [26] PARENTHESIZED IDEOGRAPH MOON..PARENTHESIZED IDEOGRAPH REACH +3250 ; Expands_On_NFKD # So PARTNERSHIP SIGN +3251..325F ; Expands_On_NFKD # No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE +326E..327E ; Expands_On_NFKD # So [17] CIRCLED HANGUL KIYEOK A..CIRCLED HANGUL IEUNG U +32B1..32BF ; Expands_On_NFKD # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY +32C0..32CF ; Expands_On_NFKD # So [16] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..LIMITED LIABILITY SIGN +3300..33FF ; Expands_On_NFKD # So [256] SQUARE APAATO..SQUARE GAL +AC00..D7A3 ; Expands_On_NFKD # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH +FB00..FB06 ; Expands_On_NFKD # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST +FB13..FB17 ; Expands_On_NFKD # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH +FB1D ; Expands_On_NFKD # Lo HEBREW LETTER YOD WITH HIRIQ +FB1F ; Expands_On_NFKD # Lo HEBREW LIGATURE YIDDISH YOD YOD PATAH +FB2A..FB36 ; Expands_On_NFKD # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH +FB38..FB3C ; Expands_On_NFKD # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH +FB3E ; Expands_On_NFKD # Lo HEBREW LETTER MEM WITH DAGESH +FB40..FB41 ; Expands_On_NFKD # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH +FB43..FB44 ; Expands_On_NFKD # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH +FB46..FB4F ; Expands_On_NFKD # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED +FBA4..FBA5 ; Expands_On_NFKD # Lo [2] ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM..ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM +FBB0..FBB1 ; Expands_On_NFKD # Lo [2] ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM +FBDD ; Expands_On_NFKD # Lo ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM +FBEA..FBFB ; Expands_On_NFKD # Lo [18] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM..ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM +FC00..FD3D ; Expands_On_NFKD # Lo [318] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM +FD50..FD8F ; Expands_On_NFKD # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM +FD92..FDC7 ; Expands_On_NFKD # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM +FDF0..FDFB ; Expands_On_NFKD # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU +FDFC ; Expands_On_NFKD # Sc RIAL SIGN +FE19 ; Expands_On_NFKD # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS +FE30 ; Expands_On_NFKD # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER +FE49..FE4C ; Expands_On_NFKD # Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE +FE70..FE72 ; Expands_On_NFKD # Lo [3] ARABIC FATHATAN ISOLATED FORM..ARABIC DAMMATAN ISOLATED FORM +FE74 ; Expands_On_NFKD # Lo ARABIC KASRATAN ISOLATED FORM +FE76..FE7F ; Expands_On_NFKD # Lo [10] ARABIC FATHA ISOLATED FORM..ARABIC SUKUN MEDIAL FORM +FE81..FE8C ; Expands_On_NFKD # Lo [12] ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM..ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM +FEF5..FEFC ; Expands_On_NFKD # Lo [8] ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM +FFE3 ; Expands_On_NFKD # Sk FULLWIDTH MACRON +1D15E..1D164 ; Expands_On_NFKD # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE +1D1BB..1D1C0 ; Expands_On_NFKD # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK + +# Total code points: 13310 + +# ================================================ + +# Derived Property: Expands_On_NFKC +# Generated according to UAX #15. +# Characters whose normalized length is not one. +# WARNING: Normalization of STRINGS must use the algorithm in UAX #15 because characters may interact. +# The length of a normalized string is not necessarily the sum of the lengths of the normalized characters! + +00A8 ; Expands_On_NFKC # Sk DIAERESIS +00AF ; Expands_On_NFKC # Sk MACRON +00B4 ; Expands_On_NFKC # Sk ACUTE ACCENT +00B8 ; Expands_On_NFKC # Sk CEDILLA +00BC..00BE ; Expands_On_NFKC # No [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS +0132..0133 ; Expands_On_NFKC # L& [2] LATIN CAPITAL LIGATURE IJ..LATIN SMALL LIGATURE IJ +013F..0140 ; Expands_On_NFKC # L& [2] LATIN CAPITAL LETTER L WITH MIDDLE DOT..LATIN SMALL LETTER L WITH MIDDLE DOT +0149 ; Expands_On_NFKC # L& LATIN SMALL LETTER N PRECEDED BY APOSTROPHE +01C4..01CC ; Expands_On_NFKC # L& [9] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER NJ +01F1..01F3 ; Expands_On_NFKC # L& [3] LATIN CAPITAL LETTER DZ..LATIN SMALL LETTER DZ +02D8..02DD ; Expands_On_NFKC # Sk [6] BREVE..DOUBLE ACUTE ACCENT +0344 ; Expands_On_NFKC # Mn COMBINING GREEK DIALYTIKA TONOS +037A ; Expands_On_NFKC # Lm GREEK YPOGEGRAMMENI +0384..0385 ; Expands_On_NFKC # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS +0587 ; Expands_On_NFKC # L& ARMENIAN SMALL LIGATURE ECH YIWN +0675..0678 ; Expands_On_NFKC # Lo [4] ARABIC LETTER HIGH HAMZA ALEF..ARABIC LETTER HIGH HAMZA YEH +0958..095F ; Expands_On_NFKC # Lo [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA +09DC..09DD ; Expands_On_NFKC # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA +09DF ; Expands_On_NFKC # Lo BENGALI LETTER YYA +0A33 ; Expands_On_NFKC # Lo GURMUKHI LETTER LLA +0A36 ; Expands_On_NFKC # Lo GURMUKHI LETTER SHA +0A59..0A5B ; Expands_On_NFKC # Lo [3] GURMUKHI LETTER KHHA..GURMUKHI LETTER ZA +0A5E ; Expands_On_NFKC # Lo GURMUKHI LETTER FA +0B5C..0B5D ; Expands_On_NFKC # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA +0E33 ; Expands_On_NFKC # Lo THAI CHARACTER SARA AM +0EB3 ; Expands_On_NFKC # Lo LAO VOWEL SIGN AM +0EDC..0EDD ; Expands_On_NFKC # Lo [2] LAO HO NO..LAO HO MO +0F43 ; Expands_On_NFKC # Lo TIBETAN LETTER GHA +0F4D ; Expands_On_NFKC # Lo TIBETAN LETTER DDHA +0F52 ; Expands_On_NFKC # Lo TIBETAN LETTER DHA +0F57 ; Expands_On_NFKC # Lo TIBETAN LETTER BHA +0F5C ; Expands_On_NFKC # Lo TIBETAN LETTER DZHA +0F69 ; Expands_On_NFKC # Lo TIBETAN LETTER KSSA +0F73 ; Expands_On_NFKC # Mn TIBETAN VOWEL SIGN II +0F75..0F79 ; Expands_On_NFKC # Mn [5] TIBETAN VOWEL SIGN UU..TIBETAN VOWEL SIGN VOCALIC LL +0F81 ; Expands_On_NFKC # Mn TIBETAN VOWEL SIGN REVERSED II +0F93 ; Expands_On_NFKC # Mn TIBETAN SUBJOINED LETTER GHA +0F9D ; Expands_On_NFKC # Mn TIBETAN SUBJOINED LETTER DDHA +0FA2 ; Expands_On_NFKC # Mn TIBETAN SUBJOINED LETTER DHA +0FA7 ; Expands_On_NFKC # Mn TIBETAN SUBJOINED LETTER BHA +0FAC ; Expands_On_NFKC # Mn TIBETAN SUBJOINED LETTER DZHA +0FB9 ; Expands_On_NFKC # Mn TIBETAN SUBJOINED LETTER KSSA +1E9A ; Expands_On_NFKC # L& LATIN SMALL LETTER A WITH RIGHT HALF RING +1FBD ; Expands_On_NFKC # Sk GREEK KORONIS +1FBF..1FC1 ; Expands_On_NFKC # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI +1FCD..1FCF ; Expands_On_NFKC # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI +1FDD..1FDF ; Expands_On_NFKC # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI +1FED..1FEE ; Expands_On_NFKC # Sk [2] GREEK DIALYTIKA AND VARIA..GREEK DIALYTIKA AND OXIA +1FFD..1FFE ; Expands_On_NFKC # Sk [2] GREEK OXIA..GREEK DASIA +2017 ; Expands_On_NFKC # Po DOUBLE LOW LINE +2025..2026 ; Expands_On_NFKC # Po [2] TWO DOT LEADER..HORIZONTAL ELLIPSIS +2033..2034 ; Expands_On_NFKC # Po [2] DOUBLE PRIME..TRIPLE PRIME +2036..2037 ; Expands_On_NFKC # Po [2] REVERSED DOUBLE PRIME..REVERSED TRIPLE PRIME +203C ; Expands_On_NFKC # Po DOUBLE EXCLAMATION MARK +203E ; Expands_On_NFKC # Po OVERLINE +2047..2049 ; Expands_On_NFKC # Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK +2057 ; Expands_On_NFKC # Po QUADRUPLE PRIME +20A8 ; Expands_On_NFKC # Sc RUPEE SIGN +2100..2101 ; Expands_On_NFKC # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT +2103 ; Expands_On_NFKC # So DEGREE CELSIUS +2105..2106 ; Expands_On_NFKC # So [2] CARE OF..CADA UNA +2109 ; Expands_On_NFKC # So DEGREE FAHRENHEIT +2116 ; Expands_On_NFKC # So NUMERO SIGN +2120..2122 ; Expands_On_NFKC # So [3] SERVICE MARK..TRADE MARK SIGN +213B ; Expands_On_NFKC # So FACSIMILE SIGN +2153..215F ; Expands_On_NFKC # No [13] VULGAR FRACTION ONE THIRD..FRACTION NUMERATOR ONE +2161..2163 ; Expands_On_NFKC # Nl [3] ROMAN NUMERAL TWO..ROMAN NUMERAL FOUR +2165..2168 ; Expands_On_NFKC # Nl [4] ROMAN NUMERAL SIX..ROMAN NUMERAL NINE +216A..216B ; Expands_On_NFKC # Nl [2] ROMAN NUMERAL ELEVEN..ROMAN NUMERAL TWELVE +2171..2173 ; Expands_On_NFKC # Nl [3] SMALL ROMAN NUMERAL TWO..SMALL ROMAN NUMERAL FOUR +2175..2178 ; Expands_On_NFKC # Nl [4] SMALL ROMAN NUMERAL SIX..SMALL ROMAN NUMERAL NINE +217A..217B ; Expands_On_NFKC # Nl [2] SMALL ROMAN NUMERAL ELEVEN..SMALL ROMAN NUMERAL TWELVE +222C..222D ; Expands_On_NFKC # Sm [2] DOUBLE INTEGRAL..TRIPLE INTEGRAL +222F..2230 ; Expands_On_NFKC # Sm [2] SURFACE INTEGRAL..VOLUME INTEGRAL +2469..249B ; Expands_On_NFKC # No [51] CIRCLED NUMBER TEN..NUMBER TWENTY FULL STOP +249C..24B5 ; Expands_On_NFKC # So [26] PARENTHESIZED LATIN SMALL LETTER A..PARENTHESIZED LATIN SMALL LETTER Z +2A0C ; Expands_On_NFKC # Sm QUADRUPLE INTEGRAL OPERATOR +2A74..2A76 ; Expands_On_NFKC # Sm [3] DOUBLE COLON EQUAL..THREE CONSECUTIVE EQUALS SIGNS +2ADC ; Expands_On_NFKC # Sm FORKING +309B..309C ; Expands_On_NFKC # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +309F ; Expands_On_NFKC # Lo HIRAGANA DIGRAPH YORI +30FF ; Expands_On_NFKC # Lo KATAKANA DIGRAPH KOTO +3200..321E ; Expands_On_NFKC # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU +3220..3229 ; Expands_On_NFKC # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN +322A..3243 ; Expands_On_NFKC # So [26] PARENTHESIZED IDEOGRAPH MOON..PARENTHESIZED IDEOGRAPH REACH +3250 ; Expands_On_NFKC # So PARTNERSHIP SIGN +3251..325F ; Expands_On_NFKC # No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE +327C..327D ; Expands_On_NFKC # So [2] CIRCLED KOREAN CHARACTER CHAMKO..CIRCLED KOREAN CHARACTER JUEUI +32B1..32BF ; Expands_On_NFKC # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY +32C0..32CF ; Expands_On_NFKC # So [16] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..LIMITED LIABILITY SIGN +3300..33FF ; Expands_On_NFKC # So [256] SQUARE APAATO..SQUARE GAL +FB00..FB06 ; Expands_On_NFKC # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST +FB13..FB17 ; Expands_On_NFKC # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH +FB1D ; Expands_On_NFKC # Lo HEBREW LETTER YOD WITH HIRIQ +FB1F ; Expands_On_NFKC # Lo HEBREW LIGATURE YIDDISH YOD YOD PATAH +FB2A..FB36 ; Expands_On_NFKC # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH +FB38..FB3C ; Expands_On_NFKC # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH +FB3E ; Expands_On_NFKC # Lo HEBREW LETTER MEM WITH DAGESH +FB40..FB41 ; Expands_On_NFKC # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH +FB43..FB44 ; Expands_On_NFKC # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH +FB46..FB4F ; Expands_On_NFKC # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED +FBDD ; Expands_On_NFKC # Lo ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM +FBEA..FBFB ; Expands_On_NFKC # Lo [18] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM..ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM +FC00..FD3D ; Expands_On_NFKC # Lo [318] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM +FD50..FD8F ; Expands_On_NFKC # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM +FD92..FDC7 ; Expands_On_NFKC # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM +FDF0..FDFB ; Expands_On_NFKC # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU +FDFC ; Expands_On_NFKC # Sc RIAL SIGN +FE19 ; Expands_On_NFKC # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS +FE30 ; Expands_On_NFKC # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER +FE49..FE4C ; Expands_On_NFKC # Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE +FE70..FE72 ; Expands_On_NFKC # Lo [3] ARABIC FATHATAN ISOLATED FORM..ARABIC DAMMATAN ISOLATED FORM +FE74 ; Expands_On_NFKC # Lo ARABIC KASRATAN ISOLATED FORM +FE76..FE7F ; Expands_On_NFKC # Lo [10] ARABIC FATHA ISOLATED FORM..ARABIC SUKUN MEDIAL FORM +FEF5..FEFC ; Expands_On_NFKC # Lo [8] ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM +FFE3 ; Expands_On_NFKC # Sk FULLWIDTH MACRON +1D15E..1D164 ; Expands_On_NFKC # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE +1D1BB..1D1C0 ; Expands_On_NFKC # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK + +# Total code points: 1171 + +# EOF |